Merge tag 'vulkan-sdk-1.4.304.1' into main

Bug: 379153784
Change-Id: Id5cefb4076cf52be346775de0158e4887b6d666e
Reviewed-on: https://fuchsia-review.googlesource.com/c/third_party/glslang/+/1205805
Reviewed-by: Craig Stout <cstout@google.com>
diff --git a/.github/workflows/continuous_deployment.yml b/.github/workflows/continuous_deployment.yml
index 68cad7a..22426ce 100644
--- a/.github/workflows/continuous_deployment.yml
+++ b/.github/workflows/continuous_deployment.yml
@@ -1,9 +1,3 @@
-# NOTE: This workflow was ported from Travis.
-# Travis was using Ubuntu 14.04. Ubuntu 14.04 is not supportted by GitHub workflows. Ubuntu 20.04 is recommended.
-# Travis was using Clang 3.6. The earliest version support by Ubuntu 20.04 is Clang 6.0.
-# Travis was caching the clang package. APT package caching is not natively supported by GitHub actions/cache.
-# Travis was using Mac OS X 10.13.6 / Xcode 9.4.1 / LLVM 9.1.0
-
 # NOTE: The following documentation may be useful to maintainers of this workflow.
 # Github actions: https://docs.github.com/en/actions
 # Github github-script action: https://github.com/actions/github-script
@@ -47,30 +41,16 @@
                 compiler: [{cc: clang, cxx: clang++}, {cc: gcc, cxx: g++}]
                 cmake_build_type: [Debug, Release]
         steps:
-            - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0
-            - uses: lukka/get-cmake@8be6cca406b575906541e8e3b885d46f416bba39 # v3.27.7
-            - uses: actions/setup-python@61a6322f88396a6271a6ee3565807d608ecaddd1 # v4.7.0
+            - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+            - uses: lukka/get-cmake@5979409e62bdf841487c5fb3c053149de97a86d3 # v3.31.2
+            - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
               with:
                   python-version: '3.7'
             - name: Install Ubuntu Package Dependencies
               run: |
                   sudo apt-get -qq update
                   sudo apt-get install -y clang-6.0
-            - name: Install GoogleTest
-              run: |
-                  # check out pre-breakage version of googletest; can be deleted when
-                  # issue 3128 is fixed
-                  # git clone --depth=1 https://github.com/google/googletest.git External/googletest
-                  mkdir -p External/googletest
-                  cd External/googletest
-                  git init
-                  git remote add origin https://github.com/google/googletest.git
-                  git fetch --depth 1 origin 0c400f67fcf305869c5fb113dd296eca266c9725
-                  git reset --hard FETCH_HEAD
-                  cd ../..
-            - name: Update Glslang Sources
-              run: |
-                  ./update_glslang_sources.py
+            - run: ./update_glslang_sources.py
             - name: Build
               env:
                   CC: ${{matrix.compiler.cc}}
@@ -82,8 +62,7 @@
             - name: Test
               run: |
                   cd build
-                  ctest --output-on-failure &&
-                  cd ../Test && ./runtests
+                  ctest --output-on-failure
             - name: Zip
               if: ${{ matrix.compiler.cc == 'clang' }}
               env:
@@ -98,9 +77,7 @@
                       lib/libGenericCodeGen.a \
                       lib/libglslang.a \
                       lib/libglslang-default-resource-limits.a \
-                      lib/libHLSL.a \
                       lib/libMachineIndependent.a \
-                      lib/libOGLCompiler.a \
                       lib/libOSDependent.a \
                       lib/libSPIRV.a \
                       lib/libSPVRemapper.a \
@@ -110,7 +87,7 @@
               if: ${{ matrix.compiler.cc == 'clang' }}
               env:
                   ARCHIVE: glslang-main-${{matrix.os.family}}-${{matrix.cmake_build_type}}.zip
-              uses: actions/github-script@d7906e4ad0b1822421a7e6a35d5ca353c962f410 # v6.4.1
+              uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
               with:
                   script: |
                       const script = require('.github/workflows/deploy.js')
@@ -123,30 +100,16 @@
         strategy:
             fail-fast: false
             matrix:
-                os: [{genus: macos-11, family: osx}]
+                os: [{genus: macos-13, family: osx}]
                 compiler: [{cc: clang, cxx: clang++}]
                 cmake_build_type: [Debug, Release]
         steps:
-            - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0
-            - uses: lukka/get-cmake@8be6cca406b575906541e8e3b885d46f416bba39 # v3.27.7
-            - uses: actions/setup-python@61a6322f88396a6271a6ee3565807d608ecaddd1 # v4.7.0
+            - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+            - uses: lukka/get-cmake@5979409e62bdf841487c5fb3c053149de97a86d3 # v3.31.2
+            - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
               with:
                   python-version: '3.7'
-            - name: Install GoogleTest
-              run: |
-                  # check out pre-breakage version of googletest; can be deleted when
-                  # issue 3128 is fixed
-                  # git clone --depth=1 https://github.com/google/googletest.git External/googletest
-                  mkdir -p External/googletest
-                  cd External/googletest
-                  git init
-                  git remote add origin https://github.com/google/googletest.git
-                  git fetch --depth 1 origin 0c400f67fcf305869c5fb113dd296eca266c9725
-                  git reset --hard FETCH_HEAD
-                  cd ../..
-            - name: Update Glslang Sources
-              run: |
-                  ./update_glslang_sources.py
+            - run: ./update_glslang_sources.py
             - name: Build
               env:
                   CC: ${{matrix.compiler.cc}}
@@ -158,8 +121,7 @@
             - name: Test
               run: |
                   cd build
-                  ctest --output-on-failure &&
-                  cd ../Test && ./runtests
+                  ctest --output-on-failure
             - name: Zip
               env:
                   ARCHIVE: glslang-main-${{matrix.os.family}}-${{matrix.cmake_build_type}}.zip
@@ -173,9 +135,7 @@
                       lib/libGenericCodeGen.a \
                       lib/libglslang.a \
                       lib/libglslang-default-resource-limits.a \
-                      lib/libHLSL.a \
                       lib/libMachineIndependent.a \
-                      lib/libOGLCompiler.a \
                       lib/libOSDependent.a \
                       lib/libSPIRV.a \
                       lib/libSPVRemapper.a \
@@ -184,7 +144,7 @@
             - name: Deploy
               env:
                   ARCHIVE: glslang-main-${{matrix.os.family}}-${{matrix.cmake_build_type}}.zip
-              uses: actions/github-script@d7906e4ad0b1822421a7e6a35d5ca353c962f410 # v6.4.1
+              uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
               with:
                   script: |
                       const script = require('.github/workflows/deploy.js')
@@ -200,26 +160,12 @@
                 os: [{genus: windows-2019, family: windows}]
                 cmake_build_type: [Debug, Release]
         steps:
-            - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0
-            - uses: lukka/get-cmake@8be6cca406b575906541e8e3b885d46f416bba39 # v3.27.7
-            - uses: actions/setup-python@61a6322f88396a6271a6ee3565807d608ecaddd1 # v4.7.0
+            - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+            - uses: lukka/get-cmake@5979409e62bdf841487c5fb3c053149de97a86d3 # v3.31.2
+            - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
               with:
                   python-version: '3.7'
-            - name: Install GoogleTest
-              run: |
-                  # check out pre-breakage version of googletest; can be deleted when
-                  # issue 3128 is fixed
-                  # git clone --depth=1 https://github.com/google/googletest.git External/googletest
-                  mkdir -p External/googletest
-                  cd External/googletest
-                  git init
-                  git remote add origin https://github.com/google/googletest.git
-                  git fetch --depth 1 origin 0c400f67fcf305869c5fb113dd296eca266c9725
-                  git reset --hard FETCH_HEAD
-                  cd ../..
-            - name: Update Glslang Sources
-              run: |
-                  python update_glslang_sources.py
+            - run: python update_glslang_sources.py
             - name: Build
               run: |
                   cmake -S. -Bbuild -G "Visual Studio 16 2019" -A x64 -DCMAKE_INSTALL_PREFIX="$PWD/build/install"
@@ -228,7 +174,6 @@
               run: |
                   cd build
                   ctest -C ${{matrix.cmake_build_type}} --output-on-failure
-                  cd ../Test && bash runtests
             - name: Zip
               if: ${{ matrix.cmake_build_type == 'Debug' }}
               env:
@@ -243,9 +188,7 @@
                       lib/GenericCodeGend.lib `
                       lib/glslangd.lib `
                       lib/glslang-default-resource-limitsd.lib `
-                      lib/HLSLd.lib `
                       lib/MachineIndependentd.lib `
-                      lib/OGLCompilerd.lib `
                       lib/OSDependentd.lib `
                       lib/SPIRVd.lib `
                       lib/SPVRemapperd.lib `
@@ -265,9 +208,7 @@
                       lib/GenericCodeGen.lib `
                       lib/glslang.lib `
                       lib/glslang-default-resource-limits.lib `
-                      lib/HLSL.lib `
                       lib/MachineIndependent.lib `
-                      lib/OGLCompiler.lib `
                       lib/OSDependent.lib `
                       lib/SPIRV.lib `
                       lib/SPVRemapper.lib `
@@ -276,7 +217,7 @@
             - name: Deploy
               env:
                   ARCHIVE: glslang-master-${{matrix.os.family}}-${{matrix.cmake_build_type}}.zip
-              uses: actions/github-script@d7906e4ad0b1822421a7e6a35d5ca353c962f410 # v6.4.1
+              uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
               with:
                   script: |
                       const script = require('.github/workflows/deploy.js')
diff --git a/.github/workflows/continuous_integration.yml b/.github/workflows/continuous_integration.yml
index ca0b9a4..61ed923 100644
--- a/.github/workflows/continuous_integration.yml
+++ b/.github/workflows/continuous_integration.yml
@@ -1,307 +1,311 @@
-# NOTE: This workflow was ported from Travis.
-# Travis was using Ubuntu 14.04. Ubuntu 14.04 is not supportted by GitHub workflows. Ubuntu 20.04 is recommended.
-# Travis was using Clang 3.6. The earliest version support by Ubuntu 20.04 is Clang 6.0.
-# Travis was caching the clang package. APT package caching is not natively supported by GitHub actions/cache.
-# Travis was using Mac OS X 10.13.6 / Xcode 9.4.1 / LLVM 9.1.0
-#
 name: Continuous Integration
 
 on:
-    workflow_dispatch:
-    pull_request:
-        branches:
-            - main
+  workflow_dispatch:
+  pull_request:
+    branches:
+      - main
 
 permissions: read-all
 
 jobs:
-    linux:
-        runs-on: ubuntu-22.04
-        strategy:
-            fail-fast: false
-            matrix:
-                compiler: [{cc: clang, cxx: clang++}, {cc: gcc, cxx: g++}]
-                cmake_build_type: [Debug, Release]
-        steps:
-            - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0
-            - uses: lukka/get-cmake@8be6cca406b575906541e8e3b885d46f416bba39 # v3.27.7
-            - uses: actions/setup-python@61a6322f88396a6271a6ee3565807d608ecaddd1 # v4.7.0
-              with:
-                  python-version: '3.7'
-            - name: Setup ccache
-              uses: hendrikmuhs/ccache-action@6d1841ec156c39a52b1b23a810da917ab98da1f4 # v1.2.10
-              with:
-                  key: ubuntu-22-${{ matrix.cmake_build_type }}-${{ matrix.compiler.cc }}-${{matrix.compiler.cxx}}
-            - name: Install GoogleTest
-              run: |
-                  # check out pre-breakage version of googletest; can be deleted when
-                  # issue 3128 is fixed
-                  # git clone --depth=1 https://github.com/google/googletest.git External/googletest
-                  mkdir -p External/googletest
-                  cd External/googletest
-                  git init
-                  git remote add origin https://github.com/google/googletest.git
-                  git fetch --depth 1 origin 0c400f67fcf305869c5fb113dd296eca266c9725
-                  git reset --hard FETCH_HEAD
-                  cd ../..
-            - name: Update Glslang Sources
-              run: ./update_glslang_sources.py
-            - name: Configure
-              run: cmake -S . -B build -D CMAKE_BUILD_TYPE=${{ matrix.cmake_build_type }}
-              env:
-                CC: ${{matrix.compiler.cc}}
-                CXX: ${{matrix.compiler.cxx}}
-                CMAKE_GENERATOR: Ninja
-                CMAKE_C_COMPILER_LAUNCHER: ccache
-                CMAKE_CXX_COMPILER_LAUNCHER: ccache
-            - name: Build
-              run: cmake --build build
-            - name: Install
-              run: cmake --install build --prefix build/install
-            - name: Test
-              run: |
-                  cd build
-                  ctest --output-on-failure &&
-                  cd ../Test && ./runtests
+  linux:
+    runs-on: ubuntu-22.04
+    strategy:
+      fail-fast: false
+      matrix:
+        compiler: [{cc: clang, cxx: clang++}, {cc: gcc, cxx: g++}]
+        cmake_build_type: [Debug, Release]
+    steps:
+      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+      - uses: lukka/get-cmake@5979409e62bdf841487c5fb3c053149de97a86d3 # v3.31.2
+      - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
+        with:
+          python-version: '3.7'
+      - name: Setup ccache
+        uses: hendrikmuhs/ccache-action@ed74d11c0b343532753ecead8a951bb09bb34bc9 # v1.2.14
+        with:
+          key: ubuntu-22-${{ matrix.cmake_build_type }}-${{ matrix.compiler.cc }}-${{matrix.compiler.cxx}}
+      - run: ./update_glslang_sources.py
+      - name: Configure
+        run: cmake -S . -B build -D CMAKE_BUILD_TYPE=${{ matrix.cmake_build_type }} -DBUILD_WERROR=ON -D GLSLANG_TESTS=ON
+        env:
+          CC: ${{matrix.compiler.cc}}
+          CXX: ${{matrix.compiler.cxx}}
+          CMAKE_GENERATOR: Ninja
+          CMAKE_C_COMPILER_LAUNCHER: ccache
+          CMAKE_CXX_COMPILER_LAUNCHER: ccache
+      - name: Build
+        run: cmake --build build
+      - name: Install
+        run: cmake --install build --prefix build/install
+      - name: Test
+        run: ctest --output-on-failure --test-dir build
+      - name: Check known validation failure list
+        run: grep -l 'Validation failed' Test/baseResults/* | sort -fd | diff -u Test/baseResults/validation_fails.txt -
 
-    linux-asan:
-        runs-on: ubuntu-22.04
-        strategy:
-            fail-fast: false
-            matrix:
-                compiler: [{cc: gcc, cxx: g++}]
-                cmake_build_type: [Debug]
-                flags: ['-fsanitize=address', '-fsanitize=thread']
-        steps:
-            - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0
-            - uses: lukka/get-cmake@8be6cca406b575906541e8e3b885d46f416bba39 # v3.27.7
-            - uses: actions/setup-python@61a6322f88396a6271a6ee3565807d608ecaddd1 # v4.7.0
-              with:
-                  python-version: '3.7'
-            - name: Setup ccache
-              uses: hendrikmuhs/ccache-action@6d1841ec156c39a52b1b23a810da917ab98da1f4 # v1.2.10
-              with:
-                  key: ubuntu-22-${{ matrix.cmake_build_type }}-${{ matrix.compiler.cc }}-${{matrix.compiler.cxx}}-${{matrix.flags}}
-            - name: Install GoogleTest
-              run: |
-                  # check out pre-breakage version of googletest; can be deleted when
-                  # issue 3128 is fixed
-                  # git clone --depth=1 https://github.com/google/googletest.git External/googletest
-                  mkdir -p External/googletest
-                  cd External/googletest
-                  git init
-                  git remote add origin https://github.com/google/googletest.git
-                  git fetch --depth 1 origin 0c400f67fcf305869c5fb113dd296eca266c9725
-                  git reset --hard FETCH_HEAD
-                  cd ../..
-            - name: Update Glslang Sources
-              run: ./update_glslang_sources.py
-            - name: Configure
-              run: cmake -S . -B build -D CMAKE_BUILD_TYPE=${{ matrix.cmake_build_type }}
-              env:
-                CC: ${{matrix.compiler.cc}}
-                CXX: ${{matrix.compiler.cxx}}
-                CMAKE_GENERATOR: Ninja
-                CMAKE_C_COMPILER_LAUNCHER: ccache
-                CMAKE_CXX_COMPILER_LAUNCHER: ccache
-                CFLAGS: ${{matrix.flags}}
-                CXXFLAGS: ${{matrix.flags}}
-                LDFLAGS: ${{matrix.flags}}
-            - name: Build
-              run: cmake --build build
-            - name: Install
-              run: cmake --install build --prefix build/install
-            - name: Test
-              run: |
-                  cd build
-                  ctest --output-on-failure &&
-                  cd ../Test && ./runtests
+  linux-shared:
+    runs-on: ubuntu-22.04
+    strategy:
+      fail-fast: false
+      matrix:
+        compiler: [{cc: clang, cxx: clang++}, {cc: gcc, cxx: g++}]
+        cmake_build_type: [Release]
+    steps:
+      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+      - uses: lukka/get-cmake@5979409e62bdf841487c5fb3c053149de97a86d3 # v3.31.2
+      - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
+        with:
+          python-version: '3.7'
+      - name: Setup ccache
+        uses: hendrikmuhs/ccache-action@ed74d11c0b343532753ecead8a951bb09bb34bc9 # v1.2.14
+        with:
+          key: ubuntu-22-${{ matrix.cmake_build_type }}-${{ matrix.compiler.cc }}-${{matrix.compiler.cxx}}
+      - run: ./update_glslang_sources.py
+      - name: Configure
+        run: cmake -S . -B build -D CMAKE_BUILD_TYPE=${{ matrix.cmake_build_type }} -DBUILD_WERROR=ON -D GLSLANG_TESTS=ON -DBUILD_SHARED_LIBS=ON
+        env:
+          CC: ${{matrix.compiler.cc}}
+          CXX: ${{matrix.compiler.cxx}}
+          CMAKE_GENERATOR: Ninja
+          CMAKE_C_COMPILER_LAUNCHER: ccache
+          CMAKE_CXX_COMPILER_LAUNCHER: ccache
+      - name: Build
+        run: cmake --build build
+      - name: Install
+        run: cmake --install build --prefix build/install
+      - name: Test
+        run: ctest --output-on-failure --test-dir build
 
-    # Ensure we can compile/run on an older distro
-    linux_min:
-      name: Linux Backcompat
-      runs-on: ubuntu-20.04
-      steps:
-          - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0
-          - uses: actions/setup-python@61a6322f88396a6271a6ee3565807d608ecaddd1 # v4.7.0
-            with:
-                python-version: '3.7'
-          - uses: lukka/get-cmake@8be6cca406b575906541e8e3b885d46f416bba39 # v3.27.7
-            with:
-              cmakeVersion: 3.17.2
-          - name: Setup ccache
-            uses: hendrikmuhs/ccache-action@6d1841ec156c39a52b1b23a810da917ab98da1f4 # v1.2.10
-            with:
-              key: linux_backcompat
-          - name: Install GoogleTest
-            run: |
-                # check out pre-breakage version of googletest; can be deleted when
-                # issue 3128 is fixed
-                # git clone --depth=1 https://github.com/google/googletest.git External/googletest
-                mkdir -p External/googletest
-                cd External/googletest
-                git init
-                git remote add origin https://github.com/google/googletest.git
-                git fetch --depth 1 origin 0c400f67fcf305869c5fb113dd296eca266c9725
-                git reset --hard FETCH_HEAD
-                cd ../..
-          - name: Update Glslang Sources
-            run: ./update_glslang_sources.py
-          - name: Configure
-            run: cmake -S . -B build -D CMAKE_BUILD_TYPE=Release
-            env:
-              CMAKE_C_COMPILER_LAUNCHER: ccache
-              CMAKE_CXX_COMPILER_LAUNCHER: ccache
-          - name: Build
-            run: cmake --build build
-          - name: Install
-            run: cmake --install build --prefix build/install
-          - name: Test
-            run: |
-                cd build
-                ctest --output-on-failure &&
-                cd ../Test && ./runtests
+  linux-asan:
+    runs-on: ubuntu-22.04
+    strategy:
+      fail-fast: false
+      matrix:
+        compiler: [{cc: gcc, cxx: g++}]
+        cmake_build_type: [Debug]
+        flags: ['-fsanitize=address', '-fsanitize=thread', '-fsanitize=undefined']
+    steps:
+      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+      - uses: lukka/get-cmake@5979409e62bdf841487c5fb3c053149de97a86d3 # v3.31.2
+      - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
+        with:
+          python-version: '3.7'
+      - name: Setup ccache
+        uses: hendrikmuhs/ccache-action@ed74d11c0b343532753ecead8a951bb09bb34bc9 # v1.2.14
+        with:
+          key: ubuntu-22-${{ matrix.cmake_build_type }}-${{ matrix.compiler.cc }}-${{matrix.compiler.cxx}}-${{matrix.flags}}
+      # This is to combat a bug when using 6.6 linux kernels with thread/address sanitizer
+      # https://github.com/google/sanitizers/issues/1716
+      - run: sudo sysctl vm.mmap_rnd_bits=28
+      - run: ./update_glslang_sources.py
+      - name: Configure
+        run: cmake -S . -B build -D CMAKE_BUILD_TYPE=${{ matrix.cmake_build_type }} -D GLSLANG_TESTS=ON
+        env:
+          CC: ${{matrix.compiler.cc}}
+          CXX: ${{matrix.compiler.cxx}}
+          CMAKE_GENERATOR: Ninja
+          CMAKE_C_COMPILER_LAUNCHER: ccache
+          CMAKE_CXX_COMPILER_LAUNCHER: ccache
+          CFLAGS: ${{matrix.flags}}
+          CXXFLAGS: ${{matrix.flags}}
+          LDFLAGS: ${{matrix.flags}}
+      - name: Build
+        run: cmake --build build
+      - name: Install
+        run: cmake --install build --prefix build/install
+      - name: Test
+        env:
+          UBSAN_OPTIONS: 'halt_on_error=1:print_stacktrace=1'
+        run: ctest --output-on-failure --test-dir build
 
-    macos:
-        runs-on: ${{matrix.os}}
-        strategy:
-            fail-fast: false
-            matrix:
-                os: [macos-11, macos-12]
-                compiler: [{cc: clang, cxx: clang++}, {cc: gcc, cxx: g++}]
-                cmake_build_type: [Debug, Release]
-        steps:
-            - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0
-            - uses: actions/setup-python@61a6322f88396a6271a6ee3565807d608ecaddd1 # v4.7.0
-              with:
-                  python-version: '3.7'
-            - uses: lukka/get-cmake@8be6cca406b575906541e8e3b885d46f416bba39 # v3.27.7
-            - name: Install GoogleTest
-              run: |
-                  # check out pre-breakage version of googletest; can be deleted when
-                  # issue 3128 is fixed
-                  # git clone --depth=1 https://github.com/google/googletest.git External/googletest
-                  mkdir -p External/googletest
-                  cd External/googletest
-                  git init
-                  git remote add origin https://github.com/google/googletest.git
-                  git fetch --depth 1 origin 0c400f67fcf305869c5fb113dd296eca266c9725
-                  git reset --hard FETCH_HEAD
-                  cd ../..
-            - name: Update Glslang Sources
-              run: ./update_glslang_sources.py
-            - name: Configure
-              run: cmake -S . -B build -D CMAKE_BUILD_TYPE=${{matrix.cmake_build_type}} -G "Ninja"
-              env:
-                  CC: ${{matrix.compiler.cc}}
-                  CXX: ${{matrix.compiler.cxx}}
-            - name: Build
-              run: cmake --build build
-            - name: Install
-              run: cmake --install build --prefix build/install
-            - name: Test
-              run: |
-                  cd build
-                  ctest --output-on-failure &&
-                  cd ../Test && ./runtests
+  # Ensure we can compile/run on an older distro
+  linux_min:
+    name: Linux Backcompat
+    runs-on: ubuntu-20.04
+    steps:
+      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+      - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
+        with:
+          python-version: '3.7'
+      - uses: lukka/get-cmake@5979409e62bdf841487c5fb3c053149de97a86d3 # v3.31.2
+        with:
+          cmakeVersion: 3.17.2
+      - name: Setup ccache
+        uses: hendrikmuhs/ccache-action@ed74d11c0b343532753ecead8a951bb09bb34bc9 # v1.2.14
+        with:
+          key: linux_backcompat
+      - run: ./update_glslang_sources.py
+      - name: Configure
+        run: cmake -S . -B build -D CMAKE_BUILD_TYPE=Release -D GLSLANG_TESTS=ON
+        env:
+          CMAKE_C_COMPILER_LAUNCHER: ccache
+          CMAKE_CXX_COMPILER_LAUNCHER: ccache
+      - name: Build
+        run: cmake --build build
+      - name: Install
+        run: cmake --install build --prefix build/install
+      - name: Test
+        run: ctest --output-on-failure --test-dir build
 
-    windows:
-        runs-on: ${{matrix.os.genus}}
-        permissions:
-            contents: write
-        strategy:
-            fail-fast: false
-            matrix:
-                os: [{genus: windows-2019, family: windows}]
-                cmake_build_type: [Debug, Release]
-        steps:
-            - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0
-            - uses: lukka/get-cmake@8be6cca406b575906541e8e3b885d46f416bba39 # v3.27.7
-            - uses: actions/setup-python@61a6322f88396a6271a6ee3565807d608ecaddd1 # v4.7.0
-              with:
-                  python-version: '3.7'
-            - name: Install GoogleTest
-              run: |
-                  # check out pre-breakage version of googletest; can be deleted when
-                  # issue 3128 is fixed
-                  # git clone --depth=1 https://github.com/google/googletest.git External/googletest
-                  mkdir -p External/googletest
-                  cd External/googletest
-                  git init
-                  git remote add origin https://github.com/google/googletest.git
-                  git fetch --depth 1 origin 0c400f67fcf305869c5fb113dd296eca266c9725
-                  git reset --hard FETCH_HEAD
-                  cd ../..
-            - name: Update Glslang Sources
-              run: |
-                  python update_glslang_sources.py
-            - name: Build
-              run: |
-                  cmake -S. -Bbuild -G "Visual Studio 16 2019" -A x64 -DCMAKE_INSTALL_PREFIX="$PWD/build/install"
-                  cmake --build build --config ${{matrix.cmake_build_type}} --target install
-            - name: Test
-              run: |
-                  cd build
-                  ctest -C ${{matrix.cmake_build_type}} --output-on-failure
-                  cd ../Test && bash runtests
+  macos:
+    runs-on: ${{matrix.os}}
+    strategy:
+      fail-fast: false
+      matrix:
+        os: [macos-14, macos-13]
+        compiler: [{cc: clang, cxx: clang++}]
+        cmake_build_type: [Debug, Release]
+    steps:
+      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+      - uses: lukka/get-cmake@5979409e62bdf841487c5fb3c053149de97a86d3 # v3.31.2
+      - run: ./update_glslang_sources.py
+      - run: cmake -S . -B build -D CMAKE_BUILD_TYPE=${{matrix.cmake_build_type}} -G Ninja -DBUILD_WERROR=ON -D GLSLANG_TESTS=ON
+        env:
+          CC: ${{matrix.compiler.cc}}
+          CXX: ${{matrix.compiler.cxx}}
+      - run: cmake --build build
+      - run: cmake --install build --prefix build/install
+      - run: ctest --output-on-failure --test-dir build
 
-    android:
-        runs-on: ubuntu-22.04
-        strategy:
-          matrix:
-            # Android NDK currently offers 2 different toolchains.
-            # Test both to ensure we are compatible with either approach.
-            LEGACY: [ON, OFF]
-            # Oldest/newest NDK currently provided by GitHub runners
-            # https://github.com/actions/runner-images/blob/main/images/linux/Ubuntu2204-Readme.md#android
-            NDK: [23.2.8568313, 25.2.9519653]
-        steps:
-            - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0
-            - uses: actions/setup-python@61a6322f88396a6271a6ee3565807d608ecaddd1 # v4.7.0
-              with:
-                  python-version: '3.7'
-            - uses: lukka/get-cmake@8be6cca406b575906541e8e3b885d46f416bba39 # v3.27.7
-            - name: Setup ccache
-              uses: hendrikmuhs/ccache-action@6d1841ec156c39a52b1b23a810da917ab98da1f4 # v1.2.10
-              with:
-                  key: android-${{ matrix.LEGACY }}-${{ matrix.NDK }}
-            - name: Update Glslang Sources
-              run: ./update_glslang_sources.py
-            - name: Configure
-              run: |
-                cmake -S . -B build/ \
-                --toolchain $ANDROID_HOME/ndk/${{ matrix.NDK }}/build/cmake/android.toolchain.cmake \
-                -D CMAKE_BUILD_TYPE=Release \
-                -D ANDROID_ABI=armeabi-v7a \
-                -D ANDROID_USE_LEGACY_TOOLCHAIN_FILE=${{ matrix.LEGACY }} \
-                -D BUILD_TESTING=OFF
-              env:
-                CMAKE_GENERATOR: Ninja
-                CMAKE_C_COMPILER_LAUNCHER: ccache
-                CMAKE_CXX_COMPILER_LAUNCHER: ccache
-            - name: Build
-              run: cmake --build build/
+  macos-shared:
+    runs-on: ${{matrix.os}}
+    strategy:
+      fail-fast: false
+      matrix:
+        os: [macos-14]
+        compiler: [{cc: clang, cxx: clang++}]
+        cmake_build_type: [Release]
+    steps:
+      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+      - uses: lukka/get-cmake@5979409e62bdf841487c5fb3c053149de97a86d3 # v3.31.2
+      - run: ./update_glslang_sources.py
+      - run: cmake -S . -B build -D CMAKE_BUILD_TYPE=${{matrix.cmake_build_type}} -G Ninja -DBUILD_WERROR=ON -D GLSLANG_TESTS=ON -DBUILD_SHARED_LIBS=ON
+        env:
+          CC: ${{matrix.compiler.cc}}
+          CXX: ${{matrix.compiler.cxx}}
+      - run: cmake --build build
+      - run: cmake --install build --prefix build/install
+      - run: ctest --output-on-failure --test-dir build
 
-    emscripten:
-        runs-on: ubuntu-22.04
-        steps:
-            - uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0
-            - uses: actions/setup-python@61a6322f88396a6271a6ee3565807d608ecaddd1 # v4.7.0
-              with:
-                  python-version: '3.7'
-            - uses: lukka/get-cmake@8be6cca406b575906541e8e3b885d46f416bba39 # v3.27.7
-            - name: Setup ccache
-              uses: hendrikmuhs/ccache-action@6d1841ec156c39a52b1b23a810da917ab98da1f4 # v1.2.10
-              with:
-                  key: ubuntu-emscripten
-            - uses: mymindstorm/setup-emsdk@ab889da2abbcbb280f91ec4c215d3bb4f3a8f775 # v12
-            - name: Update Glslang Sources
-              run: ./update_glslang_sources.py
-            - name: Configure
-              run: emcmake cmake -GNinja -Bbuild/web -DCMAKE_BUILD_TYPE=Release -DENABLE_GLSLANG_JS=ON -DBUILD_TESTING=OFF -DENABLE_OPT=OFF
-              env:
-                CMAKE_GENERATOR: Ninja
-                CMAKE_C_COMPILER_LAUNCHER: ccache
-                CMAKE_CXX_COMPILER_LAUNCHER: ccache
-            - name: Build
-              run: cmake --build build/web
+  windows:
+    runs-on: ${{matrix.os.genus}}
+    permissions:
+      contents: write
+    strategy:
+      fail-fast: false
+      matrix:
+          os: [{genus: windows-2019, family: windows}]
+          cmake_build_type: [Debug, Release]
+    steps:
+      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+      - uses: lukka/get-cmake@5979409e62bdf841487c5fb3c053149de97a86d3 # v3.31.2
+      - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
+        with:
+          python-version: '3.7'
+      - run: python update_glslang_sources.py
+      - name: Build
+        run: |
+          cmake -S. -Bbuild -G "Visual Studio 16 2019" -A x64 -DCMAKE_INSTALL_PREFIX="$PWD/build/install" -DBUILD_WERROR=ON -D GLSLANG_TESTS=ON
+          cmake --build build --config ${{matrix.cmake_build_type}} --target install
+      - name: Test
+        run: ctest -C ${{matrix.cmake_build_type}} --output-on-failure --test-dir build
+
+  windows-shared:
+    runs-on: ${{matrix.os.genus}}
+    permissions:
+      contents: write
+    strategy:
+      fail-fast: false
+      matrix:
+          os: [{genus: windows-2019, family: windows}]
+          cmake_build_type: [Debug, Release]
+    steps:
+      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+      - uses: lukka/get-cmake@5979409e62bdf841487c5fb3c053149de97a86d3 # v3.31.2
+      - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
+        with:
+          python-version: '3.7'
+      - run: python update_glslang_sources.py
+      - name: Build
+        run: |
+          cmake -S. -Bbuild -G "Visual Studio 16 2019" -A x64 -DCMAKE_INSTALL_PREFIX="$PWD/build/install" -DBUILD_WERROR=ON -D GLSLANG_TESTS=ON -DBUILD_SHARED_LIBS=ON
+          cmake --build build --config ${{matrix.cmake_build_type}} --target install
+      - name: Test
+        run: ctest -C ${{matrix.cmake_build_type}} --output-on-failure --test-dir build
+
+  iOS:
+    runs-on: macos-13
+    steps:
+      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+      - uses: lukka/get-cmake@5979409e62bdf841487c5fb3c053149de97a86d3 # v3.31.2
+      - name: Setup ccache
+        uses: hendrikmuhs/ccache-action@ed74d11c0b343532753ecead8a951bb09bb34bc9 # v1.2.14
+        with:
+          key: IOS
+      - run: ./update_glslang_sources.py
+      # NOTE: The MacOS SDK ships universal binaries. CI should reflect this.
+      - name: Configure Universal Binary for iOS
+        run: |
+          cmake -S . -B build \
+          -D CMAKE_BUILD_TYPE=Debug \
+          -D CMAKE_SYSTEM_NAME=iOS \
+          "-D CMAKE_OSX_ARCHITECTURES=arm64;x86_64" \
+          -G Ninja
+        env:
+          CMAKE_C_COMPILER_LAUNCHER: ccache
+          CMAKE_CXX_COMPILER_LAUNCHER: ccache
+      - run: cmake --build build
+      - run: cmake --install build --prefix /tmp
+
+  android:
+    runs-on: ubuntu-22.04
+    strategy:
+      matrix:
+        # Android NDK currently offers 2 different toolchains.
+        # Test both to ensure we are compatible with either approach.
+        LEGACY: [ON, OFF]
+    steps:
+      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+      - uses: lukka/get-cmake@5979409e62bdf841487c5fb3c053149de97a86d3 # v3.31.2
+      - name: Setup ccache
+        uses: hendrikmuhs/ccache-action@ed74d11c0b343532753ecead8a951bb09bb34bc9 # v1.2.14
+        with:
+          key: android-${{ matrix.LEGACY }}
+      - run: ./update_glslang_sources.py
+      - name: Configure for Android
+        run: |
+          cmake -S . -B build/ --toolchain $ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake \
+          -D CMAKE_BUILD_TYPE=Release \
+          -D ANDROID_ABI=armeabi-v7a \
+          -D ANDROID_USE_LEGACY_TOOLCHAIN_FILE=${{ matrix.LEGACY }} \
+          -G Ninja
+        env:
+          CMAKE_C_COMPILER_LAUNCHER: ccache
+          CMAKE_CXX_COMPILER_LAUNCHER: ccache
+      - run: cmake --build build/
+      - run: cmake --install build/ --prefix /tmp
+
+  emscripten:
+    runs-on: ubuntu-22.04
+    steps:
+      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+      - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
+        with:
+          python-version: '3.7'
+      - uses: lukka/get-cmake@5979409e62bdf841487c5fb3c053149de97a86d3 # v3.31.2
+      - name: Setup ccache
+        uses: hendrikmuhs/ccache-action@ed74d11c0b343532753ecead8a951bb09bb34bc9 # v1.2.14
+        with:
+          key: ubuntu-emscripten
+      - uses: mymindstorm/setup-emsdk@6ab9eb1bda2574c4ddb79809fc9247783eaf9021 # v14
+      - name: Update Glslang Sources
+        run: ./update_glslang_sources.py
+      - name: Configure
+        run: emcmake cmake -GNinja -Bbuild/web -DCMAKE_BUILD_TYPE=Release -DENABLE_GLSLANG_JS=ON -DENABLE_OPT=OFF
+        env:
+          CMAKE_GENERATOR: Ninja
+          CMAKE_C_COMPILER_LAUNCHER: ccache
+          CMAKE_CXX_COMPILER_LAUNCHER: ccache
+      - name: Build
+        run: cmake --build build/web
diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml
index fe3833a..5a56966 100644
--- a/.github/workflows/scorecard.yml
+++ b/.github/workflows/scorecard.yml
@@ -23,12 +23,12 @@
 
     steps:
       - name: "Checkout code"
-        uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0
+        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
         with:
           persist-credentials: false
 
       - name: "Run analysis"
-        uses: ossf/scorecard-action@483ef80eb98fb506c348f7d62e28055e49fe2398 # v2.3.0
+        uses: ossf/scorecard-action@62b2cac7ed8198b15735ed49ab1e5cf35480ba46 # v2.4.0
         with:
           results_file: results.sarif
           results_format: sarif
@@ -40,7 +40,7 @@
       # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF
       # format to the repository Actions tab.
       - name: "Upload artifact"
-        uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 # v3.1.3
+        uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3
         with:
           name: SARIF file
           path: results.sarif
@@ -48,6 +48,6 @@
 
       # Upload the results to GitHub's code scanning dashboard.
       - name: "Upload to code-scanning"
-        uses: github/codeql-action/upload-sarif@2cb752a87e96af96708ab57187ab6372ee1973ab # v2.22.0
+        uses: github/codeql-action/upload-sarif@aa578102511db1f4524ed59b8cc2bae4f6e88195 # v3.27.6
         with:
           sarif_file: results.sarif
diff --git a/Android.mk b/Android.mk
index 6787a97..3cd88c8 100644
--- a/Android.mk
+++ b/Android.mk
@@ -59,30 +59,8 @@
 LOCAL_MODULE:=OSDependent
 LOCAL_CXXFLAGS:=-std=c++17 -fno-exceptions -fno-rtti $(GLSLANG_DEFINES)
 LOCAL_EXPORT_C_INCLUDES:=$(LOCAL_PATH)
-LOCAL_SRC_FILES:=glslang/OSDependent/Unix/ossource.cpp
-LOCAL_C_INCLUDES:=$(LOCAL_PATH) $(LOCAL_PATH)/glslang/OSDependent/Unix/
-LOCAL_EXPORT_C_INCLUDES:=$(LOCAL_PATH)/glslang/OSDependent/Unix/
-include $(BUILD_STATIC_LIBRARY)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE:=OGLCompiler
-LOCAL_CXXFLAGS:=-std=c++17 -fno-exceptions -fno-rtti $(GLSLANG_DEFINES)
-LOCAL_EXPORT_C_INCLUDES:=$(LOCAL_PATH)
-LOCAL_SRC_FILES:=OGLCompilersDLL/InitializeDll.cpp
-LOCAL_C_INCLUDES:=$(LOCAL_PATH)/OGLCompiler
-LOCAL_STATIC_LIBRARIES:=OSDependent
-include $(BUILD_STATIC_LIBRARY)
-
-# Build the stubbed HLSL library.
-# The HLSL source is now directly referenced by the glslang static library
-# instead.
-include $(CLEAR_VARS)
-LOCAL_MODULE:=HLSL
-LOCAL_CXXFLAGS:=-std=c++17 -fno-exceptions -fno-rtti $(GLSLANG_DEFINES)
-LOCAL_SRC_FILES:= \
-	hlsl/stub.cpp
-LOCAL_C_INCLUDES:=$(LOCAL_PATH) \
-	$(LOCAL_PATH)/glslang/HLSL
+LOCAL_SRC_FILES:=glslang/stub.cpp
+LOCAL_C_INCLUDES:=$(LOCAL_PATH)
 include $(BUILD_STATIC_LIBRARY)
 
 include $(CLEAR_VARS)
@@ -94,7 +72,8 @@
 
 LOCAL_MODULE:=glslang
 LOCAL_CXXFLAGS:=-std=c++17 -fno-exceptions -fno-rtti $(GLSLANG_DEFINES)
-LOCAL_EXPORT_C_INCLUDES:=$(LOCAL_PATH)
+LOCAL_EXPORT_C_INCLUDES:=$(LOCAL_PATH) \
+	$(LOCAL_PATH)/glslang/OSDependent/Unix
 LOCAL_SRC_FILES:= \
 		glslang/CInterface/glslang_c_interface.cpp \
 		glslang/GenericCodeGen/CodeGen.cpp \
@@ -133,12 +112,24 @@
 		glslang/MachineIndependent/preprocessor/PpContext.cpp \
 		glslang/MachineIndependent/preprocessor/Pp.cpp \
 		glslang/MachineIndependent/preprocessor/PpScanner.cpp \
-		glslang/MachineIndependent/preprocessor/PpTokens.cpp
+		glslang/MachineIndependent/preprocessor/PpTokens.cpp \
+		glslang/OSDependent/Unix/ossource.cpp \
+		SPIRV/CInterface/spirv_c_interface.cpp \
+		SPIRV/GlslangToSpv.cpp \
+		SPIRV/InReadableOrder.cpp \
+		SPIRV/Logger.cpp \
+		SPIRV/SPVRemapper.cpp \
+		SPIRV/SpvBuilder.cpp \
+		SPIRV/SpvPostProcess.cpp \
+		SPIRV/SpvTools.cpp \
+		SPIRV/disassemble.cpp \
+		SPIRV/doc.cpp
 LOCAL_C_INCLUDES:=$(LOCAL_PATH) \
 	$(LOCAL_PATH)/glslang/MachineIndependent \
+	$(LOCAL_PATH)/glslang/OSDependent/Unix \
+	$(LOCAL_PATH)/SPIRV \
 	$(GLSLANG_GENERATED_INCLUDEDIR) \
 	$(GLSLANG_OUT_PATH)
-LOCAL_STATIC_LIBRARIES:=OSDependent OGLCompiler HLSL
 include $(BUILD_STATIC_LIBRARY)
 
 include $(CLEAR_VARS)
@@ -149,20 +140,7 @@
 
 LOCAL_MODULE:=SPIRV
 LOCAL_CXXFLAGS:=-std=c++17 -fno-exceptions -fno-rtti -Werror $(GLSLANG_DEFINES)
-LOCAL_SRC_FILES:= \
-	SPIRV/CInterface/spirv_c_interface.cpp \
-	SPIRV/GlslangToSpv.cpp \
-	SPIRV/InReadableOrder.cpp \
-	SPIRV/Logger.cpp \
-	SPIRV/SPVRemapper.cpp \
-	SPIRV/SpvBuilder.cpp \
-	SPIRV/SpvPostProcess.cpp \
-	SPIRV/SpvTools.cpp \
-	SPIRV/disassemble.cpp \
-	SPIRV/doc.cpp
-LOCAL_C_INCLUDES:=$(LOCAL_PATH) \
-	$(LOCAL_PATH)/glslang/SPIRV \
-	$(GLSLANG_GENERATED_INCLUDEDIR)
-LOCAL_EXPORT_C_INCLUDES:=$(LOCAL_PATH)/glslang/SPIRV
-LOCAL_STATIC_LIBRARIES:=glslang
+LOCAL_SRC_FILES:=glslang/stub.cpp
+LOCAL_C_INCLUDES:=$(LOCAL_PATH)
+LOCAL_EXPORT_C_INCLUDES:=$(LOCAL_PATH)
 include $(BUILD_STATIC_LIBRARY)
diff --git a/BUILD.gn b/BUILD.gn
index 2d8586a..2de933d 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -128,8 +128,6 @@
     }
 
     sources = [
-      "OGLCompilersDLL/InitializeDll.cpp",
-      "OGLCompilersDLL/InitializeDll.h",
       "SPIRV/GLSL.ext.AMD.h",
       "SPIRV/GLSL.ext.EXT.h",
       "SPIRV/GLSL.ext.KHR.h",
@@ -172,6 +170,7 @@
       "glslang/Include/Types.h",
       "glslang/Include/arrays.h",
       "glslang/Include/intermediate.h",
+      "glslang/Include/visibility.h",
       "glslang/MachineIndependent/Constant.cpp",
       "glslang/MachineIndependent/InfoSink.cpp",
       "glslang/MachineIndependent/Initialize.cpp",
@@ -247,7 +246,7 @@
       ]
     }
 
-    defines = []
+    defines = [ "ENABLE_SPIRV=1" ]
     if (invoker.enable_opt) {
       sources += [ "SPIRV/SpvTools.cpp" ]
       defines += [ "ENABLE_OPT=1" ]
@@ -321,6 +320,7 @@
     "glslang/ResourceLimits/ResourceLimits.cpp",
     "glslang/Public/ResourceLimits.h",
     "glslang/Include/ResourceLimits.h",
+    "glslang/Include/visibility.h",
   ]
   public_configs = [ ":glslang_public" ]
 
@@ -336,7 +336,10 @@
   if (!is_win) {
     cflags = [ "-Woverflow" ]
   }
-  defines = [ "ENABLE_OPT=1" ]
+  defines = [
+    "ENABLE_OPT=1",
+    "ENABLE_SPIRV=1",
+  ]
   deps = [
     ":glslang_build_info",
     ":glslang_default_resource_limits_sources",
@@ -356,7 +359,10 @@
 
 executable("spirv-remap") {
   sources = [ "StandAlone/spirv-remap.cpp" ]
-  defines = [ "ENABLE_OPT=1" ]
+  defines = [
+    "ENABLE_OPT=1",
+    "ENABLE_SPIRV=1",
+  ]
   deps = [ ":glslang_sources" ]
 
   include_dirs = [ "${spirv_tools_dir}/include" ]
diff --git a/CHANGES.md b/CHANGES.md
index 8a97ff4..dff3cf6 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -3,6 +3,132 @@
 All notable changes to this project will be documented in this file.
 This project adheres to [Semantic Versioning](https://semver.org/).
 
+## 15.1.0 2024-12-13
+* Add Vulkan 1.4 target and client
+* Improve conversion of uniform block to push constant
+* Improve cross stage error reporting by reporting proper stager rather than "unkwown stage"
+* Add warning if forward declaration uses layout qualifiers
+* Implement GLSL_NV_cooperative_matrix2
+* Emit OpModfStruct instead of depracated OpModf
+* Add link-time cross stage optimization
+* Add column to DebugLexicalBlock
+* Propagate errors from symbol table initialization
+* Fix nonsemantic debuginfo line attribution for cooperative matrix
+
+## 15.0.0 2024-09-23
+### Breaking changes
+* Explicitly export all symbols that are part of the public API and hide other symbols by default
+
+### Other changes
+* Allow building glslang without the SPIR-V backend using the new ENABLE_SPIRV build option
+* Add setResourceSetBinding method to the API
+* Add interface to get the GLSL IO mapper and resolver
+* Allow compute derivative modes when the workgroup dimensions are spec constants
+* Improve debug location of branch/return instructions
+* Silence preprocessor '#' error reporting in inactive #if/#ifdef/#elif/#else blocks
+* Apply GLSL memory decorations to top-level OpVariable
+* Move definition of GLSLANG_EXPORT to visibility.h
+* Merge ancillary libraries into main glslang library and stub originals
+* Add public setSourceFile and addSourceText methods to TShader class
+* Add type checks for hitObjectNV
+* Add optimizerAllowExpandedIDBound to SpvOptions
+* Add SpvTools.h back to public headers 
+* Add cross-stage check for missing outputs
+* Fix HLSL offsets for non-buffers
+* Add types and functions for IO mapping to API
+* Add function to set preprocessed code to API
+* Add set/get version functions to API
+* Expose setGlobalUniform functions to API
+* Don't emit debug instructions before an OpPhi
+* Add command-line and API option to enable reporting column location for compiler errors
+* Improve location aliasing checks
+* Support constant expression calculated by matrixCompMult
+* Fix crash caused by atomicCounter() use without arguments
+* Fix multi-line function call line numbers
+* Add line info to OpDebugDeclare for function parameters
+* Fix HLSL OpDebugFunction file name
+* Fix duplicate decorations
+* Enable compilation of glslang without thread support for WASI
+
+## 14.3.0 2024-06-25
+* Generate vector constructions more efficiently when sizes match
+* Skip identity conversions for 8-bit and 16-bit types
+* Add cmake aliases for public libraries
+* Support ARM extended matrix layout
+* Emit debug info for buffer references
+* Add support for OpExtInstWithForwardRefsKHR
+* Generate SPV_EXT_replicated_compisites when requested by pragma
+* Reuse loads generated for repeated function arguments
+* Fix gl_HitT alias of gl_RayTmax
+* Fix some cases where invalid SPIR-V was being generated when using separate samplers
+* Add back layoutLocation to public API
+
+## 14.2.0 2024-05-02
+* Improve checking for location aliasing errors
+* Fix undefined behavior in parser
+* Add bounds check to gl_SampleMask
+* Fix alignment and padding of matrices consuming one vector
+* Remove duplicate SPIR-V decorations
+* Check for exponent overflow in float parser
+* Fix bug in relaxed verification rules
+* Fix disassembly of debugBreak
+* Fix bug when importing SPIR-V extended intruction set
+* Fix issues with the interaction of cooperative_matrix and spirv_intrinsics
+* Support SPV_QCOM_image_processing2
+* Support files with UTF8BOM character
+
+## 14.1.0 2024-03-08
+* Add a new --abosute-path command-line option to output absolute paths in error messages
+* Support GL_EXT_control_flow_attributes2
+* Support GL_ARB_shading_language_include
+* Fix HLSL built-in passthrough via inout
+* Enable -Wimplicit-fallthrough and fix warnings
+* Fix -Wmissing_field_initializer warnings
+* Document supported dependencies in known_good.json
+* Clear spirv vector before use
+* Emit debug info for accelerationStructure and rayQuery variables
+* Support NV_shader_atomic_fp16_vector
+* Support GL_EXT_expect_assume_support
+* Allow external control of whether glslang will be tested or installed
+* Improve debug source and line info
+* Support GL_KHR_shader_subgroup_rotate
+* Add SPIRV-Tools-opt dependency if ENABLE_OPT
+* Support EXT_shader_quad_control
+* Add OpAssumeTrueKHR and OpExpectKHR
+* Support GL_EXT_maximal_reconvergence
+* Remove generation of deprecated Target.cmake files
+* Fix array size of gl_SampleMask and gl_SampleMaskIn
+* Support GL_ARB_texture_multisample_extension
+* Emit DebugTypePointer when non-semantic debug info is enabled
+
+## 14.0.0 2023-12-21
+
+### Breaking changes
+* The legacy libraries named HLSL and OGLCompiler have been removed. To avoid future disruptions, please use cmake's find_package mechanism rather than hardcoding library dependencies.
+* Only the headers that are part of glslang's public interface are included in the install target.
+* Remove OVERRIDE_MSVCCRT cmake option.
+
+### Other changes
+* Fix spv_options initialization
+* Fix line number for OpDebugFunction and OpDebugScope for function
+* Fix SPV_KHR_cooperative_matrix enumerants
+* Fix nullptr crash
+* Fix GL_ARB_shader_storage_buffer_object version
+* Fix interpolant ES error
+* Generate DebugValue for constant arguments
+* Overflow/underflow out-of-range floats to infinity/0.0 respectively
+* Support SV_ViewID keywords for HLSL
+* Implement relaxed rule for opaque struct members
+* Add BUILD_WERROR cmake option
+* Add GLSLANG_TESTS cmake option
+* Always generate OpDebugBasicType for bool type
+* Fix GLSL parsing of '#' when not preceded by space or tab
+* Fix GL_ARB_bindless_texture availability
+* Support GL_EXT_draw_instanced extension
+* Support GL_EXT_texture_array extension
+* Fix conversion of 64-bit unsigned integer constants to bool
+* Output 8-bit and 16-bit capabilities when appropriate for OpSpecConstant
+
 ## 13.1.1 2023-10-16
 * Initialize compile_only field in C interface
 
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a734ad1..ed2b8c8 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -33,6 +33,14 @@
 cmake_minimum_required(VERSION 3.17.2)
 project(glslang)
 
+if (CMAKE_VERSION VERSION_LESS "3.21")
+    # https://cmake.org/cmake/help/latest/variable/PROJECT_IS_TOP_LEVEL.html
+    string(COMPARE EQUAL ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR} PROJECT_IS_TOP_LEVEL)
+endif()
+
+set(GLSLANG_TESTS_DEFAULT ON) # Can be turned off, below, based on environment.
+set(GLSLANG_ENABLE_INSTALL_DEFAULT ON) # Can be turned off, below, based on environment.
+
 set_property(GLOBAL PROPERTY USE_FOLDERS ON)
 
 # Adhere to GNU filesystem layout conventions
@@ -42,8 +50,9 @@
 # Needed for CMAKE_DEPENDENT_OPTION macro
 include(CMakeDependentOption)
 
-option(BUILD_SHARED_LIBS "Build Shared Libraries" OFF)
+option(BUILD_SHARED_LIBS "Build Shared Libraries")
 option(BUILD_EXTERNAL "Build external dependencies in /External" ON)
+option(BUILD_WERROR "Enable warnings as errors (default is OFF)" OFF)
 
 set(LIB_TYPE STATIC)
 
@@ -59,16 +68,41 @@
     set(CMAKE_BUILD_TYPE "Debug")
 endif()
 
-option(SKIP_GLSLANG_INSTALL "Skip installation" ${SKIP_GLSLANG_INSTALL})
-if(NOT ${SKIP_GLSLANG_INSTALL})
-  set(ENABLE_GLSLANG_INSTALL ON)
+# Currently iOS and Android are very similar.
+# They both have their own packaging (APP/APK).
+# Which makes regular executables/testing problematic.
+#
+# Currently the only deliverables for these platforms are
+# libraries (either STATIC or SHARED).
+#
+# Furthermore testing is equally problematic.
+if (IOS OR ANDROID)
+    set(ENABLE_GLSLANG_BINARIES OFF)
+    set(GLSLANG_TESTS_DEFAULT OFF)
 endif()
+
+# Simplify the default case of including this project.
+# Otherwise add_subdirectory users have a harder time consuming the library.
+# Since glslang will pollute the installation and add undesirable testing.
+if(NOT PROJECT_IS_TOP_LEVEL)
+    set(GLSLANG_TESTS_DEFAULT OFF)
+    set(GLSLANG_ENABLE_INSTALL_DEFAULT OFF)
+endif()
+
+# Control whether Glslang self-tests are built and tested.
+# Always expose this as an option, so the defaults can be overridden.
+option(GLSLANG_TESTS "Enable glslang testing" ${GLSLANG_TESTS_DEFAULT})
+
+# Control whether to install Glslang.
+# Always expose this as an option, so the defaults can be overridden.
+option(GLSLANG_ENABLE_INSTALL "Enable glslang installation" ${GLSLANG_ENABLE_INSTALL_DEFAULT})
+
+option(ENABLE_SPIRV "Enables SPIRV output support" ON)
 option(ENABLE_SPVREMAPPER "Enables building of SPVRemapper" ON)
 
 option(ENABLE_GLSLANG_BINARIES "Builds glslang and spirv-remap" ON)
 
-option(ENABLE_GLSLANG_JS
-    "If using Emscripten, build glslang.js. Otherwise, builds a sample executable for binary-size testing." OFF)
+option(ENABLE_GLSLANG_JS "If using Emscripten, build glslang.js. Otherwise, builds a sample executable for binary-size testing.")
 CMAKE_DEPENDENT_OPTION(ENABLE_EMSCRIPTEN_SINGLE_FILE
     "If using Emscripten, enables SINGLE_FILE build"
     OFF "ENABLE_GLSLANG_JS AND EMSCRIPTEN"
@@ -79,33 +113,29 @@
     OFF)
 
 option(ENABLE_HLSL "Enables HLSL input support" ON)
-option(ENABLE_RTTI "Enables RTTI" OFF)
-option(ENABLE_EXCEPTIONS "Enables Exceptions" OFF)
-option(ENABLE_OPT "Enables spirv-opt capability if present" ON)
+option(ENABLE_RTTI "Enables RTTI")
+option(ENABLE_EXCEPTIONS "Enables Exceptions")
+CMAKE_DEPENDENT_OPTION(ENABLE_OPT "Enables spirv-opt capability if present" ON "ENABLE_SPIRV" OFF)
 
-if(MINGW OR (CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND ${CMAKE_CXX_COMPILER_ID} MATCHES "GNU"))
+if(MINGW OR (APPLE AND ${CMAKE_CXX_COMPILER_ID} MATCHES "GNU"))
     # Workaround for CMake behavior on Mac OS with gcc, cmake generates -Xarch_* arguments
     # which gcc rejects
-    option(ENABLE_PCH "Enables Precompiled header" OFF)
-else()
-    option(ENABLE_PCH "Enables Precompiled header" ON)
+    set(ENABLE_PCH OFF)
+    message(NOTICE "Disabling PCH")
 endif()
-option(ENABLE_CTEST "Enables testing" ON)
 
-if(ENABLE_CTEST)
-    include(CTest)
+option(ENABLE_PCH "Enables Precompiled header" ON)
+
+if(ENABLE_SPIRV)
+    add_compile_definitions(ENABLE_SPIRV)
 endif()
 
 if(ENABLE_HLSL)
-    add_definitions(-DENABLE_HLSL)
+    add_compile_definitions(ENABLE_HLSL)
 endif()
 
 if(WIN32)
     set(CMAKE_DEBUG_POSTFIX "d")
-    option(OVERRIDE_MSVCCRT "Overrides runtime of MSVC " ON)
-    if(MSVC AND OVERRIDE_MSVCCRT)
-        include(ChooseMSVCCRT.cmake)
-    endif()
     add_definitions(-DGLSLANG_OSINCLUDE_WIN32)
 elseif(UNIX OR ANDROID)
     add_definitions(-DGLSLANG_OSINCLUDE_UNIX)
@@ -114,7 +144,7 @@
 endif()
 
 if(${CMAKE_CXX_COMPILER_ID} MATCHES "GNU")
-    add_compile_options(-Wall -Wmaybe-uninitialized -Wuninitialized -Wunused -Wunused-local-typedefs
+    add_compile_options(-Wall -Wmaybe-uninitialized -Wuninitialized -Wunused -Wunused-local-typedefs -Wimplicit-fallthrough
                         -Wunused-parameter -Wunused-value  -Wunused-variable -Wunused-but-set-parameter -Wunused-but-set-variable -fno-exceptions)
     if(NOT ENABLE_RTTI)
         add_compile_options(-fno-rtti)
@@ -126,12 +156,14 @@
         add_compile_options(-Werror=deprecated-copy)
     endif()
 
-    if(NOT CMAKE_SYSTEM_NAME STREQUAL "OpenBSD" AND NOT CMAKE_SYSTEM_NAME STREQUAL "Darwin")
-        # Error if there's symbols that are not found at link time.
-        add_link_options("-Wl,--no-undefined")
+    if(NOT (CMAKE_SYSTEM_NAME STREQUAL "OpenBSD"))
+        if (NOT APPLE)
+            # Error if there's symbols that are not found at link time.
+            add_link_options("-Wl,--no-undefined")
+        endif()
     endif()
 elseif(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang" AND NOT MSVC)
-    add_compile_options(-Wall -Wuninitialized -Wunused -Wunused-local-typedefs
+    add_compile_options(-Wall -Wuninitialized -Wunused -Wunused-local-typedefs -Wimplicit-fallthrough
                         -Wunused-parameter -Wunused-value  -Wunused-variable)
     if(NOT ENABLE_RTTI)
         add_compile_options(-fno-rtti)
@@ -140,11 +172,9 @@
         add_compile_options(-fno-exceptions)
     endif()
 
-    if(NOT (CMAKE_SYSTEM_NAME STREQUAL "OpenBSD" OR CMAKE_SYSTEM_NAME STREQUAL "Emscripten"))
+    if(NOT (CMAKE_SYSTEM_NAME MATCHES "OpenBSD|Emscripten"))
         # Error if there's symbols that are not found at link time. Some linkers do not support this flag.
-        if (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
-            add_link_options("-Wl,-undefined,error")
-        elseif(NOT APPLE)
+        if(NOT APPLE)
             add_link_options("-Wl,--no-undefined")
         endif()
     endif()
@@ -165,6 +195,15 @@
     endif()
 endif()
 
+# NOTE we could potentially replace this logic with COMPILE_WARNING_AS_ERROR if cmake minimum is bumped to >= 3.24
+if (BUILD_WERROR)
+    if (NOT MSVC)
+        add_compile_options(-Werror)
+    else()
+        add_compile_options(/WX)
+    endif()
+endif()
+
 if(ENABLE_GLSLANG_JS)
     if(MSVC)
         add_compile_options(/Os /GR-)
@@ -192,12 +231,6 @@
     endif()
 endfunction(glslang_set_link_args)
 
-if(NOT COMMAND find_host_package)
-    macro(find_host_package)
-        find_package(${ARGN})
-    endmacro()
-endif()
-
 # Root directory for build-time generated include files
 set(GLSLANG_GENERATED_INCLUDEDIR "${CMAKE_BINARY_DIR}/include")
 
@@ -234,7 +267,8 @@
 function(glslang_only_export_explicit_symbols target)
     if(BUILD_SHARED_LIBS)
         target_compile_definitions(${target} PUBLIC "GLSLANG_IS_SHARED_LIBRARY=1")
-        set_target_properties(${target} PROPERTIES CMAKE_CXX_VISIBILITY_PRESET hidden)
+        set_target_properties(${target} PROPERTIES CXX_VISIBILITY_PRESET hidden)
+        set_target_properties(${target} PROPERTIES C_VISIBILITY_PRESET hidden)
         if(WIN32)
             target_compile_definitions(${target} PRIVATE "GLSLANG_EXPORTING=1")
         endif()
@@ -244,26 +278,18 @@
 # glslang_pch() adds precompiled header rules to <target> for the pre-compiled
 # header file <pch>. As target_precompile_headers() was added in CMake 3.16,
 # this is a no-op if called on earlier versions of CMake.
-if(NOT CMAKE_VERSION VERSION_LESS "3.16" AND ENABLE_PCH)
-    function(glslang_pch target pch)
-        target_precompile_headers(${target} PRIVATE ${pch})
-    endfunction()
-else()
-    function(glslang_pch target pch)
-    endfunction()
+function(glslang_pch target pch)
     if(ENABLE_PCH)
-        message("Your CMake version is ${CMAKE_VERSION}. Update to at least 3.16 to enable precompiled headers to speed up incremental builds")
+        target_precompile_headers(${target} PRIVATE ${pch})
     endif()
-endif()
+endfunction()
 
 if(BUILD_EXTERNAL AND IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/External)
-    find_host_package(Python3 REQUIRED)
-
     # We depend on these for later projects, so they should come first.
     add_subdirectory(External)
 endif()
 
-option(ALLOW_EXTERNAL_SPIRV_TOOLS "Allows to build against installed SPIRV-Tools-opt" OFF)
+option(ALLOW_EXTERNAL_SPIRV_TOOLS "Allows to build against installed SPIRV-Tools-opt. This is unsupported if the commit isn't the one in known_good.json")
 if(NOT TARGET SPIRV-Tools-opt)
     if(ALLOW_EXTERNAL_SPIRV_TOOLS)
         # Look for external SPIR-V Tools build, if not building in-tree
@@ -293,45 +319,58 @@
     add_definitions(-DENABLE_OPT=0)
 endif()
 
+if(ENABLE_SPIRV)
+    add_subdirectory(SPIRV)
+endif()
 add_subdirectory(glslang)
-add_subdirectory(OGLCompilersDLL)
 if(ENABLE_GLSLANG_BINARIES)
     add_subdirectory(StandAlone)
 endif()
-add_subdirectory(SPIRV)
-if(ENABLE_HLSL)
-    add_subdirectory(hlsl)
-endif()
-if(ENABLE_CTEST)
-    add_subdirectory(gtests)
-endif()
 
-if(ENABLE_CTEST AND BUILD_TESTING)
+if(GLSLANG_TESTS)
+    enable_testing()
+    add_subdirectory(gtests)
+
     # glslang-testsuite runs a bash script on Windows.
     # Make sure to use '-o igncr' flag to ignore carriage returns (\r).
     set(IGNORE_CR_FLAG "")
     if(WIN32)
-        set(IGNORE_CR_FLAG -o igncr)
+	set(IGNORE_CR_FLAG -o igncr)
     endif()
 
     if (CMAKE_CONFIGURATION_TYPES)
-        set(RESULTS_PATH ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/localResults)
-        set(VALIDATOR_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/$<CONFIG>/glslang)
-        set(REMAP_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/$<CONFIG>/spirv-remap)
+	set(RESULTS_PATH ${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>/localResults)
+	set(VALIDATOR_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/$<CONFIG>/glslang)
+	set(REMAP_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/$<CONFIG>/spirv-remap)
     else()
-        set(RESULTS_PATH ${CMAKE_CURRENT_BINARY_DIR}/localResults)
-        set(VALIDATOR_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/glslang)
-        set(REMAP_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/spirv-remap)
+	set(RESULTS_PATH ${CMAKE_CURRENT_BINARY_DIR}/localResults)
+	set(VALIDATOR_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/glslang)
+	set(REMAP_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/spirv-remap)
     endif()
 
-    add_test(NAME glslang-testsuite
-        COMMAND bash ${IGNORE_CR_FLAG} runtests ${RESULTS_PATH} ${VALIDATOR_PATH} ${REMAP_PATH}
-        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Test/)
-endif()
+    # The TARGET_RUNTIME_DLL_DIRS feature requires CMake 3.27 or greater.
+    if(WIN32 AND BUILD_SHARED_LIBS AND CMAKE_VERSION VERSION_LESS "3.27")
+        message(WARNING "The Windows shared library test configuration requires CMake 3.27 or greater")
+    else()
+        add_test(NAME glslang-testsuite
+            COMMAND bash ${IGNORE_CR_FLAG} runtests ${RESULTS_PATH} ${VALIDATOR_PATH} ${REMAP_PATH}
+            WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Test/)
 
-if(ENABLE_GLSLANG_INSTALL)
+        # Prepend paths to shared libraries.
+        if (BUILD_SHARED_LIBS)
+            set_tests_properties(glslang-testsuite PROPERTIES ENVIRONMENT_MODIFICATION "PATH=path_list_prepend:$<JOIN:$<TARGET_RUNTIME_DLL_DIRS:glslang-standalone>,\;>")
+            set_tests_properties(glslang-testsuite PROPERTIES ENVIRONMENT_MODIFICATION "PATH=path_list_prepend:$<JOIN:$<TARGET_RUNTIME_DLL_DIRS:spirv-remap>,\;>")
+        endif()
+    endif()
+endif(GLSLANG_TESTS)
+
+if (GLSLANG_ENABLE_INSTALL)
     file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/glslang-config.cmake.in" [=[
         @PACKAGE_INIT@
+        include(CMakeFindDependencyMacro)
+        if(@ENABLE_OPT@)
+            find_dependency(SPIRV-Tools-opt)
+        endif()
         @INSTALL_CONFIG_UNIX@
         include("@PACKAGE_PATH_EXPORT_TARGETS@")
     ]=])
@@ -339,9 +378,8 @@
     set(PATH_EXPORT_TARGETS "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}/glslang-targets.cmake")
     if(UNIX OR "${CMAKE_SYSTEM_NAME}" STREQUAL "Fuchsia")
         set(INSTALL_CONFIG_UNIX [=[
-            include(CMakeFindDependencyMacro)
             set(THREADS_PREFER_PTHREAD_FLAG ON)
-            find_dependency(Threads REQUIRED)
+            find_dependency(Threads)
         ]=])
     endif()
     configure_package_config_file(
@@ -370,4 +408,4 @@
         DESTINATION
             "${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}"
     )
-endif()
+endif(GLSLANG_ENABLE_INSTALL)
diff --git a/ChooseMSVCCRT.cmake b/ChooseMSVCCRT.cmake
deleted file mode 100644
index b156126..0000000
--- a/ChooseMSVCCRT.cmake
+++ /dev/null
@@ -1,138 +0,0 @@
-# Copyright (C) 2020 The Khronos Group 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 The Khronos Group 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.
-
-# The macro choose_msvc_crt() takes a list of possible
-# C runtimes to choose from, in the form of compiler flags,
-# to present to the user. (MTd for /MTd, etc)
-#
-# The macro is invoked at the end of the file.
-#
-# CMake already sets CRT flags in the CMAKE_CXX_FLAGS_* and
-# CMAKE_C_FLAGS_* variables by default. To let the user
-# override that for each build type:
-# 1. Detect which CRT is already selected, and reflect this in
-# LLVM_USE_CRT_* so the user can have a better idea of what
-# changes they're making.
-# 2. Replace the flags in both variables with the new flag via a regex.
-# 3. set() the variables back into the cache so the changes
-# are user-visible.
-
-### Helper macros: ###
-macro(make_crt_regex regex crts)
-  set(${regex} "")
-  foreach(crt ${${crts}})
-    # Trying to match the beginning or end of the string with stuff
-    # like [ ^]+ didn't work, so use a bunch of parentheses instead.
-    set(${regex} "${${regex}}|(^| +)/${crt}($| +)")
-  endforeach(crt)
-  string(REGEX REPLACE "^\\|" "" ${regex} "${${regex}}")
-endmacro(make_crt_regex)
-
-macro(get_current_crt crt_current regex flagsvar)
-  # Find the selected-by-CMake CRT for each build type, if any.
-  # Strip off the leading slash and any whitespace.
-  string(REGEX MATCH "${${regex}}" ${crt_current} "${${flagsvar}}")
-  string(REPLACE "/" " " ${crt_current} "${${crt_current}}")
-  string(STRIP "${${crt_current}}" ${crt_current})
-endmacro(get_current_crt)
-
-# Replaces or adds a flag to a variable.
-# Expects 'flag' to be padded with spaces.
-macro(set_flag_in_var flagsvar regex flag)
-  string(REGEX MATCH "${${regex}}" current_flag "${${flagsvar}}")
-  if("${current_flag}" STREQUAL "")
-    set(${flagsvar} "${${flagsvar}}${${flag}}")
-  else()
-    string(REGEX REPLACE "${${regex}}" "${${flag}}" ${flagsvar} "${${flagsvar}}")
-  endif()
-  string(STRIP "${${flagsvar}}" ${flagsvar})
-  # Make sure this change gets reflected in the cache/gui.
-  # CMake requires the docstring parameter whenever set() touches the cache,
-  # so get the existing docstring and re-use that.
-  get_property(flagsvar_docs CACHE ${flagsvar} PROPERTY HELPSTRING)
-  set(${flagsvar} "${${flagsvar}}" CACHE STRING "${flagsvar_docs}" FORCE)
-endmacro(set_flag_in_var)
-
-
-macro(choose_msvc_crt MSVC_CRT)
-  if(LLVM_USE_CRT)
-    message(FATAL_ERROR
-      "LLVM_USE_CRT is deprecated. Use the CMAKE_BUILD_TYPE-specific
-variables (LLVM_USE_CRT_DEBUG, etc) instead.")
-  endif()
-
-  make_crt_regex(MSVC_CRT_REGEX ${MSVC_CRT})
-
-  foreach(build_type ${CMAKE_CONFIGURATION_TYPES} ${CMAKE_BUILD_TYPE})
-    string(TOUPPER "${build_type}" build)
-    if (NOT LLVM_USE_CRT_${build})
-      get_current_crt(LLVM_USE_CRT_${build}
-        MSVC_CRT_REGEX
-        CMAKE_CXX_FLAGS_${build})
-      set(LLVM_USE_CRT_${build}
-        "${LLVM_USE_CRT_${build}}"
-        CACHE STRING "Specify VC++ CRT to use for ${build_type} configurations."
-        FORCE)
-      set_property(CACHE LLVM_USE_CRT_${build}
-        PROPERTY STRINGS ;${${MSVC_CRT}})
-    endif(NOT LLVM_USE_CRT_${build})
-  endforeach(build_type)
-
-  foreach(build_type ${CMAKE_CONFIGURATION_TYPES} ${CMAKE_BUILD_TYPE})
-    string(TOUPPER "${build_type}" build)
-    if ("${LLVM_USE_CRT_${build}}" STREQUAL "")
-      set(flag_string " ")
-    else()
-      set(flag_string " /${LLVM_USE_CRT_${build}} ")
-      list(FIND ${MSVC_CRT} ${LLVM_USE_CRT_${build}} idx)
-      if (idx LESS 0)
-        message(FATAL_ERROR
-          "Invalid value for LLVM_USE_CRT_${build}: ${LLVM_USE_CRT_${build}}. Valid options are one of: ${${MSVC_CRT}}")
-      endif (idx LESS 0)
-      message(STATUS "Using ${build_type} VC++ CRT: ${LLVM_USE_CRT_${build}}")
-    endif()
-    foreach(lang C CXX)
-      set_flag_in_var(CMAKE_${lang}_FLAGS_${build} MSVC_CRT_REGEX flag_string)
-    endforeach(lang)
-  endforeach(build_type)
-endmacro(choose_msvc_crt MSVC_CRT)
-
-
-# List of valid CRTs for MSVC
-set(MSVC_CRT
-  MD
-  MDd
-  MT
-  MTd)
-
-choose_msvc_crt(MSVC_CRT)
diff --git a/External/CMakeLists.txt b/External/CMakeLists.txt
index cbabd2e..46284fd 100644
--- a/External/CMakeLists.txt
+++ b/External/CMakeLists.txt
@@ -34,7 +34,7 @@
 # Suppress all warnings from external projects.
 set_property(DIRECTORY APPEND PROPERTY COMPILE_OPTIONS -w)
 
-if(BUILD_TESTING)
+if(GLSLANG_TESTS)
     if(TARGET gmock)
         message(STATUS "Google Mock already configured - use it")
     elseif(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/googletest)
@@ -71,7 +71,7 @@
 if(ENABLE_OPT AND NOT TARGET SPIRV-Tools-opt)
     if(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/spirv-tools)
         set(SPIRV_SKIP_TESTS ON CACHE BOOL "Skip building SPIRV-Tools tests")
-        add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/spirv-tools spirv-tools)
+        add_subdirectory(spirv-tools)
     endif()
 endif()
 
diff --git a/OGLCompilersDLL/CMakeLists.txt b/OGLCompilersDLL/CMakeLists.txt
deleted file mode 100644
index 71a5675..0000000
--- a/OGLCompilersDLL/CMakeLists.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-# Copyright (C) 2020 The Khronos Group 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 The Khronos Group 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.
-
-set(SOURCES InitializeDll.cpp InitializeDll.h)
-
-add_library(OGLCompiler STATIC ${SOURCES})
-set_property(TARGET OGLCompiler PROPERTY FOLDER glslang)
-set_property(TARGET OGLCompiler PROPERTY POSITION_INDEPENDENT_CODE ON)
-
-if(WIN32)
-    source_group("Source" FILES ${SOURCES})
-endif(WIN32)
-
-if(ENABLE_GLSLANG_INSTALL AND NOT BUILD_SHARED_LIBS)
-    install(TARGETS OGLCompiler EXPORT glslang-targets)
-
-    # Backward compatibility
-    file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/OGLCompilerTargets.cmake" "
-        message(WARNING \"Using `OGLCompilerTargets.cmake` is deprecated: use `find_package(glslang)` to find glslang CMake targets.\")
-
-        if (NOT TARGET glslang::OGLCompiler)
-            include(\"${CMAKE_INSTALL_FULL_LIBDIR}/cmake/${PROJECT_NAME}/glslang-targets.cmake\")
-        endif()
-
-        add_library(OGLCompiler ALIAS glslang::OGLCompiler)
-    ")
-    install(FILES "${CMAKE_CURRENT_BINARY_DIR}/OGLCompilerTargets.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
-
-endif()
diff --git a/OGLCompilersDLL/InitializeDll.h b/OGLCompilersDLL/InitializeDll.h
deleted file mode 100644
index b18e2ab..0000000
--- a/OGLCompilersDLL/InitializeDll.h
+++ /dev/null
@@ -1,49 +0,0 @@
-//
-// Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
-// 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 __INITIALIZEDLL_H
-#define __INITIALIZEDLL_H
-
-#include "../glslang/OSDependent/osinclude.h"
-
-namespace glslang {
-
-inline bool InitProcess()   { return true; } // DEPRECATED
-inline bool InitThread()    { return true; } // DEPRECATED
-inline bool DetachThread()  { return true; } // DEPRECATED
-inline bool DetachProcess() { return true; } // DEPRECATED
-
-} // end namespace glslang
-
-#endif // __INITIALIZEDLL_H
-
diff --git a/README-spirv-remap.txt b/README-spirv-remap.txt
index f3efee8..59938d8 100644
--- a/README-spirv-remap.txt
+++ b/README-spirv-remap.txt
@@ -28,10 +28,9 @@
 
 
 FEEDBACK
---------------------------------------------------------------------------------
-Report defects, enhancements requests, code improvements, etc to:
-   spvremapper@lunarg.com
-
+---------------------------------------------------------------------------------
+Report defects, enhancement requests, code improvements, etc by creating
+issues in the glslang repository at https://github.com/KhronosGroup/glslang
 
 COMMAND LINE USAGE:
 --------------------------------------------------------------------------------
diff --git a/README.md b/README.md
index ea1e867..e712cc3 100644
--- a/README.md
+++ b/README.md
@@ -1,20 +1,17 @@
-# News
-
-1. [As discussed in #3107](https://github.com/KhronosGroup/glslang/issues/3107), the default branch of this repository is now 'main'. This change should be transparent to repository users, since github rewrites many references to the old 'master' branch to 'main'. However, if you have a checked-out local clone, you may wish to take the following steps as recommended by github:
-
-```sh
-git branch -m master main
-git fetch origin
-git branch -u origin/main main
-git remote set-head origin -a
-```
-
-2. C++17 (all platforms) and Visual Studio 2019 (Windows) are now required. This change was driven by the external dependency on SPIRV-Tools.
-
 ![Continuous Integration](https://github.com/KhronosGroup/glslang/actions/workflows/continuous_integration.yml/badge.svg)
 ![Continuous Deployment](https://github.com/KhronosGroup/glslang/actions/workflows/continuous_deployment.yml/badge.svg)
 [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/KhronosGroup/glslang/badge)](https://securityscorecards.dev/viewer/?uri=github.com/KhronosGroup/glslang)
 
+# News
+
+1. Building glslang as a DLL or shared library is now possible and supported.
+
+2. The `GenericCodeGen`, `MachineIndependent`, `OSDependent`, and `SPIRV` libraries have been integrated into the main `glslang` library. The old separate libraries have replaced with empty stubs for a temporary compatibility period, and they will be removed entirely in the future.
+
+3. A new CMake `ENABLE_SPIRV` option has been added to control whether glslang is built with SPIR-V support. Its default value is `ON`.
+
+4. `OGLCompiler` and `HLSL` stub libraries have been fully removed from the build.
+
 # Glslang Components and Status
 
 There are several components:
@@ -122,47 +119,29 @@
 #### 2) Check-Out External Projects
 
 ```bash
-cd <the directory glslang was cloned to, "External" will be a subdirectory>
-git clone https://github.com/google/googletest.git External/googletest
-```
-
-TEMPORARY NOTICE: additionally perform the following to avoid a current
-breakage in googletest:
-
-```bash
-cd External/googletest
-git checkout 0c400f67fcf305869c5fb113dd296eca266c9725
-cd ../..
-```
-
-If you wish to assure that SPIR-V generated from HLSL is legal for Vulkan,
-wish to invoke -Os to reduce SPIR-V size from HLSL or GLSL, or wish to run the
-integrated test suite, install spirv-tools with this:
-
-```bash
 ./update_glslang_sources.py
 ```
 
 #### 3) Configure
 
-Assume the source directory is `$SOURCE_DIR` and the build directory is
-`$BUILD_DIR`. First ensure the build directory exists, then navigate to it:
+Assume the source directory is `$SOURCE_DIR` and the build directory is `$BUILD_DIR`.
+CMake will create the `$BUILD_DIR` for the user if it doesn't exist.
 
+First change your working directory:
 ```bash
-mkdir -p $BUILD_DIR
-cd $BUILD_DIR
+cd $SOURCE_DIR
 ```
 
 For building on Linux:
 
 ```bash
-cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="$(pwd)/install" $SOURCE_DIR
+cmake -B $BUILD_DIR -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="$(pwd)/install"
 # "Release" (for CMAKE_BUILD_TYPE) could also be "Debug" or "RelWithDebInfo"
 ```
 
 For building on Android:
 ```bash
-cmake $SOURCE_DIR -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$(pwd)/install" -DANDROID_ABI=arm64-v8a -DCMAKE_BUILD_TYPE=Release -DANDROID_STL=c++_static -DANDROID_PLATFORM=android-24 -DCMAKE_SYSTEM_NAME=Android -DANDROID_TOOLCHAIN=clang -DANDROID_ARM_MODE=arm -DCMAKE_MAKE_PROGRAM=$ANDROID_NDK_HOME/prebuilt/linux-x86_64/bin/make -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake
+cmake -B $BUILD_DIR -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$(pwd)/install" -DANDROID_ABI=arm64-v8a -DCMAKE_BUILD_TYPE=Release -DANDROID_STL=c++_static -DANDROID_PLATFORM=android-24 -DCMAKE_SYSTEM_NAME=Android -DANDROID_TOOLCHAIN=clang -DANDROID_ARM_MODE=arm -DCMAKE_MAKE_PROGRAM=$ANDROID_NDK_HOME/prebuilt/linux-x86_64/bin/make -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake
 # If on Windows will be -DCMAKE_MAKE_PROGRAM=%ANDROID_NDK_HOME%\prebuilt\windows-x86_64\bin\make.exe
 # -G is needed for building on Windows
 # -DANDROID_ABI can also be armeabi-v7a for 32 bit
@@ -171,12 +150,10 @@
 For building on Windows:
 
 ```bash
-cmake $SOURCE_DIR -DCMAKE_INSTALL_PREFIX="$(pwd)/install"
+cmake -B $BUILD_DIR -DCMAKE_INSTALL_PREFIX="$(pwd)/install"
 # The CMAKE_INSTALL_PREFIX part is for testing (explained later).
 ```
 
-The CMake GUI also works for Windows (version 3.4.1 tested).
-
 Also, consider using `git config --global core.fileMode false` (or with `--local`) on Windows
 to prevent the addition of execution permission on files.
 
@@ -251,17 +228,21 @@
   Bash-like environments:
   + [Instructions located here](https://emscripten.org/docs/getting_started/downloads.html#sdk-download-and-install)
 * Wrap cmake call: `emcmake cmake`
-* Set `-DBUILD_TESTING=OFF -DENABLE_OPT=OFF`.
+* Set `-DENABLE_OPT=OFF`.
 * Set `-DENABLE_HLSL=OFF` if HLSL is not needed.
 * For a standalone JS/WASM library, turn on `-DENABLE_GLSLANG_JS=ON`.
 * To get a fully minimized build, make sure to use `brotli` to compress the .js
   and .wasm files
+* Note that by default, Emscripten allocates a very small stack size, which may
+  cause stack overflows when compiling large shaders. Use the
+  [STACK_SIZE](https://emscripten.org/docs/tools_reference/settings_reference.html?highlight=environment#stack-size)
+  compiler setting to increase the stack size.
 
 Example:
 
 ```sh
 emcmake cmake -DCMAKE_BUILD_TYPE=Release -DENABLE_GLSLANG_JS=ON \
-    -DENABLE_HLSL=OFF -DBUILD_TESTING=OFF -DENABLE_OPT=OFF ..
+    -DENABLE_HLSL=OFF -DENABLE_OPT=OFF ..
 ```
 
 ## Building glslang - Using vcpkg
@@ -283,6 +264,9 @@
 runs unit tests and single-shader single-threaded integration tests, while
 the latter runs multiple-shader linking tests and multi-threaded tests.
 
+Tests may erroneously fail or pass if using `ALLOW_EXTERNAL_SPIRV_TOOLS` with
+any commit other than the one specified in `known_good.json`.
+
 ### Running tests
 
 The [`runtests` script](Test/runtests) requires compiled binaries to be
diff --git a/SPIRV/CInterface/spirv_c_interface.cpp b/SPIRV/CInterface/spirv_c_interface.cpp
index 5e7316e..631d19d 100644
--- a/SPIRV/CInterface/spirv_c_interface.cpp
+++ b/SPIRV/CInterface/spirv_c_interface.cpp
@@ -32,6 +32,8 @@
 
 #include "glslang/Include/glslang_c_interface.h"
 
+#include <cstring>
+#include "glslang/Public/ShaderLang.h"
 #include "SPIRV/GlslangToSpv.h"
 #include "SPIRV/Logger.h"
 #include "SPIRV/SpvTools.h"
@@ -83,16 +85,9 @@
 
 GLSLANG_EXPORT void glslang_program_SPIRV_generate(glslang_program_t* program, glslang_stage_t stage)
 {
-    glslang_spv_options_t spv_options;
-    spv_options.generate_debug_info = false;
-    spv_options.strip_debug_info = false;
-    spv_options.emit_nonsemantic_shader_debug_info = false;
-    spv_options.emit_nonsemantic_shader_debug_source = false;
+    glslang_spv_options_t spv_options {};
     spv_options.disable_optimizer = true;
-    spv_options.optimize_size = false;
-    spv_options.disassemble = false;
     spv_options.validate = true;
-    spv_options.compile_only = false;
 
     glslang_program_SPIRV_generate_with_options(program, stage, &spv_options);
 }
@@ -102,6 +97,8 @@
 
     const glslang::TIntermediate* intermediate = program->program->getIntermediate(c_shader_stage(stage));
 
+    program->spirv.clear();
+
     glslang::GlslangToSpv(*intermediate, program->spirv, &logger, reinterpret_cast<glslang::SpvOptions*>(spv_options));
 
     program->loggerMessages = logger.getAllMessages();
diff --git a/SPIRV/CMakeLists.txt b/SPIRV/CMakeLists.txt
index a80e74e..2004dd5 100644
--- a/SPIRV/CMakeLists.txt
+++ b/SPIRV/CMakeLists.txt
@@ -31,46 +31,58 @@
 # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 # POSSIBILITY OF SUCH DAMAGE.
 
-set(SOURCES
-    GlslangToSpv.cpp
-    InReadableOrder.cpp
-    Logger.cpp
-    SpvBuilder.cpp
-    SpvPostProcess.cpp
-    doc.cpp
-    SpvTools.cpp
-    disassemble.cpp
-    CInterface/spirv_c_interface.cpp)
+set(SPIRV_SOURCES
+    ${CMAKE_CURRENT_SOURCE_DIR}/GlslangToSpv.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/InReadableOrder.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/Logger.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/SpvBuilder.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/SpvPostProcess.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/doc.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/SpvTools.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/disassemble.cpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/CInterface/spirv_c_interface.cpp
+    PARENT_SCOPE)
 
 set(SPVREMAP_SOURCES
     SPVRemapper.cpp
     doc.cpp)
 
-set(HEADERS
-    bitutils.h
-    spirv.hpp
-    GLSL.std.450.h
-    GLSL.ext.EXT.h
-    GLSL.ext.KHR.h
-    GlslangToSpv.h
-    hex_float.h
-    Logger.h
-    SpvBuilder.h
-    spvIR.h
-    doc.h
-    SpvTools.h
-    disassemble.h
-    GLSL.ext.AMD.h
-    GLSL.ext.NV.h
-    GLSL.ext.ARM.h
-    NonSemanticDebugPrintf.h
-    NonSemanticShaderDebugInfo100.h)
+set(SPIRV_HEADERS
+    ${CMAKE_CURRENT_SOURCE_DIR}/bitutils.h
+    ${CMAKE_CURRENT_SOURCE_DIR}/spirv.hpp
+    ${CMAKE_CURRENT_SOURCE_DIR}/GLSL.std.450.h
+    ${CMAKE_CURRENT_SOURCE_DIR}/GLSL.ext.EXT.h
+    ${CMAKE_CURRENT_SOURCE_DIR}/GLSL.ext.KHR.h
+    ${CMAKE_CURRENT_SOURCE_DIR}/GlslangToSpv.h
+    ${CMAKE_CURRENT_SOURCE_DIR}/hex_float.h
+    ${CMAKE_CURRENT_SOURCE_DIR}/Logger.h
+    ${CMAKE_CURRENT_SOURCE_DIR}/SpvBuilder.h
+    ${CMAKE_CURRENT_SOURCE_DIR}/spvIR.h
+    ${CMAKE_CURRENT_SOURCE_DIR}/doc.h
+    ${CMAKE_CURRENT_SOURCE_DIR}/SpvTools.h
+    ${CMAKE_CURRENT_SOURCE_DIR}/disassemble.h
+    ${CMAKE_CURRENT_SOURCE_DIR}/GLSL.ext.AMD.h
+    ${CMAKE_CURRENT_SOURCE_DIR}/GLSL.ext.NV.h
+    ${CMAKE_CURRENT_SOURCE_DIR}/GLSL.ext.ARM.h
+    ${CMAKE_CURRENT_SOURCE_DIR}/GLSL.ext.QCOM.h
+    ${CMAKE_CURRENT_SOURCE_DIR}/NonSemanticDebugPrintf.h
+    ${CMAKE_CURRENT_SOURCE_DIR}/NonSemanticShaderDebugInfo100.h
+    PARENT_SCOPE)
 
 set(SPVREMAP_HEADERS
     SPVRemapper.h
     doc.h)
 
-add_library(SPIRV ${LIB_TYPE} ${SOURCES} ${HEADERS})
+set(PUBLIC_HEADERS
+    GlslangToSpv.h
+    disassemble.h
+    Logger.h
+    spirv.hpp
+    SPVRemapper.h
+    SpvTools.h)
+
+add_library(SPIRV ${LIB_TYPE} ${CMAKE_CURRENT_SOURCE_DIR}/../glslang/stub.cpp)
+add_library(glslang::SPIRV ALIAS SPIRV)
 set_target_properties(SPIRV PROPERTIES
     FOLDER glslang
     POSITION_INDEPENDENT_CODE ON
@@ -80,15 +92,15 @@
     $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>
     $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
 
-glslang_add_build_info_dependency(SPIRV)
-
 if (ENABLE_SPVREMAPPER)
     add_library(SPVRemapper ${LIB_TYPE} ${SPVREMAP_SOURCES} ${SPVREMAP_HEADERS})
+    add_library(glslang::SPVRemapper ALIAS SPVRemapper)
     set_target_properties(SPVRemapper PROPERTIES
         FOLDER glslang
         POSITION_INDEPENDENT_CODE ON
         VERSION   "${GLSLANG_VERSION}"
         SOVERSION "${GLSLANG_VERSION_MAJOR}")
+    glslang_only_export_explicit_symbols(SPVRemapper)
 endif()
 
 if(WIN32 AND BUILD_SHARED_LIBS)
@@ -99,16 +111,11 @@
 endif()
 
 if(ENABLE_OPT)
-    target_include_directories(SPIRV
-        PRIVATE ${spirv-tools_SOURCE_DIR}/include
-        PRIVATE ${spirv-tools_SOURCE_DIR}/source
-    )
-    target_link_libraries(SPIRV PRIVATE MachineIndependent SPIRV-Tools-opt)
+    target_link_libraries(SPIRV INTERFACE glslang PUBLIC SPIRV-Tools-opt)
     target_include_directories(SPIRV PUBLIC
-        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../External>
-        $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/External>)
+        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../External>)
 else()
-    target_link_libraries(SPIRV PRIVATE MachineIndependent)
+    target_link_libraries(SPIRV INTERFACE glslang)
 endif()
 
 if(WIN32)
@@ -116,37 +123,12 @@
     source_group("Source" FILES ${SPVREMAP_SOURCES} ${SPVREMAP_HEADERS})
 endif()
 
-if(ENABLE_GLSLANG_INSTALL)
+if(GLSLANG_ENABLE_INSTALL)
     if (ENABLE_SPVREMAPPER)
         install(TARGETS SPVRemapper EXPORT glslang-targets)
     endif()
 
     install(TARGETS SPIRV EXPORT glslang-targets)
 
-    # Backward compatibility
-    if (ENABLE_SPVREMAPPER)
-        file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/SPVRemapperTargets.cmake" "
-            message(WARNING \"Using `SPVRemapperTargets.cmake` is deprecated: use `find_package(glslang)` to find glslang CMake targets.\")
-
-            if (NOT TARGET glslang::SPVRemapper)
-                include(\"${CMAKE_INSTALL_FULL_LIBDIR}/cmake/${PROJECT_NAME}/glslang-targets.cmake\")
-            endif()
-
-            add_library(SPVRemapper ALIAS glslang::SPVRemapper)
-        ")
-        install(FILES "${CMAKE_CURRENT_BINARY_DIR}/SPVRemapperTargets.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
-    endif()
-
-    file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/SPIRVTargets.cmake" "
-        message(WARNING \"Using `SPIRVTargets.cmake` is deprecated: use `find_package(glslang)` to find glslang CMake targets.\")
-
-        if (NOT TARGET glslang::SPIRV)
-            include(\"${CMAKE_INSTALL_FULL_LIBDIR}/cmake/${PROJECT_NAME}/glslang-targets.cmake\")
-        endif()
-
-        add_library(SPIRV ALIAS glslang::SPIRV)
-    ")
-    install(FILES "${CMAKE_CURRENT_BINARY_DIR}/SPIRVTargets.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
-
-    install(FILES ${HEADERS} ${SPVREMAP_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/glslang/SPIRV/)
+    install(FILES ${PUBLIC_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/glslang/SPIRV/)
 endif()
diff --git a/SPIRV/GLSL.ext.EXT.h b/SPIRV/GLSL.ext.EXT.h
index caab279..07f3c30 100644
--- a/SPIRV/GLSL.ext.EXT.h
+++ b/SPIRV/GLSL.ext.EXT.h
@@ -41,5 +41,6 @@
 static const char* const E_SPV_EXT_shader_image_int64 = "SPV_EXT_shader_image_int64";
 static const char* const E_SPV_EXT_shader_tile_image = "SPV_EXT_shader_tile_image";
 static const char* const E_SPV_EXT_mesh_shader = "SPV_EXT_mesh_shader";
+static const char* const E_SPV_ARM_cooperative_matrix_layouts = "SPV_ARM_cooperative_matrix_layouts";
 
 #endif  // #ifndef GLSLextEXT_H
diff --git a/SPIRV/GLSL.ext.KHR.h b/SPIRV/GLSL.ext.KHR.h
index 121defa..38d3b97 100644
--- a/SPIRV/GLSL.ext.KHR.h
+++ b/SPIRV/GLSL.ext.KHR.h
@@ -1,5 +1,6 @@
 /*
 ** Copyright (c) 2014-2020 The Khronos Group Inc.
+** Copyright (C) 2022-2024 Arm Limited.
 ** Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
 **
 ** Permission is hereby granted, free of charge, to any person obtaining a copy
@@ -53,8 +54,14 @@
 static const char* const E_SPV_KHR_workgroup_memory_explicit_layout = "SPV_KHR_workgroup_memory_explicit_layout";
 static const char* const E_SPV_KHR_subgroup_uniform_control_flow = "SPV_KHR_subgroup_uniform_control_flow";
 static const char* const E_SPV_KHR_fragment_shader_barycentric = "SPV_KHR_fragment_shader_barycentric";
+static const char* const E_SPV_KHR_quad_control                = "SPV_KHR_quad_control";
 static const char* const E_SPV_AMD_shader_early_and_late_fragment_tests = "SPV_AMD_shader_early_and_late_fragment_tests";
 static const char* const E_SPV_KHR_ray_tracing_position_fetch   = "SPV_KHR_ray_tracing_position_fetch";
 static const char* const E_SPV_KHR_cooperative_matrix           = "SPV_KHR_cooperative_matrix";
+static const char* const E_SPV_KHR_maximal_reconvergence        = "SPV_KHR_maximal_reconvergence";
+static const char* const E_SPV_KHR_subgroup_rotate              = "SPV_KHR_subgroup_rotate";
+static const char* const E_SPV_KHR_expect_assume                = "SPV_KHR_expect_assume";
+static const char* const E_SPV_EXT_replicated_composites        = "SPV_EXT_replicated_composites";
+static const char* const E_SPV_KHR_relaxed_extended_instruction = "SPV_KHR_relaxed_extended_instruction";
 
 #endif  // #ifndef GLSLextKHR_H
diff --git a/SPIRV/GLSL.ext.NV.h b/SPIRV/GLSL.ext.NV.h
index 9889bc9..d449c45 100644
--- a/SPIRV/GLSL.ext.NV.h
+++ b/SPIRV/GLSL.ext.NV.h
@@ -87,4 +87,13 @@
 //SPV_NV_displacement_micromap
 const char* const E_SPV_NV_displacement_micromap = "SPV_NV_displacement_micromap";
 
+//SPV_NV_shader_atomic_fp16_vector
+const char* const E_SPV_NV_shader_atomic_fp16_vector = "SPV_NV_shader_atomic_fp16_vector";
+
+//SPV_NV_tensor_addressing
+const char* const E_SPV_NV_tensor_addressing = "SPV_NV_tensor_addressing";
+
+//SPV_NV_cooperative_matrix2
+const char* const E_SPV_NV_cooperative_matrix2 = "SPV_NV_cooperative_matrix2";
+
 #endif  // #ifndef GLSLextNV_H
diff --git a/SPIRV/GLSL.ext.QCOM.h b/SPIRV/GLSL.ext.QCOM.h
index f13bb69..b52990f 100644
--- a/SPIRV/GLSL.ext.QCOM.h
+++ b/SPIRV/GLSL.ext.QCOM.h
@@ -37,5 +37,7 @@
 
 //SPV_QCOM_image_processing
 const char* const E_SPV_QCOM_image_processing = "SPV_QCOM_image_processing";
+//SPV_QCOM_image_processing2
+const char* const E_SPV_QCOM_image_processing2 = "SPV_QCOM_image_processing2";
 
 #endif  // #ifndef GLSLextQCOM_H
diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp
old mode 100755
new mode 100644
index 576c680..382a690
--- a/SPIRV/GlslangToSpv.cpp
+++ b/SPIRV/GlslangToSpv.cpp
@@ -1,7 +1,7 @@
 //
 // Copyright (C) 2014-2016 LunarG, Inc.
 // Copyright (C) 2015-2020 Google, Inc.
-// Copyright (C) 2017 ARM Limited.
+// Copyright (C) 2017, 2022-2024 Arm Limited.
 // Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
 //
 // All rights reserved.
@@ -43,6 +43,7 @@
 #include "spirv.hpp"
 #include "GlslangToSpv.h"
 #include "SpvBuilder.h"
+#include "SpvTools.h"
 namespace spv {
     #include "GLSL.std.450.h"
     #include "GLSL.ext.KHR.h"
@@ -66,6 +67,7 @@
 #include <iomanip>
 #include <list>
 #include <map>
+#include <optional>
 #include <stack>
 #include <string>
 #include <vector>
@@ -164,13 +166,14 @@
     spv::Id convertGlslangToSpvType(const glslang::TType& type, bool forwardReferenceOnly = false);
     spv::Id convertGlslangToSpvType(const glslang::TType& type, glslang::TLayoutPacking, const glslang::TQualifier&,
         bool lastBufferBlockMember, bool forwardReferenceOnly = false);
+    void applySpirvDecorate(const glslang::TType& type, spv::Id id, std::optional<int> member);
     bool filterMember(const glslang::TType& member);
     spv::Id convertGlslangStructToSpvType(const glslang::TType&, const glslang::TTypeList* glslangStruct,
                                           glslang::TLayoutPacking, const glslang::TQualifier&);
     spv::LinkageType convertGlslangLinkageToSpv(glslang::TLinkType glslangLinkType);
     void decorateStructType(const glslang::TType&, const glslang::TTypeList* glslangStruct, glslang::TLayoutPacking,
                             const glslang::TQualifier&, spv::Id, const std::vector<spv::Id>& spvMembers);
-    spv::Id makeArraySizeId(const glslang::TArraySizes&, int dim, bool allowZero = false);
+    spv::Id makeArraySizeId(const glslang::TArraySizes&, int dim, bool allowZero = false, bool boolType = false);
     spv::Id accessChainLoad(const glslang::TType& type);
     void    accessChainStore(const glslang::TType& type, spv::Id rvalue);
     void multiTypeStore(const glslang::TType&, spv::Id rValue);
@@ -201,16 +204,19 @@
     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,
-                                 const spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags);
+                                 const spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags,
+                                 const glslang::TType &opType);
     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 createIntWidthConversion(glslang::TOperator op, spv::Id operand, int vectorSize, spv::Id destType);
+                             glslang::TBasicType resultBasicType, glslang::TBasicType operandBasicType);
+    spv::Id createIntWidthConversion(spv::Id operand, int vectorSize, spv::Id destType,
+                                     glslang::TBasicType resultBasicType, glslang::TBasicType operandBasicType);
     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,
-        const spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags);
+        const spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags,
+        const glslang::TType &opType);
     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,
@@ -222,7 +228,9 @@
     spv::Id createNoArgOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId);
     spv::Id getSymbolId(const glslang::TIntermSymbol* node);
     void addMeshNVDecoration(spv::Id id, int member, const glslang::TQualifier & qualifier);
+    bool hasQCOMImageProceessingDecoration(spv::Id id, spv::Decoration decor);
     void addImageProcessingQCOMDecoration(spv::Id id, spv::Decoration decor);
+    void addImageProcessing2QCOMDecoration(spv::Id id, bool isForGather);
     spv::Id createSpvConstant(const glslang::TIntermTyped&);
     spv::Id createSpvConstantFromConstUnionArray(const glslang::TType& type, const glslang::TConstUnionArray&,
         int& nextConst, bool specConstant);
@@ -277,6 +285,7 @@
     spv::Id taskPayloadID;
     // Used later for generating OpTraceKHR/OpExecuteCallableKHR/OpHitObjectRecordHit*/OpHitObjectGetShaderBindingTableData
     std::unordered_map<unsigned int, glslang::TIntermSymbol *> locationToSymbol[4];
+    std::unordered_map<spv::Id, std::vector<spv::Decoration> > idToQCOMDecorations;
 };
 
 //
@@ -392,11 +401,11 @@
     bool useVulkanMemoryModel)
 {
     if (!useVulkanMemoryModel) {
-        if (qualifier.isCoherent())
-            memory.push_back(spv::DecorationCoherent);
         if (qualifier.isVolatile()) {
             memory.push_back(spv::DecorationVolatile);
             memory.push_back(spv::DecorationCoherent);
+        } else if (qualifier.isCoherent()) {
+            memory.push_back(spv::DecorationCoherent);
         }
     }
     if (qualifier.isRestrict())
@@ -981,18 +990,6 @@
         return spv::BuiltInHitTriangleVertexPositionsKHR;
     case glslang::EbvInstanceCustomIndex:
         return spv::BuiltInInstanceCustomIndexKHR;
-    case glslang::EbvHitT:
-        {
-            // this is a GLSL alias of RayTmax
-            // in SPV_NV_ray_tracing it has a dedicated builtin
-            // but in SPV_KHR_ray_tracing it gets mapped to RayTmax
-            auto& extensions = glslangIntermediate->getRequestedExtensions();
-            if (extensions.find("GL_NV_ray_tracing") != extensions.end()) {
-                return spv::BuiltInHitTNV;
-            } else {
-                return spv::BuiltInRayTmaxKHR;
-            }
-        }
     case glslang::EbvHitKind:
         return spv::BuiltInHitKindKHR;
     case glslang::EbvObjectToWorld:
@@ -1160,6 +1157,7 @@
     case glslang::ElfR64i:
         builder.addExtension(spv::E_SPV_EXT_shader_image_int64);
         builder.addCapability(spv::CapabilityInt64ImageEXT);
+        break;
     default:
         break;
     }
@@ -1555,8 +1553,13 @@
             this->options.generateDebugInfo = true;
 
     if (this->options.generateDebugInfo) {
-        builder.setEmitOpLines();
-        builder.setSourceFile(glslangIntermediate->getSourceFile());
+        if (this->options.emitNonSemanticShaderDebugInfo) {
+            builder.setEmitNonSemanticShaderDebugInfo(this->options.emitNonSemanticShaderDebugSource);
+        }
+        else {
+            builder.setEmitSpirvDebugInfo();
+        }
+        builder.setDebugMainSourceFile(glslangIntermediate->getSourceFile());
 
         // Set the source shader's text. If for SPV version 1.0, include
         // a preamble in comments stating the OpModuleProcessed instructions.
@@ -1581,8 +1584,7 @@
             builder.addInclude(iItr->first, iItr->second);
     }
 
-    builder.setEmitNonSemanticShaderDebugInfo(this->options.emitNonSemanticShaderDebugInfo);
-    builder.setEmitNonSemanticShaderDebugSource(this->options.emitNonSemanticShaderDebugSource);
+    builder.setUseReplicatedComposites(glslangIntermediate->usingReplicatedComposites());
 
     stdBuiltins = builder.import("GLSL.std.450");
 
@@ -1632,6 +1634,24 @@
         builder.addExtension(spv::E_SPV_KHR_subgroup_uniform_control_flow);
         builder.addExecutionMode(shaderEntry, spv::ExecutionModeSubgroupUniformControlFlowKHR);
     }
+    if (glslangIntermediate->getMaximallyReconverges()) {
+        builder.addExtension(spv::E_SPV_KHR_maximal_reconvergence);
+        builder.addExecutionMode(shaderEntry, spv::ExecutionModeMaximallyReconvergesKHR);
+    }
+
+    if (glslangIntermediate->getQuadDerivMode())
+    {
+        builder.addCapability(spv::CapabilityQuadControlKHR);
+        builder.addExtension(spv::E_SPV_KHR_quad_control);
+        builder.addExecutionMode(shaderEntry, spv::ExecutionModeQuadDerivativesKHR);
+    }
+
+    if (glslangIntermediate->getReqFullQuadsMode())
+    {
+        builder.addCapability(spv::CapabilityQuadControlKHR);
+        builder.addExtension(spv::E_SPV_KHR_quad_control);
+        builder.addExecutionMode(shaderEntry, spv::ExecutionModeRequireFullQuadsKHR);
+    }
 
     unsigned int mode;
     switch (glslangIntermediate->getStage()) {
@@ -1980,8 +2000,9 @@
         }
 
         // finish off the entry-point SPV instruction by adding the Input/Output <id>
-        for (auto it = iOSet.cbegin(); it != iOSet.cend(); ++it)
-            entryPoint->addIdOperand(*it);
+        entryPoint->reserveOperands(iOSet.size());
+        for (auto id : iOSet)
+            entryPoint->addIdOperand(id);
     }
 
     // Add capabilities, extensions, remove unneeded decorations, etc.,
@@ -2016,7 +2037,13 @@
 {
     // We update the line information even though no code might be generated here
     // This is helpful to yield correct lines for control flow instructions
-    builder.setLine(symbol->getLoc().line, symbol->getLoc().getFilename());
+    if (!linkageOnly) {
+        builder.setDebugSourceLocation(symbol->getLoc().line, symbol->getLoc().getFilename());
+    }
+
+    if (symbol->getBasicType() == glslang::EbtFunction) {
+        return;
+    }
 
     SpecConstantOpModeGuard spec_constant_op_mode_setter(&builder);
     if (symbol->getType().isStruct())
@@ -2125,7 +2152,7 @@
 
 bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::TIntermBinary* node)
 {
-    builder.setLine(node->getLoc().line, node->getLoc().getFilename());
+    builder.setDebugSourceLocation(node->getLoc().line, node->getLoc().getFilename());
     if (node->getLeft()->getAsSymbolNode() != nullptr && node->getLeft()->getType().isStruct()) {
         glslangTypeToIdMap[node->getLeft()->getType().getStruct()] = node->getLeft()->getAsSymbolNode()->getId();
     }
@@ -2170,7 +2197,7 @@
             spv::Id rValue = accessChainLoad(node->getRight()->getType());
 
             // reset line number for assignment
-            builder.setLine(node->getLoc().line, node->getLoc().getFilename());
+            builder.setDebugSourceLocation(node->getLoc().line, node->getLoc().getFilename());
 
             if (node->getOp() != glslang::EOpAssign) {
                 // the left is also an r-value
@@ -2503,7 +2530,7 @@
 
 bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TIntermUnary* node)
 {
-    builder.setLine(node->getLoc().line, node->getLoc().getFilename());
+    builder.setDebugSourceLocation(node->getLoc().line, node->getLoc().getFilename());
 
     SpecConstantOpModeGuard spec_constant_op_mode_setter(&builder);
     if (node->getType().getQualifier().isSpecConstant())
@@ -2660,14 +2687,23 @@
                                   TranslateNonUniformDecoration(node->getType().getQualifier()) };
 
     // it could be a conversion
-    if (! result)
+    if (! result) {
         result = createConversion(node->getOp(), decorations, resultType(), operand,
-            node->getOperand()->getBasicType());
+            node->getType().getBasicType(), node->getOperand()->getBasicType());
+        if (result) {
+            if (node->getType().isCoopMatKHR() && node->getOperand()->getAsTyped()->getType().isCoopMatKHR() &&
+                !node->getAsTyped()->getType().sameCoopMatUse(node->getOperand()->getAsTyped()->getType())) {
+                // Conversions that change use need CapabilityCooperativeMatrixConversionsNV
+                builder.addCapability(spv::CapabilityCooperativeMatrixConversionsNV);
+                builder.addExtension(spv::E_SPV_NV_cooperative_matrix2);
+            }
+        }
+    }
 
     // if not, then possibly an operation
     if (! result)
         result = createUnaryOperation(node->getOp(), decorations, resultType(), operand,
-            node->getOperand()->getBasicType(), lvalueCoherentFlags);
+            node->getOperand()->getBasicType(), lvalueCoherentFlags, node->getType());
 
     // it could be attached to a SPIR-V intruction
     if (!result) {
@@ -2760,6 +2796,11 @@
 
         return false;
 
+    case glslang::EOpAssumeEXT:
+        builder.addCapability(spv::CapabilityExpectAssumeKHR);
+        builder.addExtension(spv::E_SPV_KHR_expect_assume);
+        builder.createNoResultOp(spv::OpAssumeTrueKHR, operand);
+        return false;
     case glslang::EOpEmitStreamVertex:
         builder.createNoResultOp(spv::OpEmitStreamVertex, operand);
         return false;
@@ -2779,6 +2820,18 @@
         builder.createNoResultOp(spv::OpHitObjectRecordEmptyNV, operand);
         return false;
 
+    case glslang::EOpCreateTensorLayoutNV:
+        result = builder.createOp(spv::OpCreateTensorLayoutNV, resultType(), std::vector<spv::Id>{});
+        builder.clearAccessChain();
+        builder.setAccessChainRValue(result);
+        return false;
+
+    case glslang::EOpCreateTensorViewNV:
+        result = builder.createOp(spv::OpCreateTensorViewNV, resultType(), std::vector<spv::Id>{});
+        builder.clearAccessChain();
+        builder.setAccessChainRValue(result);
+        return false;
+
     default:
         logger->missingFunctionality("unknown glslang unary");
         return true;  // pick up operand as placeholder result
@@ -2831,9 +2884,16 @@
                                                             // SPIR-V, for an out parameter
     std::vector<spv::Id> temporaryLvalues;                  // temporaries to pass, as proxies for complexLValues
 
-    auto resultType = [&invertedType, &node, this](){ return invertedType != spv::NoType ?
-        invertedType :
-        convertGlslangToSpvType(node->getType()); };
+    auto resultType = [&invertedType, &node, this](){
+        if (invertedType != spv::NoType) {
+            return invertedType;
+        } else {
+            auto ret = convertGlslangToSpvType(node->getType());
+            // convertGlslangToSpvType may clobber the debug location, reset it
+            builder.setDebugSourceLocation(node->getLoc().line, node->getLoc().getFilename());
+            return ret;
+        }
+    };
 
     // try texturing
     result = createImageTextureFunctionCall(node);
@@ -2890,12 +2950,14 @@
 
                 return false;
             } else {
-                if (node->getOp() == glslang::EOpScope)
-                    builder.enterScope(0);
+                if (node->getOp() == glslang::EOpScope) {
+                    auto loc = node->getLoc();
+                    builder.enterLexicalBlock(loc.line, loc.column);
+                }
             }
         } else {
             if (sequenceDepth > 1 && node->getOp() == glslang::EOpScope)
-                builder.leaveScope();
+                builder.leaveLexicalBlock();
             --sequenceDepth;
         }
 
@@ -2922,6 +2984,9 @@
     }
     case glslang::EOpFunction:
         if (visit == glslang::EvPreVisit) {
+            if (options.generateDebugInfo) {
+                builder.setDebugSourceLocation(node->getLoc().line, node->getLoc().getFilename());
+            }
             if (isShaderEntryPoint(node)) {
                 inEntryPoint = true;
                 builder.setBuildPoint(shaderEntry->getLastBlock());
@@ -2930,13 +2995,19 @@
             } else {
                 handleFunctionEntry(node);
             }
-            if (options.generateDebugInfo) {
+            if (options.generateDebugInfo && !options.emitNonSemanticShaderDebugInfo) {
                 const auto& loc = node->getLoc();
                 const char* sourceFileName = loc.getFilename();
-                spv::Id sourceFileId = sourceFileName ? builder.getStringId(sourceFileName) : builder.getSourceFile();
+                spv::Id sourceFileId = sourceFileName ? builder.getStringId(sourceFileName) : builder.getMainFileId();
                 currentFunction->setDebugLineInfo(sourceFileId, loc.line, loc.column);
             }
         } else {
+            if (options.generateDebugInfo) {
+                if (glslangIntermediate->getSource() == glslang::EShSourceGlsl && node->getSequence().size() > 1) {
+                    auto endLoc = node->getSequence()[1]->getAsAggregate()->getEndLoc();
+                    builder.setDebugSourceLocation(endLoc.line, endLoc.getFilename());
+                }
+            }
             if (inEntryPoint)
                 entryPointTerminated = true;
             builder.leaveFunction();
@@ -2951,7 +3022,7 @@
         return false;
     case glslang::EOpFunctionCall:
     {
-        builder.setLine(node->getLoc().line, node->getLoc().getFilename());
+        builder.setDebugSourceLocation(node->getLoc().line, node->getLoc().getFilename());
         if (node->isUserDefined())
             result = handleUserFunctionCall(node);
         if (result) {
@@ -3017,7 +3088,7 @@
     case glslang::EOpConstructF16Mat4x3:
     case glslang::EOpConstructF16Mat4x4:
         isMatrix = true;
-        // fall through
+        [[fallthrough]];
     case glslang::EOpConstructFloat:
     case glslang::EOpConstructVec2:
     case glslang::EOpConstructVec3:
@@ -3072,7 +3143,7 @@
     case glslang::EOpConstructCooperativeMatrixNV:
     case glslang::EOpConstructCooperativeMatrixKHR:
     {
-        builder.setLine(node->getLoc().line, node->getLoc().getFilename());
+        builder.setDebugSourceLocation(node->getLoc().line, node->getLoc().getFilename());
         std::vector<spv::Id> arguments;
         translateArguments(*node, arguments, lvalueCoherentFlags);
         spv::Id constructed;
@@ -3086,6 +3157,11 @@
                 constructed = arguments[0];
             } else
                 constructed = builder.createOp(spv::OpSampledImage, resultType(), arguments);
+        } else if (node->getOp() == glslang::EOpConstructCooperativeMatrixKHR &&
+                   node->getType().isCoopMatKHR() && node->getSequence()[0]->getAsTyped()->getType().isCoopMatKHR()) {
+            builder.addCapability(spv::CapabilityCooperativeMatrixConversionsNV);
+            builder.addExtension(spv::E_SPV_NV_cooperative_matrix2);
+            constructed = builder.createCooperativeMatrixConversion(resultType(), arguments[0]);
         } else if (node->getOp() == glslang::EOpConstructStruct ||
                  node->getOp() == glslang::EOpConstructCooperativeMatrixNV ||
                  node->getOp() == glslang::EOpConstructCooperativeMatrixKHR ||
@@ -3188,7 +3264,7 @@
 
     case glslang::EOpAtomicStore:
         noReturnValue = true;
-        // fallthrough
+        [[fallthrough]];
     case glslang::EOpAtomicLoad:
         atomic = true;
         break;
@@ -3218,6 +3294,12 @@
         binOp = node->getOp();
         break;
 
+    case glslang::EOpExpectEXT:
+        builder.addCapability(spv::CapabilityExpectAssumeKHR);
+        builder.addExtension(spv::E_SPV_KHR_expect_assume);
+        binOp = node->getOp();
+        break;
+
     case glslang::EOpIgnoreIntersectionNV:
     case glslang::EOpTerminateRayNV:
     case glslang::EOpTraceNV:
@@ -3264,6 +3346,11 @@
     case glslang::EOpCooperativeMatrixStore:
     case glslang::EOpCooperativeMatrixLoadNV:
     case glslang::EOpCooperativeMatrixStoreNV:
+    case glslang::EOpCooperativeMatrixLoadTensorNV:
+    case glslang::EOpCooperativeMatrixStoreTensorNV:
+    case glslang::EOpCooperativeMatrixReduceNV:
+    case glslang::EOpCooperativeMatrixPerElementOpNV:
+    case glslang::EOpCooperativeMatrixTransposeNV:
         noReturnValue = true;
         break;
     case glslang::EOpBeginInvocationInterlock:
@@ -3285,7 +3372,7 @@
     case glslang::EOpHitObjectRecordHitWithIndexMotionNV:
     case glslang::EOpReorderThreadNV:
         noReturnValue = true;
-        //Fallthrough
+        [[fallthrough]];
     case glslang::EOpHitObjectIsEmptyNV:
     case glslang::EOpHitObjectIsMissNV:
     case glslang::EOpHitObjectIsHitNV:
@@ -3328,6 +3415,22 @@
         builder.addExtension(spv::E_SPV_QCOM_image_processing);
         break;
 
+    case glslang::EOpImageBlockMatchWindowSSDQCOM:
+    case glslang::EOpImageBlockMatchWindowSADQCOM:
+        builder.addCapability(spv::CapabilityTextureBlockMatchQCOM);
+        builder.addExtension(spv::E_SPV_QCOM_image_processing);
+        builder.addCapability(spv::CapabilityTextureBlockMatch2QCOM);
+        builder.addExtension(spv::E_SPV_QCOM_image_processing2);
+        break;
+
+    case glslang::EOpImageBlockMatchGatherSSDQCOM:
+    case glslang::EOpImageBlockMatchGatherSADQCOM:
+        builder.addCapability(spv::CapabilityTextureBlockMatchQCOM);
+        builder.addExtension(spv::E_SPV_QCOM_image_processing);
+        builder.addCapability(spv::CapabilityTextureBlockMatch2QCOM);
+        builder.addExtension(spv::E_SPV_QCOM_image_processing2);
+        break;
+
     case glslang::EOpFetchMicroTriangleVertexPositionNV:
     case glslang::EOpFetchMicroTriangleVertexBarycentricNV:
         builder.addExtension(spv::E_SPV_NV_displacement_micromap);
@@ -3358,7 +3461,7 @@
         right->traverse(this);
         spv::Id rightId = accessChainLoad(right->getType());
 
-        builder.setLine(node->getLoc().line, node->getLoc().getFilename());
+        builder.setDebugSourceLocation(node->getLoc().line, node->getLoc().getFilename());
         OpDecorations decorations = { precision,
                                       TranslateNoContractionDecoration(node->getType().getQualifier()),
                                       TranslateNonUniformDecoration(node->getType().getQualifier()) };
@@ -3494,14 +3597,22 @@
             break;
         case glslang::EOpCooperativeMatrixLoad:
         case glslang::EOpCooperativeMatrixLoadNV:
+        case glslang::EOpCooperativeMatrixLoadTensorNV:
             if (arg == 0 || arg == 1)
                 lvalue = true;
             break;
         case glslang::EOpCooperativeMatrixStore:
         case glslang::EOpCooperativeMatrixStoreNV:
+        case glslang::EOpCooperativeMatrixStoreTensorNV:
             if (arg == 1)
                 lvalue = true;
             break;
+        case glslang::EOpCooperativeMatrixReduceNV:
+        case glslang::EOpCooperativeMatrixPerElementOpNV:
+        case glslang::EOpCooperativeMatrixTransposeNV:
+            if (arg == 0)
+                lvalue = true;
+            break;
         case glslang::EOpSpirvInst:
             if (glslangOperands[arg]->getAsTyped()->getQualifier().isSpirvByReference())
                 lvalue = true;
@@ -3527,7 +3638,9 @@
         if (node->getOp() == glslang::EOpCooperativeMatrixLoad ||
             node->getOp() == glslang::EOpCooperativeMatrixStore ||
             node->getOp() == glslang::EOpCooperativeMatrixLoadNV ||
-            node->getOp() == glslang::EOpCooperativeMatrixStoreNV) {
+            node->getOp() == glslang::EOpCooperativeMatrixStoreNV ||
+            node->getOp() == glslang::EOpCooperativeMatrixLoadTensorNV ||
+            node->getOp() == glslang::EOpCooperativeMatrixStoreTensorNV) {
 
             if (arg == 1) {
                 // fold "element" parameter into the access chain
@@ -3549,10 +3662,12 @@
 
                 int memoryAccess = TranslateMemoryAccess(coherentFlags);
                 if (node->getOp() == glslang::EOpCooperativeMatrixLoad ||
-                    node->getOp() == glslang::EOpCooperativeMatrixLoadNV)
+                    node->getOp() == glslang::EOpCooperativeMatrixLoadNV ||
+                    node->getOp() == glslang::EOpCooperativeMatrixLoadTensorNV)
                     memoryAccess &= ~spv::MemoryAccessMakePointerAvailableKHRMask;
                 if (node->getOp() == glslang::EOpCooperativeMatrixStore ||
-                    node->getOp() == glslang::EOpCooperativeMatrixStoreNV)
+                    node->getOp() == glslang::EOpCooperativeMatrixStoreNV ||
+                    node->getOp() == glslang::EOpCooperativeMatrixStoreTensorNV)
                     memoryAccess &= ~spv::MemoryAccessMakePointerVisibleKHRMask;
                 if (builder.getStorageClass(builder.getAccessChain().base) ==
                     spv::StorageClassPhysicalStorageBufferEXT) {
@@ -3593,7 +3708,7 @@
             lvalueCoherentFlags = builder.getAccessChain().coherentFlags;
             lvalueCoherentFlags |= TranslateCoherent(glslangOperands[arg]->getAsTyped()->getType());
         } else {
-            builder.setLine(node->getLoc().line, node->getLoc().getFilename());
+            builder.setDebugSourceLocation(node->getLoc().line, node->getLoc().getFilename());
              glslang::TOperator glslangOp = node->getOp();
              if (arg == 1 &&
                 (glslangOp == glslang::EOpRayQueryGetIntersectionType ||
@@ -3639,20 +3754,67 @@
              } else if (glslangOperands[arg]->getAsTyped()->getQualifier().isSpirvLiteral()) {
                  // Will be translated to a literal value, make a placeholder here
                  operands.push_back(spv::NoResult);
+             } else if (glslangOperands[arg]->getAsTyped()->getBasicType() == glslang::EbtFunction) {
+                 spv::Function* function = functionMap[glslangOperands[arg]->getAsSymbolNode()->getMangledName().c_str()];
+                 assert(function);
+                 operands.push_back(function->getId());
              } else  {
                 operands.push_back(accessChainLoad(glslangOperands[arg]->getAsTyped()->getType()));
              }
         }
     }
 
-    builder.setLine(node->getLoc().line, node->getLoc().getFilename());
-    if (node->getOp() == glslang::EOpCooperativeMatrixLoad ||
-        node->getOp() == glslang::EOpCooperativeMatrixLoadNV) {
+    builder.setDebugSourceLocation(node->getLoc().line, node->getLoc().getFilename());
+    if (node->getOp() == glslang::EOpCooperativeMatrixLoadTensorNV) {
+        std::vector<spv::IdImmediate> idImmOps;
+
+        builder.addCapability(spv::CapabilityCooperativeMatrixTensorAddressingNV);
+        builder.addExtension(spv::E_SPV_NV_cooperative_matrix2);
+
+        spv::Id object = builder.createLoad(operands[0], spv::NoPrecision);
+
+        idImmOps.push_back(spv::IdImmediate(true, operands[1])); // Pointer
+        idImmOps.push_back(spv::IdImmediate(true, object)); // Object
+        idImmOps.push_back(spv::IdImmediate(true, operands[2])); // tensorLayout
+
+        idImmOps.insert(idImmOps.end(), memoryAccessOperands.begin(), memoryAccessOperands.end()); // memoryaccess
+
+        // initialize tensor operands to zero, then OR in flags based on the operands
+        size_t tensorOpIdx = idImmOps.size();
+        idImmOps.push_back(spv::IdImmediate(false, 0));
+
+        for (uint32_t i = 3; i < operands.size(); ++i) {
+            if (builder.isTensorView(operands[i])) {
+                idImmOps[tensorOpIdx].word |= spv::TensorAddressingOperandsTensorViewMask;
+            } else {
+                // must be the decode func
+                idImmOps[tensorOpIdx].word |= spv::TensorAddressingOperandsDecodeFuncMask;
+                builder.addCapability(spv::CapabilityCooperativeMatrixBlockLoadsNV);
+            }
+            idImmOps.push_back(spv::IdImmediate(true, operands[i])); // tensorView or decodeFunc
+        }
+
+        // get the pointee type
+        spv::Id typeId = builder.getContainedTypeId(builder.getTypeId(operands[0]));
+        assert(builder.isCooperativeMatrixType(typeId));
+        // do the op
+        spv::Id result = builder.createOp(spv::OpCooperativeMatrixLoadTensorNV, typeId, idImmOps);
+        // store the result to the pointer (out param 'm')
+        builder.createStore(result, operands[0]);
+        result = 0;
+    } else if (node->getOp() == glslang::EOpCooperativeMatrixLoad ||
+               node->getOp() == glslang::EOpCooperativeMatrixLoadNV) {
         std::vector<spv::IdImmediate> idImmOps;
 
         idImmOps.push_back(spv::IdImmediate(true, operands[1])); // buf
         if (node->getOp() == glslang::EOpCooperativeMatrixLoad) {
             idImmOps.push_back(spv::IdImmediate(true, operands[3])); // matrixLayout
+            auto layout = builder.getConstantScalar(operands[3]);
+            if (layout == spv::CooperativeMatrixLayoutRowBlockedInterleavedARM ||
+                layout == spv::CooperativeMatrixLayoutColumnBlockedInterleavedARM) {
+                builder.addExtension(spv::E_SPV_ARM_cooperative_matrix_layouts);
+                builder.addCapability(spv::CapabilityCooperativeMatrixLayoutsARM);
+            }
             idImmOps.push_back(spv::IdImmediate(true, operands[2])); // stride
         } else {
             idImmOps.push_back(spv::IdImmediate(true, operands[2])); // stride
@@ -3669,6 +3831,28 @@
         // store the result to the pointer (out param 'm')
         builder.createStore(result, operands[0]);
         result = 0;
+    } else if (node->getOp() == glslang::EOpCooperativeMatrixStoreTensorNV) {
+        std::vector<spv::IdImmediate> idImmOps;
+
+        idImmOps.push_back(spv::IdImmediate(true, operands[1])); // buf
+        idImmOps.push_back(spv::IdImmediate(true, operands[0])); // object
+
+        builder.addCapability(spv::CapabilityCooperativeMatrixTensorAddressingNV);
+        builder.addExtension(spv::E_SPV_NV_cooperative_matrix2);
+
+        idImmOps.push_back(spv::IdImmediate(true, operands[2])); // tensorLayout
+
+        idImmOps.insert(idImmOps.end(), memoryAccessOperands.begin(), memoryAccessOperands.end()); // memoryaccess
+
+        if (operands.size() > 3) {
+            idImmOps.push_back(spv::IdImmediate(false, spv::TensorAddressingOperandsTensorViewMask));
+            idImmOps.push_back(spv::IdImmediate(true, operands[3])); // tensorView
+        } else {
+            idImmOps.push_back(spv::IdImmediate(false, 0));
+        }
+
+        builder.createNoResultOp(spv::OpCooperativeMatrixStoreTensorNV, idImmOps);
+        result = 0;
     } else if (node->getOp() == glslang::EOpCooperativeMatrixStore ||
                node->getOp() == glslang::EOpCooperativeMatrixStoreNV) {
         std::vector<spv::IdImmediate> idImmOps;
@@ -3677,6 +3861,12 @@
         idImmOps.push_back(spv::IdImmediate(true, operands[0])); // object
         if (node->getOp() == glslang::EOpCooperativeMatrixStore) {
             idImmOps.push_back(spv::IdImmediate(true, operands[3])); // matrixLayout
+            auto layout = builder.getConstantScalar(operands[3]);
+            if (layout == spv::CooperativeMatrixLayoutRowBlockedInterleavedARM ||
+                layout == spv::CooperativeMatrixLayoutColumnBlockedInterleavedARM) {
+                builder.addExtension(spv::E_SPV_ARM_cooperative_matrix_layouts);
+                builder.addCapability(spv::CapabilityCooperativeMatrixLayoutsARM);
+            }
             idImmOps.push_back(spv::IdImmediate(true, operands[2])); // stride
         } else {
             idImmOps.push_back(spv::IdImmediate(true, operands[2])); // stride
@@ -3715,13 +3905,13 @@
 
         // Determine Cooperative Matrix Operands bits from the signedness of the types.
         if (isTypeSignedInt(glslangOperands[0]->getAsTyped()->getBasicType()))
-            matrixOperands |= spv::CooperativeMatrixOperandsMatrixASignedComponentsMask;
+            matrixOperands |= spv::CooperativeMatrixOperandsMatrixASignedComponentsKHRMask;
         if (isTypeSignedInt(glslangOperands[1]->getAsTyped()->getBasicType()))
-            matrixOperands |= spv::CooperativeMatrixOperandsMatrixBSignedComponentsMask;
+            matrixOperands |= spv::CooperativeMatrixOperandsMatrixBSignedComponentsKHRMask;
         if (isTypeSignedInt(glslangOperands[2]->getAsTyped()->getBasicType()))
-            matrixOperands |= spv::CooperativeMatrixOperandsMatrixCSignedComponentsMask;
+            matrixOperands |= spv::CooperativeMatrixOperandsMatrixCSignedComponentsKHRMask;
         if (isTypeSignedInt(node->getBasicType()))
-            matrixOperands |= spv::CooperativeMatrixOperandsMatrixResultSignedComponentsMask;
+            matrixOperands |= spv::CooperativeMatrixOperandsMatrixResultSignedComponentsKHRMask;
 
         std::vector<spv::IdImmediate> idImmOps;
         idImmOps.push_back(spv::IdImmediate(true, operands[0]));
@@ -3731,12 +3921,49 @@
             idImmOps.push_back(spv::IdImmediate(false, matrixOperands));
 
         result = builder.createOp(spv::OpCooperativeMatrixMulAddKHR, resultType(), idImmOps);
+    } else if (node->getOp() == glslang::EOpCooperativeMatrixReduceNV) {
+        builder.addCapability(spv::CapabilityCooperativeMatrixReductionsNV);
+        builder.addExtension(spv::E_SPV_NV_cooperative_matrix2);
+
+        spv::Op opcode = spv::OpCooperativeMatrixReduceNV;
+        unsigned mask = glslangOperands[2]->getAsConstantUnion()->getConstArray()[0].getUConst();
+
+        spv::Id typeId = builder.getContainedTypeId(builder.getTypeId(operands[0]));
+        assert(builder.isCooperativeMatrixType(typeId));
+
+        result = builder.createCooperativeMatrixReduce(opcode, typeId, operands[1], mask, operands[3]);
+        // store the result to the pointer (out param 'm')
+        builder.createStore(result, operands[0]);
+        result = 0;
+    } else if (node->getOp() == glslang::EOpCooperativeMatrixPerElementOpNV) {
+        builder.addCapability(spv::CapabilityCooperativeMatrixPerElementOperationsNV);
+        builder.addExtension(spv::E_SPV_NV_cooperative_matrix2);
+
+        spv::Id typeId = builder.getContainedTypeId(builder.getTypeId(operands[0]));
+        assert(builder.isCooperativeMatrixType(typeId));
+
+        result = builder.createCooperativeMatrixPerElementOp(typeId, operands);
+        // store the result to the pointer
+        builder.createStore(result, operands[0]);
+        result = 0;
+    } else if (node->getOp() == glslang::EOpCooperativeMatrixTransposeNV) {
+
+        builder.addCapability(spv::CapabilityCooperativeMatrixConversionsNV);
+        builder.addExtension(spv::E_SPV_NV_cooperative_matrix2);
+
+        spv::Id typeId = builder.getContainedTypeId(builder.getTypeId(operands[0]));
+        assert(builder.isCooperativeMatrixType(typeId));
+
+        result = builder.createUnaryOp(spv::OpCooperativeMatrixTransposeNV, typeId, operands[1]);
+        // store the result to the pointer
+        builder.createStore(result, operands[0]);
+        result = 0;
     } else if (atomic) {
         // Handle all atomics
         glslang::TBasicType typeProxy = (node->getOp() == glslang::EOpAtomicStore)
             ? node->getSequence()[0]->getAsTyped()->getBasicType() : node->getBasicType();
         result = createAtomicOperation(node->getOp(), precision, resultType(), operands, typeProxy,
-            lvalueCoherentFlags);
+            lvalueCoherentFlags, node->getType());
     } else if (node->getOp() == glslang::EOpSpirvInst) {
         const auto& spirvInst = node->getSpirvInstruction();
         if (spirvInst.set == "") {
@@ -3783,7 +4010,7 @@
                 result = createUnaryOperation(
                     node->getOp(), decorations,
                     resultType(), operands.front(),
-                    glslangOperands[0]->getAsTyped()->getBasicType(), lvalueCoherentFlags);
+                    glslangOperands[0]->getAsTyped()->getBasicType(), lvalueCoherentFlags, node->getType());
             }
             break;
         default:
@@ -3885,7 +4112,7 @@
         node->getFalseBlock()->traverse(this);
         spv::Id falseValue = accessChainLoad(node->getFalseBlock()->getAsTyped()->getType());
 
-        builder.setLine(node->getLoc().line, node->getLoc().getFilename());
+        builder.setDebugSourceLocation(node->getLoc().line, node->getLoc().getFilename());
 
         // done if void
         if (node->getBasicType() == glslang::EbtVoid)
@@ -4056,7 +4283,7 @@
         if (codeSegments[s])
             codeSegments[s]->traverse(this);
         else
-            builder.addSwitchBreak();
+            builder.addSwitchBreak(true);
     }
     breakForLoop.pop();
 
@@ -4080,7 +4307,7 @@
 bool TGlslangToSpvTraverser::visitLoop(glslang::TVisit /* visit */, glslang::TIntermLoop* node)
 {
     auto blocks = builder.makeNewLoop();
-    builder.createBranch(&blocks.head);
+    builder.createBranch(true, &blocks.head);
 
     // Loop control:
     std::vector<unsigned int> operands;
@@ -4093,11 +4320,11 @@
     // instructions in it, since the body/test may have arbitrary instructions,
     // including merges of its own.
     builder.setBuildPoint(&blocks.head);
-    builder.setLine(node->getLoc().line, node->getLoc().getFilename());
+    builder.setDebugSourceLocation(node->getLoc().line, node->getLoc().getFilename());
     builder.createLoopMerge(&blocks.merge, &blocks.continue_target, control, operands);
     if (node->testFirst() && node->getTest()) {
         spv::Block& test = builder.makeNewBlock();
-        builder.createBranch(&test);
+        builder.createBranch(true, &test);
 
         builder.setBuildPoint(&test);
         node->getTest()->traverse(this);
@@ -4108,22 +4335,22 @@
         breakForLoop.push(true);
         if (node->getBody())
             node->getBody()->traverse(this);
-        builder.createBranch(&blocks.continue_target);
+        builder.createBranch(true, &blocks.continue_target);
         breakForLoop.pop();
 
         builder.setBuildPoint(&blocks.continue_target);
         if (node->getTerminal())
             node->getTerminal()->traverse(this);
-        builder.createBranch(&blocks.head);
+        builder.createBranch(true, &blocks.head);
     } else {
-        builder.setLine(node->getLoc().line, node->getLoc().getFilename());
-        builder.createBranch(&blocks.body);
+        builder.setDebugSourceLocation(node->getLoc().line, node->getLoc().getFilename());
+        builder.createBranch(true, &blocks.body);
 
         breakForLoop.push(true);
         builder.setBuildPoint(&blocks.body);
         if (node->getBody())
             node->getBody()->traverse(this);
-        builder.createBranch(&blocks.continue_target);
+        builder.createBranch(true, &blocks.continue_target);
         breakForLoop.pop();
 
         builder.setBuildPoint(&blocks.continue_target);
@@ -4138,7 +4365,7 @@
             // TODO: unless there was a break/return/discard instruction
             // somewhere in the body, this is an infinite loop, so we should
             // issue a warning.
-            builder.createBranch(&blocks.head);
+            builder.createBranch(true, &blocks.head);
         }
     }
     builder.setBuildPoint(&blocks.merge);
@@ -4151,7 +4378,7 @@
     if (node->getExpression())
         node->getExpression()->traverse(this);
 
-    builder.setLine(node->getLoc().line, node->getLoc().getFilename());
+    builder.setDebugSourceLocation(node->getLoc().line, node->getLoc().getFilename());
 
     switch (node->getFlowOp()) {
     case glslang::EOpKill:
@@ -4174,7 +4401,7 @@
         if (breakForLoop.top())
             builder.createLoopExit();
         else
-            builder.addSwitchBreak();
+            builder.addSwitchBreak(false);
         break;
     case glslang::EOpContinue:
         builder.createLoopContinue();
@@ -4308,7 +4535,14 @@
         initializer = builder.makeNullConstant(spvType);
     }
 
-    return builder.createVariable(spv::NoPrecision, storageClass, spvType, name, initializer, false);
+    spv::Id var = builder.createVariable(spv::NoPrecision, storageClass, spvType, name, initializer, false);
+    std::vector<spv::Decoration> topLevelDecorations;
+    glslang::TQualifier typeQualifier = node->getType().getQualifier();
+    TranslateMemoryDecoration(typeQualifier, topLevelDecorations, glslangIntermediate->usingVulkanMemoryModel());
+    for (auto deco : topLevelDecorations) {
+        builder.addDecoration(var, deco);
+    }
+    return var;
 }
 
 // Return type Id of the sampled type.
@@ -4404,7 +4638,7 @@
         if (explicitLayout != glslang::ElpNone)
             spvType = builder.makeUintType(32);
         else
-            spvType = builder.makeBoolType(false);
+            spvType = builder.makeBoolType();
         break;
     case glslang::EbtInt:
         spvType = builder.makeIntType(32);
@@ -4605,6 +4839,32 @@
 
         break;
     }
+    case glslang::EbtTensorLayoutNV:
+    {
+        builder.addCapability(spv::CapabilityTensorAddressingNV);
+        builder.addExtension(spv::E_SPV_NV_tensor_addressing);
+
+        std::vector<spv::IdImmediate> operands;
+        for (uint32_t i = 0; i < 2; ++i) {
+            operands.push_back({true, makeArraySizeId(*type.getTypeParameters()->arraySizes, i, true)});
+        }
+        spvType = builder.makeGenericType(spv::OpTypeTensorLayoutNV, operands);
+        break;
+    }
+    case glslang::EbtTensorViewNV:
+    {
+        builder.addCapability(spv::CapabilityTensorAddressingNV);
+        builder.addExtension(spv::E_SPV_NV_tensor_addressing);
+
+        uint32_t dim = type.getTypeParameters()->arraySizes->getDimSize(0);
+        assert(dim >= 1 && dim <= 5);
+        std::vector<spv::IdImmediate> operands;
+        for (uint32_t i = 0; i < dim + 2; ++i) {
+            operands.push_back({true, makeArraySizeId(*type.getTypeParameters()->arraySizes, i, true, i==1)});
+        }
+        spvType = builder.makeGenericType(spv::OpTypeTensorViewNV, operands);
+        break;
+    }
     default:
         assert(0);
         break;
@@ -4705,6 +4965,64 @@
     return spvType;
 }
 
+// Apply SPIR-V decorations to the SPIR-V object (provided by SPIR-V ID). If member index is provided, the
+// decorations are applied to this member.
+void TGlslangToSpvTraverser::applySpirvDecorate(const glslang::TType& type, spv::Id id, std::optional<int> member)
+{
+    assert(type.getQualifier().hasSpirvDecorate());
+
+    const glslang::TSpirvDecorate& spirvDecorate = type.getQualifier().getSpirvDecorate();
+
+    // Add spirv_decorate
+    for (auto& decorate : spirvDecorate.decorates) {
+        if (!decorate.second.empty()) {
+            std::vector<unsigned> literals;
+            TranslateLiterals(decorate.second, literals);
+            if (member.has_value())
+                builder.addMemberDecoration(id, *member, static_cast<spv::Decoration>(decorate.first), literals);
+            else
+                builder.addDecoration(id, static_cast<spv::Decoration>(decorate.first), literals);
+        } else {
+            if (member.has_value())
+                builder.addMemberDecoration(id, *member, static_cast<spv::Decoration>(decorate.first));
+            else
+                builder.addDecoration(id, static_cast<spv::Decoration>(decorate.first));
+        }
+    }
+
+    // Add spirv_decorate_id
+    if (member.has_value()) {
+        // spirv_decorate_id not applied to members
+        assert(spirvDecorate.decorateIds.empty());
+    } else {
+        for (auto& decorateId : spirvDecorate.decorateIds) {
+            std::vector<spv::Id> operandIds;
+            assert(!decorateId.second.empty());
+            for (auto extraOperand : decorateId.second) {
+                if (extraOperand->getQualifier().isFrontEndConstant())
+                    operandIds.push_back(createSpvConstant(*extraOperand));
+                else
+                    operandIds.push_back(getSymbolId(extraOperand->getAsSymbolNode()));
+            }
+            builder.addDecorationId(id, static_cast<spv::Decoration>(decorateId.first), operandIds);
+        }
+    }
+
+    // Add spirv_decorate_string
+    for (auto& decorateString : spirvDecorate.decorateStrings) {
+        std::vector<const char*> strings;
+        assert(!decorateString.second.empty());
+        for (auto extraOperand : decorateString.second) {
+            const char* string = extraOperand->getConstArray()[0].getSConst()->c_str();
+            strings.push_back(string);
+        }
+        if (member.has_value())
+            builder.addMemberDecoration(id, *member, static_cast<spv::Decoration>(decorateString.first), strings);
+        else
+            builder.addDecoration(id, static_cast<spv::Decoration>(decorateString.first), strings);
+    }
+}
+
 // TODO: this functionality should exist at a higher level, in creating the AST
 //
 // Identify interface members that don't have their required extension turned on.
@@ -4739,7 +5057,7 @@
     }
 
     return false;
-};
+}
 
 // Do full recursive conversion of a glslang structure (or block) type to a SPIR-V Id.
 // explicitLayout can be kept the same throughout the hierarchical recursive walk.
@@ -4943,37 +5261,9 @@
             builder.addExtension(spv::E_SPV_NV_geometry_shader_passthrough);
         }
 
-        //
-        // Add SPIR-V decorations for members (GL_EXT_spirv_intrinsics)
-        //
-        if (glslangMember.getQualifier().hasSprivDecorate()) {
-            const glslang::TSpirvDecorate& spirvDecorate = glslangMember.getQualifier().getSpirvDecorate();
-
-            // Add spirv_decorate
-            for (auto& decorate : spirvDecorate.decorates) {
-                if (!decorate.second.empty()) {
-                    std::vector<unsigned> literals;
-                    TranslateLiterals(decorate.second, literals);
-                    builder.addMemberDecoration(spvType, member, static_cast<spv::Decoration>(decorate.first), literals);
-                }
-                else
-                    builder.addMemberDecoration(spvType, member, static_cast<spv::Decoration>(decorate.first));
-            }
-
-            // spirv_decorate_id not applied to members
-            assert(spirvDecorate.decorateIds.empty());
-
-            // Add spirv_decorate_string
-            for (auto& decorateString : spirvDecorate.decorateStrings) {
-                std::vector<const char*> strings;
-                assert(!decorateString.second.empty());
-                for (auto extraOperand : decorateString.second) {
-                    const char* string = extraOperand->getConstArray()[0].getSConst()->c_str();
-                    strings.push_back(string);
-                }
-                builder.addDecoration(spvType, static_cast<spv::Decoration>(decorateString.first), strings);
-            }
-        }
+        // Add SPIR-V decorations (GL_EXT_spirv_intrinsics)
+        if (glslangMember.getQualifier().hasSpirvDecorate())
+            applySpirvDecorate(glslangMember, spvType, member);
     }
 
     // Decorate the structure
@@ -4997,7 +5287,7 @@
 // This is not quite trivial, because of specialization constants.
 // Sometimes, a raw constant is turned into an Id, and sometimes
 // a specialization constant expression is.
-spv::Id TGlslangToSpvTraverser::makeArraySizeId(const glslang::TArraySizes& arraySizes, int dim, bool allowZero)
+spv::Id TGlslangToSpvTraverser::makeArraySizeId(const glslang::TArraySizes& arraySizes, int dim, bool allowZero, bool boolType)
 {
     // First, see if this is sized with a node, meaning a specialization constant:
     glslang::TIntermTyped* specNode = arraySizes.getDimNode(dim);
@@ -5015,7 +5305,11 @@
     if (!allowZero)
         assert(size > 0);
 
-    return builder.makeUintConstant(size);
+    if (boolType) {
+        return builder.makeBoolConstant(size);
+    } else {
+        return builder.makeUintConstant(size);
+    }
 }
 
 // Wrap the builder's accessChainLoad to:
@@ -5289,17 +5583,37 @@
     int memberAlignment = glslangIntermediate->getMemberAlignment(memberType, memberSize, dummyStride, explicitLayout,
         matrixLayout == glslang::ElmRowMajor);
 
+    bool isVectorLike = memberType.isVector();
+    if (memberType.isMatrix()) {
+        if (matrixLayout == glslang::ElmRowMajor)
+            isVectorLike = memberType.getMatrixRows() == 1;
+        else
+            isVectorLike = memberType.getMatrixCols() == 1;
+    }
+
     // Adjust alignment for HLSL rules
     // TODO: make this consistent in early phases of code:
     //       adjusting this late means inconsistencies with earlier code, which for reflection is an issue
     // Until reflection is brought in sync with these adjustments, don't apply to $Global,
     // which is the most likely to rely on reflection, and least likely to rely implicit layouts
     if (glslangIntermediate->usingHlslOffsets() &&
-        ! memberType.isArray() && memberType.isVector() && structType.getTypeName().compare("$Global") != 0) {
-        int dummySize;
-        int componentAlignment = glslangIntermediate->getBaseAlignmentScalar(memberType, dummySize);
-        if (componentAlignment <= 4)
+        ! memberType.isStruct() && structType.getTypeName().compare("$Global") != 0) {
+        int componentSize;
+        int componentAlignment = glslangIntermediate->getBaseAlignmentScalar(memberType, componentSize);
+        if (! memberType.isArray() && isVectorLike && componentAlignment <= 4)
             memberAlignment = componentAlignment;
+
+        // Don't add unnecessary padding after this member
+        // (undo std140 bumping size to a mutliple of vec4)
+        if (explicitLayout == glslang::ElpStd140) {
+            if (memberType.isMatrix()) {
+                if (matrixLayout == glslang::ElmRowMajor)
+                    memberSize -= componentSize * (4 - memberType.getMatrixCols());
+                else
+                    memberSize -= componentSize * (4 - memberType.getMatrixRows());
+            } else if (memberType.isArray())
+                memberSize -= componentSize * (4 - memberType.getVectorSize());
+        }
     }
 
     // Bump up to member alignment
@@ -5307,7 +5621,7 @@
 
     // Bump up to vec4 if there is a bad straddle
     if (explicitLayout != glslang::ElpScalar && glslangIntermediate->improperStraddle(memberType, memberSize,
-        currentOffset))
+        currentOffset, isVectorLike))
         glslang::RoundToPow2(currentOffset, 16);
 
     nextOffset = currentOffset + memberSize;
@@ -5392,8 +5706,10 @@
             // memory and use RestrictPointer/AliasedPointer.
             if (originalParam(type.getQualifier().storage, type, false) ||
                 !writableParam(type.getQualifier().storage)) {
-                decorations.push_back(type.getQualifier().isRestrict() ? spv::DecorationRestrict :
-                                                                         spv::DecorationAliased);
+                // TranslateMemoryDecoration added Restrict decoration already.
+                if (!type.getQualifier().isRestrict()) {
+                    decorations.push_back(spv::DecorationAliased);
+                }
             } else {
                 decorations.push_back(type.getQualifier().isRestrict() ? spv::DecorationRestrictPointerEXT :
                                                                          spv::DecorationAliasedPointerEXT);
@@ -5403,9 +5719,21 @@
 
     for (int f = 0; f < (int)glslFunctions.size(); ++f) {
         glslang::TIntermAggregate* glslFunction = glslFunctions[f]->getAsAggregate();
-        if (! glslFunction || glslFunction->getOp() != glslang::EOpFunction || isShaderEntryPoint(glslFunction))
+        if (! glslFunction || glslFunction->getOp() != glslang::EOpFunction)
             continue;
 
+        builder.setDebugSourceLocation(glslFunction->getLoc().line, glslFunction->getLoc().getFilename());
+
+        if (isShaderEntryPoint(glslFunction)) {
+            // For HLSL, the entry function is actually a compiler generated function to resolve the difference of
+            // entry function signature between HLSL and SPIR-V. So we don't emit debug information for that.
+            if (glslangIntermediate->getSource() != glslang::EShSourceHlsl) {
+                builder.setupFunctionDebugInfo(shaderEntry, glslangIntermediate->getEntryPointMangledName().c_str(),
+                                               std::vector<spv::Id>(), // main function has no param
+                                               std::vector<char const*>());
+            }
+            continue;
+        }
         // We're on a user function.  Set up the basic interface for the function now,
         // so that it's available to call.  Translating the body will happen later.
         //
@@ -5454,7 +5782,8 @@
         spv::Function* function = builder.makeFunctionEntry(
             TranslatePrecisionDecoration(glslFunction->getType()), convertGlslangToSpvType(glslFunction->getType()),
             glslFunction->getName().c_str(), convertGlslangLinkageToSpv(glslFunction->getLinkType()), paramTypes,
-            paramNames, paramDecorations, &functionBlock);
+            paramDecorations, &functionBlock);
+        builder.setupFunctionDebugInfo(function, glslFunction->getName().c_str(), paramTypes, paramNames);
         if (implicitThis)
             function->setImplicitThis();
 
@@ -5678,8 +6007,16 @@
             lvalueCoherentFlags = builder.getAccessChain().coherentFlags;
             builder.addDecoration(lvalue_id, TranslateNonUniformDecoration(lvalueCoherentFlags));
             lvalueCoherentFlags |= TranslateCoherent(glslangArguments[i]->getAsTyped()->getType());
-        } else
-            arguments.push_back(accessChainLoad(glslangArguments[i]->getAsTyped()->getType()));
+        } else {
+            if (i > 0 &&
+                glslangArguments[i]->getAsSymbolNode() && glslangArguments[i-1]->getAsSymbolNode() &&
+                glslangArguments[i]->getAsSymbolNode()->getId() == glslangArguments[i-1]->getAsSymbolNode()->getId()) {
+                // Reuse the id if possible
+                arguments.push_back(arguments[i-1]);
+            } else {
+                arguments.push_back(accessChainLoad(glslangArguments[i]->getAsTyped()->getType()));
+            }
+        }
     }
 }
 
@@ -5695,7 +6032,7 @@
     if (! node->isImage() && ! node->isTexture())
         return spv::NoResult;
 
-    builder.setLine(node->getLoc().line, node->getLoc().getFilename());
+    builder.setDebugSourceLocation(node->getLoc().line, node->getLoc().getFilename());
 
     // Process a GLSL texturing op (will be SPV image)
 
@@ -5998,7 +6335,7 @@
                 operands.push_back(*opIt);
 
             return createAtomicOperation(node->getOp(), precision, resultType(), operands, typeProxy,
-                lvalueCoherentFlags);
+                lvalueCoherentFlags, node->getType());
         }
     }
 
@@ -6310,6 +6647,9 @@
         }
     }
 
+    // Reset source location to the function call location after argument evaluation
+    builder.setDebugSourceLocation(node->getLoc().line, node->getLoc().getFilename());
+
     // 2. Allocate space for anything needing a copy, and if it's "in" or "inout"
     // copy the original into that space.
     //
@@ -6523,6 +6863,10 @@
         binOp = isUnsigned ? spv::OpUMul32x16INTEL : spv::OpIMul32x16INTEL;
         break;
 
+    case glslang::EOpExpectEXT:
+        binOp = spv::OpExpectKHR;
+        break;
+
     case glslang::EOpLessThan:
     case glslang::EOpGreaterThan:
     case glslang::EOpLessThanEqual:
@@ -6745,7 +7089,8 @@
 }
 
 spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDecorations& decorations, spv::Id typeId,
-    spv::Id operand, glslang::TBasicType typeProxy, const spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags)
+    spv::Id operand, glslang::TBasicType typeProxy, const spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags,
+    const glslang::TType &opType)
 {
     spv::Op unaryOp = spv::OpNop;
     int extBuiltins = -1;
@@ -7033,7 +7378,7 @@
         // Handle all of the atomics in one place, in createAtomicOperation()
         std::vector<spv::Id> operands;
         operands.push_back(operand);
-        return createAtomicOperation(op, decorations.precision, typeId, operands, typeProxy, lvalueCoherentFlags);
+        return createAtomicOperation(op, decorations.precision, typeId, operands, typeProxy, lvalueCoherentFlags, opType);
     }
 
     case glslang::EOpBitFieldReverse:
@@ -7126,7 +7471,9 @@
     case glslang::EOpSubgroupExclusiveXor:
     case glslang::EOpSubgroupQuadSwapHorizontal:
     case glslang::EOpSubgroupQuadSwapVertical:
-    case glslang::EOpSubgroupQuadSwapDiagonal: {
+    case glslang::EOpSubgroupQuadSwapDiagonal:
+    case glslang::EOpSubgroupQuadAll:
+    case glslang::EOpSubgroupQuadAny: {
         std::vector<spv::Id> operands;
         operands.push_back(operand);
         return createSubgroupOperation(op, typeId, operands, typeProxy);
@@ -7316,73 +7663,22 @@
 // for the signedness conversion.
 // destType is the final type that will be converted to, but this function
 // may only be doing part of that conversion.
-spv::Id TGlslangToSpvTraverser::createIntWidthConversion(glslang::TOperator op, spv::Id operand, int vectorSize, spv::Id destType)
+spv::Id TGlslangToSpvTraverser::createIntWidthConversion(spv::Id operand, int vectorSize, spv::Id destType,
+                                                         glslang::TBasicType resultBasicType, glslang::TBasicType operandBasicType)
 {
     // Get the result type width, based on the type to convert to.
-    int width = 32;
-    switch(op) {
-    case glslang::EOpConvInt16ToUint8:
-    case glslang::EOpConvIntToUint8:
-    case glslang::EOpConvInt64ToUint8:
-    case glslang::EOpConvUint16ToInt8:
-    case glslang::EOpConvUintToInt8:
-    case glslang::EOpConvUint64ToInt8:
-        width = 8;
-        break;
-    case glslang::EOpConvInt8ToUint16:
-    case glslang::EOpConvIntToUint16:
-    case glslang::EOpConvInt64ToUint16:
-    case glslang::EOpConvUint8ToInt16:
-    case glslang::EOpConvUintToInt16:
-    case glslang::EOpConvUint64ToInt16:
-        width = 16;
-        break;
-    case glslang::EOpConvInt8ToUint:
-    case glslang::EOpConvInt16ToUint:
-    case glslang::EOpConvInt64ToUint:
-    case glslang::EOpConvUint8ToInt:
-    case glslang::EOpConvUint16ToInt:
-    case glslang::EOpConvUint64ToInt:
-        width = 32;
-        break;
-    case glslang::EOpConvInt8ToUint64:
-    case glslang::EOpConvInt16ToUint64:
-    case glslang::EOpConvIntToUint64:
-    case glslang::EOpConvUint8ToInt64:
-    case glslang::EOpConvUint16ToInt64:
-    case glslang::EOpConvUintToInt64:
-        width = 64;
-        break;
-
-    default:
-        assert(false && "Default missing");
-        break;
-    }
+    int width = GetNumBits(resultBasicType);
 
     // Get the conversion operation and result type,
     // based on the target width, but the source type.
     spv::Id type = spv::NoType;
     spv::Op convOp = spv::OpNop;
-    switch(op) {
-    case glslang::EOpConvInt8ToUint16:
-    case glslang::EOpConvInt8ToUint:
-    case glslang::EOpConvInt8ToUint64:
-    case glslang::EOpConvInt16ToUint8:
-    case glslang::EOpConvInt16ToUint:
-    case glslang::EOpConvInt16ToUint64:
-    case glslang::EOpConvIntToUint8:
-    case glslang::EOpConvIntToUint16:
-    case glslang::EOpConvIntToUint64:
-    case glslang::EOpConvInt64ToUint8:
-    case glslang::EOpConvInt64ToUint16:
-    case glslang::EOpConvInt64ToUint:
+    if (isTypeSignedInt(operandBasicType)) {
         convOp = spv::OpSConvert;
         type = builder.makeIntType(width);
-        break;
-    default:
+    } else {
         convOp = spv::OpUConvert;
         type = builder.makeUintType(width);
-        break;
     }
 
     if (vectorSize > 0)
@@ -7397,7 +7693,7 @@
 }
 
 spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, OpDecorations& decorations, spv::Id destType,
-                                                 spv::Id operand, glslang::TBasicType typeProxy)
+                                                 spv::Id operand, glslang::TBasicType resultBasicType, glslang::TBasicType operandBasicType)
 {
     spv::Op convOp = spv::OpNop;
     spv::Id zero = 0;
@@ -7405,317 +7701,124 @@
 
     int vectorSize = builder.isVectorType(destType) ? builder.getNumTypeComponents(destType) : 0;
 
-    switch (op) {
-    case glslang::EOpConvIntToBool:
-    case glslang::EOpConvUintToBool:
-        zero = builder.makeUintConstant(0);
-        zero = makeSmearedConstant(zero, vectorSize);
-        return builder.createBinOp(spv::OpINotEqual, destType, operand, zero);
-    case glslang::EOpConvFloatToBool:
-        zero = builder.makeFloatConstant(0.0F);
-        zero = makeSmearedConstant(zero, vectorSize);
-        return builder.createBinOp(spv::OpFUnordNotEqual, destType, operand, zero);
-    case glslang::EOpConvBoolToFloat:
-        convOp = spv::OpSelect;
-        zero = builder.makeFloatConstant(0.0F);
-        one  = builder.makeFloatConstant(1.0F);
-        break;
-
-    case glslang::EOpConvBoolToInt:
-    case glslang::EOpConvBoolToInt64:
-        if (op == glslang::EOpConvBoolToInt64) {
-            zero = builder.makeInt64Constant(0);
-            one = builder.makeInt64Constant(1);
-        } else {
-            zero = builder.makeIntConstant(0);
-            one = builder.makeIntConstant(1);
+    if (IsOpNumericConv(op)) {
+        if (isTypeSignedInt(operandBasicType) && isTypeFloat(resultBasicType)) {
+            convOp = spv::OpConvertSToF;
         }
-
-        convOp = spv::OpSelect;
-        break;
-
-    case glslang::EOpConvBoolToUint:
-    case glslang::EOpConvBoolToUint64:
-        if (op == glslang::EOpConvBoolToUint64) {
-            zero = builder.makeUint64Constant(0);
-            one = builder.makeUint64Constant(1);
-        } else {
-            zero = builder.makeUintConstant(0);
-            one = builder.makeUintConstant(1);
+        if (isTypeUnsignedInt(operandBasicType) && isTypeFloat(resultBasicType)) {
+            convOp = spv::OpConvertUToF;
         }
+        if (isTypeFloat(operandBasicType) && isTypeSignedInt(resultBasicType)) {
+            convOp = spv::OpConvertFToS;
+        }
+        if (isTypeFloat(operandBasicType) && isTypeUnsignedInt(resultBasicType)) {
+            convOp = spv::OpConvertFToU;
+        }
+        if (isTypeSignedInt(operandBasicType) && isTypeSignedInt(resultBasicType)) {
+            convOp = spv::OpSConvert;
+        }
+        if (isTypeUnsignedInt(operandBasicType) && isTypeUnsignedInt(resultBasicType)) {
+            convOp = spv::OpUConvert;
+        }
+        if (isTypeFloat(operandBasicType) && isTypeFloat(resultBasicType)) {
+            convOp = spv::OpFConvert;
+            if (builder.isMatrixType(destType))
+                return createUnaryMatrixOperation(convOp, decorations, destType, operand, operandBasicType);
+        }
+        if (isTypeInt(operandBasicType) && isTypeInt(resultBasicType) &&
+            isTypeUnsignedInt(operandBasicType) != isTypeUnsignedInt(resultBasicType)) {
 
-        convOp = spv::OpSelect;
-        break;
+            if (GetNumBits(operandBasicType) != GetNumBits(resultBasicType)) {
+                // OpSConvert/OpUConvert + OpBitCast
+                operand = createIntWidthConversion(operand, vectorSize, destType, resultBasicType, operandBasicType);
+            }
 
-    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:
-    case glslang::EOpConvInt64ToFloat16:
-        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:
-    case glslang::EOpConvUint64ToFloat16:
-        convOp = spv::OpConvertUToF;
-        break;
-
-    case glslang::EOpConvFloat16ToInt8:
-    case glslang::EOpConvFloatToInt8:
-    case glslang::EOpConvDoubleToInt8:
-    case glslang::EOpConvFloat16ToInt16:
-    case glslang::EOpConvFloatToInt16:
-    case glslang::EOpConvDoubleToInt16:
-    case glslang::EOpConvFloat16ToInt:
-    case glslang::EOpConvFloatToInt:
-    case glslang::EOpConvDoubleToInt:
-    case glslang::EOpConvFloat16ToInt64:
-    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:
-        if (builder.isInSpecConstCodeGenMode()) {
-            // Build zero scalar or vector for OpIAdd.
-            if(op == glslang::EOpConvUint8ToInt8 || op == glslang::EOpConvInt8ToUint8) {
-                zero = builder.makeUint8Constant(0);
-            } else if (op == glslang::EOpConvUint16ToInt16 || op == glslang::EOpConvInt16ToUint16) {
-                zero = builder.makeUint16Constant(0);
-            } else if (op == glslang::EOpConvUint64ToInt64 || op == glslang::EOpConvInt64ToUint64) {
-                zero = builder.makeUint64Constant(0);
+            if (builder.isInSpecConstCodeGenMode()) {
+                uint32_t bits = GetNumBits(resultBasicType);
+                spv::Id zeroType = builder.makeUintType(bits);
+                if (bits == 64) {
+                    zero = builder.makeInt64Constant(zeroType, 0, false);
+                } else {
+                    zero = builder.makeIntConstant(zeroType, 0, false);
+                }
+                zero = makeSmearedConstant(zero, vectorSize);
+                // Use OpIAdd, instead of OpBitcast to do the conversion when
+                // generating for OpSpecConstantOp instruction.
+                return builder.createBinOp(spv::OpIAdd, destType, operand, zero);
+            }
+            // For normal run-time conversion instruction, use OpBitcast.
+            convOp = spv::OpBitcast;
+        }
+        if (resultBasicType == glslang::EbtBool) {
+            uint32_t bits = GetNumBits(operandBasicType);
+            if (isTypeInt(operandBasicType)) {
+                spv::Id zeroType = builder.makeUintType(bits);
+                if (bits == 64) {
+                    zero = builder.makeInt64Constant(zeroType, 0, false);
+                } else {
+                    zero = builder.makeIntConstant(zeroType, 0, false);
+                }
+                zero = makeSmearedConstant(zero, vectorSize);
+                return builder.createBinOp(spv::OpINotEqual, destType, operand, zero);
             } else {
-                zero = builder.makeUintConstant(0);
+                assert(isTypeFloat(operandBasicType));
+                if (bits == 64) {
+                    zero = builder.makeDoubleConstant(0.0);
+                } else if (bits == 32) {
+                    zero = builder.makeFloatConstant(0.0);
+                } else {
+                    assert(bits == 16);
+                    zero = builder.makeFloat16Constant(0.0);
+                }
+                zero = makeSmearedConstant(zero, vectorSize);
+                return builder.createBinOp(spv::OpFUnordNotEqual, destType, operand, zero);
             }
-            zero = makeSmearedConstant(zero, vectorSize);
-            // Use OpIAdd, instead of OpBitcast to do the conversion when
-            // generating for OpSpecConstantOp instruction.
-            return builder.createBinOp(spv::OpIAdd, destType, operand, zero);
         }
-        // For normal run-time conversion instruction, use OpBitcast.
-        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:
-    case glslang::EOpConvFloat16ToUint64:
-        convOp = spv::OpConvertFToU;
-        break;
-
-    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:
-        zero = builder.makeUint16Constant(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);
-    case glslang::EOpConvDoubleToBool:
-        zero = builder.makeDoubleConstant(0.0);
-        zero = makeSmearedConstant(zero, vectorSize);
-        return builder.createBinOp(spv::OpFUnordNotEqual, destType, operand, zero);
-    case glslang::EOpConvFloat16ToBool:
-        zero = builder.makeFloat16Constant(0.0F);
-        zero = makeSmearedConstant(zero, vectorSize);
-        return builder.createBinOp(spv::OpFUnordNotEqual, destType, operand, zero);
-    case glslang::EOpConvBoolToDouble:
-        convOp = spv::OpSelect;
-        zero = builder.makeDoubleConstant(0.0);
-        one  = builder.makeDoubleConstant(1.0);
-        break;
-    case glslang::EOpConvBoolToFloat16:
-        convOp = spv::OpSelect;
-        zero = builder.makeFloat16Constant(0.0F);
-        one = builder.makeFloat16Constant(1.0F);
-        break;
-    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::EOpConvDoubleToFloat:
-    case glslang::EOpConvFloatToDouble:
-    case glslang::EOpConvDoubleToFloat16:
-    case glslang::EOpConvFloat16ToDouble:
-    case glslang::EOpConvFloatToFloat16:
-    case glslang::EOpConvFloat16ToFloat:
-        convOp = spv::OpFConvert;
-        if (builder.isMatrixType(destType))
-            return createUnaryMatrixOperation(convOp, decorations, destType, operand, typeProxy);
-        break;
-
-    case glslang::EOpConvInt8ToInt16:
-    case glslang::EOpConvInt8ToInt:
-    case glslang::EOpConvInt8ToInt64:
-    case glslang::EOpConvInt16ToInt8:
-    case glslang::EOpConvInt16ToInt:
-    case glslang::EOpConvInt16ToInt64:
-    case glslang::EOpConvIntToInt8:
-    case glslang::EOpConvIntToInt16:
-    case glslang::EOpConvIntToInt64:
-    case glslang::EOpConvInt64ToInt8:
-    case glslang::EOpConvInt64ToInt16:
-    case glslang::EOpConvInt64ToInt:
-        convOp = spv::OpSConvert;
-        break;
-
-    case glslang::EOpConvUint8ToUint16:
-    case glslang::EOpConvUint8ToUint:
-    case glslang::EOpConvUint8ToUint64:
-    case glslang::EOpConvUint16ToUint8:
-    case glslang::EOpConvUint16ToUint:
-    case glslang::EOpConvUint16ToUint64:
-    case glslang::EOpConvUintToUint8:
-    case glslang::EOpConvUintToUint16:
-    case glslang::EOpConvUintToUint64:
-    case glslang::EOpConvUint64ToUint8:
-    case glslang::EOpConvUint64ToUint16:
-    case glslang::EOpConvUint64ToUint:
-        convOp = spv::OpUConvert;
-        break;
-
-    case glslang::EOpConvInt8ToUint16:
-    case glslang::EOpConvInt8ToUint:
-    case glslang::EOpConvInt8ToUint64:
-    case glslang::EOpConvInt16ToUint8:
-    case glslang::EOpConvInt16ToUint:
-    case glslang::EOpConvInt16ToUint64:
-    case glslang::EOpConvIntToUint8:
-    case glslang::EOpConvIntToUint16:
-    case glslang::EOpConvIntToUint64:
-    case glslang::EOpConvInt64ToUint8:
-    case glslang::EOpConvInt64ToUint16:
-    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
-        operand = createIntWidthConversion(op, operand, vectorSize, destType);
-
-        if (builder.isInSpecConstCodeGenMode()) {
-            // Build zero scalar or vector for OpIAdd.
-            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);
-                break;
-            case glslang::EOpConvInt8ToUint:
-            case glslang::EOpConvInt16ToUint:
-            case glslang::EOpConvInt64ToUint:
-            case glslang::EOpConvUint8ToInt:
-            case glslang::EOpConvUint16ToInt:
-            case glslang::EOpConvUint64ToInt:
-                zero = builder.makeUintConstant(0);
-                break;
-            case glslang::EOpConvInt8ToUint64:
-            case glslang::EOpConvInt16ToUint64:
-            case glslang::EOpConvIntToUint64:
-            case glslang::EOpConvUint8ToInt64:
-            case glslang::EOpConvUint16ToInt64:
-            case glslang::EOpConvUintToInt64:
-                zero = builder.makeUint64Constant(0);
-                break;
-            default:
-                assert(false && "Default missing");
-                break;
+        if (operandBasicType == glslang::EbtBool) {
+            uint32_t bits = GetNumBits(resultBasicType);
+            convOp = spv::OpSelect;
+            if (isTypeInt(resultBasicType)) {
+                spv::Id zeroType = isTypeSignedInt(resultBasicType) ? builder.makeIntType(bits) : builder.makeUintType(bits);
+                if (bits == 64) {
+                    zero = builder.makeInt64Constant(zeroType, 0, false);
+                    one = builder.makeInt64Constant(zeroType, 1, false);
+                } else {
+                    zero = builder.makeIntConstant(zeroType, 0, false);
+                    one = builder.makeIntConstant(zeroType, 1, false);
+                }
+            } else {
+                assert(isTypeFloat(resultBasicType));
+                if (bits == 64) {
+                    zero = builder.makeDoubleConstant(0.0);
+                    one = builder.makeDoubleConstant(1.0);
+                } else if (bits == 32) {
+                    zero = builder.makeFloatConstant(0.0);
+                    one = builder.makeFloatConstant(1.0);
+                } else {
+                    assert(bits == 16);
+                    zero = builder.makeFloat16Constant(0.0);
+                    one = builder.makeFloat16Constant(1.0);
+                }
             }
-            zero = makeSmearedConstant(zero, vectorSize);
-            // Use OpIAdd, instead of OpBitcast to do the conversion when
-            // generating for OpSpecConstantOp instruction.
-            return builder.createBinOp(spv::OpIAdd, destType, operand, zero);
         }
-        // For normal run-time conversion instruction, use OpBitcast.
-        convOp = spv::OpBitcast;
-        break;
-    case glslang::EOpConvUint64ToPtr:
-        convOp = spv::OpConvertUToPtr;
-        break;
-    case glslang::EOpConvPtrToUint64:
-        convOp = spv::OpConvertPtrToU;
-        break;
-    case glslang::EOpConvPtrToUvec2:
-    case glslang::EOpConvUvec2ToPtr:
-        convOp = spv::OpBitcast;
-        break;
+    }
 
-    default:
-        break;
+    if (convOp == spv::OpNop) {
+        switch (op) {
+        case glslang::EOpConvUint64ToPtr:
+            convOp = spv::OpConvertUToPtr;
+            break;
+        case glslang::EOpConvPtrToUint64:
+            convOp = spv::OpConvertPtrToU;
+            break;
+        case glslang::EOpConvPtrToUvec2:
+        case glslang::EOpConvUvec2ToPtr:
+            convOp = spv::OpBitcast;
+            break;
+
+        default:
+            break;
+        }
     }
 
     spv::Id result = 0;
@@ -7749,7 +7852,7 @@
 // For glslang ops that map to SPV atomic opCodes
 spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv::Decoration /*precision*/,
     spv::Id typeId, std::vector<spv::Id>& operands, glslang::TBasicType typeProxy,
-    const spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags)
+    const spv::Builder::AccessChain::CoherentFlags &lvalueCoherentFlags, const glslang::TType &opType)
 {
     spv::Op opCode = spv::OpNop;
 
@@ -7760,14 +7863,20 @@
         opCode = spv::OpAtomicIAdd;
         if (typeProxy == glslang::EbtFloat16 || typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble) {
             opCode = spv::OpAtomicFAddEXT;
-            builder.addExtension(spv::E_SPV_EXT_shader_atomic_float_add);
-            if (typeProxy == glslang::EbtFloat16) {
-                builder.addExtension(spv::E_SPV_EXT_shader_atomic_float16_add);
-                builder.addCapability(spv::CapabilityAtomicFloat16AddEXT);
-            } else if (typeProxy == glslang::EbtFloat) {
-                builder.addCapability(spv::CapabilityAtomicFloat32AddEXT);
+            if (typeProxy == glslang::EbtFloat16 &&
+                (opType.getVectorSize() == 2 || opType.getVectorSize() == 4)) {
+                builder.addExtension(spv::E_SPV_NV_shader_atomic_fp16_vector);
+                builder.addCapability(spv::CapabilityAtomicFloat16VectorNV);
             } else {
-                builder.addCapability(spv::CapabilityAtomicFloat64AddEXT);
+                builder.addExtension(spv::E_SPV_EXT_shader_atomic_float_add);
+                if (typeProxy == glslang::EbtFloat16) {
+                    builder.addExtension(spv::E_SPV_EXT_shader_atomic_float16_add);
+                    builder.addCapability(spv::CapabilityAtomicFloat16AddEXT);
+                } else if (typeProxy == glslang::EbtFloat) {
+                    builder.addCapability(spv::CapabilityAtomicFloat32AddEXT);
+                } else {
+                    builder.addCapability(spv::CapabilityAtomicFloat64AddEXT);
+                }
             }
         }
         break;
@@ -7780,13 +7889,19 @@
     case glslang::EOpAtomicCounterMin:
         if (typeProxy == glslang::EbtFloat16 || typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble) {
             opCode = spv::OpAtomicFMinEXT;
-            builder.addExtension(spv::E_SPV_EXT_shader_atomic_float_min_max);
-            if (typeProxy == glslang::EbtFloat16)
-                builder.addCapability(spv::CapabilityAtomicFloat16MinMaxEXT);
-            else if (typeProxy == glslang::EbtFloat)
-                builder.addCapability(spv::CapabilityAtomicFloat32MinMaxEXT);
-            else
-                builder.addCapability(spv::CapabilityAtomicFloat64MinMaxEXT);
+            if (typeProxy == glslang::EbtFloat16 &&
+                (opType.getVectorSize() == 2 || opType.getVectorSize() == 4)) {
+                builder.addExtension(spv::E_SPV_NV_shader_atomic_fp16_vector);
+                builder.addCapability(spv::CapabilityAtomicFloat16VectorNV);
+            } else {
+                builder.addExtension(spv::E_SPV_EXT_shader_atomic_float_min_max);
+                if (typeProxy == glslang::EbtFloat16)
+                    builder.addCapability(spv::CapabilityAtomicFloat16MinMaxEXT);
+                else if (typeProxy == glslang::EbtFloat)
+                    builder.addCapability(spv::CapabilityAtomicFloat32MinMaxEXT);
+                else
+                    builder.addCapability(spv::CapabilityAtomicFloat64MinMaxEXT);
+            }
         } else if (typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64) {
             opCode = spv::OpAtomicUMin;
         } else {
@@ -7798,13 +7913,19 @@
     case glslang::EOpAtomicCounterMax:
         if (typeProxy == glslang::EbtFloat16 || typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble) {
             opCode = spv::OpAtomicFMaxEXT;
-            builder.addExtension(spv::E_SPV_EXT_shader_atomic_float_min_max);
-            if (typeProxy == glslang::EbtFloat16)
-                builder.addCapability(spv::CapabilityAtomicFloat16MinMaxEXT);
-            else if (typeProxy == glslang::EbtFloat)
-                builder.addCapability(spv::CapabilityAtomicFloat32MinMaxEXT);
-            else
-                builder.addCapability(spv::CapabilityAtomicFloat64MinMaxEXT);
+            if (typeProxy == glslang::EbtFloat16 &&
+                (opType.getVectorSize() == 2 || opType.getVectorSize() == 4)) {
+                builder.addExtension(spv::E_SPV_NV_shader_atomic_fp16_vector);
+                builder.addCapability(spv::CapabilityAtomicFloat16VectorNV);
+            } else {
+                builder.addExtension(spv::E_SPV_EXT_shader_atomic_float_min_max);
+                if (typeProxy == glslang::EbtFloat16)
+                    builder.addCapability(spv::CapabilityAtomicFloat16MinMaxEXT);
+                else if (typeProxy == glslang::EbtFloat)
+                    builder.addCapability(spv::CapabilityAtomicFloat32MinMaxEXT);
+                else
+                    builder.addCapability(spv::CapabilityAtomicFloat64MinMaxEXT);
+            }
         } else if (typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64) {
             opCode = spv::OpAtomicUMax;
         } else {
@@ -7829,6 +7950,12 @@
     case glslang::EOpAtomicExchange:
     case glslang::EOpImageAtomicExchange:
     case glslang::EOpAtomicCounterExchange:
+        if ((typeProxy == glslang::EbtFloat16) && 
+            (opType.getVectorSize() == 2 || opType.getVectorSize() == 4)) {
+                builder.addExtension(spv::E_SPV_NV_shader_atomic_fp16_vector);
+                builder.addCapability(spv::CapabilityAtomicFloat16VectorNV);
+        }
+
         opCode = spv::OpAtomicExchange;
         break;
     case glslang::EOpAtomicCompSwap:
@@ -7927,6 +8054,7 @@
     }
 
     std::vector<spv::Id> spvAtomicOperands;  // hold the spv operands
+    spvAtomicOperands.reserve(6);
     spvAtomicOperands.push_back(pointerId);
     spvAtomicOperands.push_back(scopeId);
     spvAtomicOperands.push_back(semanticsId);
@@ -8231,6 +8359,11 @@
     case glslang::EOpSubgroupElect:
         builder.addCapability(spv::CapabilityGroupNonUniform);
         break;
+    case glslang::EOpSubgroupQuadAll:
+    case glslang::EOpSubgroupQuadAny:
+        builder.addExtension(spv::E_SPV_KHR_quad_control);
+        builder.addCapability(spv::CapabilityQuadControlKHR);
+        [[fallthrough]];
     case glslang::EOpSubgroupAll:
     case glslang::EOpSubgroupAny:
     case glslang::EOpSubgroupAllEqual:
@@ -8250,6 +8383,11 @@
         builder.addCapability(spv::CapabilityGroupNonUniform);
         builder.addCapability(spv::CapabilityGroupNonUniformBallot);
         break;
+    case glslang::EOpSubgroupRotate:
+    case glslang::EOpSubgroupClusteredRotate:
+        builder.addExtension(spv::E_SPV_KHR_subgroup_rotate);
+        builder.addCapability(spv::CapabilityGroupNonUniformRotateKHR);
+        break;
     case glslang::EOpSubgroupShuffle:
     case glslang::EOpSubgroupShuffleXor:
         builder.addCapability(spv::CapabilityGroupNonUniform);
@@ -8338,7 +8476,9 @@
     // Figure out which opcode to use.
     switch (op) {
     case glslang::EOpSubgroupElect:                   opCode = spv::OpGroupNonUniformElect; break;
+    case glslang::EOpSubgroupQuadAll:                 opCode = spv::OpGroupNonUniformQuadAllKHR; break;
     case glslang::EOpSubgroupAll:                     opCode = spv::OpGroupNonUniformAll; break;
+    case glslang::EOpSubgroupQuadAny:                 opCode = spv::OpGroupNonUniformQuadAnyKHR; break;
     case glslang::EOpSubgroupAny:                     opCode = spv::OpGroupNonUniformAny; break;
     case glslang::EOpSubgroupAllEqual:                opCode = spv::OpGroupNonUniformAllEqual; break;
     case glslang::EOpSubgroupBroadcast:               opCode = spv::OpGroupNonUniformBroadcast; break;
@@ -8355,6 +8495,8 @@
     case glslang::EOpSubgroupShuffleXor:              opCode = spv::OpGroupNonUniformShuffleXor; break;
     case glslang::EOpSubgroupShuffleUp:               opCode = spv::OpGroupNonUniformShuffleUp; break;
     case glslang::EOpSubgroupShuffleDown:             opCode = spv::OpGroupNonUniformShuffleDown; break;
+    case glslang::EOpSubgroupRotate:
+    case glslang::EOpSubgroupClusteredRotate:         opCode = spv::OpGroupNonUniformRotateKHR; break;
     case glslang::EOpSubgroupAdd:
     case glslang::EOpSubgroupInclusiveAdd:
     case glslang::EOpSubgroupExclusiveAdd:
@@ -8535,7 +8677,10 @@
 
     // Every operation begins with the Execution Scope operand.
     spv::IdImmediate executionScope = { true, builder.makeUintConstant(spv::ScopeSubgroup) };
-    spvGroupOperands.push_back(executionScope);
+    // All other ops need the execution scope. Quad Control Ops don't need scope, it's always Quad.
+    if (opCode != spv::OpGroupNonUniformQuadAllKHR && opCode != spv::OpGroupNonUniformQuadAnyKHR) {
+        spvGroupOperands.push_back(executionScope);
+    }
 
     // Next, for all operations that use a Group Operation, push that as an operand.
     if (groupOperation != spv::GroupOperationMax) {
@@ -8594,7 +8739,16 @@
         builder.promoteScalar(precision, operands.front(), operands.back());
         break;
     case glslang::EOpModf:
-        libCall = spv::GLSLstd450Modf;
+        {
+            libCall = spv::GLSLstd450ModfStruct;
+            assert(builder.isFloatType(builder.getScalarTypeId(typeId0)));
+            int width = builder.getScalarTypeWidth(typeId0);
+            if (width == 16)
+                builder.addExtension(spv::E_SPV_AMD_gpu_shader_half_float);
+            // The returned struct has two members of the same type as the first argument
+            typeId = builder.makeStructResultType(typeId0, typeId0);
+            consumedOperands = 1;
+        }
         break;
     case glslang::EOpMax:
         if (isFloat)
@@ -8778,6 +8932,8 @@
     case glslang::EOpSubgroupShuffleXor:
     case glslang::EOpSubgroupShuffleUp:
     case glslang::EOpSubgroupShuffleDown:
+    case glslang::EOpSubgroupRotate:
+    case glslang::EOpSubgroupClusteredRotate:
     case glslang::EOpSubgroupClusteredAdd:
     case glslang::EOpSubgroupClusteredMul:
     case glslang::EOpSubgroupClusteredMin:
@@ -9136,6 +9292,58 @@
         opCode = spv::OpFetchMicroTriangleVertexPositionNV;
         break;
 
+    case glslang::EOpImageBlockMatchWindowSSDQCOM:
+        typeId = builder.makeVectorType(builder.makeFloatType(32), 4);
+        opCode = spv::OpImageBlockMatchWindowSSDQCOM;
+        addImageProcessing2QCOMDecoration(operands[0], false);
+        addImageProcessing2QCOMDecoration(operands[2], false);
+        break;
+    case glslang::EOpImageBlockMatchWindowSADQCOM:
+        typeId = builder.makeVectorType(builder.makeFloatType(32), 4);
+        opCode = spv::OpImageBlockMatchWindowSADQCOM;
+        addImageProcessing2QCOMDecoration(operands[0], false);
+        addImageProcessing2QCOMDecoration(operands[2], false);
+        break;
+    case glslang::EOpImageBlockMatchGatherSSDQCOM:
+        typeId = builder.makeVectorType(builder.makeFloatType(32), 4);
+        opCode = spv::OpImageBlockMatchGatherSSDQCOM;
+        addImageProcessing2QCOMDecoration(operands[0], true);
+        addImageProcessing2QCOMDecoration(operands[2], true);
+        break;
+    case glslang::EOpImageBlockMatchGatherSADQCOM:
+        typeId = builder.makeVectorType(builder.makeFloatType(32), 4);
+        opCode = spv::OpImageBlockMatchGatherSADQCOM;
+        addImageProcessing2QCOMDecoration(operands[0], true);
+        addImageProcessing2QCOMDecoration(operands[2], true);
+        break;
+    case glslang::EOpCreateTensorLayoutNV:
+        return builder.createOp(spv::OpCreateTensorLayoutNV, typeId, std::vector<spv::Id>{});
+    case glslang::EOpCreateTensorViewNV:
+        return builder.createOp(spv::OpCreateTensorViewNV, typeId, std::vector<spv::Id>{});
+    case glslang::EOpTensorLayoutSetBlockSizeNV:
+        opCode = spv::OpTensorLayoutSetBlockSizeNV;
+        break;
+    case glslang::EOpTensorLayoutSetDimensionNV:
+        opCode = spv::OpTensorLayoutSetDimensionNV;
+        break;
+    case glslang::EOpTensorLayoutSetStrideNV:
+        opCode = spv::OpTensorLayoutSetStrideNV;
+        break;
+    case glslang::EOpTensorLayoutSliceNV:
+        opCode = spv::OpTensorLayoutSliceNV;
+        break;
+    case glslang::EOpTensorLayoutSetClampValueNV:
+        opCode = spv::OpTensorLayoutSetClampValueNV;
+        break;
+    case glslang::EOpTensorViewSetDimensionNV:
+        opCode = spv::OpTensorViewSetDimensionNV;
+        break;
+    case glslang::EOpTensorViewSetStrideNV:
+        opCode = spv::OpTensorViewSetStrideNV;
+        break;
+    case glslang::EOpTensorViewSetClipNV:
+        opCode = spv::OpTensorViewSetClipNV;
+        break;
     default:
         return 0;
     }
@@ -9191,6 +9399,13 @@
         builder.createStore(builder.createCompositeExtract(id, typeId0, 0), operands[3]);
         builder.createStore(builder.createCompositeExtract(id, typeId0, 1), operands[2]);
         break;
+    case glslang::EOpModf:
+        {
+            assert(operands.size() == 2);
+            builder.createStore(builder.createCompositeExtract(id, typeId0, 1), operands[1]);
+            id = builder.createCompositeExtract(id, typeId0, 0);
+        }
+        break;
     case glslang::EOpFrexp:
         {
             assert(operands.size() == 2);
@@ -9435,6 +9650,10 @@
         }
     }
 
+    if (symbol->getBasicType() == glslang::EbtFunction) {
+        return 0;
+    }
+
     id = createSpvVariable(symbol, forcedType.first);
 
     if (mayNeedToReuseBuiltIn) {
@@ -9588,47 +9807,9 @@
             spv::DecorationRestrictPointerEXT : spv::DecorationAliasedPointerEXT);
     }
 
-    //
-    // Add SPIR-V decorations for structure (GL_EXT_spirv_intrinsics)
-    //
-    if (symbol->getType().getQualifier().hasSprivDecorate()) {
-        const glslang::TSpirvDecorate& spirvDecorate = symbol->getType().getQualifier().getSpirvDecorate();
-
-        // Add spirv_decorate
-        for (auto& decorate : spirvDecorate.decorates) {
-            if (!decorate.second.empty()) {
-                std::vector<unsigned> literals;
-                TranslateLiterals(decorate.second, literals);
-                builder.addDecoration(id, static_cast<spv::Decoration>(decorate.first), literals);
-            }
-            else
-                builder.addDecoration(id, static_cast<spv::Decoration>(decorate.first));
-        }
-
-        // Add spirv_decorate_id
-        for (auto& decorateId : spirvDecorate.decorateIds) {
-            std::vector<spv::Id> operandIds;
-            assert(!decorateId.second.empty());
-            for (auto extraOperand : decorateId.second) {
-                if (extraOperand->getQualifier().isFrontEndConstant())
-                    operandIds.push_back(createSpvConstant(*extraOperand));
-                else
-                    operandIds.push_back(getSymbolId(extraOperand->getAsSymbolNode()));
-            }
-            builder.addDecorationId(id, static_cast<spv::Decoration>(decorateId.first), operandIds);
-        }
-
-        // Add spirv_decorate_string
-        for (auto& decorateString : spirvDecorate.decorateStrings) {
-            std::vector<const char*> strings;
-            assert(!decorateString.second.empty());
-            for (auto extraOperand : decorateString.second) {
-                const char* string = extraOperand->getConstArray()[0].getSConst()->c_str();
-                strings.push_back(string);
-            }
-            builder.addDecoration(id, static_cast<spv::Decoration>(decorateString.first), strings);
-        }
-    }
+    // Add SPIR-V decorations (GL_EXT_spirv_intrinsics)
+    if (symbol->getType().getQualifier().hasSpirvDecorate())
+        applySpirvDecorate(symbol->getType(), id, {});
 
     return id;
 }
@@ -9680,6 +9861,16 @@
     }
 }
 
+bool TGlslangToSpvTraverser::hasQCOMImageProceessingDecoration(spv::Id id, spv::Decoration decor)
+{
+  std::vector<spv::Decoration> &decoVec = idToQCOMDecorations[id];
+  for ( auto d : decoVec ) {
+    if ( d == decor )
+      return true;
+  }
+  return false;
+}
+
 void TGlslangToSpvTraverser::addImageProcessingQCOMDecoration(spv::Id id, spv::Decoration decor)
 {
   spv::Op opc = builder.getOpCode(id);
@@ -9690,7 +9881,43 @@
 
   if (opc == spv::OpLoad) {
     spv::Id texid = builder.getIdOperand(id, 0);
-    builder.addDecoration(texid, decor);
+    if (!hasQCOMImageProceessingDecoration(texid, decor)) {//
+      builder.addDecoration(texid, decor);
+      idToQCOMDecorations[texid].push_back(decor);
+    }
+  }
+}
+
+void TGlslangToSpvTraverser::addImageProcessing2QCOMDecoration(spv::Id id, bool isForGather)
+{
+  if (isForGather) {
+    return addImageProcessingQCOMDecoration(id, spv::DecorationBlockMatchTextureQCOM);
+  }
+
+  auto addDecor =
+    [this](spv::Id id, spv::Decoration decor) {
+      spv::Id tsopc = this->builder.getOpCode(id);
+      if (tsopc == spv::OpLoad) {
+        spv::Id tsid = this->builder.getIdOperand(id, 0);
+        if (this->glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_4) {
+          assert(iOSet.count(tsid) > 0);
+        }
+        if (!hasQCOMImageProceessingDecoration(tsid, decor)) {
+          this->builder.addDecoration(tsid, decor);
+          idToQCOMDecorations[tsid].push_back(decor);
+        }
+      }
+    };
+
+  spv::Id opc = builder.getOpCode(id);
+  bool isInterfaceObject = (opc != spv::OpSampledImage);
+
+  if (!isInterfaceObject) {
+    addDecor(builder.getIdOperand(id, 0), spv::DecorationBlockMatchTextureQCOM);
+    addDecor(builder.getIdOperand(id, 1), spv::DecorationBlockMatchSamplerQCOM);
+  } else {
+    addDecor(id, spv::DecorationBlockMatchTextureQCOM);
+    addDecor(id, spv::DecorationBlockMatchSamplerQCOM);
   }
 }
 
@@ -9983,12 +10210,13 @@
         return false;
     }
 
+    if (IsOpNumericConv(node->getAsOperator()->getOp()) &&
+        node->getType().getBasicType() == glslang::EbtBool) {
+        return true;
+    }
+
     switch (node->getAsOperator()->getOp()) {
     case glslang::EOpLogicalNot:
-    case glslang::EOpConvIntToBool:
-    case glslang::EOpConvUintToBool:
-    case glslang::EOpConvFloatToBool:
-    case glslang::EOpConvDoubleToBool:
     case glslang::EOpEqual:
     case glslang::EOpNotEqual:
     case glslang::EOpLessThan:
@@ -10020,6 +10248,7 @@
 
     // Operands to accumulate OpPhi operands
     std::vector<spv::Id> phiOperands;
+    phiOperands.reserve(4);
     // accumulate left operand's phi information
     phiOperands.push_back(leftId);
     phiOperands.push_back(builder.getBuildPoint()->getId());
@@ -10059,14 +10288,13 @@
     if (extBuiltinMap.find(name) != extBuiltinMap.end())
         return extBuiltinMap[name];
     else {
-        builder.addExtension(name);
         spv::Id extBuiltins = builder.import(name);
         extBuiltinMap[name] = extBuiltins;
         return extBuiltins;
     }
 }
 
-};  // end anonymous namespace
+} // end anonymous namespace
 
 namespace glslang {
 
@@ -10203,4 +10431,4 @@
     GetThreadPoolAllocator().pop();
 }
 
-}; // end namespace glslang
+} // end namespace glslang
diff --git a/SPIRV/GlslangToSpv.h b/SPIRV/GlslangToSpv.h
index b9736d7..9fb4f3f 100644
--- a/SPIRV/GlslangToSpv.h
+++ b/SPIRV/GlslangToSpv.h
@@ -35,27 +35,35 @@
 
 #pragma once
 
-#if defined(_MSC_VER) && _MSC_VER >= 1900
-    #pragma warning(disable : 4464) // relative include path contains '..'
-#endif
-
-#include "SpvTools.h"
-#include "glslang/Include/intermediate.h"
-
 #include <string>
 #include <vector>
 
 #include "Logger.h"
+#include "glslang/Include/visibility.h"
 
 namespace glslang {
+class TIntermediate;
 
-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,
-                  spv::SpvBuildLogger* logger, SpvOptions* options = nullptr);
-bool OutputSpvBin(const std::vector<unsigned int>& spirv, const char* baseName);
-bool OutputSpvHex(const std::vector<unsigned int>& spirv, const char* baseName, const char* varName);
+struct SpvOptions {
+    bool generateDebugInfo {false};
+    bool stripDebugInfo {false};
+    bool disableOptimizer {true};
+    bool optimizeSize {false};
+    bool disassemble {false};
+    bool validate {false};
+    bool emitNonSemanticShaderDebugInfo {false};
+    bool emitNonSemanticShaderDebugSource{ false };
+    bool compileOnly{false};
+    bool optimizerAllowExpandedIDBound{false};
+};
+
+GLSLANG_EXPORT void GetSpirvVersion(std::string&);
+GLSLANG_EXPORT int GetSpirvGeneratorVersion();
+GLSLANG_EXPORT void GlslangToSpv(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv,
+                                 SpvOptions* options = nullptr);
+GLSLANG_EXPORT void GlslangToSpv(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv,
+                                 spv::SpvBuildLogger* logger, SpvOptions* options = nullptr);
+GLSLANG_EXPORT bool OutputSpvBin(const std::vector<unsigned int>& spirv, const char* baseName);
+GLSLANG_EXPORT bool OutputSpvHex(const std::vector<unsigned int>& spirv, const char* baseName, const char* varName);
 
 }
diff --git a/SPIRV/Logger.h b/SPIRV/Logger.h
index 2e4ddaf..c64a3b8 100644
--- a/SPIRV/Logger.h
+++ b/SPIRV/Logger.h
@@ -37,12 +37,13 @@
 
 #include <string>
 #include <vector>
+#include "glslang/Include/visibility.h"
 
 namespace spv {
 
 // A class for holding all SPIR-V build status messages, including
 // missing/TBD functionalities, warnings, and errors.
-class SpvBuildLogger {
+class GLSLANG_EXPORT SpvBuildLogger {
 public:
     SpvBuildLogger() {}
 
diff --git a/SPIRV/SPVRemapper.cpp b/SPIRV/SPVRemapper.cpp
index f8f50a9..8452764 100644
--- a/SPIRV/SPVRemapper.cpp
+++ b/SPIRV/SPVRemapper.cpp
@@ -38,7 +38,6 @@
 
 #include <algorithm>
 #include <cassert>
-#include "../glslang/Include/Common.h"
 
 namespace spv {
 
@@ -651,6 +650,40 @@
             case spv::OperandExecutionMode:
                 return nextInst;
 
+            case spv::OperandMemoryAccess:
+                {
+                    uint32_t mask = spv[word];
+                    if (mask & uint32_t(spv::MemoryAccessMask::MemoryAccessAlignedMask)) {
+                        ++word;
+                        --numOperands;
+                    }
+                    if (mask & uint32_t(spv::MemoryAccessMask::MemoryAccessMakePointerAvailableMask |
+                                        spv::MemoryAccessMask::MemoryAccessMakePointerVisibleMask)) {
+                        idFn(asId(word+1));
+                        ++word;
+                        --numOperands;
+                    }
+                    ++word;
+                }
+                break;
+
+            case spv::OperandTensorAddressingOperands:
+                {
+                    uint32_t mask = spv[word];
+                    if (mask & uint32_t(spv::TensorAddressingOperandsMask::TensorAddressingOperandsTensorViewMask)) {
+                        idFn(asId(word+1));
+                        ++word;
+                        --numOperands;
+                    }
+                    if (mask & uint32_t(spv::TensorAddressingOperandsMask::TensorAddressingOperandsDecodeFuncMask)) {
+                        idFn(asId(word+1));
+                        ++word;
+                        --numOperands;
+                    }
+                    ++word;
+                }
+                break;
+
             // Single word operands we simply ignore, as they hold no IDs
             case spv::OperandLiteralNumber:
             case spv::OperandSource:
@@ -675,7 +708,6 @@
             case spv::OperandSelect:
             case spv::OperandLoop:
             case spv::OperandFunction:
-            case spv::OperandMemoryAccess:
             case spv::OperandGroupOperation:
             case spv::OperandKernelEnqueueFlags:
             case spv::OperandKernelProfilingInfo:
diff --git a/SPIRV/SPVRemapper.h b/SPIRV/SPVRemapper.h
index 42b0168..e60da79 100644
--- a/SPIRV/SPVRemapper.h
+++ b/SPIRV/SPVRemapper.h
@@ -41,6 +41,21 @@
 #include <cstdlib>
 #include <exception>
 
+#ifdef GLSLANG_IS_SHARED_LIBRARY
+    #ifdef _WIN32
+        #ifdef GLSLANG_EXPORTING
+            #define GLSLANG_EXPORT __declspec(dllexport)
+        #else
+            #define GLSLANG_EXPORT __declspec(dllimport)
+        #endif
+    #elif __GNUC__ >= 4
+        #define GLSLANG_EXPORT __attribute__((visibility("default")))
+    #endif
+#endif // GLSLANG_IS_SHARED_LIBRARY
+#ifndef GLSLANG_EXPORT
+#define GLSLANG_EXPORT
+#endif
+
 namespace spv {
 
 class spirvbin_base_t
@@ -77,12 +92,13 @@
 #include <cassert>
 
 #include "spirv.hpp"
-#include "spvIR.h"
 
 namespace spv {
 
+static inline constexpr Id NoResult = 0;
+
 // class to hold SPIR-V binary data for remapping, DCE, and debug stripping
-class spirvbin_t : public spirvbin_base_t
+class GLSLANG_EXPORT spirvbin_t : public spirvbin_base_t
 {
 public:
    spirvbin_t(int verbose = 0) : entryPoint(spv::NoResult), largestNewId(0), verbose(verbose), errorLatch(false)
diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp
index d42f728..e23ccab 100644
--- a/SPIRV/SpvBuilder.cpp
+++ b/SPIRV/SpvBuilder.cpp
@@ -58,13 +58,6 @@
     spvVersion(spvVersion),
     sourceLang(SourceLanguageUnknown),
     sourceVersion(0),
-    sourceFileStringId(NoResult),
-    currentLine(0),
-    currentFile(nullptr),
-    currentFileId(NoResult),
-    lastDebugScopeId(NoResult),
-    emitOpLines(false),
-    emitNonSemanticShaderDebugInfo(false),
     addressModel(AddressingModelLogical),
     memoryModel(MemoryModelGLSL450),
     builderNumber(magicNumber),
@@ -91,78 +84,6 @@
     return import->getResultId();
 }
 
-// Emit instruction for non-filename-based #line directives (ie. no filename
-// seen yet): emit an OpLine if we've been asked to emit OpLines and the line
-// number has changed since the last time, and is a valid line number.
-void Builder::setLine(int lineNum)
-{
-    if (lineNum != 0 && lineNum != currentLine) {
-        currentLine = lineNum;
-        if (emitOpLines) {
-          if (emitNonSemanticShaderDebugInfo)
-              addDebugScopeAndLine(currentFileId, currentLine, 0);
-          else
-              addLine(sourceFileStringId, currentLine, 0);
-        }
-    }
-}
-
-// If no filename, do non-filename-based #line emit. Else do filename-based emit.
-// Emit OpLine if we've been asked to emit OpLines and the line number or filename
-// has changed since the last time, and line number is valid.
-void Builder::setLine(int lineNum, const char* filename)
-{
-    if (filename == nullptr) {
-        setLine(lineNum);
-        return;
-    }
-    if ((lineNum != 0 && lineNum != currentLine) || currentFile == nullptr ||
-            strncmp(filename, currentFile, strlen(currentFile) + 1) != 0) {
-        currentLine = lineNum;
-        currentFile = filename;
-        if (emitOpLines) {
-            spv::Id strId = getStringId(filename);
-            if (emitNonSemanticShaderDebugInfo)
-                addDebugScopeAndLine(strId, currentLine, 0);
-            else
-                addLine(strId, currentLine, 0);
-        }
-    }
-}
-
-void Builder::addLine(Id fileName, int lineNum, int column)
-{
-    Instruction* line = new Instruction(OpLine);
-    line->addIdOperand(fileName);
-    line->addImmediateOperand(lineNum);
-    line->addImmediateOperand(column);
-    buildPoint->addInstruction(std::unique_ptr<Instruction>(line));
-}
-
-void Builder::addDebugScopeAndLine(Id fileName, int lineNum, int column)
-{
-    assert(!currentDebugScopeId.empty());
-    if (currentDebugScopeId.top() != lastDebugScopeId) {
-        spv::Id resultId = getUniqueId();
-        Instruction* scopeInst = new Instruction(resultId, makeVoidType(), OpExtInst);
-        scopeInst->addIdOperand(nonSemanticShaderDebugInfo);
-        scopeInst->addImmediateOperand(NonSemanticShaderDebugInfo100DebugScope);
-        scopeInst->addIdOperand(currentDebugScopeId.top());
-        buildPoint->addInstruction(std::unique_ptr<Instruction>(scopeInst));
-        lastDebugScopeId = currentDebugScopeId.top();
-    }
-    spv::Id resultId = getUniqueId();
-    Instruction* lineInst = new Instruction(resultId, makeVoidType(), OpExtInst);
-    lineInst->addIdOperand(nonSemanticShaderDebugInfo);
-    lineInst->addImmediateOperand(NonSemanticShaderDebugInfo100DebugLine);
-    lineInst->addIdOperand(makeDebugSource(fileName));
-    lineInst->addIdOperand(makeUintConstant(lineNum));
-    lineInst->addIdOperand(makeUintConstant(lineNum));
-    lineInst->addIdOperand(makeUintConstant(column));
-    lineInst->addIdOperand(makeUintConstant(column));
-    buildPoint->addInstruction(std::unique_ptr<Instruction>(lineInst));
-}
-
 // For creating new groupedTypes (will return old type if the requested one was already made).
 Id Builder::makeVoidType()
 {
@@ -182,7 +103,7 @@
     return type->getResultId();
 }
 
-Id Builder::makeBoolType(bool const compilerGenerated)
+Id Builder::makeBoolType()
 {
     Instruction* type;
     if (groupedTypes[OpTypeBool].size() == 0) {
@@ -190,14 +111,15 @@
         groupedTypes[OpTypeBool].push_back(type);
         constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
         module.mapInstruction(type);
+
+        if (emitNonSemanticShaderDebugInfo) {
+            auto const debugResultId = makeBoolDebugType(32);
+            debugId[type->getResultId()] = debugResultId;
+        }
+
     } else
         type = groupedTypes[OpTypeBool].back();
 
-    if (emitNonSemanticShaderDebugInfo && !compilerGenerated)
-    {
-        auto const debugResultId = makeBoolDebugType(32);
-        debugId[type->getResultId()] = debugResultId;
-    }
 
     return type->getResultId();
 }
@@ -235,12 +157,18 @@
 
     // not found, make it
     type = new Instruction(getUniqueId(), NoType, OpTypePointer);
+    type->reserveOperands(2);
     type->addImmediateOperand(storageClass);
     type->addIdOperand(pointee);
     groupedTypes[OpTypePointer].push_back(type);
     constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
     module.mapInstruction(type);
 
+    if (emitNonSemanticShaderDebugInfo) {
+        const Id debugResultId = makePointerDebugType(storageClass, pointee);
+        debugId[type->getResultId()] = debugResultId;
+    }
+
     return type->getResultId();
 }
 
@@ -254,6 +182,10 @@
     constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
     module.mapInstruction(type);
 
+    if (emitNonSemanticShaderDebugInfo) {
+        const Id debugResultId = makeForwardPointerDebugType(storageClass);
+        debugId[type->getResultId()] = debugResultId;
+    }
     return type->getResultId();
 }
 
@@ -269,12 +201,22 @@
     }
 
     type = new Instruction(forwardPointerType, NoType, OpTypePointer);
+    type->reserveOperands(2);
     type->addImmediateOperand(storageClass);
     type->addIdOperand(pointee);
     groupedTypes[OpTypePointer].push_back(type);
     constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
     module.mapInstruction(type);
 
+    // If we are emitting nonsemantic debuginfo, we need to patch the debug pointer type
+    // that was emitted alongside the forward pointer, now that we have a pointee debug
+    // type for it to point to.
+    if (emitNonSemanticShaderDebugInfo) {
+        Instruction *debugForwardPointer = module.getInstruction(debugId[forwardPointerType]);
+        assert(debugId[pointee]);
+        debugForwardPointer->setIdOperand(2, debugId[pointee]);
+    }
+
     return type->getResultId();
 }
 
@@ -291,6 +233,7 @@
 
     // not found, make it
     type = new Instruction(getUniqueId(), NoType, OpTypeInt);
+    type->reserveOperands(2);
     type->addImmediateOperand(width);
     type->addImmediateOperand(hasSign ? 1 : 0);
     groupedTypes[OpTypeInt].push_back(type);
@@ -421,6 +364,7 @@
 
     // not found, make it
     type = new Instruction(getUniqueId(), NoType, OpTypeVector);
+    type->reserveOperands(2);
     type->addIdOperand(component);
     type->addImmediateOperand(size);
     groupedTypes[OpTypeVector].push_back(type);
@@ -453,6 +397,7 @@
 
     // not found, make it
     type = new Instruction(getUniqueId(), NoType, OpTypeMatrix);
+    type->reserveOperands(2);
     type->addIdOperand(column);
     type->addImmediateOperand(cols);
     groupedTypes[OpTypeMatrix].push_back(type);
@@ -484,6 +429,7 @@
 
     // not found, make it
     type = new Instruction(getUniqueId(), NoType, OpTypeCooperativeMatrixKHR);
+    type->reserveOperands(5);
     type->addIdOperand(component);
     type->addIdOperand(scope);
     type->addIdOperand(rows);
@@ -493,6 +439,43 @@
     constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
     module.mapInstruction(type);
 
+    if (emitNonSemanticShaderDebugInfo)
+    {
+        // Find a name for one of the parameters. It can either come from debuginfo for another
+        // type, or an OpName from a constant.
+        auto const findName = [&](Id id) {
+            Id id2 = debugId[id];
+            for (auto &t : groupedDebugTypes[NonSemanticShaderDebugInfo100DebugTypeBasic]) {
+                if (t->getResultId() == id2) {
+                    for (auto &s : strings) {
+                        if (s->getResultId() == t->getIdOperand(2)) {
+                            return s->getNameString();
+                        }
+                    }
+                }
+            }
+            for (auto &t : names) {
+                if (t->getIdOperand(0) == id) {
+                    return t->getNameString();
+                }
+            }
+            return "unknown";
+        };
+        std::string debugName = "coopmat<";
+        debugName += std::string(findName(component)) + ", ";
+        if (isConstantScalar(scope)) {
+            debugName += std::string("gl_Scope") + std::string(spv::ScopeToString((spv::Scope)getConstantScalar(scope))) + ", ";
+        } else {
+            debugName += std::string(findName(scope)) + ", ";
+        }
+        debugName += std::string(findName(rows)) + ", ";
+        debugName += std::string(findName(cols)) + ">";
+        // There's no nonsemantic debug info instruction for cooperative matrix types,
+        // use opaque composite instead.
+        auto const debugResultId = makeCompositeDebugType({}, debugName.c_str(), NonSemanticShaderDebugInfo100Structure, true);
+        debugId[type->getResultId()] = debugResultId;
+    }
+
     return type->getResultId();
 }
 
@@ -509,6 +492,7 @@
 
     // not found, make it
     type = new Instruction(getUniqueId(), NoType, OpTypeCooperativeMatrixNV);
+    type->reserveOperands(4);
     type->addIdOperand(component);
     type->addIdOperand(scope);
     type->addIdOperand(rows);
@@ -550,6 +534,7 @@
 
     // not found, make it
     type = new Instruction(getUniqueId(), NoType, opcode);
+    type->reserveOperands(operands.size());
     for (size_t op = 0; op < operands.size(); ++op) {
         if (operands[op].isId)
             type->addIdOperand(operands[op].word);
@@ -582,6 +567,7 @@
 
     // not found, make it
     type = new Instruction(getUniqueId(), NoType, OpTypeArray);
+    type->reserveOperands(2);
     type->addIdOperand(element);
     type->addIdOperand(sizeId);
     groupedTypes[OpTypeArray].push_back(type);
@@ -648,6 +634,7 @@
     // not found, make it
     Id typeId = getUniqueId();
     type = new Instruction(typeId, NoType, OpTypeFunction);
+    type->reserveOperands(paramTypes.size() + 1);
     type->addIdOperand(returnType);
     for (int p = 0; p < (int)paramTypes.size(); ++p)
         type->addIdOperand(paramTypes[p]);
@@ -670,6 +657,7 @@
 
     Id typeId = getUniqueId();
     auto type = new Instruction(typeId, makeVoidType(), OpExtInst);
+    type->reserveOperands(paramTypes.size() + 4);
     type->addIdOperand(nonSemanticShaderDebugInfo);
     type->addImmediateOperand(NonSemanticShaderDebugInfo100DebugTypeFunction);
     type->addIdOperand(makeUintConstant(NonSemanticShaderDebugInfo100FlagIsPublic));
@@ -708,6 +696,7 @@
 
     // not found, make it
     type = new Instruction(getUniqueId(), NoType, OpTypeImage);
+    type->reserveOperands(7);
     type->addIdOperand(sampledType);
     type->addImmediateOperand(   dim);
     type->addImmediateOperand(  depth ? 1 : 0);
@@ -818,6 +807,7 @@
         return debugInfoNone;
 
     Instruction* inst = new Instruction(getUniqueId(), makeVoidType(), OpExtInst);
+    inst->reserveOperands(2);
     inst->addIdOperand(nonSemanticShaderDebugInfo);
     inst->addImmediateOperand(NonSemanticShaderDebugInfo100DebugInfoNone);
 
@@ -842,6 +832,7 @@
     }
 
     type = new Instruction(getUniqueId(), makeVoidType(), OpExtInst);
+    type->reserveOperands(6);
     type->addIdOperand(nonSemanticShaderDebugInfo);
     type->addImmediateOperand(NonSemanticShaderDebugInfo100DebugTypeBasic);
 
@@ -879,6 +870,7 @@
 
     // not found, make it
     type = new Instruction(getUniqueId(), makeVoidType(), OpExtInst);
+    type->reserveOperands(6);
     type->addIdOperand(nonSemanticShaderDebugInfo);
     type->addImmediateOperand(NonSemanticShaderDebugInfo100DebugTypeBasic);
     type->addIdOperand(nameId); // name id
@@ -918,6 +910,7 @@
 
     // not found, make it
     type = new Instruction(getUniqueId(), makeVoidType(), OpExtInst);
+    type->reserveOperands(6);
     type->addIdOperand(nonSemanticShaderDebugInfo);
     type->addImmediateOperand(NonSemanticShaderDebugInfo100DebugTypeBasic);
     type->addIdOperand(nameId); // name id
@@ -948,6 +941,7 @@
 
     // not found, make it
     type = new Instruction(getUniqueId(), makeVoidType(), OpExtInst);
+    type->reserveOperands(4);
     type->addIdOperand(nonSemanticShaderDebugInfo);
     type->addImmediateOperand(sequenceType);
     type->addIdOperand(debugId[baseType]); // base type
@@ -983,6 +977,7 @@
 
     // not found, make it
     type = new Instruction(getUniqueId(), makeVoidType(), OpExtInst);
+    type->reserveOperands(5);
     type->addIdOperand(nonSemanticShaderDebugInfo);
     type->addImmediateOperand(NonSemanticShaderDebugInfo100DebugTypeMatrix);
     type->addIdOperand(debugId[vectorType]); // vector type id
@@ -1001,11 +996,12 @@
     assert(debugId[memberType] != 0);
 
     Instruction* type = new Instruction(getUniqueId(), makeVoidType(), OpExtInst);
+    type->reserveOperands(10);
     type->addIdOperand(nonSemanticShaderDebugInfo);
     type->addImmediateOperand(NonSemanticShaderDebugInfo100DebugTypeMember);
     type->addIdOperand(getStringId(debugTypeLoc.name)); // name id
     type->addIdOperand(debugId[memberType]); // type id
-    type->addIdOperand(makeDebugSource(sourceFileStringId)); // source id TODO: verify this works across include directives
+    type->addIdOperand(makeDebugSource(currentFileId)); // source id
     type->addIdOperand(makeUintConstant(debugTypeLoc.line)); // line id TODO: currentLine is always zero
     type->addIdOperand(makeUintConstant(debugTypeLoc.column)); // TODO: column id
     type->addIdOperand(makeUintConstant(0)); // TODO: offset id
@@ -1040,11 +1036,12 @@
 
     // Create The structure debug type.
     Instruction* type = new Instruction(getUniqueId(), makeVoidType(), OpExtInst);
+    type->reserveOperands(memberDebugTypes.size() + 11);
     type->addIdOperand(nonSemanticShaderDebugInfo);
     type->addImmediateOperand(NonSemanticShaderDebugInfo100DebugTypeComposite);
     type->addIdOperand(getStringId(name)); // name id
     type->addIdOperand(makeUintConstant(tag)); // tag id
-    type->addIdOperand(makeDebugSource(sourceFileStringId)); // source id TODO: verify this works across include directives
+    type->addIdOperand(makeDebugSource(currentFileId)); // source id
     type->addIdOperand(makeUintConstant(currentLine)); // line id TODO: currentLine always zero?
     type->addIdOperand(makeUintConstant(0)); // TODO: column id
     type->addIdOperand(makeDebugCompilationUnit()); // scope id
@@ -1069,24 +1066,82 @@
     return type->getResultId();
 }
 
+Id Builder::makePointerDebugType(StorageClass storageClass, Id const baseType)
+{
+    const Id debugBaseType = debugId[baseType];
+    if (!debugBaseType) {
+        return makeDebugInfoNone();
+    }
+    const Id scID = makeUintConstant(storageClass);
+    for (Instruction* otherType : groupedDebugTypes[NonSemanticShaderDebugInfo100DebugTypePointer]) {
+        if (otherType->getIdOperand(2) == debugBaseType &&
+            otherType->getIdOperand(3) == scID) {
+            return otherType->getResultId();
+        }
+    }
+
+    Instruction* type = new Instruction(getUniqueId(), makeVoidType(), OpExtInst);
+    type->reserveOperands(5);
+    type->addIdOperand(nonSemanticShaderDebugInfo);
+    type->addImmediateOperand(NonSemanticShaderDebugInfo100DebugTypePointer);
+    type->addIdOperand(debugBaseType);
+    type->addIdOperand(scID);
+    type->addIdOperand(makeUintConstant(0));
+
+    groupedDebugTypes[NonSemanticShaderDebugInfo100DebugTypePointer].push_back(type);
+    constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
+    module.mapInstruction(type);
+
+    return type->getResultId();
+}
+
+// Emit a OpExtInstWithForwardRefsKHR nonsemantic instruction for a pointer debug type
+// where we don't have the pointee yet. Since we don't have the pointee yet, it just
+// points to itself and we rely on patching it later.
+Id Builder::makeForwardPointerDebugType(StorageClass storageClass)
+{
+    const Id scID = makeUintConstant(storageClass);
+
+    this->addExtension(spv::E_SPV_KHR_relaxed_extended_instruction);
+
+    Instruction *type = new Instruction(getUniqueId(), makeVoidType(), OpExtInstWithForwardRefsKHR);
+    type->addIdOperand(nonSemanticShaderDebugInfo);
+    type->addImmediateOperand(NonSemanticShaderDebugInfo100DebugTypePointer);
+    type->addIdOperand(type->getResultId());
+    type->addIdOperand(scID);
+    type->addIdOperand(makeUintConstant(0));
+
+    groupedDebugTypes[NonSemanticShaderDebugInfo100DebugTypePointer].push_back(type);
+    constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
+    module.mapInstruction(type);
+
+    return type->getResultId();
+}
+
 Id Builder::makeDebugSource(const Id fileName) {
     if (debugSourceId.find(fileName) != debugSourceId.end())
         return debugSourceId[fileName];
     spv::Id resultId = getUniqueId();
     Instruction* sourceInst = new Instruction(resultId, makeVoidType(), OpExtInst);
+    sourceInst->reserveOperands(3);
     sourceInst->addIdOperand(nonSemanticShaderDebugInfo);
     sourceInst->addImmediateOperand(NonSemanticShaderDebugInfo100DebugSource);
     sourceInst->addIdOperand(fileName);
     if (emitNonSemanticShaderDebugSource) {
         spv::Id sourceId = 0;
-        if (fileName == sourceFileStringId) {
+        if (fileName == mainFileId) {
             sourceId = getStringId(sourceText);
         } else {
             auto incItr = includeFiles.find(fileName);
-            assert(incItr != includeFiles.end());
-            sourceId = getStringId(*incItr->second);
+            if (incItr != includeFiles.end()) {
+                sourceId = getStringId(*incItr->second);
+            }
         }
-        sourceInst->addIdOperand(sourceId);
+
+        // We omit the optional source text item if not available in glslang
+        if (sourceId != 0) {
+            sourceInst->addIdOperand(sourceId);
+        }
     }
     constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(sourceInst));
     module.mapInstruction(sourceInst);
@@ -1099,11 +1154,12 @@
         return nonSemanticShaderCompilationUnitId;
     spv::Id resultId = getUniqueId();
     Instruction* sourceInst = new Instruction(resultId, makeVoidType(), OpExtInst);
+    sourceInst->reserveOperands(6);
     sourceInst->addIdOperand(nonSemanticShaderDebugInfo);
     sourceInst->addImmediateOperand(NonSemanticShaderDebugInfo100DebugCompilationUnit);
     sourceInst->addIdOperand(makeUintConstant(1)); // TODO(greg-lunarg): Get rid of magic number
     sourceInst->addIdOperand(makeUintConstant(4)); // TODO(greg-lunarg): Get rid of magic number
-    sourceInst->addIdOperand(makeDebugSource(sourceFileStringId));
+    sourceInst->addIdOperand(makeDebugSource(mainFileId));
     sourceInst->addIdOperand(makeUintConstant(sourceLang));
     constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(sourceInst));
     module.mapInstruction(sourceInst);
@@ -1122,11 +1178,12 @@
     assert(type != 0);
 
     Instruction* inst = new Instruction(getUniqueId(), makeVoidType(), OpExtInst);
+    inst->reserveOperands(11);
     inst->addIdOperand(nonSemanticShaderDebugInfo);
     inst->addImmediateOperand(NonSemanticShaderDebugInfo100DebugGlobalVariable);
     inst->addIdOperand(getStringId(name)); // name id
     inst->addIdOperand(type); // type id
-    inst->addIdOperand(makeDebugSource(sourceFileStringId)); // source id
+    inst->addIdOperand(makeDebugSource(currentFileId)); // source id
     inst->addIdOperand(makeUintConstant(currentLine)); // line id TODO: currentLine always zero?
     inst->addIdOperand(makeUintConstant(0)); // TODO: column id
     inst->addIdOperand(makeDebugCompilationUnit()); // scope id
@@ -1146,11 +1203,12 @@
     assert(!currentDebugScopeId.empty());
 
     Instruction* inst = new Instruction(getUniqueId(), makeVoidType(), OpExtInst);
+    inst->reserveOperands(9);
     inst->addIdOperand(nonSemanticShaderDebugInfo);
     inst->addImmediateOperand(NonSemanticShaderDebugInfo100DebugLocalVariable);
     inst->addIdOperand(getStringId(name)); // name id
     inst->addIdOperand(type); // type id
-    inst->addIdOperand(makeDebugSource(sourceFileStringId)); // source id
+    inst->addIdOperand(makeDebugSource(currentFileId)); // source id
     inst->addIdOperand(makeUintConstant(currentLine)); // line id
     inst->addIdOperand(makeUintConstant(0)); // TODO: column id
     inst->addIdOperand(currentDebugScopeId.top()); // scope id
@@ -1171,6 +1229,7 @@
         return debugExpression;
 
     Instruction* inst = new Instruction(getUniqueId(), makeVoidType(), OpExtInst);
+    inst->reserveOperands(2);
     inst->addIdOperand(nonSemanticShaderDebugInfo);
     inst->addImmediateOperand(NonSemanticShaderDebugInfo100DebugExpression);
 
@@ -1182,15 +1241,30 @@
     return debugExpression;
 }
 
-Id Builder::makeDebugDeclare(Id const debugLocalVariable, Id const localVariable)
+Id Builder::makeDebugDeclare(Id const debugLocalVariable, Id const pointer)
 {
     Instruction* inst = new Instruction(getUniqueId(), makeVoidType(), OpExtInst);
+    inst->reserveOperands(5);
     inst->addIdOperand(nonSemanticShaderDebugInfo);
     inst->addImmediateOperand(NonSemanticShaderDebugInfo100DebugDeclare);
     inst->addIdOperand(debugLocalVariable); // debug local variable id
-    inst->addIdOperand(localVariable); // local variable id
+    inst->addIdOperand(pointer); // pointer to local variable id
     inst->addIdOperand(makeDebugExpression()); // expression id
-    buildPoint->addInstruction(std::unique_ptr<Instruction>(inst));
+    addInstruction(std::unique_ptr<Instruction>(inst));
+
+    return inst->getResultId();
+}
+
+Id Builder::makeDebugValue(Id const debugLocalVariable, Id const value)
+{
+    Instruction* inst = new Instruction(getUniqueId(), makeVoidType(), OpExtInst);
+    inst->reserveOperands(5);
+    inst->addIdOperand(nonSemanticShaderDebugInfo);
+    inst->addImmediateOperand(NonSemanticShaderDebugInfo100DebugValue);
+    inst->addIdOperand(debugLocalVariable); // debug local variable id
+    inst->addIdOperand(value); // value of local variable id
+    inst->addIdOperand(makeDebugExpression()); // expression id
+    addInstruction(std::unique_ptr<Instruction>(inst));
 
     return inst->getResultId();
 }
@@ -1203,6 +1277,10 @@
         groupedTypes[OpTypeAccelerationStructureKHR].push_back(type);
         constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
         module.mapInstruction(type);
+        if (emitNonSemanticShaderDebugInfo) {
+            spv::Id debugType = makeCompositeDebugType({}, "accelerationStructure", NonSemanticShaderDebugInfo100Structure, true);
+            debugId[type->getResultId()] = debugType;
+        }
     } else {
         type = groupedTypes[OpTypeAccelerationStructureKHR].back();
     }
@@ -1218,6 +1296,10 @@
         groupedTypes[OpTypeRayQueryKHR].push_back(type);
         constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
         module.mapInstruction(type);
+        if (emitNonSemanticShaderDebugInfo) {
+            spv::Id debugType = makeCompositeDebugType({}, "rayQuery", NonSemanticShaderDebugInfo100Structure, true);
+            debugId[type->getResultId()] = debugType;
+        }
     } else {
         type = groupedTypes[OpTypeRayQueryKHR].back();
     }
@@ -1267,7 +1349,7 @@
     }
 }
 
-int Builder::getNumTypeConstituents(Id typeId) const
+unsigned int Builder::getNumTypeConstituents(Id typeId) const
 {
     Instruction* instr = module.getInstruction(typeId);
 
@@ -1475,12 +1557,14 @@
     case OpConstantFalse:
     case OpConstant:
     case OpConstantComposite:
+    case OpConstantCompositeReplicateEXT:
     case OpConstantSampler:
     case OpConstantNull:
     case OpSpecConstantTrue:
     case OpSpecConstantFalse:
     case OpSpecConstant:
     case OpSpecConstantComposite:
+    case OpSpecConstantCompositeReplicateEXT:
     case OpSpecConstantOp:
         return true;
     default:
@@ -1497,17 +1581,7 @@
     case OpSpecConstant:
     case OpSpecConstantComposite:
     case OpSpecConstantOp:
-        return true;
-    default:
-        return false;
-    }
-}
-
-bool Builder::isRayTracingOpCode(Op opcode) const
-{
-    switch (opcode) {
-    case OpTypeAccelerationStructureKHR:
-    case OpTypeRayQueryKHR:
+    case OpSpecConstantCompositeReplicateEXT:
         return true;
     default:
         return false;
@@ -1604,6 +1678,7 @@
     }
 
     Instruction* c = new Instruction(getUniqueId(), typeId, opcode);
+    c->reserveOperands(2);
     c->addImmediateOperand(op1);
     c->addImmediateOperand(op2);
     constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(c));
@@ -1657,6 +1732,7 @@
     }
 
     Instruction* c = new Instruction(getUniqueId(), typeId, opcode);
+    c->reserveOperands(2);
     c->addImmediateOperand(op1);
     c->addImmediateOperand(op2);
     constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(c));
@@ -1782,10 +1858,27 @@
 // Comments in header
 Id Builder::makeCompositeConstant(Id typeId, const std::vector<Id>& members, bool specConstant)
 {
-    Op opcode = specConstant ? OpSpecConstantComposite : OpConstantComposite;
     assert(typeId);
     Op typeClass = getTypeClass(typeId);
 
+    bool replicate = false;
+    size_t numMembers = members.size();
+    if (useReplicatedComposites) {
+        // use replicate if all members are the same
+        replicate = numMembers > 0 &&
+            std::equal(members.begin() + 1, members.end(), members.begin());
+
+        if (replicate) {
+            numMembers = 1;
+            addCapability(spv::CapabilityReplicatedCompositesEXT);
+            addExtension(spv::E_SPV_EXT_replicated_composites);
+        }
+    }
+
+    Op opcode = replicate ?
+        (specConstant ? OpSpecConstantCompositeReplicateEXT : OpConstantCompositeReplicateEXT) :
+        (specConstant ? OpSpecConstantComposite : OpConstantComposite);
+
     switch (typeClass) {
     case OpTypeVector:
     case OpTypeArray:
@@ -1811,7 +1904,8 @@
     }
 
     Instruction* c = new Instruction(getUniqueId(), typeId, opcode);
-    for (int op = 0; op < (int)members.size(); ++op)
+    c->reserveOperands(members.size());
+    for (size_t op = 0; op < numMembers; ++op)
         c->addIdOperand(members[op]);
     constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(c));
     if (typeClass == OpTypeStruct)
@@ -1826,6 +1920,7 @@
 Instruction* Builder::addEntryPoint(ExecutionModel model, Function* function, const char* name)
 {
     Instruction* entryPoint = new Instruction(OpEntryPoint);
+    entryPoint->reserveOperands(3);
     entryPoint->addImmediateOperand(model);
     entryPoint->addIdOperand(function->getId());
     entryPoint->addStringOperand(name);
@@ -1843,6 +1938,7 @@
         return;
 
     Instruction* instr = new Instruction(OpExecutionMode);
+    instr->reserveOperands(3);
     instr->addIdOperand(entryPoint->getId());
     instr->addImmediateOperand(mode);
     if (value1 >= 0)
@@ -1862,6 +1958,7 @@
         return;
 
     Instruction* instr = new Instruction(OpExecutionMode);
+    instr->reserveOperands(literals.size() + 2);
     instr->addIdOperand(entryPoint->getId());
     instr->addImmediateOperand(mode);
     for (auto literal : literals)
@@ -1877,6 +1974,7 @@
         return;
 
     Instruction* instr = new Instruction(OpExecutionModeId);
+    instr->reserveOperands(operandIds.size() + 2);
     instr->addIdOperand(entryPoint->getId());
     instr->addImmediateOperand(mode);
     for (auto operandId : operandIds)
@@ -1888,6 +1986,7 @@
 void Builder::addName(Id id, const char* string)
 {
     Instruction* name = new Instruction(OpName);
+    name->reserveOperands(2);
     name->addIdOperand(id);
     name->addStringOperand(string);
 
@@ -1897,6 +1996,7 @@
 void Builder::addMemberName(Id id, int memberNumber, const char* string)
 {
     Instruction* name = new Instruction(OpMemberName);
+    name->reserveOperands(3);
     name->addIdOperand(id);
     name->addImmediateOperand(memberNumber);
     name->addStringOperand(string);
@@ -1910,12 +2010,13 @@
         return;
 
     Instruction* dec = new Instruction(OpDecorate);
+    dec->reserveOperands(2);
     dec->addIdOperand(id);
     dec->addImmediateOperand(decoration);
     if (num >= 0)
         dec->addImmediateOperand(num);
 
-    decorations.push_back(std::unique_ptr<Instruction>(dec));
+    decorations.insert(std::unique_ptr<Instruction>(dec));
 }
 
 void Builder::addDecoration(Id id, Decoration decoration, const char* s)
@@ -1924,11 +2025,12 @@
         return;
 
     Instruction* dec = new Instruction(OpDecorateString);
+    dec->reserveOperands(3);
     dec->addIdOperand(id);
     dec->addImmediateOperand(decoration);
     dec->addStringOperand(s);
 
-    decorations.push_back(std::unique_ptr<Instruction>(dec));
+    decorations.insert(std::unique_ptr<Instruction>(dec));
 }
 
 void Builder::addDecoration(Id id, Decoration decoration, const std::vector<unsigned>& literals)
@@ -1937,12 +2039,13 @@
         return;
 
     Instruction* dec = new Instruction(OpDecorate);
+    dec->reserveOperands(literals.size() + 2);
     dec->addIdOperand(id);
     dec->addImmediateOperand(decoration);
     for (auto literal : literals)
         dec->addImmediateOperand(literal);
 
-    decorations.push_back(std::unique_ptr<Instruction>(dec));
+    decorations.insert(std::unique_ptr<Instruction>(dec));
 }
 
 void Builder::addDecoration(Id id, Decoration decoration, const std::vector<const char*>& strings)
@@ -1951,22 +2054,24 @@
         return;
 
     Instruction* dec = new Instruction(OpDecorateString);
+    dec->reserveOperands(strings.size() + 2);
     dec->addIdOperand(id);
     dec->addImmediateOperand(decoration);
     for (auto string : strings)
         dec->addStringOperand(string);
 
-    decorations.push_back(std::unique_ptr<Instruction>(dec));
+    decorations.insert(std::unique_ptr<Instruction>(dec));
 }
 
 void Builder::addLinkageDecoration(Id id, const char* name, spv::LinkageType linkType) {
     Instruction* dec = new Instruction(OpDecorate);
+    dec->reserveOperands(4);
     dec->addIdOperand(id);
     dec->addImmediateOperand(spv::DecorationLinkageAttributes);
     dec->addStringOperand(name);
     dec->addImmediateOperand(linkType);
 
-    decorations.push_back(std::unique_ptr<Instruction>(dec));
+    decorations.insert(std::unique_ptr<Instruction>(dec));
 }
 
 void Builder::addDecorationId(Id id, Decoration decoration, Id idDecoration)
@@ -1975,11 +2080,12 @@
         return;
 
     Instruction* dec = new Instruction(OpDecorateId);
+    dec->reserveOperands(3);
     dec->addIdOperand(id);
     dec->addImmediateOperand(decoration);
     dec->addIdOperand(idDecoration);
 
-    decorations.push_back(std::unique_ptr<Instruction>(dec));
+    decorations.insert(std::unique_ptr<Instruction>(dec));
 }
 
 void Builder::addDecorationId(Id id, Decoration decoration, const std::vector<Id>& operandIds)
@@ -1988,13 +2094,14 @@
         return;
 
     Instruction* dec = new Instruction(OpDecorateId);
+    dec->reserveOperands(operandIds.size() + 2);
     dec->addIdOperand(id);
     dec->addImmediateOperand(decoration);
 
     for (auto operandId : operandIds)
         dec->addIdOperand(operandId);
 
-    decorations.push_back(std::unique_ptr<Instruction>(dec));
+    decorations.insert(std::unique_ptr<Instruction>(dec));
 }
 
 void Builder::addMemberDecoration(Id id, unsigned int member, Decoration decoration, int num)
@@ -2003,13 +2110,14 @@
         return;
 
     Instruction* dec = new Instruction(OpMemberDecorate);
+    dec->reserveOperands(3);
     dec->addIdOperand(id);
     dec->addImmediateOperand(member);
     dec->addImmediateOperand(decoration);
     if (num >= 0)
         dec->addImmediateOperand(num);
 
-    decorations.push_back(std::unique_ptr<Instruction>(dec));
+    decorations.insert(std::unique_ptr<Instruction>(dec));
 }
 
 void Builder::addMemberDecoration(Id id, unsigned int member, Decoration decoration, const char *s)
@@ -2018,12 +2126,13 @@
         return;
 
     Instruction* dec = new Instruction(OpMemberDecorateStringGOOGLE);
+    dec->reserveOperands(4);
     dec->addIdOperand(id);
     dec->addImmediateOperand(member);
     dec->addImmediateOperand(decoration);
     dec->addStringOperand(s);
 
-    decorations.push_back(std::unique_ptr<Instruction>(dec));
+    decorations.insert(std::unique_ptr<Instruction>(dec));
 }
 
 void Builder::addMemberDecoration(Id id, unsigned int member, Decoration decoration, const std::vector<unsigned>& literals)
@@ -2032,13 +2141,14 @@
         return;
 
     Instruction* dec = new Instruction(OpMemberDecorate);
+    dec->reserveOperands(literals.size() + 3);
     dec->addIdOperand(id);
     dec->addImmediateOperand(member);
     dec->addImmediateOperand(decoration);
     for (auto literal : literals)
         dec->addImmediateOperand(literal);
 
-    decorations.push_back(std::unique_ptr<Instruction>(dec));
+    decorations.insert(std::unique_ptr<Instruction>(dec));
 }
 
 void Builder::addMemberDecoration(Id id, unsigned int member, Decoration decoration, const std::vector<const char*>& strings)
@@ -2047,13 +2157,70 @@
         return;
 
     Instruction* dec = new Instruction(OpMemberDecorateString);
+    dec->reserveOperands(strings.size() + 3);
     dec->addIdOperand(id);
     dec->addImmediateOperand(member);
     dec->addImmediateOperand(decoration);
     for (auto string : strings)
         dec->addStringOperand(string);
 
-    decorations.push_back(std::unique_ptr<Instruction>(dec));
+    decorations.insert(std::unique_ptr<Instruction>(dec));
+}
+
+void Builder::addInstruction(std::unique_ptr<Instruction> inst) {
+    // Phis must appear first in their block, don't insert line tracking instructions
+    // in front of them, just add the OpPhi and return.
+    if (inst->getOpCode() == OpPhi) {
+        buildPoint->addInstruction(std::move(inst));
+        return;
+    }
+    // Optionally insert OpDebugScope
+    if (emitNonSemanticShaderDebugInfo && dirtyScopeTracker) {
+        if (buildPoint->updateDebugScope(currentDebugScopeId.top())) {
+            auto scopeInst = std::make_unique<Instruction>(getUniqueId(), makeVoidType(), OpExtInst);
+            scopeInst->reserveOperands(3);
+            scopeInst->addIdOperand(nonSemanticShaderDebugInfo);
+            scopeInst->addImmediateOperand(NonSemanticShaderDebugInfo100DebugScope);
+            scopeInst->addIdOperand(currentDebugScopeId.top());
+            buildPoint->addInstruction(std::move(scopeInst));
+        }
+
+        dirtyScopeTracker = false;
+    }
+
+    // Insert OpLine/OpDebugLine if the debug source location has changed
+    if (trackDebugInfo && dirtyLineTracker) {
+        if (buildPoint->updateDebugSourceLocation(currentLine, 0, currentFileId)) {
+            if (emitSpirvDebugInfo) {
+                auto lineInst = std::make_unique<Instruction>(OpLine);
+                lineInst->reserveOperands(3);
+                lineInst->addIdOperand(currentFileId);
+                lineInst->addImmediateOperand(currentLine);
+                lineInst->addImmediateOperand(0);
+                buildPoint->addInstruction(std::move(lineInst));
+            }
+            if (emitNonSemanticShaderDebugInfo) {
+                auto lineInst = std::make_unique<Instruction>(getUniqueId(), makeVoidType(), OpExtInst);
+                lineInst->reserveOperands(7);
+                lineInst->addIdOperand(nonSemanticShaderDebugInfo);
+                lineInst->addImmediateOperand(NonSemanticShaderDebugInfo100DebugLine);
+                lineInst->addIdOperand(makeDebugSource(currentFileId));
+                lineInst->addIdOperand(makeUintConstant(currentLine));
+                lineInst->addIdOperand(makeUintConstant(currentLine));
+                lineInst->addIdOperand(makeUintConstant(0));
+                lineInst->addIdOperand(makeUintConstant(0));
+                buildPoint->addInstruction(std::move(lineInst));
+            }
+        }
+
+        dirtyLineTracker = false;
+    }
+
+    buildPoint->addInstruction(std::move(inst));
+}
+
+void Builder::addInstructionNoDebugInfo(std::unique_ptr<Instruction> inst) {
+    buildPoint->addInstruction(std::move(inst));
 }
 
 // Comments in header
@@ -2061,11 +2228,6 @@
 {
     assert(! entryPointFunction);
 
-    Block* entry;
-    std::vector<Id> paramsTypes;
-    std::vector<char const*> paramNames;
-    std::vector<std::vector<Decoration>> decorations;
-
     auto const returnType = makeVoidType();
 
     restoreNonSemanticShaderDebugInfo = emitNonSemanticShaderDebugInfo;
@@ -2073,7 +2235,8 @@
         emitNonSemanticShaderDebugInfo = false;
     }
 
-    entryPointFunction = makeFunctionEntry(NoPrecision, returnType, entryPoint, LinkageTypeMax, paramsTypes, paramNames, decorations, &entry);
+    Block* entry = nullptr;
+    entryPointFunction = makeFunctionEntry(NoPrecision, returnType, entryPoint, LinkageTypeMax, {}, {}, &entry);
 
     emitNonSemanticShaderDebugInfo = restoreNonSemanticShaderDebugInfo;
 
@@ -2082,8 +2245,8 @@
 
 // Comments in header
 Function* Builder::makeFunctionEntry(Decoration precision, Id returnType, const char* name, LinkageType linkType,
-                                     const std::vector<Id>& paramTypes, const std::vector<char const*>& paramNames,
-                                     const std::vector<std::vector<Decoration>>& decorations, Block **entry)
+                                     const std::vector<Id>& paramTypes,
+                                     const std::vector<std::vector<Decoration>>& decorations, Block** entry)
 {
     // Make the function and initial instructions in it
     Id typeId = makeFunctionType(returnType, paramTypes);
@@ -2101,13 +2264,9 @@
         }
     }
 
-    // Make the debug function instruction
+    // reset last debug scope
     if (emitNonSemanticShaderDebugInfo) {
-        Id nameId = getStringId(unmangleFunctionName(name));
-        Id debugFuncId = makeDebugFunction(function, nameId, typeId);
-        debugId[funcId] = debugFuncId;
-        currentDebugScopeId.push(debugFuncId);
-        lastDebugScopeId = NoResult;
+        dirtyScopeTracker = true;
     }
 
     // CFG
@@ -2116,41 +2275,64 @@
     function->addBlock(*entry);
     setBuildPoint(*entry);
 
-    // DebugScope and DebugLine for parameter DebugDeclares
-    if (emitNonSemanticShaderDebugInfo && (int)paramTypes.size() > 0) {
-        addDebugScopeAndLine(currentFileId, currentLine, 0);
-    }
-
-    if (emitNonSemanticShaderDebugInfo) {
-        assert(paramTypes.size() == paramNames.size());
-        for(size_t p = 0; p < paramTypes.size(); ++p)
-        {
-            auto getParamTypeId = [this](Id const& typeId) {
-                if (isPointerType(typeId) || isArrayType(typeId)) {
-                    return getContainedTypeId(typeId);
-                }
-                else {
-                    return typeId;
-                }
-            };
-            auto const& paramName = paramNames[p];
-            auto const debugLocalVariableId = createDebugLocalVariable(debugId[getParamTypeId(paramTypes[p])], paramName, p+1);
-            debugId[firstParamId + p] = debugLocalVariableId;
-
-            makeDebugDeclare(debugLocalVariableId, firstParamId + p);
-        }
-    }
-
     if (name)
         addName(function->getId(), name);
 
     functions.push_back(std::unique_ptr<Function>(function));
 
+    return function;
+}
+
+void Builder::setupFunctionDebugInfo(Function* function, const char* name, const std::vector<Id>& paramTypes,
+                                     const std::vector<char const*>& paramNames)
+{
+
+    if (!emitNonSemanticShaderDebugInfo)
+        return;
+
+    Id nameId = getStringId(unmangleFunctionName(name));
+    Id funcTypeId = function->getFuncTypeId();
+    assert(debugId[funcTypeId] != 0);
+    Id funcId = function->getId();
+
+    assert(funcId != 0);
+
+    // Make the debug function instruction
+    Id debugFuncId = makeDebugFunction(function, nameId, funcTypeId);
+    debugId[funcId] = debugFuncId;
+    currentDebugScopeId.push(debugFuncId);
+
+    // DebugScope and DebugLine for parameter DebugDeclares
+    assert(paramTypes.size() == paramNames.size());
+    if ((int)paramTypes.size() > 0) {
+        Id firstParamId = function->getParamId(0);
+
+        for (size_t p = 0; p < paramTypes.size(); ++p) {
+            bool passByRef = false;
+            Id paramTypeId = paramTypes[p];
+
+            // For pointer-typed parameters, they are actually passed by reference and we need unwrap the pointer to get the actual parameter type.
+            if (isPointerType(paramTypeId) || isArrayType(paramTypeId)) {
+                passByRef = true;
+                paramTypeId = getContainedTypeId(paramTypeId);
+            }
+
+            auto const& paramName = paramNames[p];
+            auto const debugLocalVariableId = createDebugLocalVariable(debugId[paramTypeId], paramName, p + 1);
+            auto const paramId = static_cast<Id>(firstParamId + p);
+            debugId[paramId] = debugLocalVariableId;
+
+            if (passByRef) {
+                makeDebugDeclare(debugLocalVariableId, paramId);
+            } else {
+                makeDebugValue(debugLocalVariableId, paramId);
+            }
+        }
+    }
+
     // Clear debug scope stack
     if (emitNonSemanticShaderDebugInfo)
         currentDebugScopeId.pop();
-
-    return function;
 }
 
 Id Builder::makeDebugFunction([[maybe_unused]] Function* function, Id nameId, Id funcTypeId)
@@ -2162,32 +2344,34 @@
 
     Id funcId = getUniqueId();
     auto type = new Instruction(funcId, makeVoidType(), OpExtInst);
+    type->reserveOperands(11);
     type->addIdOperand(nonSemanticShaderDebugInfo);
     type->addImmediateOperand(NonSemanticShaderDebugInfo100DebugFunction);
     type->addIdOperand(nameId);
     type->addIdOperand(debugId[funcTypeId]);
-    type->addIdOperand(makeDebugSource(currentFileId)); // Will be fixed later when true filename available
-    type->addIdOperand(makeUintConstant(currentLine)); // Will be fixed later when true line available
+    type->addIdOperand(makeDebugSource(currentFileId)); // TODO: This points to file of definition instead of declaration
+    type->addIdOperand(makeUintConstant(currentLine)); // TODO: This points to line of definition instead of declaration
     type->addIdOperand(makeUintConstant(0)); // column
     type->addIdOperand(makeDebugCompilationUnit()); // scope
     type->addIdOperand(nameId); // linkage name
     type->addIdOperand(makeUintConstant(NonSemanticShaderDebugInfo100FlagIsPublic));
-    type->addIdOperand(makeUintConstant(currentLine)); // TODO(greg-lunarg): correct scope line
+    type->addIdOperand(makeUintConstant(currentLine)); 
     constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
     module.mapInstruction(type);
     return funcId;
 }
 
-Id Builder::makeDebugLexicalBlock(uint32_t line) {
+Id Builder::makeDebugLexicalBlock(uint32_t line, uint32_t column) {
     assert(!currentDebugScopeId.empty());
 
     Id lexId = getUniqueId();
     auto lex = new Instruction(lexId, makeVoidType(), OpExtInst);
+    lex->reserveOperands(6);
     lex->addIdOperand(nonSemanticShaderDebugInfo);
     lex->addImmediateOperand(NonSemanticShaderDebugInfo100DebugLexicalBlock);
     lex->addIdOperand(makeDebugSource(currentFileId));
     lex->addIdOperand(makeUintConstant(line));
-    lex->addIdOperand(makeUintConstant(0)); // column
+    lex->addIdOperand(makeUintConstant(column)); // column
     lex->addIdOperand(currentDebugScopeId.top()); // scope
     constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(lex));
     module.mapInstruction(lex);
@@ -2211,29 +2395,37 @@
     if (retVal) {
         Instruction* inst = new Instruction(NoResult, NoType, OpReturnValue);
         inst->addIdOperand(retVal);
-        buildPoint->addInstruction(std::unique_ptr<Instruction>(inst));
+        addInstruction(std::unique_ptr<Instruction>(inst));
     } else
-        buildPoint->addInstruction(std::unique_ptr<Instruction>(new Instruction(NoResult, NoType, OpReturn)));
+        addInstruction(std::unique_ptr<Instruction>(new Instruction(NoResult, NoType, OpReturn)));
 
     if (! implicit)
         createAndSetNoPredecessorBlock("post-return");
 }
 
 // Comments in header
-void Builder::enterScope(uint32_t line)
+void Builder::enterLexicalBlock(uint32_t line, uint32_t column)
 {
+    if (!emitNonSemanticShaderDebugInfo) {
+        return;
+    }
+
     // Generate new lexical scope debug instruction
-    Id lexId = makeDebugLexicalBlock(line);
+    Id lexId = makeDebugLexicalBlock(line, column);
     currentDebugScopeId.push(lexId);
-    lastDebugScopeId = NoResult;
+    dirtyScopeTracker = true;
 }
 
 // Comments in header
-void Builder::leaveScope()
+void Builder::leaveLexicalBlock()
 {
+    if (!emitNonSemanticShaderDebugInfo) {
+        return;
+    }
+
     // Pop current scope from stack and clear current scope
     currentDebugScopeId.pop();
-    lastDebugScopeId = NoResult;
+    dirtyScopeTracker = true;
 }
 
 // Comments in header
@@ -2253,11 +2445,12 @@
         // Create DebugFunctionDefinition
         spv::Id resultId = getUniqueId();
         Instruction* defInst = new Instruction(resultId, makeVoidType(), OpExtInst);
+        defInst->reserveOperands(4);
         defInst->addIdOperand(nonSemanticShaderDebugInfo);
         defInst->addImmediateOperand(NonSemanticShaderDebugInfo100DebugFunctionDefinition);
         defInst->addIdOperand(debugId[funcId]);
         defInst->addIdOperand(funcId);
-        buildPoint->addInstruction(std::unique_ptr<Instruction>(defInst));
+        addInstruction(std::unique_ptr<Instruction>(defInst));
     }
 
     if (auto linkType = function->getLinkType(); linkType != LinkageTypeMax) {
@@ -2293,7 +2486,7 @@
 // Comments in header
 void Builder::makeStatementTerminator(spv::Op opcode, const char *name)
 {
-    buildPoint->addInstruction(std::unique_ptr<Instruction>(new Instruction(opcode)));
+    addInstruction(std::unique_ptr<Instruction>(new Instruction(opcode)));
     createAndSetNoPredecessorBlock(name);
 }
 
@@ -2336,7 +2529,7 @@
         constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(inst));
         module.mapInstruction(inst);
 
-        if (emitNonSemanticShaderDebugInfo && !isRayTracingOpCode(getOpCode(type)))
+        if (emitNonSemanticShaderDebugInfo)
         {
             auto const debugResultId = createDebugGlobalVariable(debugId[type], name, inst->getResultId());
             debugId[inst->getResultId()] = debugResultId;
@@ -2355,7 +2548,7 @@
 Id Builder::createUndefined(Id type)
 {
   Instruction* inst = new Instruction(getUniqueId(), type, OpUndef);
-  buildPoint->addInstruction(std::unique_ptr<Instruction>(inst));
+  addInstruction(std::unique_ptr<Instruction>(inst));
   return inst->getResultId();
 }
 
@@ -2384,6 +2577,7 @@
     unsigned int alignment)
 {
     Instruction* store = new Instruction(OpStore);
+    store->reserveOperands(2);
     store->addIdOperand(lValue);
     store->addIdOperand(rValue);
 
@@ -2399,7 +2593,7 @@
         }
     }
 
-    buildPoint->addInstruction(std::unique_ptr<Instruction>(store));
+    addInstruction(std::unique_ptr<Instruction>(store));
 }
 
 // Comments in header
@@ -2421,7 +2615,7 @@
         }
     }
 
-    buildPoint->addInstruction(std::unique_ptr<Instruction>(load));
+    addInstruction(std::unique_ptr<Instruction>(load));
     setPrecision(load->getResultId(), precision);
 
     return load->getResultId();
@@ -2436,10 +2630,11 @@
 
     // Make the instruction
     Instruction* chain = new Instruction(getUniqueId(), typeId, OpAccessChain);
+    chain->reserveOperands(offsets.size() + 1);
     chain->addIdOperand(base);
     for (int i = 0; i < (int)offsets.size(); ++i)
         chain->addIdOperand(offsets[i]);
-    buildPoint->addInstruction(std::unique_ptr<Instruction>(chain));
+    addInstruction(std::unique_ptr<Instruction>(chain));
 
     return chain->getResultId();
 }
@@ -2448,9 +2643,10 @@
 {
     spv::Id intType = makeUintType(32);
     Instruction* length = new Instruction(getUniqueId(), intType, OpArrayLength);
+    length->reserveOperands(2);
     length->addIdOperand(base);
     length->addImmediateOperand(member);
-    buildPoint->addInstruction(std::unique_ptr<Instruction>(length));
+    addInstruction(std::unique_ptr<Instruction>(length));
 
     return length->getResultId();
 }
@@ -2467,7 +2663,7 @@
 
     Instruction* length = new Instruction(getUniqueId(), intType, OpCooperativeMatrixLengthKHR);
     length->addIdOperand(type);
-    buildPoint->addInstruction(std::unique_ptr<Instruction>(length));
+    addInstruction(std::unique_ptr<Instruction>(length));
 
     return length->getResultId();
 }
@@ -2484,7 +2680,7 @@
 
     Instruction* length = new Instruction(getUniqueId(), intType, OpCooperativeMatrixLengthNV);
     length->addIdOperand(type);
-    buildPoint->addInstruction(std::unique_ptr<Instruction>(length));
+    addInstruction(std::unique_ptr<Instruction>(length));
 
     return length->getResultId();
 }
@@ -2498,9 +2694,10 @@
             std::vector<Id>(1, index));
     }
     Instruction* extract = new Instruction(getUniqueId(), typeId, OpCompositeExtract);
+    extract->reserveOperands(2);
     extract->addIdOperand(composite);
     extract->addImmediateOperand(index);
-    buildPoint->addInstruction(std::unique_ptr<Instruction>(extract));
+    addInstruction(std::unique_ptr<Instruction>(extract));
 
     return extract->getResultId();
 }
@@ -2513,10 +2710,11 @@
         return createSpecConstantOp(OpCompositeExtract, typeId, std::vector<Id>(1, composite), indexes);
     }
     Instruction* extract = new Instruction(getUniqueId(), typeId, OpCompositeExtract);
+    extract->reserveOperands(indexes.size() + 1);
     extract->addIdOperand(composite);
     for (int i = 0; i < (int)indexes.size(); ++i)
         extract->addImmediateOperand(indexes[i]);
-    buildPoint->addInstruction(std::unique_ptr<Instruction>(extract));
+    addInstruction(std::unique_ptr<Instruction>(extract));
 
     return extract->getResultId();
 }
@@ -2524,10 +2722,11 @@
 Id Builder::createCompositeInsert(Id object, Id composite, Id typeId, unsigned index)
 {
     Instruction* insert = new Instruction(getUniqueId(), typeId, OpCompositeInsert);
+    insert->reserveOperands(3);
     insert->addIdOperand(object);
     insert->addIdOperand(composite);
     insert->addImmediateOperand(index);
-    buildPoint->addInstruction(std::unique_ptr<Instruction>(insert));
+    addInstruction(std::unique_ptr<Instruction>(insert));
 
     return insert->getResultId();
 }
@@ -2535,11 +2734,12 @@
 Id Builder::createCompositeInsert(Id object, Id composite, Id typeId, const std::vector<unsigned>& indexes)
 {
     Instruction* insert = new Instruction(getUniqueId(), typeId, OpCompositeInsert);
+    insert->reserveOperands(indexes.size() + 2);
     insert->addIdOperand(object);
     insert->addIdOperand(composite);
     for (int i = 0; i < (int)indexes.size(); ++i)
         insert->addImmediateOperand(indexes[i]);
-    buildPoint->addInstruction(std::unique_ptr<Instruction>(insert));
+    addInstruction(std::unique_ptr<Instruction>(insert));
 
     return insert->getResultId();
 }
@@ -2547,9 +2747,10 @@
 Id Builder::createVectorExtractDynamic(Id vector, Id typeId, Id componentIndex)
 {
     Instruction* extract = new Instruction(getUniqueId(), typeId, OpVectorExtractDynamic);
+    extract->reserveOperands(2);
     extract->addIdOperand(vector);
     extract->addIdOperand(componentIndex);
-    buildPoint->addInstruction(std::unique_ptr<Instruction>(extract));
+    addInstruction(std::unique_ptr<Instruction>(extract));
 
     return extract->getResultId();
 }
@@ -2557,10 +2758,11 @@
 Id Builder::createVectorInsertDynamic(Id vector, Id typeId, Id component, Id componentIndex)
 {
     Instruction* insert = new Instruction(getUniqueId(), typeId, OpVectorInsertDynamic);
+    insert->reserveOperands(3);
     insert->addIdOperand(vector);
     insert->addIdOperand(component);
     insert->addIdOperand(componentIndex);
-    buildPoint->addInstruction(std::unique_ptr<Instruction>(insert));
+    addInstruction(std::unique_ptr<Instruction>(insert));
 
     return insert->getResultId();
 }
@@ -2569,7 +2771,7 @@
 void Builder::createNoResultOp(Op opCode)
 {
     Instruction* op = new Instruction(opCode);
-    buildPoint->addInstruction(std::unique_ptr<Instruction>(op));
+    addInstruction(std::unique_ptr<Instruction>(op));
 }
 
 // An opcode that has one id operand, no result id, and no type
@@ -2577,47 +2779,51 @@
 {
     Instruction* op = new Instruction(opCode);
     op->addIdOperand(operand);
-    buildPoint->addInstruction(std::unique_ptr<Instruction>(op));
+    addInstruction(std::unique_ptr<Instruction>(op));
 }
 
 // An opcode that has one or more operands, no result id, and no type
 void Builder::createNoResultOp(Op opCode, const std::vector<Id>& operands)
 {
     Instruction* op = new Instruction(opCode);
-    for (auto it = operands.cbegin(); it != operands.cend(); ++it) {
-        op->addIdOperand(*it);
+    op->reserveOperands(operands.size());
+    for (auto id : operands) {
+        op->addIdOperand(id);
     }
-    buildPoint->addInstruction(std::unique_ptr<Instruction>(op));
+    addInstruction(std::unique_ptr<Instruction>(op));
 }
 
 // An opcode that has multiple operands, no result id, and no type
 void Builder::createNoResultOp(Op opCode, const std::vector<IdImmediate>& operands)
 {
     Instruction* op = new Instruction(opCode);
+    op->reserveOperands(operands.size());
     for (auto it = operands.cbegin(); it != operands.cend(); ++it) {
         if (it->isId)
             op->addIdOperand(it->word);
         else
             op->addImmediateOperand(it->word);
     }
-    buildPoint->addInstruction(std::unique_ptr<Instruction>(op));
+    addInstruction(std::unique_ptr<Instruction>(op));
 }
 
 void Builder::createControlBarrier(Scope execution, Scope memory, MemorySemanticsMask semantics)
 {
     Instruction* op = new Instruction(OpControlBarrier);
+    op->reserveOperands(3);
     op->addIdOperand(makeUintConstant(execution));
     op->addIdOperand(makeUintConstant(memory));
     op->addIdOperand(makeUintConstant(semantics));
-    buildPoint->addInstruction(std::unique_ptr<Instruction>(op));
+    addInstruction(std::unique_ptr<Instruction>(op));
 }
 
 void Builder::createMemoryBarrier(unsigned executionScope, unsigned memorySemantics)
 {
     Instruction* op = new Instruction(OpMemoryBarrier);
+    op->reserveOperands(2);
     op->addIdOperand(makeUintConstant(executionScope));
     op->addIdOperand(makeUintConstant(memorySemantics));
-    buildPoint->addInstruction(std::unique_ptr<Instruction>(op));
+    addInstruction(std::unique_ptr<Instruction>(op));
 }
 
 // An opcode that has one operands, a result id, and a type
@@ -2630,7 +2836,7 @@
     }
     Instruction* op = new Instruction(getUniqueId(), typeId, opCode);
     op->addIdOperand(operand);
-    buildPoint->addInstruction(std::unique_ptr<Instruction>(op));
+    addInstruction(std::unique_ptr<Instruction>(op));
 
     return op->getResultId();
 }
@@ -2645,9 +2851,10 @@
         return createSpecConstantOp(opCode, typeId, operands, std::vector<Id>());
     }
     Instruction* op = new Instruction(getUniqueId(), typeId, opCode);
+    op->reserveOperands(2);
     op->addIdOperand(left);
     op->addIdOperand(right);
-    buildPoint->addInstruction(std::unique_ptr<Instruction>(op));
+    addInstruction(std::unique_ptr<Instruction>(op));
 
     return op->getResultId();
 }
@@ -2665,10 +2872,11 @@
             opCode, typeId, operands, std::vector<Id>());
     }
     Instruction* op = new Instruction(getUniqueId(), typeId, opCode);
+    op->reserveOperands(3);
     op->addIdOperand(op1);
     op->addIdOperand(op2);
     op->addIdOperand(op3);
-    buildPoint->addInstruction(std::unique_ptr<Instruction>(op));
+    addInstruction(std::unique_ptr<Instruction>(op));
 
     return op->getResultId();
 }
@@ -2676,9 +2884,10 @@
 Id Builder::createOp(Op opCode, Id typeId, const std::vector<Id>& operands)
 {
     Instruction* op = new Instruction(getUniqueId(), typeId, opCode);
-    for (auto it = operands.cbegin(); it != operands.cend(); ++it)
-        op->addIdOperand(*it);
-    buildPoint->addInstruction(std::unique_ptr<Instruction>(op));
+    op->reserveOperands(operands.size());
+    for (auto id : operands)
+        op->addIdOperand(id);
+    addInstruction(std::unique_ptr<Instruction>(op));
 
     return op->getResultId();
 }
@@ -2686,13 +2895,14 @@
 Id Builder::createOp(Op opCode, Id typeId, const std::vector<IdImmediate>& operands)
 {
     Instruction* op = new Instruction(getUniqueId(), typeId, opCode);
+    op->reserveOperands(operands.size());
     for (auto it = operands.cbegin(); it != operands.cend(); ++it) {
         if (it->isId)
             op->addIdOperand(it->word);
         else
             op->addImmediateOperand(it->word);
     }
-    buildPoint->addInstruction(std::unique_ptr<Instruction>(op));
+    addInstruction(std::unique_ptr<Instruction>(op));
 
     return op->getResultId();
 }
@@ -2701,6 +2911,7 @@
     const std::vector<unsigned>& literals)
 {
     Instruction* op = new Instruction(getUniqueId(), typeId, OpSpecConstantOp);
+    op->reserveOperands(operands.size() + literals.size() + 1);
     op->addImmediateOperand((unsigned) opCode);
     for (auto it = operands.cbegin(); it != operands.cend(); ++it)
         op->addIdOperand(*it);
@@ -2709,16 +2920,25 @@
     module.mapInstruction(op);
     constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(op));
 
+    // OpSpecConstantOp's using 8 or 16 bit types require the associated capability
+    if (containsType(typeId, OpTypeInt, 8))
+        addCapability(CapabilityInt8);
+    if (containsType(typeId, OpTypeInt, 16))
+        addCapability(CapabilityInt16);
+    if (containsType(typeId, OpTypeFloat, 16))
+        addCapability(CapabilityFloat16);
+
     return op->getResultId();
 }
 
 Id Builder::createFunctionCall(spv::Function* function, const std::vector<spv::Id>& args)
 {
     Instruction* op = new Instruction(getUniqueId(), function->getReturnType(), OpFunctionCall);
+    op->reserveOperands(args.size() + 1);
     op->addIdOperand(function->getId());
     for (int a = 0; a < (int)args.size(); ++a)
         op->addIdOperand(args[a]);
-    buildPoint->addInstruction(std::unique_ptr<Instruction>(op));
+    addInstruction(std::unique_ptr<Instruction>(op));
 
     return op->getResultId();
 }
@@ -2736,11 +2956,12 @@
     }
     Instruction* swizzle = new Instruction(getUniqueId(), typeId, OpVectorShuffle);
     assert(isVector(source));
+    swizzle->reserveOperands(channels.size() + 2);
     swizzle->addIdOperand(source);
     swizzle->addIdOperand(source);
     for (int i = 0; i < (int)channels.size(); ++i)
         swizzle->addImmediateOperand(channels[i]);
-    buildPoint->addInstruction(std::unique_ptr<Instruction>(swizzle));
+    addInstruction(std::unique_ptr<Instruction>(swizzle));
 
     return setPrecision(swizzle->getResultId(), precision);
 }
@@ -2754,9 +2975,10 @@
     Instruction* swizzle = new Instruction(getUniqueId(), typeId, OpVectorShuffle);
 
     assert(isVector(target));
+    swizzle->reserveOperands(2);
     swizzle->addIdOperand(target);
 
-    assert(getNumComponents(source) == (int)channels.size());
+    assert(getNumComponents(source) == channels.size());
     assert(isVector(source));
     swizzle->addIdOperand(source);
 
@@ -2771,9 +2993,10 @@
         components[channels[i]] = numTargetComponents + i;
 
     // finish the instruction with these components selectors
+    swizzle->reserveOperands(numTargetComponents);
     for (int i = 0; i < numTargetComponents; ++i)
         swizzle->addImmediateOperand(components[i]);
-    buildPoint->addInstruction(std::unique_ptr<Instruction>(swizzle));
+    addInstruction(std::unique_ptr<Instruction>(swizzle));
 
     return swizzle->getResultId();
 }
@@ -2815,10 +3038,21 @@
         auto result_id = makeCompositeConstant(vectorType, members, isSpecConstant(scalar));
         smear = module.getInstruction(result_id);
     } else {
-        smear = new Instruction(getUniqueId(), vectorType, OpCompositeConstruct);
+        bool replicate = useReplicatedComposites && (numComponents > 0);
+
+        if (replicate) {
+            numComponents = 1;
+            addCapability(spv::CapabilityReplicatedCompositesEXT);
+            addExtension(spv::E_SPV_EXT_replicated_composites);
+        }
+
+        Op opcode = replicate ? OpCompositeConstructReplicateEXT : OpCompositeConstruct;
+
+        smear = new Instruction(getUniqueId(), vectorType, opcode);
+        smear->reserveOperands(numComponents);
         for (int c = 0; c < numComponents; ++c)
             smear->addIdOperand(scalar);
-        buildPoint->addInstruction(std::unique_ptr<Instruction>(smear));
+        addInstruction(std::unique_ptr<Instruction>(smear));
     }
 
     return setPrecision(smear->getResultId(), precision);
@@ -2828,12 +3062,13 @@
 Id Builder::createBuiltinCall(Id resultType, Id builtins, int entryPoint, const std::vector<Id>& args)
 {
     Instruction* inst = new Instruction(getUniqueId(), resultType, OpExtInst);
+    inst->reserveOperands(args.size() + 2);
     inst->addIdOperand(builtins);
     inst->addImmediateOperand(entryPoint);
     for (int arg = 0; arg < (int)args.size(); ++arg)
         inst->addIdOperand(args[arg]);
 
-    buildPoint->addInstruction(std::unique_ptr<Instruction>(inst));
+    addInstruction(std::unique_ptr<Instruction>(inst));
 
     return inst->getResultId();
 }
@@ -3022,6 +3257,7 @@
 
     // Build the SPIR-V instruction
     Instruction* textureInst = new Instruction(getUniqueId(), resultType, opCode);
+    textureInst->reserveOperands(optArgNum + (texArgs.size() - (optArgNum + 1)));
     for (size_t op = 0; op < optArgNum; ++op)
         textureInst->addIdOperand(texArgs[op]);
     if (optArgNum < texArgs.size())
@@ -3029,7 +3265,7 @@
     for (size_t op = optArgNum + 1; op < texArgs.size(); ++op)
         textureInst->addIdOperand(texArgs[op]);
     setPrecision(textureInst->getResultId(), precision);
-    buildPoint->addInstruction(std::unique_ptr<Instruction>(textureInst));
+    addInstruction(std::unique_ptr<Instruction>(textureInst));
 
     Id resultId = textureInst->getResultId();
 
@@ -3109,7 +3345,7 @@
         query->addIdOperand(parameters.coords);
     if (parameters.lod)
         query->addIdOperand(parameters.lod);
-    buildPoint->addInstruction(std::unique_ptr<Instruction>(query));
+    addInstruction(std::unique_ptr<Instruction>(query));
     addCapability(CapabilityImageQuery);
 
     return query->getResultId();
@@ -3189,7 +3425,7 @@
 Id Builder::createCompositeConstruct(Id typeId, const std::vector<Id>& constituents)
 {
     assert(isAggregateType(typeId) || (getNumTypeConstituents(typeId) > 1 &&
-           getNumTypeConstituents(typeId) == (int)constituents.size()));
+           getNumTypeConstituents(typeId) == constituents.size()));
 
     if (generatingOpCodeForSpecConst) {
         // Sometime, even in spec-constant-op mode, the constant composite to be
@@ -3205,10 +3441,62 @@
                                                  [&](spv::Id id) { return isSpecConstant(id); }));
     }
 
-    Instruction* op = new Instruction(getUniqueId(), typeId, OpCompositeConstruct);
-    for (int c = 0; c < (int)constituents.size(); ++c)
+    bool replicate = false;
+    size_t numConstituents = constituents.size();
+
+    if (useReplicatedComposites) {
+        replicate = numConstituents > 0 &&
+            std::equal(constituents.begin() + 1, constituents.end(), constituents.begin());
+    }
+
+    if (replicate) {
+        numConstituents = 1;
+        addCapability(spv::CapabilityReplicatedCompositesEXT);
+        addExtension(spv::E_SPV_EXT_replicated_composites);
+    }
+
+    Op opcode = replicate ? OpCompositeConstructReplicateEXT : OpCompositeConstruct;
+
+    Instruction* op = new Instruction(getUniqueId(), typeId, opcode);
+    op->reserveOperands(constituents.size());
+    for (size_t c = 0; c < numConstituents; ++c)
         op->addIdOperand(constituents[c]);
-    buildPoint->addInstruction(std::unique_ptr<Instruction>(op));
+    addInstruction(std::unique_ptr<Instruction>(op));
+
+    return op->getResultId();
+}
+
+// coopmat conversion
+Id Builder::createCooperativeMatrixConversion(Id typeId, Id source)
+{
+    Instruction* op = new Instruction(getUniqueId(), typeId, OpCooperativeMatrixConvertNV);
+    op->addIdOperand(source);
+    addInstruction(std::unique_ptr<Instruction>(op));
+
+    return op->getResultId();
+}
+
+// coopmat reduce
+Id Builder::createCooperativeMatrixReduce(Op opcode, Id typeId, Id source, unsigned int mask, Id func)
+{
+    Instruction* op = new Instruction(getUniqueId(), typeId, opcode);
+    op->addIdOperand(source);
+    op->addImmediateOperand(mask);
+    op->addIdOperand(func);
+    addInstruction(std::unique_ptr<Instruction>(op));
+
+    return op->getResultId();
+}
+
+// coopmat per-element operation
+Id Builder::createCooperativeMatrixPerElementOp(Id typeId, const std::vector<Id>& operands)
+{
+    Instruction* op = new Instruction(getUniqueId(), typeId, spv::OpCooperativeMatrixPerElementOpNV);
+    // skip operand[0], which is where the result is stored
+    for (uint32_t i = 1; i < operands.size(); ++i) {
+        op->addIdOperand(operands[i]);
+    }
+    addInstruction(std::unique_ptr<Instruction>(op));
 
     return op->getResultId();
 }
@@ -3225,6 +3513,12 @@
     if (sources.size() == 1 && isScalar(sources[0]) && numTargetComponents > 1)
         return smearScalar(precision, sources[0], resultTypeId);
 
+    // Special case: 2 vectors of equal size
+    if (sources.size() == 1 && isVector(sources[0]) && numTargetComponents == getNumComponents(sources[0])) {
+        assert(resultTypeId == getTypeId(sources[0]));
+        return sources[0];
+    }
+
     // accumulate the arguments for OpCompositeConstruct
     std::vector<Id> constituents;
     Id scalarTypeId = getScalarTypeId(resultTypeId);
@@ -3259,8 +3553,8 @@
         if (sourcesToUse + targetComponent > numTargetComponents)
             sourcesToUse = numTargetComponents - targetComponent;
 
-        int col = 0;
-        int row = 0;
+        unsigned int col = 0;
+        unsigned int row = 0;
         for (unsigned int s = 0; s < sourcesToUse; ++s) {
             if (row >= getNumRows(sourceArg)) {
                 row = 0;
@@ -3292,18 +3586,21 @@
     }
 
     // If the result is a vector, make it from the gathered constituents.
-    if (constituents.size() > 0)
+    if (constituents.size() > 0) {
         result = createCompositeConstruct(resultTypeId, constituents);
-
-    return setPrecision(result, precision);
+        return setPrecision(result, precision);
+    } else {
+      // Precision was set when generating this component.
+      return result;
+    }
 }
 
 // Comments in header
 Id Builder::createMatrixConstructor(Decoration precision, const std::vector<Id>& sources, Id resultTypeId)
 {
     Id componentTypeId = getScalarTypeId(resultTypeId);
-    int numCols = getTypeNumColumns(resultTypeId);
-    int numRows = getTypeNumRows(resultTypeId);
+    unsigned int numCols = getTypeNumColumns(resultTypeId);
+    unsigned int numRows = getTypeNumRows(resultTypeId);
 
     Instruction* instr = module.getInstruction(componentTypeId);
     const unsigned bitCount = instr->getImmediateOperand(0);
@@ -3318,11 +3615,11 @@
         Id sourceColumnTypeId = getContainedTypeId(getTypeId(matrix));
 
         std::vector<unsigned> channels;
-        for (int row = 0; row < numRows; ++row)
+        for (unsigned int row = 0; row < numRows; ++row)
             channels.push_back(row);
 
         std::vector<Id> matrixColumns;
-        for (int col = 0; col < numCols; ++col) {
+        for (unsigned int col = 0; col < numCols; ++col) {
             std::vector<unsigned> indexes;
             indexes.push_back(col);
             Id colv = createCompositeExtract(matrix, sourceColumnTypeId, indexes);
@@ -3338,6 +3635,13 @@
         return setPrecision(createCompositeConstruct(resultTypeId, matrixColumns), precision);
     }
 
+    // Detect a matrix being constructed from a repeated vector of the correct size.
+    // Create the composite directly from it.
+    if (sources.size() == numCols && isVector(sources[0]) && getNumComponents(sources[0]) == numRows &&
+        std::equal(sources.begin() + 1, sources.end(), sources.begin())) {
+        return setPrecision(createCompositeConstruct(resultTypeId, sources), precision);
+    }
+
     // Otherwise, will use a two step process
     // 1. make a compile-time 2D array of values
     // 2. construct a matrix from that array
@@ -3365,12 +3669,12 @@
     } else if (isMatrix(sources[0])) {
         // constructing from another matrix; copy over the parts that exist in both the argument and constructee
         Id matrix = sources[0];
-        int minCols = std::min(numCols, getNumColumns(matrix));
-        int minRows = std::min(numRows, getNumRows(matrix));
-        for (int col = 0; col < minCols; ++col) {
+        unsigned int minCols = std::min(numCols, getNumColumns(matrix));
+        unsigned int minRows = std::min(numRows, getNumRows(matrix));
+        for (unsigned int col = 0; col < minCols; ++col) {
             std::vector<unsigned> indexes;
             indexes.push_back(col);
-            for (int row = 0; row < minRows; ++row) {
+            for (unsigned int row = 0; row < minRows; ++row) {
                 indexes.push_back(row);
                 ids[col][row] = createCompositeExtract(matrix, componentTypeId, indexes);
                 indexes.pop_back();
@@ -3379,12 +3683,12 @@
         }
     } else {
         // fill in the matrix in column-major order with whatever argument components are available
-        int row = 0;
-        int col = 0;
+        unsigned int row = 0;
+        unsigned int col = 0;
 
-        for (int arg = 0; arg < (int)sources.size() && col < numCols; ++arg) {
+        for (unsigned int arg = 0; arg < sources.size() && col < numCols; ++arg) {
             Id argComp = sources[arg];
-            for (int comp = 0; comp < getNumComponents(sources[arg]); ++comp) {
+            for (unsigned int comp = 0; comp < getNumComponents(sources[arg]); ++comp) {
                 if (getNumComponents(sources[arg]) > 1) {
                     argComp = createCompositeExtract(sources[arg], componentTypeId, comp);
                     setPrecision(argComp, precision);
@@ -3408,9 +3712,9 @@
     // make the column vectors
     Id columnTypeId = getContainedTypeId(resultTypeId);
     std::vector<Id> matrixColumns;
-    for (int col = 0; col < numCols; ++col) {
+    for (unsigned int col = 0; col < numCols; ++col) {
         std::vector<Id> vectorComponents;
-        for (int row = 0; row < numRows; ++row)
+        for (unsigned int row = 0; row < numRows; ++row)
             vectorComponents.push_back(ids[col][row]);
         Id column = createCompositeConstruct(columnTypeId, vectorComponents);
         setPrecision(column, precision);
@@ -3439,6 +3743,7 @@
     // Save the current block, so that we can add in the flow control split when
     // makeEndIf is called.
     headerBlock = builder.getBuildPoint();
+    builder.createSelectionMerge(mergeBlock, control);
 
     function->addBlock(thenBlock);
     builder.setBuildPoint(thenBlock);
@@ -3448,7 +3753,7 @@
 void Builder::If::makeBeginElse()
 {
     // Close out the "then" by having it jump to the mergeBlock
-    builder.createBranch(mergeBlock);
+    builder.createBranch(true, mergeBlock);
 
     // Make the first else block and add it to the function
     elseBlock = new Block(builder.getUniqueId(), *function);
@@ -3462,11 +3767,10 @@
 void Builder::If::makeEndIf()
 {
     // jump to the merge block
-    builder.createBranch(mergeBlock);
+    builder.createBranch(true, mergeBlock);
 
     // Go back to the headerBlock and make the flow control split
     builder.setBuildPoint(headerBlock);
-    builder.createSelectionMerge(mergeBlock, control);
     if (elseBlock)
         builder.createConditionalBranch(condition, thenBlock, elseBlock);
     else
@@ -3495,6 +3799,7 @@
 
     // make the switch instruction
     Instruction* switchInst = new Instruction(NoResult, NoType, OpSwitch);
+    switchInst->reserveOperands((caseValues.size() * 2) + 2);
     switchInst->addIdOperand(selector);
     auto defaultOrMerge = (defaultSegment >= 0) ? segmentBlocks[defaultSegment] : mergeBlock;
     switchInst->addIdOperand(defaultOrMerge->getId());
@@ -3504,17 +3809,17 @@
         switchInst->addIdOperand(segmentBlocks[valueIndexToSegment[i]]->getId());
         segmentBlocks[valueIndexToSegment[i]]->addPredecessor(buildPoint);
     }
-    buildPoint->addInstruction(std::unique_ptr<Instruction>(switchInst));
+    addInstruction(std::unique_ptr<Instruction>(switchInst));
 
     // push the merge block
     switchMerges.push(mergeBlock);
 }
 
 // Comments in header
-void Builder::addSwitchBreak()
+void Builder::addSwitchBreak(bool implicit)
 {
     // branch to the top of the merge block stack
-    createBranch(switchMerges.top());
+    createBranch(implicit, switchMerges.top());
     createAndSetNoPredecessorBlock("post-switch-break");
 }
 
@@ -3525,7 +3830,7 @@
     if (lastSegment >= 0) {
         // Close out previous segment by jumping, if necessary, to next segment
         if (! buildPoint->isTerminated())
-            createBranch(segmentBlock[nextSegment]);
+            createBranch(true, segmentBlock[nextSegment]);
     }
     Block* block = segmentBlock[nextSegment];
     block->getParent().addBlock(block);
@@ -3537,7 +3842,7 @@
 {
     // Close out previous segment by jumping, if necessary, to next segment
     if (! buildPoint->isTerminated())
-        addSwitchBreak();
+        addSwitchBreak(true);
 
     switchMerges.top()->getParent().addBlock(switchMerges.top());
     setBuildPoint(switchMerges.top());
@@ -3570,14 +3875,14 @@
 
 void Builder::createLoopContinue()
 {
-    createBranch(&loops.top().continue_target);
+    createBranch(false, &loops.top().continue_target);
     // Set up a block for dead code.
     createAndSetNoPredecessorBlock("post-loop-continue");
 }
 
 void Builder::createLoopExit()
 {
-    createBranch(&loops.top().merge);
+    createBranch(false, &loops.top().merge);
     // Set up a block for dead code.
     createAndSetNoPredecessorBlock("post-loop-break");
 }
@@ -3636,7 +3941,7 @@
 
     // If a swizzle exists and is not full and is not dynamic, then the swizzle will be broken into individual stores.
     if (accessChain.swizzle.size() > 0 &&
-        getNumTypeComponents(getResultingAccessChainType()) != (int)accessChain.swizzle.size() &&
+        getNumTypeComponents(getResultingAccessChainType()) != accessChain.swizzle.size() &&
         accessChain.component == NoResult) {
         for (unsigned int i = 0; i < accessChain.swizzle.size(); ++i) {
             accessChain.indexChain.push_back(makeUintConstant(accessChain.swizzle[i]));
@@ -3956,7 +4261,7 @@
 {
     // If the swizzle has fewer components than the vector, it is subsetting, and must stay
     // to preserve that fact.
-    if (getNumTypeComponents(accessChain.preSwizzleBaseType) > (int)accessChain.swizzle.size())
+    if (getNumTypeComponents(accessChain.preSwizzleBaseType) > accessChain.swizzle.size())
         return;
 
     // if components are out of order, it is a swizzle
@@ -4019,41 +4324,52 @@
 }
 
 // Comments in header
-void Builder::createBranch(Block* block)
+void Builder::createBranch(bool implicit, Block* block)
 {
     Instruction* branch = new Instruction(OpBranch);
     branch->addIdOperand(block->getId());
-    buildPoint->addInstruction(std::unique_ptr<Instruction>(branch));
+    if (implicit) {
+        addInstructionNoDebugInfo(std::unique_ptr<Instruction>(branch));
+    }
+    else {
+        addInstruction(std::unique_ptr<Instruction>(branch));
+    }
     block->addPredecessor(buildPoint);
 }
 
 void Builder::createSelectionMerge(Block* mergeBlock, unsigned int control)
 {
     Instruction* merge = new Instruction(OpSelectionMerge);
+    merge->reserveOperands(2);
     merge->addIdOperand(mergeBlock->getId());
     merge->addImmediateOperand(control);
-    buildPoint->addInstruction(std::unique_ptr<Instruction>(merge));
+    addInstruction(std::unique_ptr<Instruction>(merge));
 }
 
 void Builder::createLoopMerge(Block* mergeBlock, Block* continueBlock, unsigned int control,
                               const std::vector<unsigned int>& operands)
 {
     Instruction* merge = new Instruction(OpLoopMerge);
+    merge->reserveOperands(operands.size() + 3);
     merge->addIdOperand(mergeBlock->getId());
     merge->addIdOperand(continueBlock->getId());
     merge->addImmediateOperand(control);
     for (int op = 0; op < (int)operands.size(); ++op)
         merge->addImmediateOperand(operands[op]);
-    buildPoint->addInstruction(std::unique_ptr<Instruction>(merge));
+    addInstruction(std::unique_ptr<Instruction>(merge));
 }
 
 void Builder::createConditionalBranch(Id condition, Block* thenBlock, Block* elseBlock)
 {
     Instruction* branch = new Instruction(OpBranchConditional);
+    branch->reserveOperands(3);
     branch->addIdOperand(condition);
     branch->addIdOperand(thenBlock->getId());
     branch->addIdOperand(elseBlock->getId());
-    buildPoint->addInstruction(std::unique_ptr<Instruction>(branch));
+
+    // A conditional branch is always attached to a condition expression
+    addInstructionNoDebugInfo(std::unique_ptr<Instruction>(branch));
+
     thenBlock->addPredecessor(buildPoint);
     elseBlock->addPredecessor(buildPoint);
 }
@@ -4071,6 +4387,7 @@
     if (sourceLang != SourceLanguageUnknown) {
         // OpSource Language Version File Source
         Instruction sourceInst(NoResult, NoType, OpSource);
+        sourceInst.reserveOperands(3);
         sourceInst.addImmediateOperand(sourceLang);
         sourceInst.addImmediateOperand(sourceVersion);
         // File operand
@@ -4105,16 +4422,15 @@
 void Builder::dumpSourceInstructions(std::vector<unsigned int>& out) const
 {
     if (emitNonSemanticShaderDebugInfo) return;
-    dumpSourceInstructions(sourceFileStringId, sourceText, out);
+    dumpSourceInstructions(mainFileId, sourceText, out);
     for (auto iItr = includeFiles.begin(); iItr != includeFiles.end(); ++iItr)
         dumpSourceInstructions(iItr->first, *iItr->second, out);
 }
 
-void Builder::dumpInstructions(std::vector<unsigned int>& out,
-    const std::vector<std::unique_ptr<Instruction> >& instructions) const
+template <class Range> void Builder::dumpInstructions(std::vector<unsigned int>& out, const Range& instructions) const
 {
-    for (int i = 0; i < (int)instructions.size(); ++i) {
-        instructions[i]->dump(out);
+    for (const auto& inst : instructions) {
+        inst->dump(out);
     }
 }
 
@@ -4127,4 +4443,40 @@
     }
 }
 
+bool Builder::DecorationInstructionLessThan::operator()(const std::unique_ptr<Instruction>& lhs,
+                                                        const std::unique_ptr<Instruction>& rhs) const
+{
+    // Order by the id to which the decoration applies first. This is more intuitive.
+    assert(lhs->isIdOperand(0) && rhs->isIdOperand(0));
+    if (lhs->getIdOperand(0) != rhs->getIdOperand(0)) {
+        return lhs->getIdOperand(0) < rhs->getIdOperand(0);
+    }
+
+    if (lhs->getOpCode() != rhs->getOpCode())
+        return lhs->getOpCode() < rhs->getOpCode();
+
+    // Now compare the operands.
+    int minSize = std::min(lhs->getNumOperands(), rhs->getNumOperands());
+    for (int i = 1; i < minSize; ++i) {
+        if (lhs->isIdOperand(i) != rhs->isIdOperand(i)) {
+            return lhs->isIdOperand(i) < rhs->isIdOperand(i);
+        }
+
+        if (lhs->isIdOperand(i)) {
+            if (lhs->getIdOperand(i) != rhs->getIdOperand(i)) {
+                return lhs->getIdOperand(i) < rhs->getIdOperand(i);
+            }
+        } else {
+            if (lhs->getImmediateOperand(i) != rhs->getImmediateOperand(i)) {
+                return lhs->getImmediateOperand(i) < rhs->getImmediateOperand(i);
+            }
+        }
+    }
+
+    if (lhs->getNumOperands() != rhs->getNumOperands())
+        return lhs->getNumOperands() < rhs->getNumOperands();
+
+    // In this case they are equal.
+    return false;
+}
 } // end spv namespace
diff --git a/SPIRV/SpvBuilder.h b/SPIRV/SpvBuilder.h
index 2e1c07d..44377ac 100644
--- a/SPIRV/SpvBuilder.h
+++ b/SPIRV/SpvBuilder.h
@@ -48,6 +48,7 @@
 #define SpvBuilder_H
 
 #include "Logger.h"
+#define SPV_ENABLE_UTILITY_CODE
 #include "spirv.hpp"
 #include "spvIR.h"
 namespace spv {
@@ -56,6 +57,7 @@
 }
 
 #include <algorithm>
+#include <cstdint>
 #include <map>
 #include <memory>
 #include <set>
@@ -103,31 +105,53 @@
         stringIds[file_c_str] = strId;
         return strId;
     }
-    spv::Id getSourceFile() const
+
+    spv::Id getMainFileId() const { return mainFileId; }
+
+    // Initialize the main source file name
+    void setDebugMainSourceFile(const std::string& file)
     {
-        return sourceFileStringId;
+        if (trackDebugInfo) {
+            dirtyLineTracker = true;
+            mainFileId = getStringId(file);
+            currentFileId = mainFileId;
+        }
     }
-    void setSourceFile(const std::string& file)
+
+    // Set the debug source location tracker in the builder.
+    // The upcoming instructions in basic blocks will be associated to this location.
+    void setDebugSourceLocation(int line, const char* filename)
     {
-        sourceFileStringId = getStringId(file);
-        currentFileId = sourceFileStringId;
+        if (trackDebugInfo) {
+            dirtyLineTracker = true;
+            if (line != 0) {
+                // TODO: This is special handling of some AST nodes having (untracked) line 0. 
+                //       But they should have a valid line number.
+                currentLine = line;
+                if (filename) {
+                    currentFileId = getStringId(filename);
+                }
+            }
+        }
     }
+
     void setSourceText(const std::string& text) { sourceText = text; }
     void addSourceExtension(const char* ext) { sourceExtensions.push_back(ext); }
     void addModuleProcessed(const std::string& p) { moduleProcesses.push_back(p.c_str()); }
-    void setEmitOpLines() { emitOpLines = true; }
-    void setEmitNonSemanticShaderDebugInfo(bool const emit)
+    void setEmitSpirvDebugInfo()
     {
-        emitNonSemanticShaderDebugInfo = emit;
-
-        if(emit)
-        {
-            importNonSemanticShaderDebugInfoInstructions();
-        }
+        trackDebugInfo = true;
+        emitSpirvDebugInfo = true;
     }
-    void setEmitNonSemanticShaderDebugSource(bool const src)
+    void setEmitNonSemanticShaderDebugInfo(bool emitSourceText)
     {
-        emitNonSemanticShaderDebugSource = src;
+        trackDebugInfo = true;
+        emitNonSemanticShaderDebugInfo = true;
+        importNonSemanticShaderDebugInfoInstructions();
+
+        if (emitSourceText) {
+            emitNonSemanticShaderDebugSource = emitSourceText;
+        }
     }
     void addExtension(const char* ext) { extensions.insert(ext); }
     void removeExtension(const char* ext)
@@ -169,23 +193,9 @@
         return id;
     }
 
-    // Generate OpLine for non-filename-based #line directives (ie no filename
-    // seen yet): Log the current line, and if different than the last one,
-    // issue a new OpLine using the new line and current source file name.
-    void setLine(int line);
-
-    // If filename null, generate OpLine for non-filename-based line directives,
-    // else do filename-based: Log the current line and file, and if different
-    // than the last one, issue a new OpLine using the new line and file
-    // name.
-    void setLine(int line, const char* filename);
-    // Low-level OpLine. See setLine() for a layered helper.
-    void addLine(Id fileName, int line, int column);
-    void addDebugScopeAndLine(Id fileName, int line, int column);
-
     // For creating new types (will return old type if the requested one was already made).
     Id makeVoidType();
-    Id makeBoolType(bool const compilerGenerated = true);
+    Id makeBoolType();
     Id makePointer(StorageClass, Id pointee);
     Id makeForwardPointer(StorageClass);
     Id makePointerFromForwardPointer(StorageClass, Id forwardPointerType, Id pointee);
@@ -226,18 +236,26 @@
     Id makeMemberDebugType(Id const memberType, DebugTypeLoc const& debugTypeLoc);
     Id makeCompositeDebugType(std::vector<Id> const& memberTypes, char const*const name,
         NonSemanticShaderDebugInfo100DebugCompositeType const tag, bool const isOpaqueType = false);
+    Id makePointerDebugType(StorageClass storageClass, Id const baseType);
+    Id makeForwardPointerDebugType(StorageClass storageClass);
     Id makeDebugSource(const Id fileName);
     Id makeDebugCompilationUnit();
     Id createDebugGlobalVariable(Id const type, char const*const name, Id const variable);
     Id createDebugLocalVariable(Id type, char const*const name, size_t const argNumber = 0);
     Id makeDebugExpression();
-    Id makeDebugDeclare(Id const debugLocalVariable, Id const localVariable);
+    Id makeDebugDeclare(Id const debugLocalVariable, Id const pointer);
     Id makeDebugValue(Id const debugLocalVariable, Id const value);
     Id makeDebugFunctionType(Id returnType, const std::vector<Id>& paramTypes);
     Id makeDebugFunction(Function* function, Id nameId, Id funcTypeId);
-    Id makeDebugLexicalBlock(uint32_t line);
+    Id makeDebugLexicalBlock(uint32_t line, uint32_t column);
     std::string unmangleFunctionName(std::string const& name) const;
 
+    // Initialize non-semantic debug information for a function, including those of:
+    // - The function definition
+    // - The function parameters
+    void setupFunctionDebugInfo(Function* function, const char* name, const std::vector<Id>& paramTypes,
+                                const std::vector<char const*>& paramNames);
+
     // accelerationStructureNV type
     Id makeAccelerationStructureType();
     // rayQueryEXT type
@@ -251,9 +269,9 @@
     Op getOpCode(Id id) const { return module.getInstruction(id)->getOpCode(); }
     Op getTypeClass(Id typeId) const { return getOpCode(typeId); }
     Op getMostBasicTypeClass(Id typeId) const;
-    int getNumComponents(Id resultId) const { return getNumTypeComponents(getTypeId(resultId)); }
-    int getNumTypeConstituents(Id typeId) const;
-    int getNumTypeComponents(Id typeId) const { return getNumTypeConstituents(typeId); }
+    unsigned int getNumComponents(Id resultId) const { return getNumTypeComponents(getTypeId(resultId)); }
+    unsigned int getNumTypeConstituents(Id typeId) const;
+    unsigned int getNumTypeComponents(Id typeId) const { return getNumTypeConstituents(typeId); }
     Id getScalarTypeId(Id typeId) const;
     Id getContainedTypeId(Id typeId) const;
     Id getContainedTypeId(Id typeId, int) const;
@@ -270,6 +288,7 @@
     bool isCooperativeMatrix(Id resultId)const { return isCooperativeMatrixType(getTypeId(resultId)); }
     bool isAggregate(Id resultId)    const { return isAggregateType(getTypeId(resultId)); }
     bool isSampledImage(Id resultId) const { return isSampledImageType(getTypeId(resultId)); }
+    bool isTensorView(Id resultId)const { return isTensorViewType(getTypeId(resultId)); }
 
     bool isBoolType(Id typeId)
         { return groupedTypes[OpTypeBool].size() > 0 && typeId == groupedTypes[OpTypeBool].back()->getResultId(); }
@@ -290,6 +309,7 @@
     {
         return getTypeClass(typeId) == OpTypeCooperativeMatrixKHR || getTypeClass(typeId) == OpTypeCooperativeMatrixNV;
     }
+    bool isTensorViewType(Id typeId)   const { return getTypeClass(typeId) == OpTypeTensorViewNV; }
     bool isAggregateType(Id typeId)    const
         { return isArrayType(typeId) || isStructType(typeId) || isCooperativeMatrixType(typeId); }
     bool isImageType(Id typeId)        const { return getTypeClass(typeId) == OpTypeImage; }
@@ -314,8 +334,6 @@
     // See if a resultId is valid for use as an initializer.
     bool isValidInitializer(Id resultId) const { return isConstant(resultId) || isGlobalVariable(resultId); }
 
-    bool isRayTracingOpCode(Op opcode) const;
-
     int getScalarTypeWidth(Id typeId) const
     {
         Id scalarTypeId = getScalarTypeId(typeId);
@@ -323,18 +341,18 @@
         return module.getInstruction(scalarTypeId)->getImmediateOperand(0);
     }
 
-    int getTypeNumColumns(Id typeId) const
+    unsigned int getTypeNumColumns(Id typeId) const
     {
         assert(isMatrixType(typeId));
         return getNumTypeConstituents(typeId);
     }
-    int getNumColumns(Id resultId) const { return getTypeNumColumns(getTypeId(resultId)); }
-    int getTypeNumRows(Id typeId) const
+    unsigned int getNumColumns(Id resultId) const { return getTypeNumColumns(getTypeId(resultId)); }
+    unsigned int getTypeNumRows(Id typeId) const
     {
         assert(isMatrixType(typeId));
         return getNumTypeComponents(getContainedTypeId(typeId));
     }
-    int getNumRows(Id resultId) const { return getTypeNumRows(getTypeId(resultId)); }
+    unsigned int getNumRows(Id resultId) const { return getTypeNumRows(getTypeId(resultId)); }
 
     Dim getTypeDimensionality(Id typeId) const
     {
@@ -356,6 +374,8 @@
     // For making new constants (will return old constant if the requested one was already made).
     Id makeNullConstant(Id typeId);
     Id makeBoolConstant(bool b, bool specConstant = false);
+    Id makeIntConstant(Id typeId, unsigned value, bool specConstant);
+    Id makeInt64Constant(Id typeId, unsigned long long value, bool specConstant);
     Id makeInt8Constant(int i, bool specConstant = false)
         { return makeIntConstant(makeIntType(8),  (unsigned)i, specConstant); }
     Id makeUint8Constant(unsigned u, bool specConstant = false)
@@ -405,11 +425,20 @@
     // Also reset current last DebugScope and current source line to unknown
     void setBuildPoint(Block* bp) {
         buildPoint = bp;
-        lastDebugScopeId = NoResult;
-        currentLine = 0;
+        dirtyLineTracker = true;
+        dirtyScopeTracker = true;
     }
     Block* getBuildPoint() const { return buildPoint; }
 
+    // Append an instruction to the end of the current build point.
+    // Optionally, additional debug info instructions may also be prepended.
+    void addInstruction(std::unique_ptr<Instruction> inst);
+
+    // Append an instruction to the end of the current build point without prepending any debug instructions.
+    // This is useful for insertion of some debug info instructions themselves or some control flow instructions
+    // that are attached to its predecessor instruction.
+    void addInstructionNoDebugInfo(std::unique_ptr<Instruction> inst);
+
     // Make the entry-point function. The returned pointer is only valid
     // for the lifetime of this builder.
     Function* makeEntryPoint(const char*);
@@ -417,20 +446,19 @@
     // Make a shader-style function, and create its entry block if entry is non-zero.
     // Return the function, pass back the entry.
     // The returned pointer is only valid for the lifetime of this builder.
-    Function* makeFunctionEntry(Decoration precision, Id returnType, const char* name,
-        LinkageType linkType, const std::vector<Id>& paramTypes,
-        const std::vector<char const*>& paramNames,
-        const std::vector<std::vector<Decoration>>& precisions, Block **entry = nullptr);
+    Function* makeFunctionEntry(Decoration precision, Id returnType, const char* name, LinkageType linkType,
+                                const std::vector<Id>& paramTypes,
+                                const std::vector<std::vector<Decoration>>& precisions, Block** entry = nullptr);
 
     // Create a return. An 'implicit' return is one not appearing in the source
     // code.  In the case of an implicit return, no post-return block is inserted.
     void makeReturn(bool implicit, Id retVal = 0);
 
     // Initialize state and generate instructions for new lexical scope
-    void enterScope(uint32_t line);
+    void enterLexicalBlock(uint32_t line, uint32_t column);
 
     // Set state and generate instructions to exit current lexical scope
-    void leaveScope();
+    void leaveLexicalBlock();
 
     // Prepare builder for generation of instructions for a function.
     void enterFunction(Function const* function);
@@ -585,6 +613,11 @@
     // matrix constructor
     Id createMatrixConstructor(Decoration precision, const std::vector<Id>& sources, Id constructee);
 
+    // coopmat conversion
+    Id createCooperativeMatrixConversion(Id typeId, Id source);
+    Id createCooperativeMatrixReduce(Op opcode, Id typeId, Id source, unsigned int mask, Id func);
+    Id createCooperativeMatrixPerElementOp(Id typeId, const std::vector<Id>& operands);
+
     // Helper to use for building nested control flow with if-then-else.
     class If {
     public:
@@ -624,7 +657,7 @@
                     const std::vector<int>& valueToSegment, int defaultSegment, std::vector<Block*>& segmentBB);
 
     // Add a branch to the innermost switch's merge block.
-    void addSwitchBreak();
+    void addSwitchBreak(bool implicit);
 
     // Move to the next code segment, passing in the return argument in makeSwitch()
     void nextSwitchSegment(std::vector<Block*>& segmentBB, int segment);
@@ -841,10 +874,14 @@
     void postProcess(Instruction&);
     // Hook to visit each non-32-bit sized float/int operation in a block.
     void postProcessType(const Instruction&, spv::Id typeId);
+    // move OpSampledImage instructions to be next to their users.
+    void postProcessSamplers();
 
     void dump(std::vector<unsigned int>&) const;
 
-    void createBranch(Block* block);
+    // Add a branch to the target block.
+    // If set implicit, the branch instruction shouldn't have debug source location.
+    void createBranch(bool implicit, Block* block);
     void createConditionalBranch(Id condition, Block* thenBlock, Block* elseBlock);
     void createLoopMerge(Block* mergeBlock, Block* continueBlock, unsigned int control,
         const std::vector<unsigned int>& operands);
@@ -856,9 +893,9 @@
     // Check if the builder is generating code for spec constants.
     bool isInSpecConstCodeGenMode() { return generatingOpCodeForSpecConst; }
 
+    void setUseReplicatedComposites(bool use) { useReplicatedComposites = use; }
+
  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);
     Id findScalarConstant(Op typeClass, Op opcode, Id typeId, unsigned v1, unsigned v2);
     Id findCompositeConstant(Op typeClass, Id typeId, const std::vector<Id>& comps);
@@ -871,29 +908,48 @@
     void createSelectionMerge(Block* mergeBlock, unsigned int control);
     void dumpSourceInstructions(std::vector<unsigned int>&) const;
     void dumpSourceInstructions(const spv::Id fileId, const std::string& text, std::vector<unsigned int>&) const;
-    void dumpInstructions(std::vector<unsigned int>&, const std::vector<std::unique_ptr<Instruction> >&) const;
+    template <class Range> void dumpInstructions(std::vector<unsigned int>& out, const Range& instructions) const;
     void dumpModuleProcesses(std::vector<unsigned int>&) const;
     spv::MemoryAccessMask sanitizeMemoryAccessForStorageClass(spv::MemoryAccessMask memoryAccess, StorageClass sc)
         const;
+    struct DecorationInstructionLessThan {
+        bool operator()(const std::unique_ptr<Instruction>& lhs, const std::unique_ptr<Instruction>& rhs) const;
+    };
 
     unsigned int spvVersion;     // the version of SPIR-V to emit in the header
     SourceLanguage sourceLang;
     int sourceVersion;
-    spv::Id sourceFileStringId;
     spv::Id nonSemanticShaderCompilationUnitId {0};
     spv::Id nonSemanticShaderDebugInfo {0};
     spv::Id debugInfoNone {0};
     spv::Id debugExpression {0}; // Debug expression with zero operations.
     std::string sourceText;
-    int currentLine;
-    const char* currentFile;
-    spv::Id currentFileId;
+
+    // True if an new OpLine/OpDebugLine may need to be inserted. Either:
+    // 1. The current debug location changed
+    // 2. The current build point changed
+    bool dirtyLineTracker;
+    int currentLine = 0;
+    // OpString id of the current file name. Always 0 if debug info is off.
+    spv::Id currentFileId = 0;
+    // OpString id of the main file name. Always 0 if debug info is off.
+    spv::Id mainFileId = 0;
+
+    // True if an new OpDebugScope may need to be inserted. Either:
+    // 1. A new lexical block is pushed
+    // 2. The current build point changed
+    bool dirtyScopeTracker;
     std::stack<spv::Id> currentDebugScopeId;
-    spv::Id lastDebugScopeId;
-    bool emitOpLines;
-    bool emitNonSemanticShaderDebugInfo;
-    bool restoreNonSemanticShaderDebugInfo;
-    bool emitNonSemanticShaderDebugSource;
+
+    // This flag toggles tracking of debug info while building the SPIR-V.
+    bool trackDebugInfo = false;
+    // This flag toggles emission of SPIR-V debug instructions, like OpLine and OpSource.
+    bool emitSpirvDebugInfo = false;
+    // This flag toggles emission of Non-Semantic Debug extension debug instructions.
+    bool emitNonSemanticShaderDebugInfo = false;
+    bool restoreNonSemanticShaderDebugInfo = false;
+    bool emitNonSemanticShaderDebugSource = false;
+
     std::set<std::string> extensions;
     std::vector<const char*> sourceExtensions;
     std::vector<const char*> moduleProcesses;
@@ -906,6 +962,7 @@
     Id uniqueId;
     Function* entryPointFunction;
     bool generatingOpCodeForSpecConst;
+    bool useReplicatedComposites { false };
     AccessChain accessChain;
 
     // special blocks of instructions for output
@@ -914,7 +971,7 @@
     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> > decorations;
+    std::set<std::unique_ptr<Instruction>, DecorationInstructionLessThan> decorations;
     std::vector<std::unique_ptr<Instruction> > constantsTypesGlobals;
     std::vector<std::unique_ptr<Instruction> > externals;
     std::vector<std::unique_ptr<Function> > functions;
@@ -954,6 +1011,6 @@
     SpvBuildLogger* logger;
 };  // end Builder class
 
-};  // end spv namespace
+} // end spv namespace
 
 #endif // SpvBuilder_H
diff --git a/SPIRV/SpvPostProcess.cpp b/SPIRV/SpvPostProcess.cpp
index 13001a6..4cd0110 100644
--- a/SPIRV/SpvPostProcess.cpp
+++ b/SPIRV/SpvPostProcess.cpp
@@ -181,6 +181,7 @@
             else if (width == 8)
                 addCapability(CapabilityInt8);
         }
+        break;
     default:
         if (basicTypeOp == OpTypeInt) {
             if (width == 16)
@@ -386,12 +387,14 @@
     }
 
     // Remove unneeded decorations, for unreachable instructions
-    decorations.erase(std::remove_if(decorations.begin(), decorations.end(),
-        [&unreachableDefinitions](std::unique_ptr<Instruction>& I) -> bool {
-            Id decoration_id = I.get()->getIdOperand(0);
-            return unreachableDefinitions.count(decoration_id) != 0;
-        }),
-        decorations.end());
+    for (auto decorationIter = decorations.begin(); decorationIter != decorations.end();) {
+        Id decorationId = (*decorationIter)->getIdOperand(0);
+        if (unreachableDefinitions.count(decorationId) != 0) {
+            decorationIter = decorations.erase(decorationIter);
+        } else {
+            ++decorationIter;
+        }
+    }
 }
 
 // comment in header
@@ -482,6 +485,58 @@
     }
 }
 
+// SPIR-V requires that any instruction consuming the result of an OpSampledImage
+// be in the same block as the OpSampledImage instruction. This pass goes finds
+// uses of OpSampledImage where that is not the case and duplicates the
+// OpSampledImage to be immediately before the instruction that consumes it.
+// The old OpSampledImage is left in place, potentially with no users.
+void Builder::postProcessSamplers()
+{
+    // first, find all OpSampledImage instructions and store them in a map.
+    std::map<Id, Instruction*> sampledImageInstrs;
+    for (auto f: module.getFunctions()) {
+	for (auto b: f->getBlocks()) {
+	    for (auto &i: b->getInstructions()) {
+		if (i->getOpCode() == spv::OpSampledImage) {
+		    sampledImageInstrs[i->getResultId()] = i.get();
+		}
+	    }
+	}
+    }
+    // next find all uses of the given ids and rewrite them if needed.
+    for (auto f: module.getFunctions()) {
+	for (auto b: f->getBlocks()) {
+            auto &instrs = b->getInstructions();
+            for (size_t idx = 0; idx < instrs.size(); idx++) {
+                Instruction *i = instrs[idx].get();
+                for (int opnum = 0; opnum < i->getNumOperands(); opnum++) {
+                    // Is this operand of the current instruction the result of an OpSampledImage?
+                    if (i->isIdOperand(opnum) &&
+                        sampledImageInstrs.count(i->getIdOperand(opnum)))
+                    {
+                        Instruction *opSampImg = sampledImageInstrs[i->getIdOperand(opnum)];
+                        if (i->getBlock() != opSampImg->getBlock()) {
+                            Instruction *newInstr = new Instruction(getUniqueId(),
+                                                                    opSampImg->getTypeId(),
+                                                                    spv::OpSampledImage);
+                            newInstr->addIdOperand(opSampImg->getIdOperand(0));
+                            newInstr->addIdOperand(opSampImg->getIdOperand(1));
+                            newInstr->setBlock(b);
+
+                            // rewrite the user of the OpSampledImage to use the new instruction.
+                            i->setIdOperand(opnum, newInstr->getResultId());
+                            // insert the new OpSampledImage right before the current instruction.
+                            instrs.insert(instrs.begin() + idx,
+                                    std::unique_ptr<Instruction>(newInstr));
+                            idx++;
+                        }
+                    }
+                }
+            }
+	}
+    }
+}
+
 // comment in header
 void Builder::postProcess(bool compileOnly)
 {
@@ -490,6 +545,7 @@
         postProcessCFG();
 
     postProcessFeatures();
+    postProcessSamplers();
 }
 
-}; // end spv namespace
+} // end spv namespace
diff --git a/SPIRV/SpvTools.cpp b/SPIRV/SpvTools.cpp
index ff04f4f..a7a1a73 100644
--- a/SPIRV/SpvTools.cpp
+++ b/SPIRV/SpvTools.cpp
@@ -44,6 +44,7 @@
 
 #include "SpvTools.h"
 #include "spirv-tools/optimizer.hpp"
+#include "glslang/MachineIndependent/localintermediate.h"
 
 namespace glslang {
 
@@ -70,6 +71,8 @@
         return spv_target_env::SPV_ENV_VULKAN_1_2;
     case glslang::EShTargetVulkan_1_3:
         return spv_target_env::SPV_ENV_VULKAN_1_3;
+    case glslang::EShTargetVulkan_1_4:
+        return spv_target_env::SPV_ENV_VULKAN_1_4;
     default:
         break;
     }
@@ -81,6 +84,11 @@
     return spv_target_env::SPV_ENV_UNIVERSAL_1_0;
 }
 
+spv_target_env MapToSpirvToolsEnv(const glslang::TIntermediate& intermediate, spv::SpvBuildLogger* logger)
+{
+    return MapToSpirvToolsEnv(intermediate.getSpv(), logger);
+}
+
 // Callback passed to spvtools::Optimizer::SetMessageConsumer
 void OptimizerMesssageConsumer(spv_message_level_t level, const char *source,
         const spv_position_t &position, const char *message)
@@ -218,9 +226,20 @@
     optimizer.RegisterPass(spvtools::CreateCFGCleanupPass());
 
     spvtools::OptimizerOptions spvOptOptions;
+    if (options->optimizerAllowExpandedIDBound)
+        spvOptOptions.set_max_id_bound(0x3FFFFFFF);
     optimizer.SetTargetEnv(MapToSpirvToolsEnv(intermediate.getSpv(), logger));
     spvOptOptions.set_run_validator(false); // The validator may run as a separate step later on
     optimizer.Run(spirv.data(), spirv.size(), &spirv, spvOptOptions);
+
+    if (options->optimizerAllowExpandedIDBound) {
+        if (spirv.size() > 3 && spirv[3] > kDefaultMaxIdBound) {
+            spvtools::Optimizer optimizer2(target_env);
+            optimizer2.SetMessageConsumer(OptimizerMesssageConsumer);
+            optimizer2.RegisterPass(spvtools::CreateCompactIdsPass());
+            optimizer2.Run(spirv.data(), spirv.size(), &spirv, spvOptOptions);
+        }
+    }
 }
 
 bool SpirvToolsAnalyzeDeadOutputStores(spv_target_env target_env, std::vector<unsigned int>& spirv,
@@ -292,6 +311,6 @@
     optimizer.Run(spirv.data(), spirv.size(), &spirv, spvOptOptions);
 }
 
-}; // end namespace glslang
+} // end namespace glslang
 
 #endif
diff --git a/SPIRV/SpvTools.h b/SPIRV/SpvTools.h
index a4ce11b..4558572 100644
--- a/SPIRV/SpvTools.h
+++ b/SPIRV/SpvTools.h
@@ -44,67 +44,63 @@
 #if ENABLE_OPT
 #include <vector>
 #include <ostream>
+#include <unordered_set>
 #include "spirv-tools/libspirv.h"
 #endif
 
-#include "glslang/MachineIndependent/localintermediate.h"
+#include "glslang/MachineIndependent/Versions.h"
+#include "glslang/Include/visibility.h"
+#include "GlslangToSpv.h"
 #include "Logger.h"
 
 namespace glslang {
 
-struct SpvOptions {
-    bool generateDebugInfo {false};
-    bool stripDebugInfo {false};
-    bool disableOptimizer {true};
-    bool optimizeSize {false};
-    bool disassemble {false};
-    bool validate {false};
-    bool emitNonSemanticShaderDebugInfo {false};
-    bool emitNonSemanticShaderDebugSource{ false };
-    bool compileOnly{false};
-};
-
 #if ENABLE_OPT
 
+class TIntermediate;
+
 // Translate glslang's view of target versioning to what SPIRV-Tools uses.
-spv_target_env MapToSpirvToolsEnv(const SpvVersion& spvVersion, spv::SpvBuildLogger* logger);
+GLSLANG_EXPORT spv_target_env MapToSpirvToolsEnv(const SpvVersion& spvVersion, spv::SpvBuildLogger* logger);
+GLSLANG_EXPORT spv_target_env MapToSpirvToolsEnv(const glslang::TIntermediate& intermediate, spv::SpvBuildLogger* logger);
 
 // Use the SPIRV-Tools disassembler to print SPIR-V using a SPV_ENV_UNIVERSAL_1_3 environment.
-void SpirvToolsDisassemble(std::ostream& out, const std::vector<unsigned int>& spirv);
+GLSLANG_EXPORT void SpirvToolsDisassemble(std::ostream& out, const std::vector<unsigned int>& spirv);
 
 // Use the SPIRV-Tools disassembler to print SPIR-V with a provided SPIR-V environment.
-void SpirvToolsDisassemble(std::ostream& out, const std::vector<unsigned int>& spirv,
-                           spv_target_env requested_context);
+GLSLANG_EXPORT void SpirvToolsDisassemble(std::ostream& out, const std::vector<unsigned int>& spirv,
+                                          spv_target_env requested_context);
 
 // Apply the SPIRV-Tools validator to generated SPIR-V.
-void SpirvToolsValidate(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv,
-                        spv::SpvBuildLogger*, bool prelegalization);
+GLSLANG_EXPORT void SpirvToolsValidate(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv,
+                                       spv::SpvBuildLogger*, bool prelegalization);
 
 // Apply the SPIRV-Tools optimizer to generated SPIR-V.  HLSL SPIR-V is legalized in the process.
-void SpirvToolsTransform(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv,
-                         spv::SpvBuildLogger*, const SpvOptions*);
+GLSLANG_EXPORT void SpirvToolsTransform(const glslang::TIntermediate& intermediate, std::vector<unsigned int>& spirv,
+                                        spv::SpvBuildLogger*, const SpvOptions*);
 
 // Apply the SPIRV-Tools EliminateDeadInputComponents pass to generated SPIR-V. Put result in |spirv|.
-void SpirvToolsEliminateDeadInputComponents(spv_target_env target_env, std::vector<unsigned int>& spirv,
-                                            spv::SpvBuildLogger*);
+GLSLANG_EXPORT void SpirvToolsEliminateDeadInputComponents(spv_target_env target_env, std::vector<unsigned int>& spirv,
+                                                           spv::SpvBuildLogger*);
 
 // Apply the SPIRV-Tools AnalyzeDeadOutputStores pass to generated SPIR-V. Put result in |live_locs|.
 // Return true if the result is valid.
-bool SpirvToolsAnalyzeDeadOutputStores(spv_target_env target_env, std::vector<unsigned int>& spirv,
-                                       std::unordered_set<uint32_t>* live_locs,
-                                       std::unordered_set<uint32_t>* live_builtins, spv::SpvBuildLogger*);
+GLSLANG_EXPORT bool SpirvToolsAnalyzeDeadOutputStores(spv_target_env target_env, std::vector<unsigned int>& spirv,
+                                                      std::unordered_set<uint32_t>* live_locs,
+                                                      std::unordered_set<uint32_t>* live_builtins,
+                                                      spv::SpvBuildLogger*);
 
 // Apply the SPIRV-Tools EliminateDeadOutputStores and AggressiveDeadCodeElimination passes to generated SPIR-V using
 // |live_locs|. Put result in |spirv|.
-void SpirvToolsEliminateDeadOutputStores(spv_target_env target_env, std::vector<unsigned int>& spirv,
-                                         std::unordered_set<uint32_t>* live_locs,
-                                         std::unordered_set<uint32_t>* live_builtins, spv::SpvBuildLogger*);
+GLSLANG_EXPORT void SpirvToolsEliminateDeadOutputStores(spv_target_env target_env, std::vector<unsigned int>& spirv,
+                                                        std::unordered_set<uint32_t>* live_locs,
+                                                        std::unordered_set<uint32_t>* live_builtins,
+                                                        spv::SpvBuildLogger*);
 
 // Apply the SPIRV-Tools optimizer to strip debug info from SPIR-V.  This is implicitly done by
 // SpirvToolsTransform if spvOptions->stripDebugInfo is set, but can be called separately if
 // optimization is disabled.
-void SpirvToolsStripDebugInfo(const glslang::TIntermediate& intermediate,
-        std::vector<unsigned int>& spirv, spv::SpvBuildLogger*);
+GLSLANG_EXPORT void SpirvToolsStripDebugInfo(const glslang::TIntermediate& intermediate,
+                                             std::vector<unsigned int>& spirv, spv::SpvBuildLogger*);
 
 #endif
 
diff --git a/SPIRV/disassemble.cpp b/SPIRV/disassemble.cpp
index c5e961c..606e889 100644
--- a/SPIRV/disassemble.cpp
+++ b/SPIRV/disassemble.cpp
@@ -36,6 +36,7 @@
 // Disassembler for SPIR-V.
 //
 
+#include <cstdint>
 #include <cstdlib>
 #include <cstring>
 #include <cassert>
@@ -80,6 +81,7 @@
     GLSLextNVInst,
     OpenCLExtInst,
     NonSemanticDebugPrintfExtInst,
+    NonSemanticDebugBreakExtInst,
     NonSemanticShaderDebugInfo100
 };
 
@@ -337,6 +339,18 @@
     return decoderes.first;
 }
 
+static uint32_t popcount(uint32_t mask)
+{
+    uint32_t count = 0;
+    while (mask) {
+        if (mask & 1) {
+            count++;
+        }
+        mask >>= 1;
+    }
+    return count;
+}
+
 void SpirvStream::disassembleInstruction(Id resultId, Id /*typeId*/, Op opCode, int numOperands)
 {
     // Process the opcode
@@ -360,7 +374,7 @@
                 switch (stream[word]) {
                 case 8:  idDescriptor[resultId] = "int8_t"; break;
                 case 16: idDescriptor[resultId] = "int16_t"; break;
-                default: assert(0); // fallthrough
+                default: assert(0); [[fallthrough]];
                 case 32: idDescriptor[resultId] = "int"; break;
                 case 64: idDescriptor[resultId] = "int64_t"; break;
                 }
@@ -368,7 +382,7 @@
             case OpTypeFloat:
                 switch (stream[word]) {
                 case 16: idDescriptor[resultId] = "float16_t"; break;
-                default: assert(0); // fallthrough
+                default: assert(0); [[fallthrough]];
                 case 32: idDescriptor[resultId] = "float"; break;
                 case 64: idDescriptor[resultId] = "float64_t"; break;
                 }
@@ -506,6 +520,8 @@
                     extInstSet = OpenCLExtInst;
                 } else if (strcmp("NonSemantic.DebugPrintf", name) == 0) {
                     extInstSet = NonSemanticDebugPrintfExtInst;
+                } else if (strcmp("NonSemantic.DebugBreak", name) == 0) {
+                    extInstSet = NonSemanticDebugBreakExtInst;
                 } else if (strcmp("NonSemantic.Shader.DebugInfo.100", name) == 0) {
                     extInstSet = NonSemanticShaderDebugInfo100;
                 } else if (strcmp(spv::E_SPV_AMD_shader_ballot, name) == 0 ||
@@ -533,6 +549,8 @@
                     out << "(" << GLSLextNVGetDebugNames(name, entrypoint) << ")";
                 } else if (extInstSet == NonSemanticDebugPrintfExtInst) {
                     out << "(DebugPrintf)";
+                } else if (extInstSet == NonSemanticDebugBreakExtInst) {
+                    out << "(DebugBreak)";
                 } else if (extInstSet == NonSemanticShaderDebugInfo100) {
                     out << "(" << NonSemanticShaderDebugInfo100GetDebugNames(entrypoint) << ")";
                 }
@@ -547,18 +565,41 @@
                 numOperands -= disassembleString();
             return;
         case OperandMemoryAccess:
-            outputMask(OperandMemoryAccess, stream[word++]);
-            --numOperands;
-            // Aligned is the only memory access operand that uses an immediate
-            // value, and it is also the first operand that uses a value at all.
-            if (stream[word-1] & MemoryAccessAlignedMask) {
-                disassembleImmediates(1);
-                numOperands--;
-                if (numOperands)
+            {
+                outputMask(OperandMemoryAccess, stream[word++]);
+                --numOperands;
+                // Put a space after "None" if there are any remaining operands
+                if (numOperands && stream[word-1] == 0) {
                     out << " ";
+                }
+                uint32_t mask = stream[word-1];
+                // Aligned is the only memory access operand that uses an immediate
+                // value, and it is also the first operand that uses a value at all.
+                if (mask & MemoryAccessAlignedMask) {
+                    disassembleImmediates(1);
+                    numOperands--;
+                    if (numOperands)
+                        out << " ";
+                }
+
+                uint32_t bitCount = popcount(mask & (MemoryAccessMakePointerAvailableMask | MemoryAccessMakePointerVisibleMask));
+                disassembleIds(bitCount);
+                numOperands -= bitCount;
             }
-            disassembleIds(numOperands);
-            return;
+            break;
+        case OperandTensorAddressingOperands:
+            {
+                outputMask(OperandTensorAddressingOperands, stream[word++]);
+                --numOperands;
+                // Put a space after "None" if there are any remaining operands
+                if (numOperands && stream[word-1] == 0) {
+                    out << " ";
+                }
+                uint32_t bitCount = popcount(stream[word-1]);
+                disassembleIds(bitCount);
+                numOperands -= bitCount;
+            }
+            break;
         default:
             assert(operandClass >= OperandSource && operandClass < OperandOpcode);
 
@@ -820,4 +861,4 @@
     SpirvStream.processInstructions();
 }
 
-}; // end namespace spv
+} // end namespace spv
diff --git a/SPIRV/disassemble.h b/SPIRV/disassemble.h
index b6a4635..3bded14 100644
--- a/SPIRV/disassemble.h
+++ b/SPIRV/disassemble.h
@@ -43,10 +43,12 @@
 #include <iostream>
 #include <vector>
 
+#include "glslang/Include/visibility.h"
+
 namespace spv {
 
     // disassemble with glslang custom disassembler
-    void Disassemble(std::ostream& out, const std::vector<unsigned int>&);
+    GLSLANG_EXPORT void Disassemble(std::ostream& out, const std::vector<unsigned int>&);
 
 }  // end namespace spv
 
diff --git a/SPIRV/doc.cpp b/SPIRV/doc.cpp
old mode 100755
new mode 100644
index 53ce9e1..dce8a71
--- a/SPIRV/doc.cpp
+++ b/SPIRV/doc.cpp
@@ -1,5 +1,6 @@
 //
 // Copyright (C) 2014-2015 LunarG, Inc.
+// Copyright (C) 2022-2024 Arm Limited.
 // Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
 //
 // All rights reserved.
@@ -198,6 +199,7 @@
     case ExecutionModeStencilRefGreaterBackAMD:      return "StencilRefGreaterBackAMD";
     case ExecutionModeStencilRefReplacingEXT:        return "StencilRefReplacingEXT";
     case ExecutionModeSubgroupUniformControlFlowKHR: return "SubgroupUniformControlFlow";
+    case ExecutionModeMaximallyReconvergesKHR:       return "MaximallyReconverges";
 
     case ExecutionModeOutputLinesNV:                 return "OutputLinesNV";
     case ExecutionModeOutputPrimitivesNV:            return "OutputPrimitivesNV";
@@ -217,6 +219,9 @@
     case ExecutionModeNoGlobalOffsetINTEL:      return "NoGlobalOffsetINTEL";
     case ExecutionModeNumSIMDWorkitemsINTEL:    return "NumSIMDWorkitemsINTEL";
 
+    case ExecutionModeRequireFullQuadsKHR:      return "RequireFullQuadsKHR";
+    case ExecutionModeQuadDerivativesKHR:       return "QuadDerivativesKHR";
+
     case ExecutionModeNonCoherentColorAttachmentReadEXT:        return "NonCoherentColorAttachmentReadEXT";
     case ExecutionModeNonCoherentDepthAttachmentReadEXT:        return "NonCoherentDepthAttachmentReadEXT";
     case ExecutionModeNonCoherentStencilAttachmentReadEXT:      return "NonCoherentStencilAttachmentReadEXT";
@@ -314,6 +319,7 @@
 
     case DecorationWeightTextureQCOM:           return "DecorationWeightTextureQCOM";
     case DecorationBlockMatchTextureQCOM:       return "DecorationBlockMatchTextureQCOM";
+    case DecorationBlockMatchSamplerQCOM:       return "DecorationBlockMatchSamplerQCOM";
     case DecorationExplicitInterpAMD:           return "ExplicitInterpAMD";
     case DecorationOverrideCoverageNV:          return "OverrideCoverageNV";
     case DecorationPassthroughNV:               return "PassthroughNV";
@@ -802,11 +808,23 @@
 const char* CooperativeMatrixOperandsString(int op)
 {
     switch (op) {
-    case CooperativeMatrixOperandsMatrixASignedComponentsShift:  return "ASignedComponents";
-    case CooperativeMatrixOperandsMatrixBSignedComponentsShift:  return "BSignedComponents";
-    case CooperativeMatrixOperandsMatrixCSignedComponentsShift:  return "CSignedComponents";
-    case CooperativeMatrixOperandsMatrixResultSignedComponentsShift:  return "ResultSignedComponents";
-    case CooperativeMatrixOperandsSaturatingAccumulationShift:   return "SaturatingAccumulation";
+    case CooperativeMatrixOperandsMatrixASignedComponentsKHRShift:  return "ASignedComponentsKHR";
+    case CooperativeMatrixOperandsMatrixBSignedComponentsKHRShift:  return "BSignedComponentsKHR";
+    case CooperativeMatrixOperandsMatrixCSignedComponentsKHRShift:  return "CSignedComponentsKHR";
+    case CooperativeMatrixOperandsMatrixResultSignedComponentsKHRShift:  return "ResultSignedComponentsKHR";
+    case CooperativeMatrixOperandsSaturatingAccumulationKHRShift:   return "SaturatingAccumulationKHR";
+
+    default: return "Bad";
+    }
+}
+
+const int TensorAddressingOperandsCeiling = 3;
+
+const char* TensorAddressingOperandsString(int op)
+{
+    switch (op) {
+    case TensorAddressingOperandsTensorViewShift:  return "TensorView";
+    case TensorAddressingOperandsDecodeFuncShift:  return "DecodeFunc";
 
     default: return "Bad";
     }
@@ -938,6 +956,7 @@
     case CapabilitySubgroupBallotKHR: return "SubgroupBallotKHR";
     case CapabilityDrawParameters:    return "DrawParameters";
     case CapabilitySubgroupVoteKHR:   return "SubgroupVoteKHR";
+    case CapabilityGroupNonUniformRotateKHR: return "CapabilityGroupNonUniformRotateKHR";
 
     case CapabilityStorageUniformBufferBlock16: return "StorageUniformBufferBlock16";
     case CapabilityStorageUniform16:            return "StorageUniform16";
@@ -1018,6 +1037,13 @@
 
     case CapabilityCooperativeMatrixNV:     return "CooperativeMatrixNV";
     case CapabilityCooperativeMatrixKHR:    return "CooperativeMatrixKHR";
+    case CapabilityCooperativeMatrixReductionsNV:           return "CooperativeMatrixReductionsNV";
+    case CapabilityCooperativeMatrixConversionsNV:          return "CooperativeMatrixConversionsNV";
+    case CapabilityCooperativeMatrixPerElementOperationsNV: return "CooperativeMatrixPerElementOperationsNV";
+    case CapabilityCooperativeMatrixTensorAddressingNV:     return "CooperativeMatrixTensorAddressingNV";
+    case CapabilityCooperativeMatrixBlockLoadsNV:           return "CooperativeMatrixBlockLoadsNV";
+    case CapabilityTensorAddressingNV:                      return "TensorAddressingNV";
+
     case CapabilityShaderSMBuiltinsNV:      return "ShaderSMBuiltinsNV";
 
     case CapabilityFragmentShaderSampleInterlockEXT:        return "CapabilityFragmentShaderSampleInterlockEXT";
@@ -1028,14 +1054,20 @@
     case CapabilityTileImageDepthReadAccessEXT:           return "TileImageDepthReadAccessEXT";
     case CapabilityTileImageStencilReadAccessEXT:         return "TileImageStencilReadAccessEXT";
 
+    case CapabilityCooperativeMatrixLayoutsARM:             return "CooperativeMatrixLayoutsARM";
+
     case CapabilityFragmentShadingRateKHR:                  return "FragmentShadingRateKHR";
 
     case CapabilityDemoteToHelperInvocationEXT:             return "DemoteToHelperInvocationEXT";
+    case CapabilityAtomicFloat16VectorNV:                   return "AtomicFloat16VectorNV";
     case CapabilityShaderClockKHR:                          return "ShaderClockKHR";
+    case CapabilityQuadControlKHR:                          return "QuadControlKHR";
     case CapabilityInt64ImageEXT:                           return "Int64ImageEXT";
 
     case CapabilityIntegerFunctions2INTEL:              return "CapabilityIntegerFunctions2INTEL";
 
+    case CapabilityExpectAssumeKHR:                         return "ExpectAssumeKHR";
+
     case CapabilityAtomicFloat16AddEXT:                     return "AtomicFloat16AddEXT";
     case CapabilityAtomicFloat32AddEXT:                     return "AtomicFloat32AddEXT";
     case CapabilityAtomicFloat64AddEXT:                     return "AtomicFloat64AddEXT";
@@ -1053,6 +1085,9 @@
     case CapabilityTextureSampleWeightedQCOM:           return "TextureSampleWeightedQCOM";
     case CapabilityTextureBoxFilterQCOM:                return "TextureBoxFilterQCOM";
     case CapabilityTextureBlockMatchQCOM:               return "TextureBlockMatchQCOM";
+    case CapabilityTextureBlockMatch2QCOM:              return "TextureBlockMatch2QCOM";
+
+    case CapabilityReplicatedCompositesEXT:             return "CapabilityReplicatedCompositesEXT";
 
     default: return "Bad";
     }
@@ -1431,11 +1466,18 @@
     case 4429: return "OpSubgroupAnyKHR";
     case 4430: return "OpSubgroupAllEqualKHR";
     case 4432: return "OpSubgroupReadInvocationKHR";
+    case 4433: return "OpExtInstWithForwardRefsKHR";
+
+    case OpGroupNonUniformQuadAllKHR: return "OpGroupNonUniformQuadAllKHR";
+    case OpGroupNonUniformQuadAnyKHR: return "OpGroupNonUniformQuadAnyKHR";
 
     case OpAtomicFAddEXT: return "OpAtomicFAddEXT";
     case OpAtomicFMinEXT: return "OpAtomicFMinEXT";
     case OpAtomicFMaxEXT: return "OpAtomicFMaxEXT";
 
+    case OpAssumeTrueKHR: return "OpAssumeTrueKHR";
+    case OpExpectKHR: return "OpExpectKHR";
+
     case 5000: return "OpGroupIAddNonUniformAMD";
     case 5001: return "OpGroupFAddNonUniformAMD";
     case 5002: return "OpGroupFMinNonUniformAMD";
@@ -1472,6 +1514,8 @@
     case OpEmitMeshTasksEXT:                 return "OpEmitMeshTasksEXT";
     case OpSetMeshOutputsEXT:                return "OpSetMeshOutputsEXT";
 
+    case OpGroupNonUniformRotateKHR:         return "OpGroupNonUniformRotateKHR";
+
     case OpTypeRayQueryKHR:                                                   return "OpTypeRayQueryKHR";
     case OpRayQueryInitializeKHR:                                             return "OpRayQueryInitializeKHR";
     case OpRayQueryTerminateKHR:                                              return "OpRayQueryTerminateKHR";
@@ -1511,6 +1555,25 @@
     case OpDemoteToHelperInvocationEXT:     return "OpDemoteToHelperInvocationEXT";
     case OpIsHelperInvocationEXT:           return "OpIsHelperInvocationEXT";
 
+    case OpCooperativeMatrixConvertNV:      return "OpCooperativeMatrixConvertNV";
+    case OpCooperativeMatrixTransposeNV:    return "OpCooperativeMatrixTransposeNV";
+    case OpCooperativeMatrixReduceNV:       return "OpCooperativeMatrixReduceNV";
+    case OpCooperativeMatrixLoadTensorNV:   return "OpCooperativeMatrixLoadTensorNV";
+    case OpCooperativeMatrixStoreTensorNV:  return "OpCooperativeMatrixStoreTensorNV";
+    case OpCooperativeMatrixPerElementOpNV: return "OpCooperativeMatrixPerElementOpNV";
+    case OpTypeTensorLayoutNV:              return "OpTypeTensorLayoutNV";
+    case OpTypeTensorViewNV:                return "OpTypeTensorViewNV";
+    case OpCreateTensorLayoutNV:            return "OpCreateTensorLayoutNV";
+    case OpTensorLayoutSetBlockSizeNV:      return "OpTensorLayoutSetBlockSizeNV";
+    case OpTensorLayoutSetDimensionNV:      return "OpTensorLayoutSetDimensionNV";
+    case OpTensorLayoutSetStrideNV:         return "OpTensorLayoutSetStrideNV";
+    case OpTensorLayoutSliceNV:             return "OpTensorLayoutSliceNV";
+    case OpTensorLayoutSetClampValueNV:     return "OpTensorLayoutSetClampValueNV";
+    case OpCreateTensorViewNV:              return "OpCreateTensorViewNV";
+    case OpTensorViewSetDimensionNV:        return "OpTensorViewSetDimensionNV";
+    case OpTensorViewSetStrideNV:           return "OpTensorViewSetStrideNV";
+    case OpTensorViewSetClipNV:             return "OpTensorViewSetClipNV";
+
     case OpBeginInvocationInterlockEXT:     return "OpBeginInvocationInterlockEXT";
     case OpEndInvocationInterlockEXT:       return "OpEndInvocationInterlockEXT";
 
@@ -1559,6 +1622,14 @@
     case OpImageBoxFilterQCOM:              return "OpImageBoxFilterQCOM";
     case OpImageBlockMatchSADQCOM:          return "OpImageBlockMatchSADQCOM";
     case OpImageBlockMatchSSDQCOM:          return "OpImageBlockMatchSSDQCOM";
+    case OpImageBlockMatchWindowSSDQCOM:    return "OpImageBlockMatchWindowSSDQCOM";
+    case OpImageBlockMatchWindowSADQCOM:    return "OpImageBlockMatchWindowSADQCOM";
+    case OpImageBlockMatchGatherSSDQCOM:    return "OpImageBlockMatchGatherSSDQCOM";
+    case OpImageBlockMatchGatherSADQCOM:    return "OpImageBlockMatchGatherSADQCOM";
+
+    case OpConstantCompositeReplicateEXT: return "OpConstantCompositeReplicateEXT";
+    case OpSpecConstantCompositeReplicateEXT: return "OpSpecConstantCompositeReplicateEXT";
+    case OpCompositeConstructReplicateEXT: return "OpCompositeConstructReplicateEXT";
 
     default:
         return "Bad";
@@ -1580,6 +1651,7 @@
 EnumParameters FunctionControlParams[FunctionControlCeiling];
 EnumParameters MemoryAccessParams[MemoryAccessCeiling];
 EnumParameters CooperativeMatrixOperandsParams[CooperativeMatrixOperandsCeiling];
+EnumParameters TensorAddressingOperandsParams[TensorAddressingOperandsCeiling];
 
 // Set up all the parameterizing descriptions of the opcodes, operands, etc.
 void Parameterize()
@@ -1678,7 +1750,10 @@
         InstructionDesc[OpCooperativeMatrixStoreKHR].setResultAndType(false, false);
         InstructionDesc[OpBeginInvocationInterlockEXT].setResultAndType(false, false);
         InstructionDesc[OpEndInvocationInterlockEXT].setResultAndType(false, false);
-
+        InstructionDesc[OpAssumeTrueKHR].setResultAndType(false, false);
+        InstructionDesc[OpTypeTensorLayoutNV].setResultAndType(true, false);
+        InstructionDesc[OpTypeTensorViewNV].setResultAndType(true, false);
+        InstructionDesc[OpCooperativeMatrixStoreTensorNV].setResultAndType(false, false);
         // Specific additional context-dependent operands
 
         ExecutionModeOperands[ExecutionModeInvocations].push(OperandLiteralNumber, "'Number of <<Invocation,invocations>>'");
@@ -1748,6 +1823,7 @@
         OperandClassParams[OperandKernelProfilingInfo].set(0, KernelProfilingInfoString, nullptr, true);
         OperandClassParams[OperandCapability].set(0, CapabilityString, nullptr);
         OperandClassParams[OperandCooperativeMatrixOperands].set(CooperativeMatrixOperandsCeiling, CooperativeMatrixOperandsString, CooperativeMatrixOperandsParams, true);
+        OperandClassParams[OperandTensorAddressingOperands].set(TensorAddressingOperandsCeiling, TensorAddressingOperandsString, TensorAddressingOperandsParams, true);
         OperandClassParams[OperandOpcode].set(OpCodeMask + 1, OpcodeString, nullptr);
 
         // set name of operator, an initial set of <id> style operands, and the description
@@ -1866,6 +1942,10 @@
         InstructionDesc[OpExtInst].operands.push(OperandLiteralNumber, "'Instruction'");
         InstructionDesc[OpExtInst].operands.push(OperandVariableIds, "'Operand 1', +\n'Operand 2', +\n...");
 
+        InstructionDesc[OpExtInstWithForwardRefsKHR].operands.push(OperandId, "'Set'");
+        InstructionDesc[OpExtInstWithForwardRefsKHR].operands.push(OperandLiteralNumber, "'Instruction'");
+        InstructionDesc[OpExtInstWithForwardRefsKHR].operands.push(OperandVariableIds, "'Operand 1', +\n'Operand 2', +\n...");
+
         InstructionDesc[OpLoad].operands.push(OperandId, "'Pointer'");
         InstructionDesc[OpLoad].operands.push(OperandMemoryAccess, "", true);
         InstructionDesc[OpLoad].operands.push(OperandLiteralNumber, "", true);
@@ -2457,6 +2537,11 @@
         InstructionDesc[OpAtomicFAddEXT].operands.push(OperandMemorySemantics, "'Semantics'");
         InstructionDesc[OpAtomicFAddEXT].operands.push(OperandId, "'Value'");
 
+        InstructionDesc[OpAssumeTrueKHR].operands.push(OperandId, "'Condition'");
+
+        InstructionDesc[OpExpectKHR].operands.push(OperandId, "'Value'");
+        InstructionDesc[OpExpectKHR].operands.push(OperandId, "'ExpectedValue'");
+
         InstructionDesc[OpAtomicISub].operands.push(OperandId, "'Pointer'");
         InstructionDesc[OpAtomicISub].operands.push(OperandScope, "'Scope'");
         InstructionDesc[OpAtomicISub].operands.push(OperandMemorySemantics, "'Semantics'");
@@ -2885,6 +2970,11 @@
         InstructionDesc[OpSubgroupAllEqualKHR].operands.push(OperandScope, "'Execution'");
         InstructionDesc[OpSubgroupAllEqualKHR].operands.push(OperandId, "'Predicate'");
 
+        InstructionDesc[OpGroupNonUniformRotateKHR].operands.push(OperandScope, "'Execution'");
+        InstructionDesc[OpGroupNonUniformRotateKHR].operands.push(OperandId, "'X'");
+        InstructionDesc[OpGroupNonUniformRotateKHR].operands.push(OperandId, "'Delta'");
+        InstructionDesc[OpGroupNonUniformRotateKHR].operands.push(OperandId, "'ClusterSize'", true);
+
         InstructionDesc[OpSubgroupReadInvocationKHR].operands.push(OperandId, "'Value'");
         InstructionDesc[OpSubgroupReadInvocationKHR].operands.push(OperandId, "'Index'");
 
@@ -2931,6 +3021,8 @@
 
         InstructionDesc[OpGroupNonUniformPartitionNV].operands.push(OperandId, "X");
 
+        InstructionDesc[OpGroupNonUniformQuadAllKHR].operands.push(OperandId, "'Predicate'");
+        InstructionDesc[OpGroupNonUniformQuadAnyKHR].operands.push(OperandId, "'Predicate'");
         InstructionDesc[OpTypeAccelerationStructureKHR].setResultAndType(true, false);
 
         InstructionDesc[OpTraceNV].operands.push(OperandId, "'Acceleration Structure'");
@@ -3403,7 +3495,104 @@
         InstructionDesc[OpImageBlockMatchSSDQCOM].operands.push(OperandId, "'block size'");
         InstructionDesc[OpImageBlockMatchSSDQCOM].operands.push(OperandImageOperands, "", true);
         InstructionDesc[OpImageBlockMatchSSDQCOM].setResultAndType(true, true);
+
+        InstructionDesc[OpImageBlockMatchWindowSSDQCOM].operands.push(OperandId, "'target texture'");
+        InstructionDesc[OpImageBlockMatchWindowSSDQCOM].operands.push(OperandId, "'target coordinates'");
+        InstructionDesc[OpImageBlockMatchWindowSSDQCOM].operands.push(OperandId, "'reference texture'");
+        InstructionDesc[OpImageBlockMatchWindowSSDQCOM].operands.push(OperandId, "'reference coordinates'");
+        InstructionDesc[OpImageBlockMatchWindowSSDQCOM].operands.push(OperandId, "'block size'");
+        InstructionDesc[OpImageBlockMatchWindowSSDQCOM].operands.push(OperandImageOperands, "", true);
+        InstructionDesc[OpImageBlockMatchWindowSSDQCOM].setResultAndType(true, true);
+
+        InstructionDesc[OpImageBlockMatchWindowSADQCOM].operands.push(OperandId, "'target texture'");
+        InstructionDesc[OpImageBlockMatchWindowSADQCOM].operands.push(OperandId, "'target coordinates'");
+        InstructionDesc[OpImageBlockMatchWindowSADQCOM].operands.push(OperandId, "'reference texture'");
+        InstructionDesc[OpImageBlockMatchWindowSADQCOM].operands.push(OperandId, "'reference coordinates'");
+        InstructionDesc[OpImageBlockMatchWindowSADQCOM].operands.push(OperandId, "'block size'");
+        InstructionDesc[OpImageBlockMatchWindowSADQCOM].operands.push(OperandImageOperands, "", true);
+        InstructionDesc[OpImageBlockMatchWindowSADQCOM].setResultAndType(true, true);
+
+        InstructionDesc[OpImageBlockMatchGatherSSDQCOM].operands.push(OperandId, "'target texture'");
+        InstructionDesc[OpImageBlockMatchGatherSSDQCOM].operands.push(OperandId, "'target coordinates'");
+        InstructionDesc[OpImageBlockMatchGatherSSDQCOM].operands.push(OperandId, "'reference texture'");
+        InstructionDesc[OpImageBlockMatchGatherSSDQCOM].operands.push(OperandId, "'reference coordinates'");
+        InstructionDesc[OpImageBlockMatchGatherSSDQCOM].operands.push(OperandId, "'block size'");
+        InstructionDesc[OpImageBlockMatchGatherSSDQCOM].operands.push(OperandImageOperands, "", true);
+        InstructionDesc[OpImageBlockMatchGatherSSDQCOM].setResultAndType(true, true);
+
+        InstructionDesc[OpImageBlockMatchGatherSADQCOM].operands.push(OperandId, "'target texture'");
+        InstructionDesc[OpImageBlockMatchGatherSADQCOM].operands.push(OperandId, "'target coordinates'");
+        InstructionDesc[OpImageBlockMatchGatherSADQCOM].operands.push(OperandId, "'reference texture'");
+        InstructionDesc[OpImageBlockMatchGatherSADQCOM].operands.push(OperandId, "'reference coordinates'");
+        InstructionDesc[OpImageBlockMatchGatherSADQCOM].operands.push(OperandId, "'block size'");
+        InstructionDesc[OpImageBlockMatchGatherSADQCOM].operands.push(OperandImageOperands, "", true);
+        InstructionDesc[OpImageBlockMatchGatherSADQCOM].setResultAndType(true, true);
+
+        InstructionDesc[OpConstantCompositeReplicateEXT].operands.push(OperandId, "'Value'");
+        InstructionDesc[OpSpecConstantCompositeReplicateEXT].operands.push(OperandId, "'Value'");
+        InstructionDesc[OpCompositeConstructReplicateEXT].operands.push(OperandId, "'Value'");
+
+        InstructionDesc[OpCooperativeMatrixConvertNV].operands.push(OperandId, "'Value'");
+
+        InstructionDesc[OpCooperativeMatrixTransposeNV].operands.push(OperandId, "'Matrix'");
+
+        InstructionDesc[OpCooperativeMatrixReduceNV].operands.push(OperandId, "'Matrix'");
+        InstructionDesc[OpCooperativeMatrixReduceNV].operands.push(OperandLiteralNumber, "'ReduceMask'");
+        InstructionDesc[OpCooperativeMatrixReduceNV].operands.push(OperandId, "'CombineFunc'");
+
+        InstructionDesc[OpCooperativeMatrixPerElementOpNV].operands.push(OperandId, "'Matrix'");
+        InstructionDesc[OpCooperativeMatrixPerElementOpNV].operands.push(OperandId, "'Operation'");
+        InstructionDesc[OpCooperativeMatrixPerElementOpNV].operands.push(OperandVariableIds, "'Operands'");
+
+        InstructionDesc[OpCooperativeMatrixLoadTensorNV].operands.push(OperandId, "'Pointer'");
+        InstructionDesc[OpCooperativeMatrixLoadTensorNV].operands.push(OperandId, "'Object'");
+        InstructionDesc[OpCooperativeMatrixLoadTensorNV].operands.push(OperandId, "'TensorLayout'");
+        InstructionDesc[OpCooperativeMatrixLoadTensorNV].operands.push(OperandMemoryAccess, "'Memory Access'");
+        InstructionDesc[OpCooperativeMatrixLoadTensorNV].operands.push(OperandTensorAddressingOperands, "'Tensor Addressing Operands'");
+
+        InstructionDesc[OpCooperativeMatrixStoreTensorNV].operands.push(OperandId, "'Pointer'");
+        InstructionDesc[OpCooperativeMatrixStoreTensorNV].operands.push(OperandId, "'Object'");
+        InstructionDesc[OpCooperativeMatrixStoreTensorNV].operands.push(OperandId, "'TensorLayout'");
+        InstructionDesc[OpCooperativeMatrixStoreTensorNV].operands.push(OperandMemoryAccess, "'Memory Access'");
+        InstructionDesc[OpCooperativeMatrixStoreTensorNV].operands.push(OperandTensorAddressingOperands, "'Tensor Addressing Operands'");
+
+        InstructionDesc[OpCooperativeMatrixReduceNV].operands.push(OperandId, "'Matrix'");
+        InstructionDesc[OpCooperativeMatrixReduceNV].operands.push(OperandLiteralNumber, "'ReduceMask'");
+
+        InstructionDesc[OpTypeTensorLayoutNV].operands.push(OperandId, "'Dim'");
+        InstructionDesc[OpTypeTensorLayoutNV].operands.push(OperandId, "'ClampMode'");
+
+        InstructionDesc[OpTypeTensorViewNV].operands.push(OperandId, "'Dim'");
+        InstructionDesc[OpTypeTensorViewNV].operands.push(OperandId, "'HasDimensions'");
+        InstructionDesc[OpTypeTensorViewNV].operands.push(OperandVariableIds, "'p'");
+
+        InstructionDesc[OpTensorLayoutSetBlockSizeNV].operands.push(OperandId, "'TensorLayout'");
+        InstructionDesc[OpTensorLayoutSetBlockSizeNV].operands.push(OperandVariableIds, "'BlockSize'");
+
+        InstructionDesc[OpTensorLayoutSetDimensionNV].operands.push(OperandId, "'TensorLayout'");
+        InstructionDesc[OpTensorLayoutSetDimensionNV].operands.push(OperandVariableIds, "'Dim'");
+
+        InstructionDesc[OpTensorLayoutSetStrideNV].operands.push(OperandId, "'TensorLayout'");
+        InstructionDesc[OpTensorLayoutSetStrideNV].operands.push(OperandVariableIds, "'Stride'");
+
+        InstructionDesc[OpTensorLayoutSliceNV].operands.push(OperandId, "'TensorLayout'");
+        InstructionDesc[OpTensorLayoutSliceNV].operands.push(OperandVariableIds, "'Operands'");
+
+        InstructionDesc[OpTensorLayoutSetClampValueNV].operands.push(OperandId, "'TensorLayout'");
+        InstructionDesc[OpTensorLayoutSetClampValueNV].operands.push(OperandId, "'Value'");
+
+        InstructionDesc[OpTensorViewSetDimensionNV].operands.push(OperandId, "'TensorView'");
+        InstructionDesc[OpTensorViewSetDimensionNV].operands.push(OperandVariableIds, "'Dim'");
+
+        InstructionDesc[OpTensorViewSetStrideNV].operands.push(OperandId, "'TensorView'");
+        InstructionDesc[OpTensorViewSetStrideNV].operands.push(OperandVariableIds, "'Stride'");
+
+        InstructionDesc[OpTensorViewSetClipNV].operands.push(OperandId, "'TensorView'");
+        InstructionDesc[OpTensorViewSetClipNV].operands.push(OperandId, "'ClipRowOffset'");
+        InstructionDesc[OpTensorViewSetClipNV].operands.push(OperandId, "'ClipRowSpan'");
+        InstructionDesc[OpTensorViewSetClipNV].operands.push(OperandId, "'ClipColOffset'");
+        InstructionDesc[OpTensorViewSetClipNV].operands.push(OperandId, "'ClipColSpan'");
     });
 }
 
-}; // end spv namespace
+} // end spv namespace
diff --git a/SPIRV/doc.h b/SPIRV/doc.h
index b60ad34..8cd388a 100644
--- a/SPIRV/doc.h
+++ b/SPIRV/doc.h
@@ -157,6 +157,7 @@
     OperandKernelProfilingInfo,
     OperandCapability,
     OperandCooperativeMatrixOperands,
+    OperandTensorAddressingOperands,
 
     OperandOpcode,
 
@@ -240,8 +241,8 @@
     OperandParameters operands;
 
 protected:
-    int typePresent   : 1;
-    int resultPresent : 1;
+    bool typePresent   : 1;
+    bool resultPresent : 1;
 };
 
 // The set of objects that hold all the instruction/operand
diff --git a/SPIRV/spirv.hpp b/SPIRV/spirv.hpp
index 01f2259..3518ccd 100644
--- a/SPIRV/spirv.hpp
+++ b/SPIRV/spirv.hpp
@@ -1,19 +1,19 @@
-// Copyright (c) 2014-2020 The Khronos Group Inc.
-//
+// Copyright (c) 2014-2024 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/
-//
+// 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
@@ -27,7 +27,7 @@
 
 // Enumeration tokens for SPIR-V, in various styles:
 //   C, C++, C++11, JSON, Lua, Python, C#, D, Beef
-//
+// 
 // - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL
 // - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL
 // - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL
@@ -38,7 +38,7 @@
 // - D will have tokens under the "spv" module, e.g: spv.SourceLanguage.GLSL
 // - Beef will use enum classes in the Specification class located in the "Spv" namespace,
 //     e.g.: Spv.Specification.SourceLanguage.GLSL
-//
+// 
 // Some tokens act like mask values, which can be OR'd together,
 // while others are mutually exclusive.  The mask-like ones have
 // "Mask" in their name, and a parallel enum that has the shift
@@ -69,6 +69,11 @@
     SourceLanguageHLSL = 5,
     SourceLanguageCPP_for_OpenCL = 6,
     SourceLanguageSYCL = 7,
+    SourceLanguageHERO_C = 8,
+    SourceLanguageNZSL = 9,
+    SourceLanguageWGSL = 10,
+    SourceLanguageSlang = 11,
+    SourceLanguageZig = 12,
     SourceLanguageMax = 0x7fffffff,
 };
 
@@ -168,17 +173,28 @@
     ExecutionModeRoundingModeRTZ = 4463,
     ExecutionModeEarlyAndLateFragmentTestsAMD = 5017,
     ExecutionModeStencilRefReplacingEXT = 5027,
+    ExecutionModeCoalescingAMDX = 5069,
+    ExecutionModeIsApiEntryAMDX = 5070,
+    ExecutionModeMaxNodeRecursionAMDX = 5071,
+    ExecutionModeStaticNumWorkgroupsAMDX = 5072,
+    ExecutionModeShaderIndexAMDX = 5073,
+    ExecutionModeMaxNumWorkgroupsAMDX = 5077,
     ExecutionModeStencilRefUnchangedFrontAMD = 5079,
     ExecutionModeStencilRefGreaterFrontAMD = 5080,
     ExecutionModeStencilRefLessFrontAMD = 5081,
     ExecutionModeStencilRefUnchangedBackAMD = 5082,
     ExecutionModeStencilRefGreaterBackAMD = 5083,
     ExecutionModeStencilRefLessBackAMD = 5084,
+    ExecutionModeQuadDerivativesKHR = 5088,
+    ExecutionModeRequireFullQuadsKHR = 5089,
+    ExecutionModeSharesInputWithAMDX = 5102,
     ExecutionModeOutputLinesEXT = 5269,
     ExecutionModeOutputLinesNV = 5269,
     ExecutionModeOutputPrimitivesEXT = 5270,
     ExecutionModeOutputPrimitivesNV = 5270,
+    ExecutionModeDerivativeGroupQuadsKHR = 5289,
     ExecutionModeDerivativeGroupQuadsNV = 5289,
+    ExecutionModeDerivativeGroupLinearKHR = 5290,
     ExecutionModeDerivativeGroupLinearNV = 5290,
     ExecutionModeOutputTrianglesEXT = 5298,
     ExecutionModeOutputTrianglesNV = 5298,
@@ -198,8 +214,14 @@
     ExecutionModeNoGlobalOffsetINTEL = 5895,
     ExecutionModeNumSIMDWorkitemsINTEL = 5896,
     ExecutionModeSchedulerTargetFmaxMhzINTEL = 5903,
+    ExecutionModeMaximallyReconvergesKHR = 6023,
+    ExecutionModeFPFastMathDefault = 6028,
     ExecutionModeStreamingInterfaceINTEL = 6154,
+    ExecutionModeRegisterMapInterfaceINTEL = 6160,
     ExecutionModeNamedBarrierCountINTEL = 6417,
+    ExecutionModeMaximumRegistersINTEL = 6461,
+    ExecutionModeMaximumRegistersIdINTEL = 6462,
+    ExecutionModeNamedMaximumRegistersINTEL = 6463,
     ExecutionModeMax = 0x7fffffff,
 };
 
@@ -218,6 +240,7 @@
     StorageClassImage = 11,
     StorageClassStorageBuffer = 12,
     StorageClassTileImageEXT = 4172,
+    StorageClassNodePayloadAMDX = 5068,
     StorageClassCallableDataKHR = 5328,
     StorageClassCallableDataNV = 5328,
     StorageClassIncomingCallableDataKHR = 5329,
@@ -355,6 +378,9 @@
     ImageChannelDataTypeFloat = 14,
     ImageChannelDataTypeUnormInt24 = 15,
     ImageChannelDataTypeUnormInt101010_2 = 16,
+    ImageChannelDataTypeUnsignedIntRaw10EXT = 19,
+    ImageChannelDataTypeUnsignedIntRaw12EXT = 20,
+    ImageChannelDataTypeUnormInt2_101010EXT = 21,
     ImageChannelDataTypeMax = 0x7fffffff,
 };
 
@@ -382,7 +408,7 @@
     ImageOperandsMax = 0x7fffffff,
 };
 
-enum ImageOperandsMask {
+enum ImageOperandsMask : unsigned {
     ImageOperandsMaskNone = 0,
     ImageOperandsBiasMask = 0x00000001,
     ImageOperandsLodMask = 0x00000002,
@@ -412,20 +438,26 @@
     FPFastMathModeNSZShift = 2,
     FPFastMathModeAllowRecipShift = 3,
     FPFastMathModeFastShift = 4,
+    FPFastMathModeAllowContractShift = 16,
     FPFastMathModeAllowContractFastINTELShift = 16,
+    FPFastMathModeAllowReassocShift = 17,
     FPFastMathModeAllowReassocINTELShift = 17,
+    FPFastMathModeAllowTransformShift = 18,
     FPFastMathModeMax = 0x7fffffff,
 };
 
-enum FPFastMathModeMask {
+enum FPFastMathModeMask : unsigned {
     FPFastMathModeMaskNone = 0,
     FPFastMathModeNotNaNMask = 0x00000001,
     FPFastMathModeNotInfMask = 0x00000002,
     FPFastMathModeNSZMask = 0x00000004,
     FPFastMathModeAllowRecipMask = 0x00000008,
     FPFastMathModeFastMask = 0x00000010,
+    FPFastMathModeAllowContractMask = 0x00010000,
     FPFastMathModeAllowContractFastINTELMask = 0x00010000,
+    FPFastMathModeAllowReassocMask = 0x00020000,
     FPFastMathModeAllowReassocINTELMask = 0x00020000,
+    FPFastMathModeAllowTransformMask = 0x00040000,
 };
 
 enum FPRoundingMode {
@@ -515,7 +547,16 @@
     DecorationNoUnsignedWrap = 4470,
     DecorationWeightTextureQCOM = 4487,
     DecorationBlockMatchTextureQCOM = 4488,
+    DecorationBlockMatchSamplerQCOM = 4499,
     DecorationExplicitInterpAMD = 4999,
+    DecorationNodeSharesPayloadLimitsWithAMDX = 5019,
+    DecorationNodeMaxPayloadsAMDX = 5020,
+    DecorationTrackFinishWritingAMDX = 5078,
+    DecorationPayloadNodeNameAMDX = 5091,
+    DecorationPayloadNodeBaseIndexAMDX = 5098,
+    DecorationPayloadNodeSparseArrayAMDX = 5099,
+    DecorationPayloadNodeArraySizeAMDX = 5100,
+    DecorationPayloadDispatchIndirectAMDX = 5105,
     DecorationOverrideCoverageNV = 5248,
     DecorationPassthroughNV = 5250,
     DecorationViewportRelativeNV = 5252,
@@ -565,6 +606,9 @@
     DecorationMergeINTEL = 5834,
     DecorationBankBitsINTEL = 5835,
     DecorationForcePow2DepthINTEL = 5836,
+    DecorationStridesizeINTEL = 5883,
+    DecorationWordsizeINTEL = 5884,
+    DecorationTrueDualPortINTEL = 5885,
     DecorationBurstCoalesceINTEL = 5899,
     DecorationCacheSizeINTEL = 5900,
     DecorationDontStaticallyCoalesceINTEL = 5901,
@@ -583,6 +627,10 @@
     DecorationSingleElementVectorINTEL = 6085,
     DecorationVectorComputeCallableFunctionINTEL = 6087,
     DecorationMediaBlockIOINTEL = 6140,
+    DecorationStallFreeINTEL = 6151,
+    DecorationFPMaxErrorDecorationINTEL = 6170,
+    DecorationLatencyControlLabelINTEL = 6172,
+    DecorationLatencyControlConstraintINTEL = 6173,
     DecorationConduitKernelArgumentINTEL = 6175,
     DecorationRegisterMapKernelArgumentINTEL = 6176,
     DecorationMMHostInterfaceAddressWidthINTEL = 6177,
@@ -592,6 +640,11 @@
     DecorationMMHostInterfaceMaxBurstINTEL = 6181,
     DecorationMMHostInterfaceWaitRequestINTEL = 6182,
     DecorationStableKernelArgumentINTEL = 6183,
+    DecorationHostAccessINTEL = 6188,
+    DecorationInitModeINTEL = 6190,
+    DecorationImplementInRegisterMapINTEL = 6191,
+    DecorationCacheControlLoadINTEL = 6442,
+    DecorationCacheControlStoreINTEL = 6443,
     DecorationMax = 0x7fffffff,
 };
 
@@ -667,6 +720,8 @@
     BuiltInBaryCoordSmoothSampleAMD = 4997,
     BuiltInBaryCoordPullModelAMD = 4998,
     BuiltInFragStencilRefEXT = 5014,
+    BuiltInRemainingRecursionLevelsAMDX = 5021,
+    BuiltInShaderIndexAMDX = 5073,
     BuiltInViewportMaskNV = 5253,
     BuiltInSecondaryPositionNV = 5257,
     BuiltInSecondaryViewportMaskNV = 5258,
@@ -722,8 +777,6 @@
     BuiltInHitTriangleVertexPositionsKHR = 5335,
     BuiltInHitMicroTriangleVertexPositionsNV = 5337,
     BuiltInHitMicroTriangleVertexBarycentricsNV = 5344,
-    BuiltInHitKindFrontFacingMicroTriangleNV = 5405,
-    BuiltInHitKindBackFacingMicroTriangleNV = 5406,
     BuiltInIncomingRayFlagsKHR = 5351,
     BuiltInIncomingRayFlagsNV = 5351,
     BuiltInRayGeometryIndexKHR = 5352,
@@ -731,6 +784,8 @@
     BuiltInSMCountNV = 5375,
     BuiltInWarpIDNV = 5376,
     BuiltInSMIDNV = 5377,
+    BuiltInHitKindFrontFacingMicroTriangleNV = 5405,
+    BuiltInHitKindBackFacingMicroTriangleNV = 5406,
     BuiltInCullMaskKHR = 6021,
     BuiltInMax = 0x7fffffff,
 };
@@ -741,7 +796,7 @@
     SelectionControlMax = 0x7fffffff,
 };
 
-enum SelectionControlMask {
+enum SelectionControlMask : unsigned {
     SelectionControlMaskNone = 0,
     SelectionControlFlattenMask = 0x00000001,
     SelectionControlDontFlattenMask = 0x00000002,
@@ -770,7 +825,7 @@
     LoopControlMax = 0x7fffffff,
 };
 
-enum LoopControlMask {
+enum LoopControlMask : unsigned {
     LoopControlMaskNone = 0,
     LoopControlUnrollMask = 0x00000001,
     LoopControlDontUnrollMask = 0x00000002,
@@ -798,16 +853,18 @@
     FunctionControlDontInlineShift = 1,
     FunctionControlPureShift = 2,
     FunctionControlConstShift = 3,
+    FunctionControlOptNoneEXTShift = 16,
     FunctionControlOptNoneINTELShift = 16,
     FunctionControlMax = 0x7fffffff,
 };
 
-enum FunctionControlMask {
+enum FunctionControlMask : unsigned {
     FunctionControlMaskNone = 0,
     FunctionControlInlineMask = 0x00000001,
     FunctionControlDontInlineMask = 0x00000002,
     FunctionControlPureMask = 0x00000004,
     FunctionControlConstMask = 0x00000008,
+    FunctionControlOptNoneEXTMask = 0x00010000,
     FunctionControlOptNoneINTELMask = 0x00010000,
 };
 
@@ -832,7 +889,7 @@
     MemorySemanticsMax = 0x7fffffff,
 };
 
-enum MemorySemanticsMask {
+enum MemorySemanticsMask : unsigned {
     MemorySemanticsMaskNone = 0,
     MemorySemanticsAcquireMask = 0x00000002,
     MemorySemanticsReleaseMask = 0x00000004,
@@ -868,7 +925,7 @@
     MemoryAccessMax = 0x7fffffff,
 };
 
-enum MemoryAccessMask {
+enum MemoryAccessMask : unsigned {
     MemoryAccessMaskNone = 0,
     MemoryAccessVolatileMask = 0x00000001,
     MemoryAccessAlignedMask = 0x00000002,
@@ -918,7 +975,7 @@
     KernelProfilingInfoMax = 0x7fffffff,
 };
 
-enum KernelProfilingInfoMask {
+enum KernelProfilingInfoMask : unsigned {
     KernelProfilingInfoMaskNone = 0,
     KernelProfilingInfoCmdExecTimeMask = 0x00000001,
 };
@@ -998,6 +1055,7 @@
     CapabilityTileImageColorReadAccessEXT = 4166,
     CapabilityTileImageDepthReadAccessEXT = 4167,
     CapabilityTileImageStencilReadAccessEXT = 4168,
+    CapabilityCooperativeMatrixLayoutsARM = 4201,
     CapabilityFragmentShadingRateKHR = 4422,
     CapabilitySubgroupBallotKHR = 4423,
     CapabilityDrawParameters = 4427,
@@ -1027,11 +1085,13 @@
     CapabilityRoundingModeRTZ = 4468,
     CapabilityRayQueryProvisionalKHR = 4471,
     CapabilityRayQueryKHR = 4472,
+    CapabilityUntypedPointersKHR = 4473,
     CapabilityRayTraversalPrimitiveCullingKHR = 4478,
     CapabilityRayTracingKHR = 4479,
     CapabilityTextureSampleWeightedQCOM = 4484,
     CapabilityTextureBoxFilterQCOM = 4485,
     CapabilityTextureBlockMatchQCOM = 4486,
+    CapabilityTextureBlockMatch2QCOM = 4498,
     CapabilityFloat16ImageAMD = 5008,
     CapabilityImageGatherBiasLodAMD = 5009,
     CapabilityFragmentMaskAMD = 5010,
@@ -1039,6 +1099,8 @@
     CapabilityImageReadWriteLodAMD = 5015,
     CapabilityInt64ImageEXT = 5016,
     CapabilityShaderClockKHR = 5055,
+    CapabilityShaderEnqueueAMDX = 5067,
+    CapabilityQuadControlKHR = 5087,
     CapabilitySampleMaskOverrideCoverageNV = 5249,
     CapabilityGeometryShaderPassthroughNV = 5251,
     CapabilityShaderViewportIndexLayerEXT = 5254,
@@ -1052,6 +1114,7 @@
     CapabilityMeshShadingEXT = 5283,
     CapabilityFragmentBarycentricKHR = 5284,
     CapabilityFragmentBarycentricNV = 5284,
+    CapabilityComputeDerivativeGroupQuadsKHR = 5288,
     CapabilityComputeDerivativeGroupQuadsNV = 5288,
     CapabilityFragmentDensityEXT = 5291,
     CapabilityShadingRateNV = 5291,
@@ -1089,6 +1152,7 @@
     CapabilityVulkanMemoryModelDeviceScopeKHR = 5346,
     CapabilityPhysicalStorageBufferAddresses = 5347,
     CapabilityPhysicalStorageBufferAddressesEXT = 5347,
+    CapabilityComputeDerivativeGroupLinearKHR = 5350,
     CapabilityComputeDerivativeGroupLinearNV = 5350,
     CapabilityRayTracingProvisionalKHR = 5353,
     CapabilityCooperativeMatrixNV = 5357,
@@ -1099,11 +1163,19 @@
     CapabilityDemoteToHelperInvocation = 5379,
     CapabilityDemoteToHelperInvocationEXT = 5379,
     CapabilityDisplacementMicromapNV = 5380,
-    CapabilityRayTracingDisplacementMicromapNV = 5409,
     CapabilityRayTracingOpacityMicromapEXT = 5381,
     CapabilityShaderInvocationReorderNV = 5383,
     CapabilityBindlessTextureNV = 5390,
     CapabilityRayQueryPositionFetchKHR = 5391,
+    CapabilityAtomicFloat16VectorNV = 5404,
+    CapabilityRayTracingDisplacementMicromapNV = 5409,
+    CapabilityRawAccessChainsNV = 5414,
+    CapabilityCooperativeMatrixReductionsNV = 5430,
+    CapabilityCooperativeMatrixConversionsNV = 5431,
+    CapabilityCooperativeMatrixPerElementOperationsNV = 5432,
+    CapabilityCooperativeMatrixTensorAddressingNV = 5433,
+    CapabilityCooperativeMatrixBlockLoadsNV = 5434,
+    CapabilityTensorAddressingNV = 5439,
     CapabilitySubgroupShuffleINTEL = 5568,
     CapabilitySubgroupBufferBlockIOINTEL = 5569,
     CapabilitySubgroupImageBlockIOINTEL = 5570,
@@ -1156,17 +1228,32 @@
     CapabilityDotProductKHR = 6019,
     CapabilityRayCullMaskKHR = 6020,
     CapabilityCooperativeMatrixKHR = 6022,
+    CapabilityReplicatedCompositesEXT = 6024,
     CapabilityBitInstructions = 6025,
     CapabilityGroupNonUniformRotateKHR = 6026,
+    CapabilityFloatControls2 = 6029,
     CapabilityAtomicFloat32AddEXT = 6033,
     CapabilityAtomicFloat64AddEXT = 6034,
-    CapabilityLongConstantCompositeINTEL = 6089,
+    CapabilityLongCompositesINTEL = 6089,
+    CapabilityOptNoneEXT = 6094,
     CapabilityOptNoneINTEL = 6094,
     CapabilityAtomicFloat16AddEXT = 6095,
     CapabilityDebugInfoModuleINTEL = 6114,
+    CapabilityBFloat16ConversionINTEL = 6115,
     CapabilitySplitBarrierINTEL = 6141,
+    CapabilityArithmeticFenceEXT = 6144,
+    CapabilityFPGAClusterAttributesV2INTEL = 6150,
+    CapabilityFPGAKernelAttributesv2INTEL = 6161,
+    CapabilityFPMaxErrorINTEL = 6169,
+    CapabilityFPGALatencyControlINTEL = 6171,
     CapabilityFPGAArgumentInterfacesINTEL = 6174,
+    CapabilityGlobalVariableHostAccessINTEL = 6187,
+    CapabilityGlobalVariableFPGADecorationsINTEL = 6189,
+    CapabilitySubgroupBufferPrefetchINTEL = 6220,
     CapabilityGroupUniformArithmeticKHR = 6400,
+    CapabilityMaskedGatherScatterINTEL = 6427,
+    CapabilityCacheControlsINTEL = 6441,
+    CapabilityRegisterLimitsINTEL = 6460,
     CapabilityMax = 0x7fffffff,
 };
 
@@ -1185,7 +1272,7 @@
     RayFlagsMax = 0x7fffffff,
 };
 
-enum RayFlagsMask {
+enum RayFlagsMask : unsigned {
     RayFlagsMaskNone = 0,
     RayFlagsOpaqueKHRMask = 0x00000001,
     RayFlagsNoOpaqueKHRMask = 0x00000002,
@@ -1227,7 +1314,7 @@
     FragmentShadingRateMax = 0x7fffffff,
 };
 
-enum FragmentShadingRateMask {
+enum FragmentShadingRateMask : unsigned {
     FragmentShadingRateMaskNone = 0,
     FragmentShadingRateVertical2PixelsMask = 0x00000001,
     FragmentShadingRateVertical4PixelsMask = 0x00000002,
@@ -1274,26 +1361,28 @@
 };
 
 enum CooperativeMatrixOperandsShift {
-    CooperativeMatrixOperandsMatrixASignedComponentsShift = 0,
-    CooperativeMatrixOperandsMatrixBSignedComponentsShift = 1,
-    CooperativeMatrixOperandsMatrixCSignedComponentsShift = 2,
-    CooperativeMatrixOperandsMatrixResultSignedComponentsShift = 3,
-    CooperativeMatrixOperandsSaturatingAccumulationShift = 4,
+    CooperativeMatrixOperandsMatrixASignedComponentsKHRShift = 0,
+    CooperativeMatrixOperandsMatrixBSignedComponentsKHRShift = 1,
+    CooperativeMatrixOperandsMatrixCSignedComponentsKHRShift = 2,
+    CooperativeMatrixOperandsMatrixResultSignedComponentsKHRShift = 3,
+    CooperativeMatrixOperandsSaturatingAccumulationKHRShift = 4,
     CooperativeMatrixOperandsMax = 0x7fffffff,
 };
 
-enum CooperativeMatrixOperandsMask {
+enum CooperativeMatrixOperandsMask : unsigned {
     CooperativeMatrixOperandsMaskNone = 0,
-    CooperativeMatrixOperandsMatrixASignedComponentsMask = 0x00000001,
-    CooperativeMatrixOperandsMatrixBSignedComponentsMask = 0x00000002,
-    CooperativeMatrixOperandsMatrixCSignedComponentsMask = 0x00000004,
-    CooperativeMatrixOperandsMatrixResultSignedComponentsMask = 0x00000008,
-    CooperativeMatrixOperandsSaturatingAccumulationMask = 0x00000010,
+    CooperativeMatrixOperandsMatrixASignedComponentsKHRMask = 0x00000001,
+    CooperativeMatrixOperandsMatrixBSignedComponentsKHRMask = 0x00000002,
+    CooperativeMatrixOperandsMatrixCSignedComponentsKHRMask = 0x00000004,
+    CooperativeMatrixOperandsMatrixResultSignedComponentsKHRMask = 0x00000008,
+    CooperativeMatrixOperandsSaturatingAccumulationKHRMask = 0x00000010,
 };
 
 enum CooperativeMatrixLayout {
-    CooperativeMatrixLayoutCooperativeMatrixRowMajorKHR = 0,
-    CooperativeMatrixLayoutCooperativeMatrixColumnMajorKHR = 1,
+    CooperativeMatrixLayoutRowMajorKHR = 0,
+    CooperativeMatrixLayoutColumnMajorKHR = 1,
+    CooperativeMatrixLayoutRowBlockedInterleavedARM = 4202,
+    CooperativeMatrixLayoutColumnBlockedInterleavedARM = 4203,
     CooperativeMatrixLayoutMax = 0x7fffffff,
 };
 
@@ -1304,6 +1393,93 @@
     CooperativeMatrixUseMax = 0x7fffffff,
 };
 
+enum CooperativeMatrixReduceShift {
+    CooperativeMatrixReduceRowShift = 0,
+    CooperativeMatrixReduceColumnShift = 1,
+    CooperativeMatrixReduce2x2Shift = 2,
+    CooperativeMatrixReduceMax = 0x7fffffff,
+};
+
+enum CooperativeMatrixReduceMask : unsigned {
+    CooperativeMatrixReduceMaskNone = 0,
+    CooperativeMatrixReduceRowMask = 0x00000001,
+    CooperativeMatrixReduceColumnMask = 0x00000002,
+    CooperativeMatrixReduce2x2Mask = 0x00000004,
+};
+
+enum TensorClampMode {
+    TensorClampModeUndefined = 0,
+    TensorClampModeConstant = 1,
+    TensorClampModeClampToEdge = 2,
+    TensorClampModeRepeat = 3,
+    TensorClampModeRepeatMirrored = 4,
+    TensorClampModeMax = 0x7fffffff,
+};
+
+enum TensorAddressingOperandsShift {
+    TensorAddressingOperandsTensorViewShift = 0,
+    TensorAddressingOperandsDecodeFuncShift = 1,
+    TensorAddressingOperandsMax = 0x7fffffff,
+};
+
+enum TensorAddressingOperandsMask : unsigned {
+    TensorAddressingOperandsMaskNone = 0,
+    TensorAddressingOperandsTensorViewMask = 0x00000001,
+    TensorAddressingOperandsDecodeFuncMask = 0x00000002,
+};
+
+enum InitializationModeQualifier {
+    InitializationModeQualifierInitOnDeviceReprogramINTEL = 0,
+    InitializationModeQualifierInitOnDeviceResetINTEL = 1,
+    InitializationModeQualifierMax = 0x7fffffff,
+};
+
+enum HostAccessQualifier {
+    HostAccessQualifierNoneINTEL = 0,
+    HostAccessQualifierReadINTEL = 1,
+    HostAccessQualifierWriteINTEL = 2,
+    HostAccessQualifierReadWriteINTEL = 3,
+    HostAccessQualifierMax = 0x7fffffff,
+};
+
+enum LoadCacheControl {
+    LoadCacheControlUncachedINTEL = 0,
+    LoadCacheControlCachedINTEL = 1,
+    LoadCacheControlStreamingINTEL = 2,
+    LoadCacheControlInvalidateAfterReadINTEL = 3,
+    LoadCacheControlConstCachedINTEL = 4,
+    LoadCacheControlMax = 0x7fffffff,
+};
+
+enum StoreCacheControl {
+    StoreCacheControlUncachedINTEL = 0,
+    StoreCacheControlWriteThroughINTEL = 1,
+    StoreCacheControlWriteBackINTEL = 2,
+    StoreCacheControlStreamingINTEL = 3,
+    StoreCacheControlMax = 0x7fffffff,
+};
+
+enum NamedMaximumNumberOfRegisters {
+    NamedMaximumNumberOfRegistersAutoINTEL = 0,
+    NamedMaximumNumberOfRegistersMax = 0x7fffffff,
+};
+
+enum RawAccessChainOperandsShift {
+    RawAccessChainOperandsRobustnessPerComponentNVShift = 0,
+    RawAccessChainOperandsRobustnessPerElementNVShift = 1,
+    RawAccessChainOperandsMax = 0x7fffffff,
+};
+
+enum RawAccessChainOperandsMask : unsigned {
+    RawAccessChainOperandsMaskNone = 0,
+    RawAccessChainOperandsRobustnessPerComponentNVMask = 0x00000001,
+    RawAccessChainOperandsRobustnessPerElementNVMask = 0x00000002,
+};
+
+enum FPEncoding {
+    FPEncodingMax = 0x7fffffff,
+};
+
 enum Op {
     OpNop = 0,
     OpUndef = 1,
@@ -1653,13 +1829,22 @@
     OpDepthAttachmentReadEXT = 4161,
     OpStencilAttachmentReadEXT = 4162,
     OpTerminateInvocation = 4416,
+    OpTypeUntypedPointerKHR = 4417,
+    OpUntypedVariableKHR = 4418,
+    OpUntypedAccessChainKHR = 4419,
+    OpUntypedInBoundsAccessChainKHR = 4420,
     OpSubgroupBallotKHR = 4421,
     OpSubgroupFirstInvocationKHR = 4422,
+    OpUntypedPtrAccessChainKHR = 4423,
+    OpUntypedInBoundsPtrAccessChainKHR = 4424,
+    OpUntypedArrayLengthKHR = 4425,
+    OpUntypedPrefetchKHR = 4426,
     OpSubgroupAllKHR = 4428,
     OpSubgroupAnyKHR = 4429,
     OpSubgroupAllEqualKHR = 4430,
     OpGroupNonUniformRotateKHR = 4431,
     OpSubgroupReadInvocationKHR = 4432,
+    OpExtInstWithForwardRefsKHR = 4433,
     OpTraceRayKHR = 4445,
     OpExecuteCallableKHR = 4446,
     OpConvertUToAccelerationStructureKHR = 4447,
@@ -1682,6 +1867,9 @@
     OpCooperativeMatrixStoreKHR = 4458,
     OpCooperativeMatrixMulAddKHR = 4459,
     OpCooperativeMatrixLengthKHR = 4460,
+    OpConstantCompositeReplicateEXT = 4461,
+    OpSpecConstantCompositeReplicateEXT = 4462,
+    OpCompositeConstructReplicateEXT = 4463,
     OpTypeRayQueryKHR = 4472,
     OpRayQueryInitializeKHR = 4473,
     OpRayQueryTerminateKHR = 4474,
@@ -1693,6 +1881,10 @@
     OpImageBoxFilterQCOM = 4481,
     OpImageBlockMatchSSDQCOM = 4482,
     OpImageBlockMatchSADQCOM = 4483,
+    OpImageBlockMatchWindowSSDQCOM = 4500,
+    OpImageBlockMatchWindowSADQCOM = 4501,
+    OpImageBlockMatchGatherSSDQCOM = 4502,
+    OpImageBlockMatchGatherSADQCOM = 4503,
     OpGroupIAddNonUniformAMD = 5000,
     OpGroupFAddNonUniformAMD = 5001,
     OpGroupFMinNonUniformAMD = 5002,
@@ -1704,6 +1896,16 @@
     OpFragmentMaskFetchAMD = 5011,
     OpFragmentFetchAMD = 5012,
     OpReadClockKHR = 5056,
+    OpAllocateNodePayloadsAMDX = 5074,
+    OpEnqueueNodePayloadsAMDX = 5075,
+    OpTypeNodePayloadArrayAMDX = 5076,
+    OpFinishWritingNodePayloadAMDX = 5078,
+    OpNodePayloadArrayLengthAMDX = 5090,
+    OpIsNodePayloadValidAMDX = 5101,
+    OpConstantStringAMDX = 5103,
+    OpSpecConstantStringAMDX = 5104,
+    OpGroupNonUniformQuadAllKHR = 5110,
+    OpGroupNonUniformQuadAnyKHR = 5111,
     OpHitObjectRecordHitMotionNV = 5249,
     OpHitObjectRecordHitWithIndexMotionNV = 5250,
     OpHitObjectRecordMissMotionNV = 5251,
@@ -1738,6 +1940,7 @@
     OpReorderThreadWithHintNV = 5280,
     OpTypeHitObjectNV = 5281,
     OpImageSampleFootprintNV = 5283,
+    OpCooperativeMatrixConvertNV = 5293,
     OpEmitMeshTasksEXT = 5294,
     OpSetMeshOutputsEXT = 5295,
     OpGroupNonUniformPartitionNV = 5296,
@@ -1762,9 +1965,26 @@
     OpCooperativeMatrixLengthNV = 5362,
     OpBeginInvocationInterlockEXT = 5364,
     OpEndInvocationInterlockEXT = 5365,
+    OpCooperativeMatrixReduceNV = 5366,
+    OpCooperativeMatrixLoadTensorNV = 5367,
+    OpCooperativeMatrixStoreTensorNV = 5368,
+    OpCooperativeMatrixPerElementOpNV = 5369,
+    OpTypeTensorLayoutNV = 5370,
+    OpTypeTensorViewNV = 5371,
+    OpCreateTensorLayoutNV = 5372,
+    OpTensorLayoutSetDimensionNV = 5373,
+    OpTensorLayoutSetStrideNV = 5374,
+    OpTensorLayoutSliceNV = 5375,
+    OpTensorLayoutSetClampValueNV = 5376,
+    OpCreateTensorViewNV = 5377,
+    OpTensorViewSetDimensionNV = 5378,
+    OpTensorViewSetStrideNV = 5379,
     OpDemoteToHelperInvocation = 5380,
     OpDemoteToHelperInvocationEXT = 5380,
     OpIsHelperInvocationEXT = 5381,
+    OpTensorViewSetClipNV = 5382,
+    OpTensorLayoutSetBlockSizeNV = 5384,
+    OpCooperativeMatrixTransposeNV = 5390,
     OpConvertUToImageNV = 5391,
     OpConvertUToSamplerNV = 5392,
     OpConvertImageToUNV = 5393,
@@ -1772,6 +1992,7 @@
     OpConvertUToSampledImageNV = 5395,
     OpConvertSampledImageToUNV = 5396,
     OpSamplerImageAddressingModeNV = 5397,
+    OpRawAccessChainNV = 5398,
     OpSubgroupShuffleINTEL = 5571,
     OpSubgroupShuffleDownINTEL = 5572,
     OpSubgroupShuffleUpINTEL = 5573,
@@ -2013,8 +2234,13 @@
     OpTypeStructContinuedINTEL = 6090,
     OpConstantCompositeContinuedINTEL = 6091,
     OpSpecConstantCompositeContinuedINTEL = 6092,
+    OpCompositeConstructContinuedINTEL = 6096,
+    OpConvertFToBF16INTEL = 6116,
+    OpConvertBF16ToFINTEL = 6117,
     OpControlBarrierArriveINTEL = 6142,
     OpControlBarrierWaitINTEL = 6143,
+    OpArithmeticFenceEXT = 6145,
+    OpSubgroupBlockPrefetchINTEL = 6221,
     OpGroupIMulKHR = 6401,
     OpGroupFMulKHR = 6402,
     OpGroupBitwiseAndKHR = 6403,
@@ -2023,6 +2249,8 @@
     OpGroupLogicalAndKHR = 6406,
     OpGroupLogicalOrKHR = 6407,
     OpGroupLogicalXorKHR = 6408,
+    OpMaskedGatherINTEL = 6428,
+    OpMaskedScatterINTEL = 6429,
     OpMax = 0x7fffffff,
 };
 
@@ -2382,13 +2610,22 @@
     case OpDepthAttachmentReadEXT: *hasResult = true; *hasResultType = true; break;
     case OpStencilAttachmentReadEXT: *hasResult = true; *hasResultType = true; break;
     case OpTerminateInvocation: *hasResult = false; *hasResultType = false; break;
+    case OpTypeUntypedPointerKHR: *hasResult = true; *hasResultType = false; break;
+    case OpUntypedVariableKHR: *hasResult = true; *hasResultType = true; break;
+    case OpUntypedAccessChainKHR: *hasResult = true; *hasResultType = true; break;
+    case OpUntypedInBoundsAccessChainKHR: *hasResult = true; *hasResultType = true; break;
     case OpSubgroupBallotKHR: *hasResult = true; *hasResultType = true; break;
     case OpSubgroupFirstInvocationKHR: *hasResult = true; *hasResultType = true; break;
+    case OpUntypedPtrAccessChainKHR: *hasResult = true; *hasResultType = true; break;
+    case OpUntypedInBoundsPtrAccessChainKHR: *hasResult = true; *hasResultType = true; break;
+    case OpUntypedArrayLengthKHR: *hasResult = true; *hasResultType = true; break;
+    case OpUntypedPrefetchKHR: *hasResult = false; *hasResultType = false; break;
     case OpSubgroupAllKHR: *hasResult = true; *hasResultType = true; break;
     case OpSubgroupAnyKHR: *hasResult = true; *hasResultType = true; break;
     case OpSubgroupAllEqualKHR: *hasResult = true; *hasResultType = true; break;
     case OpGroupNonUniformRotateKHR: *hasResult = true; *hasResultType = true; break;
     case OpSubgroupReadInvocationKHR: *hasResult = true; *hasResultType = true; break;
+    case OpExtInstWithForwardRefsKHR: *hasResult = true; *hasResultType = true; break;
     case OpTraceRayKHR: *hasResult = false; *hasResultType = false; break;
     case OpExecuteCallableKHR: *hasResult = false; *hasResultType = false; break;
     case OpConvertUToAccelerationStructureKHR: *hasResult = true; *hasResultType = true; break;
@@ -2405,6 +2642,9 @@
     case OpCooperativeMatrixStoreKHR: *hasResult = false; *hasResultType = false; break;
     case OpCooperativeMatrixMulAddKHR: *hasResult = true; *hasResultType = true; break;
     case OpCooperativeMatrixLengthKHR: *hasResult = true; *hasResultType = true; break;
+    case OpConstantCompositeReplicateEXT: *hasResult = true; *hasResultType = true; break;
+    case OpSpecConstantCompositeReplicateEXT: *hasResult = true; *hasResultType = true; break;
+    case OpCompositeConstructReplicateEXT: *hasResult = true; *hasResultType = true; break;
     case OpTypeRayQueryKHR: *hasResult = true; *hasResultType = false; break;
     case OpRayQueryInitializeKHR: *hasResult = false; *hasResultType = false; break;
     case OpRayQueryTerminateKHR: *hasResult = false; *hasResultType = false; break;
@@ -2416,6 +2656,10 @@
     case OpImageBoxFilterQCOM: *hasResult = true; *hasResultType = true; break;
     case OpImageBlockMatchSSDQCOM: *hasResult = true; *hasResultType = true; break;
     case OpImageBlockMatchSADQCOM: *hasResult = true; *hasResultType = true; break;
+    case OpImageBlockMatchWindowSSDQCOM: *hasResult = true; *hasResultType = true; break;
+    case OpImageBlockMatchWindowSADQCOM: *hasResult = true; *hasResultType = true; break;
+    case OpImageBlockMatchGatherSSDQCOM: *hasResult = true; *hasResultType = true; break;
+    case OpImageBlockMatchGatherSADQCOM: *hasResult = true; *hasResultType = true; break;
     case OpGroupIAddNonUniformAMD: *hasResult = true; *hasResultType = true; break;
     case OpGroupFAddNonUniformAMD: *hasResult = true; *hasResultType = true; break;
     case OpGroupFMinNonUniformAMD: *hasResult = true; *hasResultType = true; break;
@@ -2427,6 +2671,16 @@
     case OpFragmentMaskFetchAMD: *hasResult = true; *hasResultType = true; break;
     case OpFragmentFetchAMD: *hasResult = true; *hasResultType = true; break;
     case OpReadClockKHR: *hasResult = true; *hasResultType = true; break;
+    case OpAllocateNodePayloadsAMDX: *hasResult = true; *hasResultType = true; break;
+    case OpEnqueueNodePayloadsAMDX: *hasResult = false; *hasResultType = false; break;
+    case OpTypeNodePayloadArrayAMDX: *hasResult = true; *hasResultType = false; break;
+    case OpFinishWritingNodePayloadAMDX: *hasResult = true; *hasResultType = true; break;
+    case OpNodePayloadArrayLengthAMDX: *hasResult = true; *hasResultType = true; break;
+    case OpIsNodePayloadValidAMDX: *hasResult = true; *hasResultType = true; break;
+    case OpConstantStringAMDX: *hasResult = true; *hasResultType = false; break;
+    case OpSpecConstantStringAMDX: *hasResult = true; *hasResultType = false; break;
+    case OpGroupNonUniformQuadAllKHR: *hasResult = true; *hasResultType = true; break;
+    case OpGroupNonUniformQuadAnyKHR: *hasResult = true; *hasResultType = true; break;
     case OpHitObjectRecordHitMotionNV: *hasResult = false; *hasResultType = false; break;
     case OpHitObjectRecordHitWithIndexMotionNV: *hasResult = false; *hasResultType = false; break;
     case OpHitObjectRecordMissMotionNV: *hasResult = false; *hasResultType = false; break;
@@ -2461,18 +2715,21 @@
     case OpReorderThreadWithHintNV: *hasResult = false; *hasResultType = false; break;
     case OpTypeHitObjectNV: *hasResult = true; *hasResultType = false; break;
     case OpImageSampleFootprintNV: *hasResult = true; *hasResultType = true; break;
+    case OpCooperativeMatrixConvertNV: *hasResult = true; *hasResultType = true; break;
     case OpEmitMeshTasksEXT: *hasResult = false; *hasResultType = false; break;
     case OpSetMeshOutputsEXT: *hasResult = false; *hasResultType = false; break;
     case OpGroupNonUniformPartitionNV: *hasResult = true; *hasResultType = true; break;
     case OpWritePackedPrimitiveIndices4x8NV: *hasResult = false; *hasResultType = false; break;
-    case OpReportIntersectionNV: *hasResult = true; *hasResultType = true; break;
+    case OpFetchMicroTriangleVertexPositionNV: *hasResult = true; *hasResultType = true; break;
+    case OpFetchMicroTriangleVertexBarycentricNV: *hasResult = true; *hasResultType = true; break;
+    case OpReportIntersectionKHR: *hasResult = true; *hasResultType = true; break;
     case OpIgnoreIntersectionNV: *hasResult = false; *hasResultType = false; break;
     case OpTerminateRayNV: *hasResult = false; *hasResultType = false; break;
     case OpTraceNV: *hasResult = false; *hasResultType = false; break;
     case OpTraceMotionNV: *hasResult = false; *hasResultType = false; break;
     case OpTraceRayMotionNV: *hasResult = false; *hasResultType = false; break;
     case OpRayQueryGetIntersectionTriangleVertexPositionsKHR: *hasResult = true; *hasResultType = true; break;
-    case OpTypeAccelerationStructureNV: *hasResult = true; *hasResultType = false; break;
+    case OpTypeAccelerationStructureKHR: *hasResult = true; *hasResultType = false; break;
     case OpExecuteCallableNV: *hasResult = false; *hasResultType = false; break;
     case OpTypeCooperativeMatrixNV: *hasResult = true; *hasResultType = false; break;
     case OpCooperativeMatrixLoadNV: *hasResult = true; *hasResultType = true; break;
@@ -2481,8 +2738,25 @@
     case OpCooperativeMatrixLengthNV: *hasResult = true; *hasResultType = true; break;
     case OpBeginInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break;
     case OpEndInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break;
+    case OpCooperativeMatrixReduceNV: *hasResult = true; *hasResultType = true; break;
+    case OpCooperativeMatrixLoadTensorNV: *hasResult = true; *hasResultType = true; break;
+    case OpCooperativeMatrixStoreTensorNV: *hasResult = false; *hasResultType = false; break;
+    case OpCooperativeMatrixPerElementOpNV: *hasResult = true; *hasResultType = true; break;
+    case OpTypeTensorLayoutNV: *hasResult = true; *hasResultType = false; break;
+    case OpTypeTensorViewNV: *hasResult = true; *hasResultType = false; break;
+    case OpCreateTensorLayoutNV: *hasResult = true; *hasResultType = true; break;
+    case OpTensorLayoutSetDimensionNV: *hasResult = true; *hasResultType = true; break;
+    case OpTensorLayoutSetStrideNV: *hasResult = true; *hasResultType = true; break;
+    case OpTensorLayoutSliceNV: *hasResult = true; *hasResultType = true; break;
+    case OpTensorLayoutSetClampValueNV: *hasResult = true; *hasResultType = true; break;
+    case OpCreateTensorViewNV: *hasResult = true; *hasResultType = true; break;
+    case OpTensorViewSetDimensionNV: *hasResult = true; *hasResultType = true; break;
+    case OpTensorViewSetStrideNV: *hasResult = true; *hasResultType = true; break;
     case OpDemoteToHelperInvocation: *hasResult = false; *hasResultType = false; break;
     case OpIsHelperInvocationEXT: *hasResult = true; *hasResultType = true; break;
+    case OpTensorViewSetClipNV: *hasResult = true; *hasResultType = true; break;
+    case OpTensorLayoutSetBlockSizeNV: *hasResult = true; *hasResultType = true; break;
+    case OpCooperativeMatrixTransposeNV: *hasResult = true; *hasResultType = true; break;
     case OpConvertUToImageNV: *hasResult = true; *hasResultType = true; break;
     case OpConvertUToSamplerNV: *hasResult = true; *hasResultType = true; break;
     case OpConvertImageToUNV: *hasResult = true; *hasResultType = true; break;
@@ -2490,6 +2764,7 @@
     case OpConvertUToSampledImageNV: *hasResult = true; *hasResultType = true; break;
     case OpConvertSampledImageToUNV: *hasResult = true; *hasResultType = true; break;
     case OpSamplerImageAddressingModeNV: *hasResult = false; *hasResultType = false; break;
+    case OpRawAccessChainNV: *hasResult = true; *hasResultType = true; break;
     case OpSubgroupShuffleINTEL: *hasResult = true; *hasResultType = true; break;
     case OpSubgroupShuffleDownINTEL: *hasResult = true; *hasResultType = true; break;
     case OpSubgroupShuffleUpINTEL: *hasResult = true; *hasResultType = true; break;
@@ -2729,8 +3004,13 @@
     case OpTypeStructContinuedINTEL: *hasResult = false; *hasResultType = false; break;
     case OpConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break;
     case OpSpecConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break;
+    case OpCompositeConstructContinuedINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpConvertFToBF16INTEL: *hasResult = true; *hasResultType = true; break;
+    case OpConvertBF16ToFINTEL: *hasResult = true; *hasResultType = true; break;
     case OpControlBarrierArriveINTEL: *hasResult = false; *hasResultType = false; break;
     case OpControlBarrierWaitINTEL: *hasResult = false; *hasResultType = false; break;
+    case OpArithmeticFenceEXT: *hasResult = true; *hasResultType = true; break;
+    case OpSubgroupBlockPrefetchINTEL: *hasResult = false; *hasResultType = false; break;
     case OpGroupIMulKHR: *hasResult = true; *hasResultType = true; break;
     case OpGroupFMulKHR: *hasResult = true; *hasResultType = true; break;
     case OpGroupBitwiseAndKHR: *hasResult = true; *hasResultType = true; break;
@@ -2739,8 +3019,1856 @@
     case OpGroupLogicalAndKHR: *hasResult = true; *hasResultType = true; break;
     case OpGroupLogicalOrKHR: *hasResult = true; *hasResultType = true; break;
     case OpGroupLogicalXorKHR: *hasResult = true; *hasResultType = true; break;
+    case OpMaskedGatherINTEL: *hasResult = true; *hasResultType = true; break;
+    case OpMaskedScatterINTEL: *hasResult = false; *hasResultType = false; break;
     }
 }
+inline const char* SourceLanguageToString(SourceLanguage value) {
+    switch (value) {
+    case SourceLanguageUnknown: return "Unknown";
+    case SourceLanguageESSL: return "ESSL";
+    case SourceLanguageGLSL: return "GLSL";
+    case SourceLanguageOpenCL_C: return "OpenCL_C";
+    case SourceLanguageOpenCL_CPP: return "OpenCL_CPP";
+    case SourceLanguageHLSL: return "HLSL";
+    case SourceLanguageCPP_for_OpenCL: return "CPP_for_OpenCL";
+    case SourceLanguageSYCL: return "SYCL";
+    case SourceLanguageHERO_C: return "HERO_C";
+    case SourceLanguageNZSL: return "NZSL";
+    case SourceLanguageWGSL: return "WGSL";
+    case SourceLanguageSlang: return "Slang";
+    case SourceLanguageZig: return "Zig";
+    default: return "Unknown";
+    }
+}
+
+inline const char* ExecutionModelToString(ExecutionModel value) {
+    switch (value) {
+    case ExecutionModelVertex: return "Vertex";
+    case ExecutionModelTessellationControl: return "TessellationControl";
+    case ExecutionModelTessellationEvaluation: return "TessellationEvaluation";
+    case ExecutionModelGeometry: return "Geometry";
+    case ExecutionModelFragment: return "Fragment";
+    case ExecutionModelGLCompute: return "GLCompute";
+    case ExecutionModelKernel: return "Kernel";
+    case ExecutionModelTaskNV: return "TaskNV";
+    case ExecutionModelMeshNV: return "MeshNV";
+    case ExecutionModelRayGenerationKHR: return "RayGenerationKHR";
+    case ExecutionModelIntersectionKHR: return "IntersectionKHR";
+    case ExecutionModelAnyHitKHR: return "AnyHitKHR";
+    case ExecutionModelClosestHitKHR: return "ClosestHitKHR";
+    case ExecutionModelMissKHR: return "MissKHR";
+    case ExecutionModelCallableKHR: return "CallableKHR";
+    case ExecutionModelTaskEXT: return "TaskEXT";
+    case ExecutionModelMeshEXT: return "MeshEXT";
+    default: return "Unknown";
+    }
+}
+
+inline const char* AddressingModelToString(AddressingModel value) {
+    switch (value) {
+    case AddressingModelLogical: return "Logical";
+    case AddressingModelPhysical32: return "Physical32";
+    case AddressingModelPhysical64: return "Physical64";
+    case AddressingModelPhysicalStorageBuffer64: return "PhysicalStorageBuffer64";
+    default: return "Unknown";
+    }
+}
+
+inline const char* MemoryModelToString(MemoryModel value) {
+    switch (value) {
+    case MemoryModelSimple: return "Simple";
+    case MemoryModelGLSL450: return "GLSL450";
+    case MemoryModelOpenCL: return "OpenCL";
+    case MemoryModelVulkan: return "Vulkan";
+    default: return "Unknown";
+    }
+}
+
+inline const char* ExecutionModeToString(ExecutionMode value) {
+    switch (value) {
+    case ExecutionModeInvocations: return "Invocations";
+    case ExecutionModeSpacingEqual: return "SpacingEqual";
+    case ExecutionModeSpacingFractionalEven: return "SpacingFractionalEven";
+    case ExecutionModeSpacingFractionalOdd: return "SpacingFractionalOdd";
+    case ExecutionModeVertexOrderCw: return "VertexOrderCw";
+    case ExecutionModeVertexOrderCcw: return "VertexOrderCcw";
+    case ExecutionModePixelCenterInteger: return "PixelCenterInteger";
+    case ExecutionModeOriginUpperLeft: return "OriginUpperLeft";
+    case ExecutionModeOriginLowerLeft: return "OriginLowerLeft";
+    case ExecutionModeEarlyFragmentTests: return "EarlyFragmentTests";
+    case ExecutionModePointMode: return "PointMode";
+    case ExecutionModeXfb: return "Xfb";
+    case ExecutionModeDepthReplacing: return "DepthReplacing";
+    case ExecutionModeDepthGreater: return "DepthGreater";
+    case ExecutionModeDepthLess: return "DepthLess";
+    case ExecutionModeDepthUnchanged: return "DepthUnchanged";
+    case ExecutionModeLocalSize: return "LocalSize";
+    case ExecutionModeLocalSizeHint: return "LocalSizeHint";
+    case ExecutionModeInputPoints: return "InputPoints";
+    case ExecutionModeInputLines: return "InputLines";
+    case ExecutionModeInputLinesAdjacency: return "InputLinesAdjacency";
+    case ExecutionModeTriangles: return "Triangles";
+    case ExecutionModeInputTrianglesAdjacency: return "InputTrianglesAdjacency";
+    case ExecutionModeQuads: return "Quads";
+    case ExecutionModeIsolines: return "Isolines";
+    case ExecutionModeOutputVertices: return "OutputVertices";
+    case ExecutionModeOutputPoints: return "OutputPoints";
+    case ExecutionModeOutputLineStrip: return "OutputLineStrip";
+    case ExecutionModeOutputTriangleStrip: return "OutputTriangleStrip";
+    case ExecutionModeVecTypeHint: return "VecTypeHint";
+    case ExecutionModeContractionOff: return "ContractionOff";
+    case ExecutionModeInitializer: return "Initializer";
+    case ExecutionModeFinalizer: return "Finalizer";
+    case ExecutionModeSubgroupSize: return "SubgroupSize";
+    case ExecutionModeSubgroupsPerWorkgroup: return "SubgroupsPerWorkgroup";
+    case ExecutionModeSubgroupsPerWorkgroupId: return "SubgroupsPerWorkgroupId";
+    case ExecutionModeLocalSizeId: return "LocalSizeId";
+    case ExecutionModeLocalSizeHintId: return "LocalSizeHintId";
+    case ExecutionModeNonCoherentColorAttachmentReadEXT: return "NonCoherentColorAttachmentReadEXT";
+    case ExecutionModeNonCoherentDepthAttachmentReadEXT: return "NonCoherentDepthAttachmentReadEXT";
+    case ExecutionModeNonCoherentStencilAttachmentReadEXT: return "NonCoherentStencilAttachmentReadEXT";
+    case ExecutionModeSubgroupUniformControlFlowKHR: return "SubgroupUniformControlFlowKHR";
+    case ExecutionModePostDepthCoverage: return "PostDepthCoverage";
+    case ExecutionModeDenormPreserve: return "DenormPreserve";
+    case ExecutionModeDenormFlushToZero: return "DenormFlushToZero";
+    case ExecutionModeSignedZeroInfNanPreserve: return "SignedZeroInfNanPreserve";
+    case ExecutionModeRoundingModeRTE: return "RoundingModeRTE";
+    case ExecutionModeRoundingModeRTZ: return "RoundingModeRTZ";
+    case ExecutionModeEarlyAndLateFragmentTestsAMD: return "EarlyAndLateFragmentTestsAMD";
+    case ExecutionModeStencilRefReplacingEXT: return "StencilRefReplacingEXT";
+    case ExecutionModeCoalescingAMDX: return "CoalescingAMDX";
+    case ExecutionModeIsApiEntryAMDX: return "IsApiEntryAMDX";
+    case ExecutionModeMaxNodeRecursionAMDX: return "MaxNodeRecursionAMDX";
+    case ExecutionModeStaticNumWorkgroupsAMDX: return "StaticNumWorkgroupsAMDX";
+    case ExecutionModeShaderIndexAMDX: return "ShaderIndexAMDX";
+    case ExecutionModeMaxNumWorkgroupsAMDX: return "MaxNumWorkgroupsAMDX";
+    case ExecutionModeStencilRefUnchangedFrontAMD: return "StencilRefUnchangedFrontAMD";
+    case ExecutionModeStencilRefGreaterFrontAMD: return "StencilRefGreaterFrontAMD";
+    case ExecutionModeStencilRefLessFrontAMD: return "StencilRefLessFrontAMD";
+    case ExecutionModeStencilRefUnchangedBackAMD: return "StencilRefUnchangedBackAMD";
+    case ExecutionModeStencilRefGreaterBackAMD: return "StencilRefGreaterBackAMD";
+    case ExecutionModeStencilRefLessBackAMD: return "StencilRefLessBackAMD";
+    case ExecutionModeQuadDerivativesKHR: return "QuadDerivativesKHR";
+    case ExecutionModeRequireFullQuadsKHR: return "RequireFullQuadsKHR";
+    case ExecutionModeSharesInputWithAMDX: return "SharesInputWithAMDX";
+    case ExecutionModeOutputLinesEXT: return "OutputLinesEXT";
+    case ExecutionModeOutputPrimitivesEXT: return "OutputPrimitivesEXT";
+    case ExecutionModeDerivativeGroupQuadsKHR: return "DerivativeGroupQuadsKHR";
+    case ExecutionModeDerivativeGroupLinearKHR: return "DerivativeGroupLinearKHR";
+    case ExecutionModeOutputTrianglesEXT: return "OutputTrianglesEXT";
+    case ExecutionModePixelInterlockOrderedEXT: return "PixelInterlockOrderedEXT";
+    case ExecutionModePixelInterlockUnorderedEXT: return "PixelInterlockUnorderedEXT";
+    case ExecutionModeSampleInterlockOrderedEXT: return "SampleInterlockOrderedEXT";
+    case ExecutionModeSampleInterlockUnorderedEXT: return "SampleInterlockUnorderedEXT";
+    case ExecutionModeShadingRateInterlockOrderedEXT: return "ShadingRateInterlockOrderedEXT";
+    case ExecutionModeShadingRateInterlockUnorderedEXT: return "ShadingRateInterlockUnorderedEXT";
+    case ExecutionModeSharedLocalMemorySizeINTEL: return "SharedLocalMemorySizeINTEL";
+    case ExecutionModeRoundingModeRTPINTEL: return "RoundingModeRTPINTEL";
+    case ExecutionModeRoundingModeRTNINTEL: return "RoundingModeRTNINTEL";
+    case ExecutionModeFloatingPointModeALTINTEL: return "FloatingPointModeALTINTEL";
+    case ExecutionModeFloatingPointModeIEEEINTEL: return "FloatingPointModeIEEEINTEL";
+    case ExecutionModeMaxWorkgroupSizeINTEL: return "MaxWorkgroupSizeINTEL";
+    case ExecutionModeMaxWorkDimINTEL: return "MaxWorkDimINTEL";
+    case ExecutionModeNoGlobalOffsetINTEL: return "NoGlobalOffsetINTEL";
+    case ExecutionModeNumSIMDWorkitemsINTEL: return "NumSIMDWorkitemsINTEL";
+    case ExecutionModeSchedulerTargetFmaxMhzINTEL: return "SchedulerTargetFmaxMhzINTEL";
+    case ExecutionModeMaximallyReconvergesKHR: return "MaximallyReconvergesKHR";
+    case ExecutionModeFPFastMathDefault: return "FPFastMathDefault";
+    case ExecutionModeStreamingInterfaceINTEL: return "StreamingInterfaceINTEL";
+    case ExecutionModeRegisterMapInterfaceINTEL: return "RegisterMapInterfaceINTEL";
+    case ExecutionModeNamedBarrierCountINTEL: return "NamedBarrierCountINTEL";
+    case ExecutionModeMaximumRegistersINTEL: return "MaximumRegistersINTEL";
+    case ExecutionModeMaximumRegistersIdINTEL: return "MaximumRegistersIdINTEL";
+    case ExecutionModeNamedMaximumRegistersINTEL: return "NamedMaximumRegistersINTEL";
+    default: return "Unknown";
+    }
+}
+
+inline const char* StorageClassToString(StorageClass value) {
+    switch (value) {
+    case StorageClassUniformConstant: return "UniformConstant";
+    case StorageClassInput: return "Input";
+    case StorageClassUniform: return "Uniform";
+    case StorageClassOutput: return "Output";
+    case StorageClassWorkgroup: return "Workgroup";
+    case StorageClassCrossWorkgroup: return "CrossWorkgroup";
+    case StorageClassPrivate: return "Private";
+    case StorageClassFunction: return "Function";
+    case StorageClassGeneric: return "Generic";
+    case StorageClassPushConstant: return "PushConstant";
+    case StorageClassAtomicCounter: return "AtomicCounter";
+    case StorageClassImage: return "Image";
+    case StorageClassStorageBuffer: return "StorageBuffer";
+    case StorageClassTileImageEXT: return "TileImageEXT";
+    case StorageClassNodePayloadAMDX: return "NodePayloadAMDX";
+    case StorageClassCallableDataKHR: return "CallableDataKHR";
+    case StorageClassIncomingCallableDataKHR: return "IncomingCallableDataKHR";
+    case StorageClassRayPayloadKHR: return "RayPayloadKHR";
+    case StorageClassHitAttributeKHR: return "HitAttributeKHR";
+    case StorageClassIncomingRayPayloadKHR: return "IncomingRayPayloadKHR";
+    case StorageClassShaderRecordBufferKHR: return "ShaderRecordBufferKHR";
+    case StorageClassPhysicalStorageBuffer: return "PhysicalStorageBuffer";
+    case StorageClassHitObjectAttributeNV: return "HitObjectAttributeNV";
+    case StorageClassTaskPayloadWorkgroupEXT: return "TaskPayloadWorkgroupEXT";
+    case StorageClassCodeSectionINTEL: return "CodeSectionINTEL";
+    case StorageClassDeviceOnlyINTEL: return "DeviceOnlyINTEL";
+    case StorageClassHostOnlyINTEL: return "HostOnlyINTEL";
+    default: return "Unknown";
+    }
+}
+
+inline const char* DimToString(Dim value) {
+    switch (value) {
+    case Dim1D: return "1D";
+    case Dim2D: return "2D";
+    case Dim3D: return "3D";
+    case DimCube: return "Cube";
+    case DimRect: return "Rect";
+    case DimBuffer: return "Buffer";
+    case DimSubpassData: return "SubpassData";
+    case DimTileImageDataEXT: return "TileImageDataEXT";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SamplerAddressingModeToString(SamplerAddressingMode value) {
+    switch (value) {
+    case SamplerAddressingModeNone: return "None";
+    case SamplerAddressingModeClampToEdge: return "ClampToEdge";
+    case SamplerAddressingModeClamp: return "Clamp";
+    case SamplerAddressingModeRepeat: return "Repeat";
+    case SamplerAddressingModeRepeatMirrored: return "RepeatMirrored";
+    default: return "Unknown";
+    }
+}
+
+inline const char* SamplerFilterModeToString(SamplerFilterMode value) {
+    switch (value) {
+    case SamplerFilterModeNearest: return "Nearest";
+    case SamplerFilterModeLinear: return "Linear";
+    default: return "Unknown";
+    }
+}
+
+inline const char* ImageFormatToString(ImageFormat value) {
+    switch (value) {
+    case ImageFormatUnknown: return "Unknown";
+    case ImageFormatRgba32f: return "Rgba32f";
+    case ImageFormatRgba16f: return "Rgba16f";
+    case ImageFormatR32f: return "R32f";
+    case ImageFormatRgba8: return "Rgba8";
+    case ImageFormatRgba8Snorm: return "Rgba8Snorm";
+    case ImageFormatRg32f: return "Rg32f";
+    case ImageFormatRg16f: return "Rg16f";
+    case ImageFormatR11fG11fB10f: return "R11fG11fB10f";
+    case ImageFormatR16f: return "R16f";
+    case ImageFormatRgba16: return "Rgba16";
+    case ImageFormatRgb10A2: return "Rgb10A2";
+    case ImageFormatRg16: return "Rg16";
+    case ImageFormatRg8: return "Rg8";
+    case ImageFormatR16: return "R16";
+    case ImageFormatR8: return "R8";
+    case ImageFormatRgba16Snorm: return "Rgba16Snorm";
+    case ImageFormatRg16Snorm: return "Rg16Snorm";
+    case ImageFormatRg8Snorm: return "Rg8Snorm";
+    case ImageFormatR16Snorm: return "R16Snorm";
+    case ImageFormatR8Snorm: return "R8Snorm";
+    case ImageFormatRgba32i: return "Rgba32i";
+    case ImageFormatRgba16i: return "Rgba16i";
+    case ImageFormatRgba8i: return "Rgba8i";
+    case ImageFormatR32i: return "R32i";
+    case ImageFormatRg32i: return "Rg32i";
+    case ImageFormatRg16i: return "Rg16i";
+    case ImageFormatRg8i: return "Rg8i";
+    case ImageFormatR16i: return "R16i";
+    case ImageFormatR8i: return "R8i";
+    case ImageFormatRgba32ui: return "Rgba32ui";
+    case ImageFormatRgba16ui: return "Rgba16ui";
+    case ImageFormatRgba8ui: return "Rgba8ui";
+    case ImageFormatR32ui: return "R32ui";
+    case ImageFormatRgb10a2ui: return "Rgb10a2ui";
+    case ImageFormatRg32ui: return "Rg32ui";
+    case ImageFormatRg16ui: return "Rg16ui";
+    case ImageFormatRg8ui: return "Rg8ui";
+    case ImageFormatR16ui: return "R16ui";
+    case ImageFormatR8ui: return "R8ui";
+    case ImageFormatR64ui: return "R64ui";
+    case ImageFormatR64i: return "R64i";
+    default: return "Unknown";
+    }
+}
+
+inline const char* ImageChannelOrderToString(ImageChannelOrder value) {
+    switch (value) {
+    case ImageChannelOrderR: return "R";
+    case ImageChannelOrderA: return "A";
+    case ImageChannelOrderRG: return "RG";
+    case ImageChannelOrderRA: return "RA";
+    case ImageChannelOrderRGB: return "RGB";
+    case ImageChannelOrderRGBA: return "RGBA";
+    case ImageChannelOrderBGRA: return "BGRA";
+    case ImageChannelOrderARGB: return "ARGB";
+    case ImageChannelOrderIntensity: return "Intensity";
+    case ImageChannelOrderLuminance: return "Luminance";
+    case ImageChannelOrderRx: return "Rx";
+    case ImageChannelOrderRGx: return "RGx";
+    case ImageChannelOrderRGBx: return "RGBx";
+    case ImageChannelOrderDepth: return "Depth";
+    case ImageChannelOrderDepthStencil: return "DepthStencil";
+    case ImageChannelOrdersRGB: return "sRGB";
+    case ImageChannelOrdersRGBx: return "sRGBx";
+    case ImageChannelOrdersRGBA: return "sRGBA";
+    case ImageChannelOrdersBGRA: return "sBGRA";
+    case ImageChannelOrderABGR: return "ABGR";
+    default: return "Unknown";
+    }
+}
+
+inline const char* ImageChannelDataTypeToString(ImageChannelDataType value) {
+    switch (value) {
+    case ImageChannelDataTypeSnormInt8: return "SnormInt8";
+    case ImageChannelDataTypeSnormInt16: return "SnormInt16";
+    case ImageChannelDataTypeUnormInt8: return "UnormInt8";
+    case ImageChannelDataTypeUnormInt16: return "UnormInt16";
+    case ImageChannelDataTypeUnormShort565: return "UnormShort565";
+    case ImageChannelDataTypeUnormShort555: return "UnormShort555";
+    case ImageChannelDataTypeUnormInt101010: return "UnormInt101010";
+    case ImageChannelDataTypeSignedInt8: return "SignedInt8";
+    case ImageChannelDataTypeSignedInt16: return "SignedInt16";
+    case ImageChannelDataTypeSignedInt32: return "SignedInt32";
+    case ImageChannelDataTypeUnsignedInt8: return "UnsignedInt8";
+    case ImageChannelDataTypeUnsignedInt16: return "UnsignedInt16";
+    case ImageChannelDataTypeUnsignedInt32: return "UnsignedInt32";
+    case ImageChannelDataTypeHalfFloat: return "HalfFloat";
+    case ImageChannelDataTypeFloat: return "Float";
+    case ImageChannelDataTypeUnormInt24: return "UnormInt24";
+    case ImageChannelDataTypeUnormInt101010_2: return "UnormInt101010_2";
+    case ImageChannelDataTypeUnsignedIntRaw10EXT: return "UnsignedIntRaw10EXT";
+    case ImageChannelDataTypeUnsignedIntRaw12EXT: return "UnsignedIntRaw12EXT";
+    case ImageChannelDataTypeUnormInt2_101010EXT: return "UnormInt2_101010EXT";
+    default: return "Unknown";
+    }
+}
+
+inline const char* FPRoundingModeToString(FPRoundingMode value) {
+    switch (value) {
+    case FPRoundingModeRTE: return "RTE";
+    case FPRoundingModeRTZ: return "RTZ";
+    case FPRoundingModeRTP: return "RTP";
+    case FPRoundingModeRTN: return "RTN";
+    default: return "Unknown";
+    }
+}
+
+inline const char* LinkageTypeToString(LinkageType value) {
+    switch (value) {
+    case LinkageTypeExport: return "Export";
+    case LinkageTypeImport: return "Import";
+    case LinkageTypeLinkOnceODR: return "LinkOnceODR";
+    default: return "Unknown";
+    }
+}
+
+inline const char* AccessQualifierToString(AccessQualifier value) {
+    switch (value) {
+    case AccessQualifierReadOnly: return "ReadOnly";
+    case AccessQualifierWriteOnly: return "WriteOnly";
+    case AccessQualifierReadWrite: return "ReadWrite";
+    default: return "Unknown";
+    }
+}
+
+inline const char* FunctionParameterAttributeToString(FunctionParameterAttribute value) {
+    switch (value) {
+    case FunctionParameterAttributeZext: return "Zext";
+    case FunctionParameterAttributeSext: return "Sext";
+    case FunctionParameterAttributeByVal: return "ByVal";
+    case FunctionParameterAttributeSret: return "Sret";
+    case FunctionParameterAttributeNoAlias: return "NoAlias";
+    case FunctionParameterAttributeNoCapture: return "NoCapture";
+    case FunctionParameterAttributeNoWrite: return "NoWrite";
+    case FunctionParameterAttributeNoReadWrite: return "NoReadWrite";
+    case FunctionParameterAttributeRuntimeAlignedINTEL: return "RuntimeAlignedINTEL";
+    default: return "Unknown";
+    }
+}
+
+inline const char* DecorationToString(Decoration value) {
+    switch (value) {
+    case DecorationRelaxedPrecision: return "RelaxedPrecision";
+    case DecorationSpecId: return "SpecId";
+    case DecorationBlock: return "Block";
+    case DecorationBufferBlock: return "BufferBlock";
+    case DecorationRowMajor: return "RowMajor";
+    case DecorationColMajor: return "ColMajor";
+    case DecorationArrayStride: return "ArrayStride";
+    case DecorationMatrixStride: return "MatrixStride";
+    case DecorationGLSLShared: return "GLSLShared";
+    case DecorationGLSLPacked: return "GLSLPacked";
+    case DecorationCPacked: return "CPacked";
+    case DecorationBuiltIn: return "BuiltIn";
+    case DecorationNoPerspective: return "NoPerspective";
+    case DecorationFlat: return "Flat";
+    case DecorationPatch: return "Patch";
+    case DecorationCentroid: return "Centroid";
+    case DecorationSample: return "Sample";
+    case DecorationInvariant: return "Invariant";
+    case DecorationRestrict: return "Restrict";
+    case DecorationAliased: return "Aliased";
+    case DecorationVolatile: return "Volatile";
+    case DecorationConstant: return "Constant";
+    case DecorationCoherent: return "Coherent";
+    case DecorationNonWritable: return "NonWritable";
+    case DecorationNonReadable: return "NonReadable";
+    case DecorationUniform: return "Uniform";
+    case DecorationUniformId: return "UniformId";
+    case DecorationSaturatedConversion: return "SaturatedConversion";
+    case DecorationStream: return "Stream";
+    case DecorationLocation: return "Location";
+    case DecorationComponent: return "Component";
+    case DecorationIndex: return "Index";
+    case DecorationBinding: return "Binding";
+    case DecorationDescriptorSet: return "DescriptorSet";
+    case DecorationOffset: return "Offset";
+    case DecorationXfbBuffer: return "XfbBuffer";
+    case DecorationXfbStride: return "XfbStride";
+    case DecorationFuncParamAttr: return "FuncParamAttr";
+    case DecorationFPRoundingMode: return "FPRoundingMode";
+    case DecorationFPFastMathMode: return "FPFastMathMode";
+    case DecorationLinkageAttributes: return "LinkageAttributes";
+    case DecorationNoContraction: return "NoContraction";
+    case DecorationInputAttachmentIndex: return "InputAttachmentIndex";
+    case DecorationAlignment: return "Alignment";
+    case DecorationMaxByteOffset: return "MaxByteOffset";
+    case DecorationAlignmentId: return "AlignmentId";
+    case DecorationMaxByteOffsetId: return "MaxByteOffsetId";
+    case DecorationNoSignedWrap: return "NoSignedWrap";
+    case DecorationNoUnsignedWrap: return "NoUnsignedWrap";
+    case DecorationWeightTextureQCOM: return "WeightTextureQCOM";
+    case DecorationBlockMatchTextureQCOM: return "BlockMatchTextureQCOM";
+    case DecorationBlockMatchSamplerQCOM: return "BlockMatchSamplerQCOM";
+    case DecorationExplicitInterpAMD: return "ExplicitInterpAMD";
+    case DecorationNodeSharesPayloadLimitsWithAMDX: return "NodeSharesPayloadLimitsWithAMDX";
+    case DecorationNodeMaxPayloadsAMDX: return "NodeMaxPayloadsAMDX";
+    case DecorationTrackFinishWritingAMDX: return "TrackFinishWritingAMDX";
+    case DecorationPayloadNodeNameAMDX: return "PayloadNodeNameAMDX";
+    case DecorationPayloadNodeBaseIndexAMDX: return "PayloadNodeBaseIndexAMDX";
+    case DecorationPayloadNodeSparseArrayAMDX: return "PayloadNodeSparseArrayAMDX";
+    case DecorationPayloadNodeArraySizeAMDX: return "PayloadNodeArraySizeAMDX";
+    case DecorationPayloadDispatchIndirectAMDX: return "PayloadDispatchIndirectAMDX";
+    case DecorationOverrideCoverageNV: return "OverrideCoverageNV";
+    case DecorationPassthroughNV: return "PassthroughNV";
+    case DecorationViewportRelativeNV: return "ViewportRelativeNV";
+    case DecorationSecondaryViewportRelativeNV: return "SecondaryViewportRelativeNV";
+    case DecorationPerPrimitiveEXT: return "PerPrimitiveEXT";
+    case DecorationPerViewNV: return "PerViewNV";
+    case DecorationPerTaskNV: return "PerTaskNV";
+    case DecorationPerVertexKHR: return "PerVertexKHR";
+    case DecorationNonUniform: return "NonUniform";
+    case DecorationRestrictPointer: return "RestrictPointer";
+    case DecorationAliasedPointer: return "AliasedPointer";
+    case DecorationHitObjectShaderRecordBufferNV: return "HitObjectShaderRecordBufferNV";
+    case DecorationBindlessSamplerNV: return "BindlessSamplerNV";
+    case DecorationBindlessImageNV: return "BindlessImageNV";
+    case DecorationBoundSamplerNV: return "BoundSamplerNV";
+    case DecorationBoundImageNV: return "BoundImageNV";
+    case DecorationSIMTCallINTEL: return "SIMTCallINTEL";
+    case DecorationReferencedIndirectlyINTEL: return "ReferencedIndirectlyINTEL";
+    case DecorationClobberINTEL: return "ClobberINTEL";
+    case DecorationSideEffectsINTEL: return "SideEffectsINTEL";
+    case DecorationVectorComputeVariableINTEL: return "VectorComputeVariableINTEL";
+    case DecorationFuncParamIOKindINTEL: return "FuncParamIOKindINTEL";
+    case DecorationVectorComputeFunctionINTEL: return "VectorComputeFunctionINTEL";
+    case DecorationStackCallINTEL: return "StackCallINTEL";
+    case DecorationGlobalVariableOffsetINTEL: return "GlobalVariableOffsetINTEL";
+    case DecorationCounterBuffer: return "CounterBuffer";
+    case DecorationHlslSemanticGOOGLE: return "HlslSemanticGOOGLE";
+    case DecorationUserTypeGOOGLE: return "UserTypeGOOGLE";
+    case DecorationFunctionRoundingModeINTEL: return "FunctionRoundingModeINTEL";
+    case DecorationFunctionDenormModeINTEL: return "FunctionDenormModeINTEL";
+    case DecorationRegisterINTEL: return "RegisterINTEL";
+    case DecorationMemoryINTEL: return "MemoryINTEL";
+    case DecorationNumbanksINTEL: return "NumbanksINTEL";
+    case DecorationBankwidthINTEL: return "BankwidthINTEL";
+    case DecorationMaxPrivateCopiesINTEL: return "MaxPrivateCopiesINTEL";
+    case DecorationSinglepumpINTEL: return "SinglepumpINTEL";
+    case DecorationDoublepumpINTEL: return "DoublepumpINTEL";
+    case DecorationMaxReplicatesINTEL: return "MaxReplicatesINTEL";
+    case DecorationSimpleDualPortINTEL: return "SimpleDualPortINTEL";
+    case DecorationMergeINTEL: return "MergeINTEL";
+    case DecorationBankBitsINTEL: return "BankBitsINTEL";
+    case DecorationForcePow2DepthINTEL: return "ForcePow2DepthINTEL";
+    case DecorationStridesizeINTEL: return "StridesizeINTEL";
+    case DecorationWordsizeINTEL: return "WordsizeINTEL";
+    case DecorationTrueDualPortINTEL: return "TrueDualPortINTEL";
+    case DecorationBurstCoalesceINTEL: return "BurstCoalesceINTEL";
+    case DecorationCacheSizeINTEL: return "CacheSizeINTEL";
+    case DecorationDontStaticallyCoalesceINTEL: return "DontStaticallyCoalesceINTEL";
+    case DecorationPrefetchINTEL: return "PrefetchINTEL";
+    case DecorationStallEnableINTEL: return "StallEnableINTEL";
+    case DecorationFuseLoopsInFunctionINTEL: return "FuseLoopsInFunctionINTEL";
+    case DecorationMathOpDSPModeINTEL: return "MathOpDSPModeINTEL";
+    case DecorationAliasScopeINTEL: return "AliasScopeINTEL";
+    case DecorationNoAliasINTEL: return "NoAliasINTEL";
+    case DecorationInitiationIntervalINTEL: return "InitiationIntervalINTEL";
+    case DecorationMaxConcurrencyINTEL: return "MaxConcurrencyINTEL";
+    case DecorationPipelineEnableINTEL: return "PipelineEnableINTEL";
+    case DecorationBufferLocationINTEL: return "BufferLocationINTEL";
+    case DecorationIOPipeStorageINTEL: return "IOPipeStorageINTEL";
+    case DecorationFunctionFloatingPointModeINTEL: return "FunctionFloatingPointModeINTEL";
+    case DecorationSingleElementVectorINTEL: return "SingleElementVectorINTEL";
+    case DecorationVectorComputeCallableFunctionINTEL: return "VectorComputeCallableFunctionINTEL";
+    case DecorationMediaBlockIOINTEL: return "MediaBlockIOINTEL";
+    case DecorationStallFreeINTEL: return "StallFreeINTEL";
+    case DecorationFPMaxErrorDecorationINTEL: return "FPMaxErrorDecorationINTEL";
+    case DecorationLatencyControlLabelINTEL: return "LatencyControlLabelINTEL";
+    case DecorationLatencyControlConstraintINTEL: return "LatencyControlConstraintINTEL";
+    case DecorationConduitKernelArgumentINTEL: return "ConduitKernelArgumentINTEL";
+    case DecorationRegisterMapKernelArgumentINTEL: return "RegisterMapKernelArgumentINTEL";
+    case DecorationMMHostInterfaceAddressWidthINTEL: return "MMHostInterfaceAddressWidthINTEL";
+    case DecorationMMHostInterfaceDataWidthINTEL: return "MMHostInterfaceDataWidthINTEL";
+    case DecorationMMHostInterfaceLatencyINTEL: return "MMHostInterfaceLatencyINTEL";
+    case DecorationMMHostInterfaceReadWriteModeINTEL: return "MMHostInterfaceReadWriteModeINTEL";
+    case DecorationMMHostInterfaceMaxBurstINTEL: return "MMHostInterfaceMaxBurstINTEL";
+    case DecorationMMHostInterfaceWaitRequestINTEL: return "MMHostInterfaceWaitRequestINTEL";
+    case DecorationStableKernelArgumentINTEL: return "StableKernelArgumentINTEL";
+    case DecorationHostAccessINTEL: return "HostAccessINTEL";
+    case DecorationInitModeINTEL: return "InitModeINTEL";
+    case DecorationImplementInRegisterMapINTEL: return "ImplementInRegisterMapINTEL";
+    case DecorationCacheControlLoadINTEL: return "CacheControlLoadINTEL";
+    case DecorationCacheControlStoreINTEL: return "CacheControlStoreINTEL";
+    default: return "Unknown";
+    }
+}
+
+inline const char* BuiltInToString(BuiltIn value) {
+    switch (value) {
+    case BuiltInPosition: return "Position";
+    case BuiltInPointSize: return "PointSize";
+    case BuiltInClipDistance: return "ClipDistance";
+    case BuiltInCullDistance: return "CullDistance";
+    case BuiltInVertexId: return "VertexId";
+    case BuiltInInstanceId: return "InstanceId";
+    case BuiltInPrimitiveId: return "PrimitiveId";
+    case BuiltInInvocationId: return "InvocationId";
+    case BuiltInLayer: return "Layer";
+    case BuiltInViewportIndex: return "ViewportIndex";
+    case BuiltInTessLevelOuter: return "TessLevelOuter";
+    case BuiltInTessLevelInner: return "TessLevelInner";
+    case BuiltInTessCoord: return "TessCoord";
+    case BuiltInPatchVertices: return "PatchVertices";
+    case BuiltInFragCoord: return "FragCoord";
+    case BuiltInPointCoord: return "PointCoord";
+    case BuiltInFrontFacing: return "FrontFacing";
+    case BuiltInSampleId: return "SampleId";
+    case BuiltInSamplePosition: return "SamplePosition";
+    case BuiltInSampleMask: return "SampleMask";
+    case BuiltInFragDepth: return "FragDepth";
+    case BuiltInHelperInvocation: return "HelperInvocation";
+    case BuiltInNumWorkgroups: return "NumWorkgroups";
+    case BuiltInWorkgroupSize: return "WorkgroupSize";
+    case BuiltInWorkgroupId: return "WorkgroupId";
+    case BuiltInLocalInvocationId: return "LocalInvocationId";
+    case BuiltInGlobalInvocationId: return "GlobalInvocationId";
+    case BuiltInLocalInvocationIndex: return "LocalInvocationIndex";
+    case BuiltInWorkDim: return "WorkDim";
+    case BuiltInGlobalSize: return "GlobalSize";
+    case BuiltInEnqueuedWorkgroupSize: return "EnqueuedWorkgroupSize";
+    case BuiltInGlobalOffset: return "GlobalOffset";
+    case BuiltInGlobalLinearId: return "GlobalLinearId";
+    case BuiltInSubgroupSize: return "SubgroupSize";
+    case BuiltInSubgroupMaxSize: return "SubgroupMaxSize";
+    case BuiltInNumSubgroups: return "NumSubgroups";
+    case BuiltInNumEnqueuedSubgroups: return "NumEnqueuedSubgroups";
+    case BuiltInSubgroupId: return "SubgroupId";
+    case BuiltInSubgroupLocalInvocationId: return "SubgroupLocalInvocationId";
+    case BuiltInVertexIndex: return "VertexIndex";
+    case BuiltInInstanceIndex: return "InstanceIndex";
+    case BuiltInCoreIDARM: return "CoreIDARM";
+    case BuiltInCoreCountARM: return "CoreCountARM";
+    case BuiltInCoreMaxIDARM: return "CoreMaxIDARM";
+    case BuiltInWarpIDARM: return "WarpIDARM";
+    case BuiltInWarpMaxIDARM: return "WarpMaxIDARM";
+    case BuiltInSubgroupEqMask: return "SubgroupEqMask";
+    case BuiltInSubgroupGeMask: return "SubgroupGeMask";
+    case BuiltInSubgroupGtMask: return "SubgroupGtMask";
+    case BuiltInSubgroupLeMask: return "SubgroupLeMask";
+    case BuiltInSubgroupLtMask: return "SubgroupLtMask";
+    case BuiltInBaseVertex: return "BaseVertex";
+    case BuiltInBaseInstance: return "BaseInstance";
+    case BuiltInDrawIndex: return "DrawIndex";
+    case BuiltInPrimitiveShadingRateKHR: return "PrimitiveShadingRateKHR";
+    case BuiltInDeviceIndex: return "DeviceIndex";
+    case BuiltInViewIndex: return "ViewIndex";
+    case BuiltInShadingRateKHR: return "ShadingRateKHR";
+    case BuiltInBaryCoordNoPerspAMD: return "BaryCoordNoPerspAMD";
+    case BuiltInBaryCoordNoPerspCentroidAMD: return "BaryCoordNoPerspCentroidAMD";
+    case BuiltInBaryCoordNoPerspSampleAMD: return "BaryCoordNoPerspSampleAMD";
+    case BuiltInBaryCoordSmoothAMD: return "BaryCoordSmoothAMD";
+    case BuiltInBaryCoordSmoothCentroidAMD: return "BaryCoordSmoothCentroidAMD";
+    case BuiltInBaryCoordSmoothSampleAMD: return "BaryCoordSmoothSampleAMD";
+    case BuiltInBaryCoordPullModelAMD: return "BaryCoordPullModelAMD";
+    case BuiltInFragStencilRefEXT: return "FragStencilRefEXT";
+    case BuiltInRemainingRecursionLevelsAMDX: return "RemainingRecursionLevelsAMDX";
+    case BuiltInShaderIndexAMDX: return "ShaderIndexAMDX";
+    case BuiltInViewportMaskNV: return "ViewportMaskNV";
+    case BuiltInSecondaryPositionNV: return "SecondaryPositionNV";
+    case BuiltInSecondaryViewportMaskNV: return "SecondaryViewportMaskNV";
+    case BuiltInPositionPerViewNV: return "PositionPerViewNV";
+    case BuiltInViewportMaskPerViewNV: return "ViewportMaskPerViewNV";
+    case BuiltInFullyCoveredEXT: return "FullyCoveredEXT";
+    case BuiltInTaskCountNV: return "TaskCountNV";
+    case BuiltInPrimitiveCountNV: return "PrimitiveCountNV";
+    case BuiltInPrimitiveIndicesNV: return "PrimitiveIndicesNV";
+    case BuiltInClipDistancePerViewNV: return "ClipDistancePerViewNV";
+    case BuiltInCullDistancePerViewNV: return "CullDistancePerViewNV";
+    case BuiltInLayerPerViewNV: return "LayerPerViewNV";
+    case BuiltInMeshViewCountNV: return "MeshViewCountNV";
+    case BuiltInMeshViewIndicesNV: return "MeshViewIndicesNV";
+    case BuiltInBaryCoordKHR: return "BaryCoordKHR";
+    case BuiltInBaryCoordNoPerspKHR: return "BaryCoordNoPerspKHR";
+    case BuiltInFragSizeEXT: return "FragSizeEXT";
+    case BuiltInFragInvocationCountEXT: return "FragInvocationCountEXT";
+    case BuiltInPrimitivePointIndicesEXT: return "PrimitivePointIndicesEXT";
+    case BuiltInPrimitiveLineIndicesEXT: return "PrimitiveLineIndicesEXT";
+    case BuiltInPrimitiveTriangleIndicesEXT: return "PrimitiveTriangleIndicesEXT";
+    case BuiltInCullPrimitiveEXT: return "CullPrimitiveEXT";
+    case BuiltInLaunchIdKHR: return "LaunchIdKHR";
+    case BuiltInLaunchSizeKHR: return "LaunchSizeKHR";
+    case BuiltInWorldRayOriginKHR: return "WorldRayOriginKHR";
+    case BuiltInWorldRayDirectionKHR: return "WorldRayDirectionKHR";
+    case BuiltInObjectRayOriginKHR: return "ObjectRayOriginKHR";
+    case BuiltInObjectRayDirectionKHR: return "ObjectRayDirectionKHR";
+    case BuiltInRayTminKHR: return "RayTminKHR";
+    case BuiltInRayTmaxKHR: return "RayTmaxKHR";
+    case BuiltInInstanceCustomIndexKHR: return "InstanceCustomIndexKHR";
+    case BuiltInObjectToWorldKHR: return "ObjectToWorldKHR";
+    case BuiltInWorldToObjectKHR: return "WorldToObjectKHR";
+    case BuiltInHitTNV: return "HitTNV";
+    case BuiltInHitKindKHR: return "HitKindKHR";
+    case BuiltInCurrentRayTimeNV: return "CurrentRayTimeNV";
+    case BuiltInHitTriangleVertexPositionsKHR: return "HitTriangleVertexPositionsKHR";
+    case BuiltInHitMicroTriangleVertexPositionsNV: return "HitMicroTriangleVertexPositionsNV";
+    case BuiltInHitMicroTriangleVertexBarycentricsNV: return "HitMicroTriangleVertexBarycentricsNV";
+    case BuiltInIncomingRayFlagsKHR: return "IncomingRayFlagsKHR";
+    case BuiltInRayGeometryIndexKHR: return "RayGeometryIndexKHR";
+    case BuiltInWarpsPerSMNV: return "WarpsPerSMNV";
+    case BuiltInSMCountNV: return "SMCountNV";
+    case BuiltInWarpIDNV: return "WarpIDNV";
+    case BuiltInSMIDNV: return "SMIDNV";
+    case BuiltInHitKindFrontFacingMicroTriangleNV: return "HitKindFrontFacingMicroTriangleNV";
+    case BuiltInHitKindBackFacingMicroTriangleNV: return "HitKindBackFacingMicroTriangleNV";
+    case BuiltInCullMaskKHR: return "CullMaskKHR";
+    default: return "Unknown";
+    }
+}
+
+inline const char* ScopeToString(Scope value) {
+    switch (value) {
+    case ScopeCrossDevice: return "CrossDevice";
+    case ScopeDevice: return "Device";
+    case ScopeWorkgroup: return "Workgroup";
+    case ScopeSubgroup: return "Subgroup";
+    case ScopeInvocation: return "Invocation";
+    case ScopeQueueFamily: return "QueueFamily";
+    case ScopeShaderCallKHR: return "ShaderCallKHR";
+    default: return "Unknown";
+    }
+}
+
+inline const char* GroupOperationToString(GroupOperation value) {
+    switch (value) {
+    case GroupOperationReduce: return "Reduce";
+    case GroupOperationInclusiveScan: return "InclusiveScan";
+    case GroupOperationExclusiveScan: return "ExclusiveScan";
+    case GroupOperationClusteredReduce: return "ClusteredReduce";
+    case GroupOperationPartitionedReduceNV: return "PartitionedReduceNV";
+    case GroupOperationPartitionedInclusiveScanNV: return "PartitionedInclusiveScanNV";
+    case GroupOperationPartitionedExclusiveScanNV: return "PartitionedExclusiveScanNV";
+    default: return "Unknown";
+    }
+}
+
+inline const char* KernelEnqueueFlagsToString(KernelEnqueueFlags value) {
+    switch (value) {
+    case KernelEnqueueFlagsNoWait: return "NoWait";
+    case KernelEnqueueFlagsWaitKernel: return "WaitKernel";
+    case KernelEnqueueFlagsWaitWorkGroup: return "WaitWorkGroup";
+    default: return "Unknown";
+    }
+}
+
+inline const char* CapabilityToString(Capability value) {
+    switch (value) {
+    case CapabilityMatrix: return "Matrix";
+    case CapabilityShader: return "Shader";
+    case CapabilityGeometry: return "Geometry";
+    case CapabilityTessellation: return "Tessellation";
+    case CapabilityAddresses: return "Addresses";
+    case CapabilityLinkage: return "Linkage";
+    case CapabilityKernel: return "Kernel";
+    case CapabilityVector16: return "Vector16";
+    case CapabilityFloat16Buffer: return "Float16Buffer";
+    case CapabilityFloat16: return "Float16";
+    case CapabilityFloat64: return "Float64";
+    case CapabilityInt64: return "Int64";
+    case CapabilityInt64Atomics: return "Int64Atomics";
+    case CapabilityImageBasic: return "ImageBasic";
+    case CapabilityImageReadWrite: return "ImageReadWrite";
+    case CapabilityImageMipmap: return "ImageMipmap";
+    case CapabilityPipes: return "Pipes";
+    case CapabilityGroups: return "Groups";
+    case CapabilityDeviceEnqueue: return "DeviceEnqueue";
+    case CapabilityLiteralSampler: return "LiteralSampler";
+    case CapabilityAtomicStorage: return "AtomicStorage";
+    case CapabilityInt16: return "Int16";
+    case CapabilityTessellationPointSize: return "TessellationPointSize";
+    case CapabilityGeometryPointSize: return "GeometryPointSize";
+    case CapabilityImageGatherExtended: return "ImageGatherExtended";
+    case CapabilityStorageImageMultisample: return "StorageImageMultisample";
+    case CapabilityUniformBufferArrayDynamicIndexing: return "UniformBufferArrayDynamicIndexing";
+    case CapabilitySampledImageArrayDynamicIndexing: return "SampledImageArrayDynamicIndexing";
+    case CapabilityStorageBufferArrayDynamicIndexing: return "StorageBufferArrayDynamicIndexing";
+    case CapabilityStorageImageArrayDynamicIndexing: return "StorageImageArrayDynamicIndexing";
+    case CapabilityClipDistance: return "ClipDistance";
+    case CapabilityCullDistance: return "CullDistance";
+    case CapabilityImageCubeArray: return "ImageCubeArray";
+    case CapabilitySampleRateShading: return "SampleRateShading";
+    case CapabilityImageRect: return "ImageRect";
+    case CapabilitySampledRect: return "SampledRect";
+    case CapabilityGenericPointer: return "GenericPointer";
+    case CapabilityInt8: return "Int8";
+    case CapabilityInputAttachment: return "InputAttachment";
+    case CapabilitySparseResidency: return "SparseResidency";
+    case CapabilityMinLod: return "MinLod";
+    case CapabilitySampled1D: return "Sampled1D";
+    case CapabilityImage1D: return "Image1D";
+    case CapabilitySampledCubeArray: return "SampledCubeArray";
+    case CapabilitySampledBuffer: return "SampledBuffer";
+    case CapabilityImageBuffer: return "ImageBuffer";
+    case CapabilityImageMSArray: return "ImageMSArray";
+    case CapabilityStorageImageExtendedFormats: return "StorageImageExtendedFormats";
+    case CapabilityImageQuery: return "ImageQuery";
+    case CapabilityDerivativeControl: return "DerivativeControl";
+    case CapabilityInterpolationFunction: return "InterpolationFunction";
+    case CapabilityTransformFeedback: return "TransformFeedback";
+    case CapabilityGeometryStreams: return "GeometryStreams";
+    case CapabilityStorageImageReadWithoutFormat: return "StorageImageReadWithoutFormat";
+    case CapabilityStorageImageWriteWithoutFormat: return "StorageImageWriteWithoutFormat";
+    case CapabilityMultiViewport: return "MultiViewport";
+    case CapabilitySubgroupDispatch: return "SubgroupDispatch";
+    case CapabilityNamedBarrier: return "NamedBarrier";
+    case CapabilityPipeStorage: return "PipeStorage";
+    case CapabilityGroupNonUniform: return "GroupNonUniform";
+    case CapabilityGroupNonUniformVote: return "GroupNonUniformVote";
+    case CapabilityGroupNonUniformArithmetic: return "GroupNonUniformArithmetic";
+    case CapabilityGroupNonUniformBallot: return "GroupNonUniformBallot";
+    case CapabilityGroupNonUniformShuffle: return "GroupNonUniformShuffle";
+    case CapabilityGroupNonUniformShuffleRelative: return "GroupNonUniformShuffleRelative";
+    case CapabilityGroupNonUniformClustered: return "GroupNonUniformClustered";
+    case CapabilityGroupNonUniformQuad: return "GroupNonUniformQuad";
+    case CapabilityShaderLayer: return "ShaderLayer";
+    case CapabilityShaderViewportIndex: return "ShaderViewportIndex";
+    case CapabilityUniformDecoration: return "UniformDecoration";
+    case CapabilityCoreBuiltinsARM: return "CoreBuiltinsARM";
+    case CapabilityTileImageColorReadAccessEXT: return "TileImageColorReadAccessEXT";
+    case CapabilityTileImageDepthReadAccessEXT: return "TileImageDepthReadAccessEXT";
+    case CapabilityTileImageStencilReadAccessEXT: return "TileImageStencilReadAccessEXT";
+    case CapabilityCooperativeMatrixLayoutsARM: return "CooperativeMatrixLayoutsARM";
+    case CapabilityFragmentShadingRateKHR: return "FragmentShadingRateKHR";
+    case CapabilitySubgroupBallotKHR: return "SubgroupBallotKHR";
+    case CapabilityDrawParameters: return "DrawParameters";
+    case CapabilityWorkgroupMemoryExplicitLayoutKHR: return "WorkgroupMemoryExplicitLayoutKHR";
+    case CapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR: return "WorkgroupMemoryExplicitLayout8BitAccessKHR";
+    case CapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR: return "WorkgroupMemoryExplicitLayout16BitAccessKHR";
+    case CapabilitySubgroupVoteKHR: return "SubgroupVoteKHR";
+    case CapabilityStorageBuffer16BitAccess: return "StorageBuffer16BitAccess";
+    case CapabilityStorageUniform16: return "StorageUniform16";
+    case CapabilityStoragePushConstant16: return "StoragePushConstant16";
+    case CapabilityStorageInputOutput16: return "StorageInputOutput16";
+    case CapabilityDeviceGroup: return "DeviceGroup";
+    case CapabilityMultiView: return "MultiView";
+    case CapabilityVariablePointersStorageBuffer: return "VariablePointersStorageBuffer";
+    case CapabilityVariablePointers: return "VariablePointers";
+    case CapabilityAtomicStorageOps: return "AtomicStorageOps";
+    case CapabilitySampleMaskPostDepthCoverage: return "SampleMaskPostDepthCoverage";
+    case CapabilityStorageBuffer8BitAccess: return "StorageBuffer8BitAccess";
+    case CapabilityUniformAndStorageBuffer8BitAccess: return "UniformAndStorageBuffer8BitAccess";
+    case CapabilityStoragePushConstant8: return "StoragePushConstant8";
+    case CapabilityDenormPreserve: return "DenormPreserve";
+    case CapabilityDenormFlushToZero: return "DenormFlushToZero";
+    case CapabilitySignedZeroInfNanPreserve: return "SignedZeroInfNanPreserve";
+    case CapabilityRoundingModeRTE: return "RoundingModeRTE";
+    case CapabilityRoundingModeRTZ: return "RoundingModeRTZ";
+    case CapabilityRayQueryProvisionalKHR: return "RayQueryProvisionalKHR";
+    case CapabilityRayQueryKHR: return "RayQueryKHR";
+    case CapabilityUntypedPointersKHR: return "UntypedPointersKHR";
+    case CapabilityRayTraversalPrimitiveCullingKHR: return "RayTraversalPrimitiveCullingKHR";
+    case CapabilityRayTracingKHR: return "RayTracingKHR";
+    case CapabilityTextureSampleWeightedQCOM: return "TextureSampleWeightedQCOM";
+    case CapabilityTextureBoxFilterQCOM: return "TextureBoxFilterQCOM";
+    case CapabilityTextureBlockMatchQCOM: return "TextureBlockMatchQCOM";
+    case CapabilityTextureBlockMatch2QCOM: return "TextureBlockMatch2QCOM";
+    case CapabilityFloat16ImageAMD: return "Float16ImageAMD";
+    case CapabilityImageGatherBiasLodAMD: return "ImageGatherBiasLodAMD";
+    case CapabilityFragmentMaskAMD: return "FragmentMaskAMD";
+    case CapabilityStencilExportEXT: return "StencilExportEXT";
+    case CapabilityImageReadWriteLodAMD: return "ImageReadWriteLodAMD";
+    case CapabilityInt64ImageEXT: return "Int64ImageEXT";
+    case CapabilityShaderClockKHR: return "ShaderClockKHR";
+    case CapabilityShaderEnqueueAMDX: return "ShaderEnqueueAMDX";
+    case CapabilityQuadControlKHR: return "QuadControlKHR";
+    case CapabilitySampleMaskOverrideCoverageNV: return "SampleMaskOverrideCoverageNV";
+    case CapabilityGeometryShaderPassthroughNV: return "GeometryShaderPassthroughNV";
+    case CapabilityShaderViewportIndexLayerEXT: return "ShaderViewportIndexLayerEXT";
+    case CapabilityShaderViewportMaskNV: return "ShaderViewportMaskNV";
+    case CapabilityShaderStereoViewNV: return "ShaderStereoViewNV";
+    case CapabilityPerViewAttributesNV: return "PerViewAttributesNV";
+    case CapabilityFragmentFullyCoveredEXT: return "FragmentFullyCoveredEXT";
+    case CapabilityMeshShadingNV: return "MeshShadingNV";
+    case CapabilityImageFootprintNV: return "ImageFootprintNV";
+    case CapabilityMeshShadingEXT: return "MeshShadingEXT";
+    case CapabilityFragmentBarycentricKHR: return "FragmentBarycentricKHR";
+    case CapabilityComputeDerivativeGroupQuadsKHR: return "ComputeDerivativeGroupQuadsKHR";
+    case CapabilityFragmentDensityEXT: return "FragmentDensityEXT";
+    case CapabilityGroupNonUniformPartitionedNV: return "GroupNonUniformPartitionedNV";
+    case CapabilityShaderNonUniform: return "ShaderNonUniform";
+    case CapabilityRuntimeDescriptorArray: return "RuntimeDescriptorArray";
+    case CapabilityInputAttachmentArrayDynamicIndexing: return "InputAttachmentArrayDynamicIndexing";
+    case CapabilityUniformTexelBufferArrayDynamicIndexing: return "UniformTexelBufferArrayDynamicIndexing";
+    case CapabilityStorageTexelBufferArrayDynamicIndexing: return "StorageTexelBufferArrayDynamicIndexing";
+    case CapabilityUniformBufferArrayNonUniformIndexing: return "UniformBufferArrayNonUniformIndexing";
+    case CapabilitySampledImageArrayNonUniformIndexing: return "SampledImageArrayNonUniformIndexing";
+    case CapabilityStorageBufferArrayNonUniformIndexing: return "StorageBufferArrayNonUniformIndexing";
+    case CapabilityStorageImageArrayNonUniformIndexing: return "StorageImageArrayNonUniformIndexing";
+    case CapabilityInputAttachmentArrayNonUniformIndexing: return "InputAttachmentArrayNonUniformIndexing";
+    case CapabilityUniformTexelBufferArrayNonUniformIndexing: return "UniformTexelBufferArrayNonUniformIndexing";
+    case CapabilityStorageTexelBufferArrayNonUniformIndexing: return "StorageTexelBufferArrayNonUniformIndexing";
+    case CapabilityRayTracingPositionFetchKHR: return "RayTracingPositionFetchKHR";
+    case CapabilityRayTracingNV: return "RayTracingNV";
+    case CapabilityRayTracingMotionBlurNV: return "RayTracingMotionBlurNV";
+    case CapabilityVulkanMemoryModel: return "VulkanMemoryModel";
+    case CapabilityVulkanMemoryModelDeviceScope: return "VulkanMemoryModelDeviceScope";
+    case CapabilityPhysicalStorageBufferAddresses: return "PhysicalStorageBufferAddresses";
+    case CapabilityComputeDerivativeGroupLinearKHR: return "ComputeDerivativeGroupLinearKHR";
+    case CapabilityRayTracingProvisionalKHR: return "RayTracingProvisionalKHR";
+    case CapabilityCooperativeMatrixNV: return "CooperativeMatrixNV";
+    case CapabilityFragmentShaderSampleInterlockEXT: return "FragmentShaderSampleInterlockEXT";
+    case CapabilityFragmentShaderShadingRateInterlockEXT: return "FragmentShaderShadingRateInterlockEXT";
+    case CapabilityShaderSMBuiltinsNV: return "ShaderSMBuiltinsNV";
+    case CapabilityFragmentShaderPixelInterlockEXT: return "FragmentShaderPixelInterlockEXT";
+    case CapabilityDemoteToHelperInvocation: return "DemoteToHelperInvocation";
+    case CapabilityDisplacementMicromapNV: return "DisplacementMicromapNV";
+    case CapabilityRayTracingOpacityMicromapEXT: return "RayTracingOpacityMicromapEXT";
+    case CapabilityShaderInvocationReorderNV: return "ShaderInvocationReorderNV";
+    case CapabilityBindlessTextureNV: return "BindlessTextureNV";
+    case CapabilityRayQueryPositionFetchKHR: return "RayQueryPositionFetchKHR";
+    case CapabilityAtomicFloat16VectorNV: return "AtomicFloat16VectorNV";
+    case CapabilityRayTracingDisplacementMicromapNV: return "RayTracingDisplacementMicromapNV";
+    case CapabilityRawAccessChainsNV: return "RawAccessChainsNV";
+    case CapabilityCooperativeMatrixReductionsNV: return "CooperativeMatrixReductionsNV";
+    case CapabilityCooperativeMatrixConversionsNV: return "CooperativeMatrixConversionsNV";
+    case CapabilityCooperativeMatrixPerElementOperationsNV: return "CooperativeMatrixPerElementOperationsNV";
+    case CapabilityCooperativeMatrixTensorAddressingNV: return "CooperativeMatrixTensorAddressingNV";
+    case CapabilityCooperativeMatrixBlockLoadsNV: return "CooperativeMatrixBlockLoadsNV";
+    case CapabilityTensorAddressingNV: return "TensorAddressingNV";
+    case CapabilitySubgroupShuffleINTEL: return "SubgroupShuffleINTEL";
+    case CapabilitySubgroupBufferBlockIOINTEL: return "SubgroupBufferBlockIOINTEL";
+    case CapabilitySubgroupImageBlockIOINTEL: return "SubgroupImageBlockIOINTEL";
+    case CapabilitySubgroupImageMediaBlockIOINTEL: return "SubgroupImageMediaBlockIOINTEL";
+    case CapabilityRoundToInfinityINTEL: return "RoundToInfinityINTEL";
+    case CapabilityFloatingPointModeINTEL: return "FloatingPointModeINTEL";
+    case CapabilityIntegerFunctions2INTEL: return "IntegerFunctions2INTEL";
+    case CapabilityFunctionPointersINTEL: return "FunctionPointersINTEL";
+    case CapabilityIndirectReferencesINTEL: return "IndirectReferencesINTEL";
+    case CapabilityAsmINTEL: return "AsmINTEL";
+    case CapabilityAtomicFloat32MinMaxEXT: return "AtomicFloat32MinMaxEXT";
+    case CapabilityAtomicFloat64MinMaxEXT: return "AtomicFloat64MinMaxEXT";
+    case CapabilityAtomicFloat16MinMaxEXT: return "AtomicFloat16MinMaxEXT";
+    case CapabilityVectorComputeINTEL: return "VectorComputeINTEL";
+    case CapabilityVectorAnyINTEL: return "VectorAnyINTEL";
+    case CapabilityExpectAssumeKHR: return "ExpectAssumeKHR";
+    case CapabilitySubgroupAvcMotionEstimationINTEL: return "SubgroupAvcMotionEstimationINTEL";
+    case CapabilitySubgroupAvcMotionEstimationIntraINTEL: return "SubgroupAvcMotionEstimationIntraINTEL";
+    case CapabilitySubgroupAvcMotionEstimationChromaINTEL: return "SubgroupAvcMotionEstimationChromaINTEL";
+    case CapabilityVariableLengthArrayINTEL: return "VariableLengthArrayINTEL";
+    case CapabilityFunctionFloatControlINTEL: return "FunctionFloatControlINTEL";
+    case CapabilityFPGAMemoryAttributesINTEL: return "FPGAMemoryAttributesINTEL";
+    case CapabilityFPFastMathModeINTEL: return "FPFastMathModeINTEL";
+    case CapabilityArbitraryPrecisionIntegersINTEL: return "ArbitraryPrecisionIntegersINTEL";
+    case CapabilityArbitraryPrecisionFloatingPointINTEL: return "ArbitraryPrecisionFloatingPointINTEL";
+    case CapabilityUnstructuredLoopControlsINTEL: return "UnstructuredLoopControlsINTEL";
+    case CapabilityFPGALoopControlsINTEL: return "FPGALoopControlsINTEL";
+    case CapabilityKernelAttributesINTEL: return "KernelAttributesINTEL";
+    case CapabilityFPGAKernelAttributesINTEL: return "FPGAKernelAttributesINTEL";
+    case CapabilityFPGAMemoryAccessesINTEL: return "FPGAMemoryAccessesINTEL";
+    case CapabilityFPGAClusterAttributesINTEL: return "FPGAClusterAttributesINTEL";
+    case CapabilityLoopFuseINTEL: return "LoopFuseINTEL";
+    case CapabilityFPGADSPControlINTEL: return "FPGADSPControlINTEL";
+    case CapabilityMemoryAccessAliasingINTEL: return "MemoryAccessAliasingINTEL";
+    case CapabilityFPGAInvocationPipeliningAttributesINTEL: return "FPGAInvocationPipeliningAttributesINTEL";
+    case CapabilityFPGABufferLocationINTEL: return "FPGABufferLocationINTEL";
+    case CapabilityArbitraryPrecisionFixedPointINTEL: return "ArbitraryPrecisionFixedPointINTEL";
+    case CapabilityUSMStorageClassesINTEL: return "USMStorageClassesINTEL";
+    case CapabilityRuntimeAlignedAttributeINTEL: return "RuntimeAlignedAttributeINTEL";
+    case CapabilityIOPipesINTEL: return "IOPipesINTEL";
+    case CapabilityBlockingPipesINTEL: return "BlockingPipesINTEL";
+    case CapabilityFPGARegINTEL: return "FPGARegINTEL";
+    case CapabilityDotProductInputAll: return "DotProductInputAll";
+    case CapabilityDotProductInput4x8Bit: return "DotProductInput4x8Bit";
+    case CapabilityDotProductInput4x8BitPacked: return "DotProductInput4x8BitPacked";
+    case CapabilityDotProduct: return "DotProduct";
+    case CapabilityRayCullMaskKHR: return "RayCullMaskKHR";
+    case CapabilityCooperativeMatrixKHR: return "CooperativeMatrixKHR";
+    case CapabilityReplicatedCompositesEXT: return "ReplicatedCompositesEXT";
+    case CapabilityBitInstructions: return "BitInstructions";
+    case CapabilityGroupNonUniformRotateKHR: return "GroupNonUniformRotateKHR";
+    case CapabilityFloatControls2: return "FloatControls2";
+    case CapabilityAtomicFloat32AddEXT: return "AtomicFloat32AddEXT";
+    case CapabilityAtomicFloat64AddEXT: return "AtomicFloat64AddEXT";
+    case CapabilityLongCompositesINTEL: return "LongCompositesINTEL";
+    case CapabilityOptNoneEXT: return "OptNoneEXT";
+    case CapabilityAtomicFloat16AddEXT: return "AtomicFloat16AddEXT";
+    case CapabilityDebugInfoModuleINTEL: return "DebugInfoModuleINTEL";
+    case CapabilityBFloat16ConversionINTEL: return "BFloat16ConversionINTEL";
+    case CapabilitySplitBarrierINTEL: return "SplitBarrierINTEL";
+    case CapabilityArithmeticFenceEXT: return "ArithmeticFenceEXT";
+    case CapabilityFPGAClusterAttributesV2INTEL: return "FPGAClusterAttributesV2INTEL";
+    case CapabilityFPGAKernelAttributesv2INTEL: return "FPGAKernelAttributesv2INTEL";
+    case CapabilityFPMaxErrorINTEL: return "FPMaxErrorINTEL";
+    case CapabilityFPGALatencyControlINTEL: return "FPGALatencyControlINTEL";
+    case CapabilityFPGAArgumentInterfacesINTEL: return "FPGAArgumentInterfacesINTEL";
+    case CapabilityGlobalVariableHostAccessINTEL: return "GlobalVariableHostAccessINTEL";
+    case CapabilityGlobalVariableFPGADecorationsINTEL: return "GlobalVariableFPGADecorationsINTEL";
+    case CapabilitySubgroupBufferPrefetchINTEL: return "SubgroupBufferPrefetchINTEL";
+    case CapabilityGroupUniformArithmeticKHR: return "GroupUniformArithmeticKHR";
+    case CapabilityMaskedGatherScatterINTEL: return "MaskedGatherScatterINTEL";
+    case CapabilityCacheControlsINTEL: return "CacheControlsINTEL";
+    case CapabilityRegisterLimitsINTEL: return "RegisterLimitsINTEL";
+    default: return "Unknown";
+    }
+}
+
+inline const char* RayQueryIntersectionToString(RayQueryIntersection value) {
+    switch (value) {
+    case RayQueryIntersectionRayQueryCandidateIntersectionKHR: return "RayQueryCandidateIntersectionKHR";
+    case RayQueryIntersectionRayQueryCommittedIntersectionKHR: return "RayQueryCommittedIntersectionKHR";
+    default: return "Unknown";
+    }
+}
+
+inline const char* RayQueryCommittedIntersectionTypeToString(RayQueryCommittedIntersectionType value) {
+    switch (value) {
+    case RayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionNoneKHR: return "RayQueryCommittedIntersectionNoneKHR";
+    case RayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionTriangleKHR: return "RayQueryCommittedIntersectionTriangleKHR";
+    case RayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionGeneratedKHR: return "RayQueryCommittedIntersectionGeneratedKHR";
+    default: return "Unknown";
+    }
+}
+
+inline const char* RayQueryCandidateIntersectionTypeToString(RayQueryCandidateIntersectionType value) {
+    switch (value) {
+    case RayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionTriangleKHR: return "RayQueryCandidateIntersectionTriangleKHR";
+    case RayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionAABBKHR: return "RayQueryCandidateIntersectionAABBKHR";
+    default: return "Unknown";
+    }
+}
+
+inline const char* FPDenormModeToString(FPDenormMode value) {
+    switch (value) {
+    case FPDenormModePreserve: return "Preserve";
+    case FPDenormModeFlushToZero: return "FlushToZero";
+    default: return "Unknown";
+    }
+}
+
+inline const char* FPOperationModeToString(FPOperationMode value) {
+    switch (value) {
+    case FPOperationModeIEEE: return "IEEE";
+    case FPOperationModeALT: return "ALT";
+    default: return "Unknown";
+    }
+}
+
+inline const char* QuantizationModesToString(QuantizationModes value) {
+    switch (value) {
+    case QuantizationModesTRN: return "TRN";
+    case QuantizationModesTRN_ZERO: return "TRN_ZERO";
+    case QuantizationModesRND: return "RND";
+    case QuantizationModesRND_ZERO: return "RND_ZERO";
+    case QuantizationModesRND_INF: return "RND_INF";
+    case QuantizationModesRND_MIN_INF: return "RND_MIN_INF";
+    case QuantizationModesRND_CONV: return "RND_CONV";
+    case QuantizationModesRND_CONV_ODD: return "RND_CONV_ODD";
+    default: return "Unknown";
+    }
+}
+
+inline const char* OverflowModesToString(OverflowModes value) {
+    switch (value) {
+    case OverflowModesWRAP: return "WRAP";
+    case OverflowModesSAT: return "SAT";
+    case OverflowModesSAT_ZERO: return "SAT_ZERO";
+    case OverflowModesSAT_SYM: return "SAT_SYM";
+    default: return "Unknown";
+    }
+}
+
+inline const char* PackedVectorFormatToString(PackedVectorFormat value) {
+    switch (value) {
+    case PackedVectorFormatPackedVectorFormat4x8Bit: return "PackedVectorFormat4x8Bit";
+    default: return "Unknown";
+    }
+}
+
+inline const char* CooperativeMatrixLayoutToString(CooperativeMatrixLayout value) {
+    switch (value) {
+    case CooperativeMatrixLayoutRowMajorKHR: return "RowMajorKHR";
+    case CooperativeMatrixLayoutColumnMajorKHR: return "ColumnMajorKHR";
+    case CooperativeMatrixLayoutRowBlockedInterleavedARM: return "RowBlockedInterleavedARM";
+    case CooperativeMatrixLayoutColumnBlockedInterleavedARM: return "ColumnBlockedInterleavedARM";
+    default: return "Unknown";
+    }
+}
+
+inline const char* CooperativeMatrixUseToString(CooperativeMatrixUse value) {
+    switch (value) {
+    case CooperativeMatrixUseMatrixAKHR: return "MatrixAKHR";
+    case CooperativeMatrixUseMatrixBKHR: return "MatrixBKHR";
+    case CooperativeMatrixUseMatrixAccumulatorKHR: return "MatrixAccumulatorKHR";
+    default: return "Unknown";
+    }
+}
+
+inline const char* TensorClampModeToString(TensorClampMode value) {
+    switch (value) {
+    case TensorClampModeUndefined: return "Undefined";
+    case TensorClampModeConstant: return "Constant";
+    case TensorClampModeClampToEdge: return "ClampToEdge";
+    case TensorClampModeRepeat: return "Repeat";
+    case TensorClampModeRepeatMirrored: return "RepeatMirrored";
+    default: return "Unknown";
+    }
+}
+
+inline const char* InitializationModeQualifierToString(InitializationModeQualifier value) {
+    switch (value) {
+    case InitializationModeQualifierInitOnDeviceReprogramINTEL: return "InitOnDeviceReprogramINTEL";
+    case InitializationModeQualifierInitOnDeviceResetINTEL: return "InitOnDeviceResetINTEL";
+    default: return "Unknown";
+    }
+}
+
+inline const char* HostAccessQualifierToString(HostAccessQualifier value) {
+    switch (value) {
+    case HostAccessQualifierNoneINTEL: return "NoneINTEL";
+    case HostAccessQualifierReadINTEL: return "ReadINTEL";
+    case HostAccessQualifierWriteINTEL: return "WriteINTEL";
+    case HostAccessQualifierReadWriteINTEL: return "ReadWriteINTEL";
+    default: return "Unknown";
+    }
+}
+
+inline const char* LoadCacheControlToString(LoadCacheControl value) {
+    switch (value) {
+    case LoadCacheControlUncachedINTEL: return "UncachedINTEL";
+    case LoadCacheControlCachedINTEL: return "CachedINTEL";
+    case LoadCacheControlStreamingINTEL: return "StreamingINTEL";
+    case LoadCacheControlInvalidateAfterReadINTEL: return "InvalidateAfterReadINTEL";
+    case LoadCacheControlConstCachedINTEL: return "ConstCachedINTEL";
+    default: return "Unknown";
+    }
+}
+
+inline const char* StoreCacheControlToString(StoreCacheControl value) {
+    switch (value) {
+    case StoreCacheControlUncachedINTEL: return "UncachedINTEL";
+    case StoreCacheControlWriteThroughINTEL: return "WriteThroughINTEL";
+    case StoreCacheControlWriteBackINTEL: return "WriteBackINTEL";
+    case StoreCacheControlStreamingINTEL: return "StreamingINTEL";
+    default: return "Unknown";
+    }
+}
+
+inline const char* NamedMaximumNumberOfRegistersToString(NamedMaximumNumberOfRegisters value) {
+    switch (value) {
+    case NamedMaximumNumberOfRegistersAutoINTEL: return "AutoINTEL";
+    default: return "Unknown";
+    }
+}
+
+inline const char* FPEncodingToString(FPEncoding value) {
+    switch (value) {
+    default: return "Unknown";
+    }
+}
+
+inline const char* OpToString(Op value) {
+    switch (value) {
+    case OpNop: return "OpNop";
+    case OpUndef: return "OpUndef";
+    case OpSourceContinued: return "OpSourceContinued";
+    case OpSource: return "OpSource";
+    case OpSourceExtension: return "OpSourceExtension";
+    case OpName: return "OpName";
+    case OpMemberName: return "OpMemberName";
+    case OpString: return "OpString";
+    case OpLine: return "OpLine";
+    case OpExtension: return "OpExtension";
+    case OpExtInstImport: return "OpExtInstImport";
+    case OpExtInst: return "OpExtInst";
+    case OpMemoryModel: return "OpMemoryModel";
+    case OpEntryPoint: return "OpEntryPoint";
+    case OpExecutionMode: return "OpExecutionMode";
+    case OpCapability: return "OpCapability";
+    case OpTypeVoid: return "OpTypeVoid";
+    case OpTypeBool: return "OpTypeBool";
+    case OpTypeInt: return "OpTypeInt";
+    case OpTypeFloat: return "OpTypeFloat";
+    case OpTypeVector: return "OpTypeVector";
+    case OpTypeMatrix: return "OpTypeMatrix";
+    case OpTypeImage: return "OpTypeImage";
+    case OpTypeSampler: return "OpTypeSampler";
+    case OpTypeSampledImage: return "OpTypeSampledImage";
+    case OpTypeArray: return "OpTypeArray";
+    case OpTypeRuntimeArray: return "OpTypeRuntimeArray";
+    case OpTypeStruct: return "OpTypeStruct";
+    case OpTypeOpaque: return "OpTypeOpaque";
+    case OpTypePointer: return "OpTypePointer";
+    case OpTypeFunction: return "OpTypeFunction";
+    case OpTypeEvent: return "OpTypeEvent";
+    case OpTypeDeviceEvent: return "OpTypeDeviceEvent";
+    case OpTypeReserveId: return "OpTypeReserveId";
+    case OpTypeQueue: return "OpTypeQueue";
+    case OpTypePipe: return "OpTypePipe";
+    case OpTypeForwardPointer: return "OpTypeForwardPointer";
+    case OpConstantTrue: return "OpConstantTrue";
+    case OpConstantFalse: return "OpConstantFalse";
+    case OpConstant: return "OpConstant";
+    case OpConstantComposite: return "OpConstantComposite";
+    case OpConstantSampler: return "OpConstantSampler";
+    case OpConstantNull: return "OpConstantNull";
+    case OpSpecConstantTrue: return "OpSpecConstantTrue";
+    case OpSpecConstantFalse: return "OpSpecConstantFalse";
+    case OpSpecConstant: return "OpSpecConstant";
+    case OpSpecConstantComposite: return "OpSpecConstantComposite";
+    case OpSpecConstantOp: return "OpSpecConstantOp";
+    case OpFunction: return "OpFunction";
+    case OpFunctionParameter: return "OpFunctionParameter";
+    case OpFunctionEnd: return "OpFunctionEnd";
+    case OpFunctionCall: return "OpFunctionCall";
+    case OpVariable: return "OpVariable";
+    case OpImageTexelPointer: return "OpImageTexelPointer";
+    case OpLoad: return "OpLoad";
+    case OpStore: return "OpStore";
+    case OpCopyMemory: return "OpCopyMemory";
+    case OpCopyMemorySized: return "OpCopyMemorySized";
+    case OpAccessChain: return "OpAccessChain";
+    case OpInBoundsAccessChain: return "OpInBoundsAccessChain";
+    case OpPtrAccessChain: return "OpPtrAccessChain";
+    case OpArrayLength: return "OpArrayLength";
+    case OpGenericPtrMemSemantics: return "OpGenericPtrMemSemantics";
+    case OpInBoundsPtrAccessChain: return "OpInBoundsPtrAccessChain";
+    case OpDecorate: return "OpDecorate";
+    case OpMemberDecorate: return "OpMemberDecorate";
+    case OpDecorationGroup: return "OpDecorationGroup";
+    case OpGroupDecorate: return "OpGroupDecorate";
+    case OpGroupMemberDecorate: return "OpGroupMemberDecorate";
+    case OpVectorExtractDynamic: return "OpVectorExtractDynamic";
+    case OpVectorInsertDynamic: return "OpVectorInsertDynamic";
+    case OpVectorShuffle: return "OpVectorShuffle";
+    case OpCompositeConstruct: return "OpCompositeConstruct";
+    case OpCompositeExtract: return "OpCompositeExtract";
+    case OpCompositeInsert: return "OpCompositeInsert";
+    case OpCopyObject: return "OpCopyObject";
+    case OpTranspose: return "OpTranspose";
+    case OpSampledImage: return "OpSampledImage";
+    case OpImageSampleImplicitLod: return "OpImageSampleImplicitLod";
+    case OpImageSampleExplicitLod: return "OpImageSampleExplicitLod";
+    case OpImageSampleDrefImplicitLod: return "OpImageSampleDrefImplicitLod";
+    case OpImageSampleDrefExplicitLod: return "OpImageSampleDrefExplicitLod";
+    case OpImageSampleProjImplicitLod: return "OpImageSampleProjImplicitLod";
+    case OpImageSampleProjExplicitLod: return "OpImageSampleProjExplicitLod";
+    case OpImageSampleProjDrefImplicitLod: return "OpImageSampleProjDrefImplicitLod";
+    case OpImageSampleProjDrefExplicitLod: return "OpImageSampleProjDrefExplicitLod";
+    case OpImageFetch: return "OpImageFetch";
+    case OpImageGather: return "OpImageGather";
+    case OpImageDrefGather: return "OpImageDrefGather";
+    case OpImageRead: return "OpImageRead";
+    case OpImageWrite: return "OpImageWrite";
+    case OpImage: return "OpImage";
+    case OpImageQueryFormat: return "OpImageQueryFormat";
+    case OpImageQueryOrder: return "OpImageQueryOrder";
+    case OpImageQuerySizeLod: return "OpImageQuerySizeLod";
+    case OpImageQuerySize: return "OpImageQuerySize";
+    case OpImageQueryLod: return "OpImageQueryLod";
+    case OpImageQueryLevels: return "OpImageQueryLevels";
+    case OpImageQuerySamples: return "OpImageQuerySamples";
+    case OpConvertFToU: return "OpConvertFToU";
+    case OpConvertFToS: return "OpConvertFToS";
+    case OpConvertSToF: return "OpConvertSToF";
+    case OpConvertUToF: return "OpConvertUToF";
+    case OpUConvert: return "OpUConvert";
+    case OpSConvert: return "OpSConvert";
+    case OpFConvert: return "OpFConvert";
+    case OpQuantizeToF16: return "OpQuantizeToF16";
+    case OpConvertPtrToU: return "OpConvertPtrToU";
+    case OpSatConvertSToU: return "OpSatConvertSToU";
+    case OpSatConvertUToS: return "OpSatConvertUToS";
+    case OpConvertUToPtr: return "OpConvertUToPtr";
+    case OpPtrCastToGeneric: return "OpPtrCastToGeneric";
+    case OpGenericCastToPtr: return "OpGenericCastToPtr";
+    case OpGenericCastToPtrExplicit: return "OpGenericCastToPtrExplicit";
+    case OpBitcast: return "OpBitcast";
+    case OpSNegate: return "OpSNegate";
+    case OpFNegate: return "OpFNegate";
+    case OpIAdd: return "OpIAdd";
+    case OpFAdd: return "OpFAdd";
+    case OpISub: return "OpISub";
+    case OpFSub: return "OpFSub";
+    case OpIMul: return "OpIMul";
+    case OpFMul: return "OpFMul";
+    case OpUDiv: return "OpUDiv";
+    case OpSDiv: return "OpSDiv";
+    case OpFDiv: return "OpFDiv";
+    case OpUMod: return "OpUMod";
+    case OpSRem: return "OpSRem";
+    case OpSMod: return "OpSMod";
+    case OpFRem: return "OpFRem";
+    case OpFMod: return "OpFMod";
+    case OpVectorTimesScalar: return "OpVectorTimesScalar";
+    case OpMatrixTimesScalar: return "OpMatrixTimesScalar";
+    case OpVectorTimesMatrix: return "OpVectorTimesMatrix";
+    case OpMatrixTimesVector: return "OpMatrixTimesVector";
+    case OpMatrixTimesMatrix: return "OpMatrixTimesMatrix";
+    case OpOuterProduct: return "OpOuterProduct";
+    case OpDot: return "OpDot";
+    case OpIAddCarry: return "OpIAddCarry";
+    case OpISubBorrow: return "OpISubBorrow";
+    case OpUMulExtended: return "OpUMulExtended";
+    case OpSMulExtended: return "OpSMulExtended";
+    case OpAny: return "OpAny";
+    case OpAll: return "OpAll";
+    case OpIsNan: return "OpIsNan";
+    case OpIsInf: return "OpIsInf";
+    case OpIsFinite: return "OpIsFinite";
+    case OpIsNormal: return "OpIsNormal";
+    case OpSignBitSet: return "OpSignBitSet";
+    case OpLessOrGreater: return "OpLessOrGreater";
+    case OpOrdered: return "OpOrdered";
+    case OpUnordered: return "OpUnordered";
+    case OpLogicalEqual: return "OpLogicalEqual";
+    case OpLogicalNotEqual: return "OpLogicalNotEqual";
+    case OpLogicalOr: return "OpLogicalOr";
+    case OpLogicalAnd: return "OpLogicalAnd";
+    case OpLogicalNot: return "OpLogicalNot";
+    case OpSelect: return "OpSelect";
+    case OpIEqual: return "OpIEqual";
+    case OpINotEqual: return "OpINotEqual";
+    case OpUGreaterThan: return "OpUGreaterThan";
+    case OpSGreaterThan: return "OpSGreaterThan";
+    case OpUGreaterThanEqual: return "OpUGreaterThanEqual";
+    case OpSGreaterThanEqual: return "OpSGreaterThanEqual";
+    case OpULessThan: return "OpULessThan";
+    case OpSLessThan: return "OpSLessThan";
+    case OpULessThanEqual: return "OpULessThanEqual";
+    case OpSLessThanEqual: return "OpSLessThanEqual";
+    case OpFOrdEqual: return "OpFOrdEqual";
+    case OpFUnordEqual: return "OpFUnordEqual";
+    case OpFOrdNotEqual: return "OpFOrdNotEqual";
+    case OpFUnordNotEqual: return "OpFUnordNotEqual";
+    case OpFOrdLessThan: return "OpFOrdLessThan";
+    case OpFUnordLessThan: return "OpFUnordLessThan";
+    case OpFOrdGreaterThan: return "OpFOrdGreaterThan";
+    case OpFUnordGreaterThan: return "OpFUnordGreaterThan";
+    case OpFOrdLessThanEqual: return "OpFOrdLessThanEqual";
+    case OpFUnordLessThanEqual: return "OpFUnordLessThanEqual";
+    case OpFOrdGreaterThanEqual: return "OpFOrdGreaterThanEqual";
+    case OpFUnordGreaterThanEqual: return "OpFUnordGreaterThanEqual";
+    case OpShiftRightLogical: return "OpShiftRightLogical";
+    case OpShiftRightArithmetic: return "OpShiftRightArithmetic";
+    case OpShiftLeftLogical: return "OpShiftLeftLogical";
+    case OpBitwiseOr: return "OpBitwiseOr";
+    case OpBitwiseXor: return "OpBitwiseXor";
+    case OpBitwiseAnd: return "OpBitwiseAnd";
+    case OpNot: return "OpNot";
+    case OpBitFieldInsert: return "OpBitFieldInsert";
+    case OpBitFieldSExtract: return "OpBitFieldSExtract";
+    case OpBitFieldUExtract: return "OpBitFieldUExtract";
+    case OpBitReverse: return "OpBitReverse";
+    case OpBitCount: return "OpBitCount";
+    case OpDPdx: return "OpDPdx";
+    case OpDPdy: return "OpDPdy";
+    case OpFwidth: return "OpFwidth";
+    case OpDPdxFine: return "OpDPdxFine";
+    case OpDPdyFine: return "OpDPdyFine";
+    case OpFwidthFine: return "OpFwidthFine";
+    case OpDPdxCoarse: return "OpDPdxCoarse";
+    case OpDPdyCoarse: return "OpDPdyCoarse";
+    case OpFwidthCoarse: return "OpFwidthCoarse";
+    case OpEmitVertex: return "OpEmitVertex";
+    case OpEndPrimitive: return "OpEndPrimitive";
+    case OpEmitStreamVertex: return "OpEmitStreamVertex";
+    case OpEndStreamPrimitive: return "OpEndStreamPrimitive";
+    case OpControlBarrier: return "OpControlBarrier";
+    case OpMemoryBarrier: return "OpMemoryBarrier";
+    case OpAtomicLoad: return "OpAtomicLoad";
+    case OpAtomicStore: return "OpAtomicStore";
+    case OpAtomicExchange: return "OpAtomicExchange";
+    case OpAtomicCompareExchange: return "OpAtomicCompareExchange";
+    case OpAtomicCompareExchangeWeak: return "OpAtomicCompareExchangeWeak";
+    case OpAtomicIIncrement: return "OpAtomicIIncrement";
+    case OpAtomicIDecrement: return "OpAtomicIDecrement";
+    case OpAtomicIAdd: return "OpAtomicIAdd";
+    case OpAtomicISub: return "OpAtomicISub";
+    case OpAtomicSMin: return "OpAtomicSMin";
+    case OpAtomicUMin: return "OpAtomicUMin";
+    case OpAtomicSMax: return "OpAtomicSMax";
+    case OpAtomicUMax: return "OpAtomicUMax";
+    case OpAtomicAnd: return "OpAtomicAnd";
+    case OpAtomicOr: return "OpAtomicOr";
+    case OpAtomicXor: return "OpAtomicXor";
+    case OpPhi: return "OpPhi";
+    case OpLoopMerge: return "OpLoopMerge";
+    case OpSelectionMerge: return "OpSelectionMerge";
+    case OpLabel: return "OpLabel";
+    case OpBranch: return "OpBranch";
+    case OpBranchConditional: return "OpBranchConditional";
+    case OpSwitch: return "OpSwitch";
+    case OpKill: return "OpKill";
+    case OpReturn: return "OpReturn";
+    case OpReturnValue: return "OpReturnValue";
+    case OpUnreachable: return "OpUnreachable";
+    case OpLifetimeStart: return "OpLifetimeStart";
+    case OpLifetimeStop: return "OpLifetimeStop";
+    case OpGroupAsyncCopy: return "OpGroupAsyncCopy";
+    case OpGroupWaitEvents: return "OpGroupWaitEvents";
+    case OpGroupAll: return "OpGroupAll";
+    case OpGroupAny: return "OpGroupAny";
+    case OpGroupBroadcast: return "OpGroupBroadcast";
+    case OpGroupIAdd: return "OpGroupIAdd";
+    case OpGroupFAdd: return "OpGroupFAdd";
+    case OpGroupFMin: return "OpGroupFMin";
+    case OpGroupUMin: return "OpGroupUMin";
+    case OpGroupSMin: return "OpGroupSMin";
+    case OpGroupFMax: return "OpGroupFMax";
+    case OpGroupUMax: return "OpGroupUMax";
+    case OpGroupSMax: return "OpGroupSMax";
+    case OpReadPipe: return "OpReadPipe";
+    case OpWritePipe: return "OpWritePipe";
+    case OpReservedReadPipe: return "OpReservedReadPipe";
+    case OpReservedWritePipe: return "OpReservedWritePipe";
+    case OpReserveReadPipePackets: return "OpReserveReadPipePackets";
+    case OpReserveWritePipePackets: return "OpReserveWritePipePackets";
+    case OpCommitReadPipe: return "OpCommitReadPipe";
+    case OpCommitWritePipe: return "OpCommitWritePipe";
+    case OpIsValidReserveId: return "OpIsValidReserveId";
+    case OpGetNumPipePackets: return "OpGetNumPipePackets";
+    case OpGetMaxPipePackets: return "OpGetMaxPipePackets";
+    case OpGroupReserveReadPipePackets: return "OpGroupReserveReadPipePackets";
+    case OpGroupReserveWritePipePackets: return "OpGroupReserveWritePipePackets";
+    case OpGroupCommitReadPipe: return "OpGroupCommitReadPipe";
+    case OpGroupCommitWritePipe: return "OpGroupCommitWritePipe";
+    case OpEnqueueMarker: return "OpEnqueueMarker";
+    case OpEnqueueKernel: return "OpEnqueueKernel";
+    case OpGetKernelNDrangeSubGroupCount: return "OpGetKernelNDrangeSubGroupCount";
+    case OpGetKernelNDrangeMaxSubGroupSize: return "OpGetKernelNDrangeMaxSubGroupSize";
+    case OpGetKernelWorkGroupSize: return "OpGetKernelWorkGroupSize";
+    case OpGetKernelPreferredWorkGroupSizeMultiple: return "OpGetKernelPreferredWorkGroupSizeMultiple";
+    case OpRetainEvent: return "OpRetainEvent";
+    case OpReleaseEvent: return "OpReleaseEvent";
+    case OpCreateUserEvent: return "OpCreateUserEvent";
+    case OpIsValidEvent: return "OpIsValidEvent";
+    case OpSetUserEventStatus: return "OpSetUserEventStatus";
+    case OpCaptureEventProfilingInfo: return "OpCaptureEventProfilingInfo";
+    case OpGetDefaultQueue: return "OpGetDefaultQueue";
+    case OpBuildNDRange: return "OpBuildNDRange";
+    case OpImageSparseSampleImplicitLod: return "OpImageSparseSampleImplicitLod";
+    case OpImageSparseSampleExplicitLod: return "OpImageSparseSampleExplicitLod";
+    case OpImageSparseSampleDrefImplicitLod: return "OpImageSparseSampleDrefImplicitLod";
+    case OpImageSparseSampleDrefExplicitLod: return "OpImageSparseSampleDrefExplicitLod";
+    case OpImageSparseSampleProjImplicitLod: return "OpImageSparseSampleProjImplicitLod";
+    case OpImageSparseSampleProjExplicitLod: return "OpImageSparseSampleProjExplicitLod";
+    case OpImageSparseSampleProjDrefImplicitLod: return "OpImageSparseSampleProjDrefImplicitLod";
+    case OpImageSparseSampleProjDrefExplicitLod: return "OpImageSparseSampleProjDrefExplicitLod";
+    case OpImageSparseFetch: return "OpImageSparseFetch";
+    case OpImageSparseGather: return "OpImageSparseGather";
+    case OpImageSparseDrefGather: return "OpImageSparseDrefGather";
+    case OpImageSparseTexelsResident: return "OpImageSparseTexelsResident";
+    case OpNoLine: return "OpNoLine";
+    case OpAtomicFlagTestAndSet: return "OpAtomicFlagTestAndSet";
+    case OpAtomicFlagClear: return "OpAtomicFlagClear";
+    case OpImageSparseRead: return "OpImageSparseRead";
+    case OpSizeOf: return "OpSizeOf";
+    case OpTypePipeStorage: return "OpTypePipeStorage";
+    case OpConstantPipeStorage: return "OpConstantPipeStorage";
+    case OpCreatePipeFromPipeStorage: return "OpCreatePipeFromPipeStorage";
+    case OpGetKernelLocalSizeForSubgroupCount: return "OpGetKernelLocalSizeForSubgroupCount";
+    case OpGetKernelMaxNumSubgroups: return "OpGetKernelMaxNumSubgroups";
+    case OpTypeNamedBarrier: return "OpTypeNamedBarrier";
+    case OpNamedBarrierInitialize: return "OpNamedBarrierInitialize";
+    case OpMemoryNamedBarrier: return "OpMemoryNamedBarrier";
+    case OpModuleProcessed: return "OpModuleProcessed";
+    case OpExecutionModeId: return "OpExecutionModeId";
+    case OpDecorateId: return "OpDecorateId";
+    case OpGroupNonUniformElect: return "OpGroupNonUniformElect";
+    case OpGroupNonUniformAll: return "OpGroupNonUniformAll";
+    case OpGroupNonUniformAny: return "OpGroupNonUniformAny";
+    case OpGroupNonUniformAllEqual: return "OpGroupNonUniformAllEqual";
+    case OpGroupNonUniformBroadcast: return "OpGroupNonUniformBroadcast";
+    case OpGroupNonUniformBroadcastFirst: return "OpGroupNonUniformBroadcastFirst";
+    case OpGroupNonUniformBallot: return "OpGroupNonUniformBallot";
+    case OpGroupNonUniformInverseBallot: return "OpGroupNonUniformInverseBallot";
+    case OpGroupNonUniformBallotBitExtract: return "OpGroupNonUniformBallotBitExtract";
+    case OpGroupNonUniformBallotBitCount: return "OpGroupNonUniformBallotBitCount";
+    case OpGroupNonUniformBallotFindLSB: return "OpGroupNonUniformBallotFindLSB";
+    case OpGroupNonUniformBallotFindMSB: return "OpGroupNonUniformBallotFindMSB";
+    case OpGroupNonUniformShuffle: return "OpGroupNonUniformShuffle";
+    case OpGroupNonUniformShuffleXor: return "OpGroupNonUniformShuffleXor";
+    case OpGroupNonUniformShuffleUp: return "OpGroupNonUniformShuffleUp";
+    case OpGroupNonUniformShuffleDown: return "OpGroupNonUniformShuffleDown";
+    case OpGroupNonUniformIAdd: return "OpGroupNonUniformIAdd";
+    case OpGroupNonUniformFAdd: return "OpGroupNonUniformFAdd";
+    case OpGroupNonUniformIMul: return "OpGroupNonUniformIMul";
+    case OpGroupNonUniformFMul: return "OpGroupNonUniformFMul";
+    case OpGroupNonUniformSMin: return "OpGroupNonUniformSMin";
+    case OpGroupNonUniformUMin: return "OpGroupNonUniformUMin";
+    case OpGroupNonUniformFMin: return "OpGroupNonUniformFMin";
+    case OpGroupNonUniformSMax: return "OpGroupNonUniformSMax";
+    case OpGroupNonUniformUMax: return "OpGroupNonUniformUMax";
+    case OpGroupNonUniformFMax: return "OpGroupNonUniformFMax";
+    case OpGroupNonUniformBitwiseAnd: return "OpGroupNonUniformBitwiseAnd";
+    case OpGroupNonUniformBitwiseOr: return "OpGroupNonUniformBitwiseOr";
+    case OpGroupNonUniformBitwiseXor: return "OpGroupNonUniformBitwiseXor";
+    case OpGroupNonUniformLogicalAnd: return "OpGroupNonUniformLogicalAnd";
+    case OpGroupNonUniformLogicalOr: return "OpGroupNonUniformLogicalOr";
+    case OpGroupNonUniformLogicalXor: return "OpGroupNonUniformLogicalXor";
+    case OpGroupNonUniformQuadBroadcast: return "OpGroupNonUniformQuadBroadcast";
+    case OpGroupNonUniformQuadSwap: return "OpGroupNonUniformQuadSwap";
+    case OpCopyLogical: return "OpCopyLogical";
+    case OpPtrEqual: return "OpPtrEqual";
+    case OpPtrNotEqual: return "OpPtrNotEqual";
+    case OpPtrDiff: return "OpPtrDiff";
+    case OpColorAttachmentReadEXT: return "OpColorAttachmentReadEXT";
+    case OpDepthAttachmentReadEXT: return "OpDepthAttachmentReadEXT";
+    case OpStencilAttachmentReadEXT: return "OpStencilAttachmentReadEXT";
+    case OpTerminateInvocation: return "OpTerminateInvocation";
+    case OpTypeUntypedPointerKHR: return "OpTypeUntypedPointerKHR";
+    case OpUntypedVariableKHR: return "OpUntypedVariableKHR";
+    case OpUntypedAccessChainKHR: return "OpUntypedAccessChainKHR";
+    case OpUntypedInBoundsAccessChainKHR: return "OpUntypedInBoundsAccessChainKHR";
+    case OpSubgroupBallotKHR: return "OpSubgroupBallotKHR";
+    case OpSubgroupFirstInvocationKHR: return "OpSubgroupFirstInvocationKHR";
+    case OpUntypedPtrAccessChainKHR: return "OpUntypedPtrAccessChainKHR";
+    case OpUntypedInBoundsPtrAccessChainKHR: return "OpUntypedInBoundsPtrAccessChainKHR";
+    case OpUntypedArrayLengthKHR: return "OpUntypedArrayLengthKHR";
+    case OpUntypedPrefetchKHR: return "OpUntypedPrefetchKHR";
+    case OpSubgroupAllKHR: return "OpSubgroupAllKHR";
+    case OpSubgroupAnyKHR: return "OpSubgroupAnyKHR";
+    case OpSubgroupAllEqualKHR: return "OpSubgroupAllEqualKHR";
+    case OpGroupNonUniformRotateKHR: return "OpGroupNonUniformRotateKHR";
+    case OpSubgroupReadInvocationKHR: return "OpSubgroupReadInvocationKHR";
+    case OpExtInstWithForwardRefsKHR: return "OpExtInstWithForwardRefsKHR";
+    case OpTraceRayKHR: return "OpTraceRayKHR";
+    case OpExecuteCallableKHR: return "OpExecuteCallableKHR";
+    case OpConvertUToAccelerationStructureKHR: return "OpConvertUToAccelerationStructureKHR";
+    case OpIgnoreIntersectionKHR: return "OpIgnoreIntersectionKHR";
+    case OpTerminateRayKHR: return "OpTerminateRayKHR";
+    case OpSDot: return "OpSDot";
+    case OpUDot: return "OpUDot";
+    case OpSUDot: return "OpSUDot";
+    case OpSDotAccSat: return "OpSDotAccSat";
+    case OpUDotAccSat: return "OpUDotAccSat";
+    case OpSUDotAccSat: return "OpSUDotAccSat";
+    case OpTypeCooperativeMatrixKHR: return "OpTypeCooperativeMatrixKHR";
+    case OpCooperativeMatrixLoadKHR: return "OpCooperativeMatrixLoadKHR";
+    case OpCooperativeMatrixStoreKHR: return "OpCooperativeMatrixStoreKHR";
+    case OpCooperativeMatrixMulAddKHR: return "OpCooperativeMatrixMulAddKHR";
+    case OpCooperativeMatrixLengthKHR: return "OpCooperativeMatrixLengthKHR";
+    case OpConstantCompositeReplicateEXT: return "OpConstantCompositeReplicateEXT";
+    case OpSpecConstantCompositeReplicateEXT: return "OpSpecConstantCompositeReplicateEXT";
+    case OpCompositeConstructReplicateEXT: return "OpCompositeConstructReplicateEXT";
+    case OpTypeRayQueryKHR: return "OpTypeRayQueryKHR";
+    case OpRayQueryInitializeKHR: return "OpRayQueryInitializeKHR";
+    case OpRayQueryTerminateKHR: return "OpRayQueryTerminateKHR";
+    case OpRayQueryGenerateIntersectionKHR: return "OpRayQueryGenerateIntersectionKHR";
+    case OpRayQueryConfirmIntersectionKHR: return "OpRayQueryConfirmIntersectionKHR";
+    case OpRayQueryProceedKHR: return "OpRayQueryProceedKHR";
+    case OpRayQueryGetIntersectionTypeKHR: return "OpRayQueryGetIntersectionTypeKHR";
+    case OpImageSampleWeightedQCOM: return "OpImageSampleWeightedQCOM";
+    case OpImageBoxFilterQCOM: return "OpImageBoxFilterQCOM";
+    case OpImageBlockMatchSSDQCOM: return "OpImageBlockMatchSSDQCOM";
+    case OpImageBlockMatchSADQCOM: return "OpImageBlockMatchSADQCOM";
+    case OpImageBlockMatchWindowSSDQCOM: return "OpImageBlockMatchWindowSSDQCOM";
+    case OpImageBlockMatchWindowSADQCOM: return "OpImageBlockMatchWindowSADQCOM";
+    case OpImageBlockMatchGatherSSDQCOM: return "OpImageBlockMatchGatherSSDQCOM";
+    case OpImageBlockMatchGatherSADQCOM: return "OpImageBlockMatchGatherSADQCOM";
+    case OpGroupIAddNonUniformAMD: return "OpGroupIAddNonUniformAMD";
+    case OpGroupFAddNonUniformAMD: return "OpGroupFAddNonUniformAMD";
+    case OpGroupFMinNonUniformAMD: return "OpGroupFMinNonUniformAMD";
+    case OpGroupUMinNonUniformAMD: return "OpGroupUMinNonUniformAMD";
+    case OpGroupSMinNonUniformAMD: return "OpGroupSMinNonUniformAMD";
+    case OpGroupFMaxNonUniformAMD: return "OpGroupFMaxNonUniformAMD";
+    case OpGroupUMaxNonUniformAMD: return "OpGroupUMaxNonUniformAMD";
+    case OpGroupSMaxNonUniformAMD: return "OpGroupSMaxNonUniformAMD";
+    case OpFragmentMaskFetchAMD: return "OpFragmentMaskFetchAMD";
+    case OpFragmentFetchAMD: return "OpFragmentFetchAMD";
+    case OpReadClockKHR: return "OpReadClockKHR";
+    case OpAllocateNodePayloadsAMDX: return "OpAllocateNodePayloadsAMDX";
+    case OpEnqueueNodePayloadsAMDX: return "OpEnqueueNodePayloadsAMDX";
+    case OpTypeNodePayloadArrayAMDX: return "OpTypeNodePayloadArrayAMDX";
+    case OpFinishWritingNodePayloadAMDX: return "OpFinishWritingNodePayloadAMDX";
+    case OpNodePayloadArrayLengthAMDX: return "OpNodePayloadArrayLengthAMDX";
+    case OpIsNodePayloadValidAMDX: return "OpIsNodePayloadValidAMDX";
+    case OpConstantStringAMDX: return "OpConstantStringAMDX";
+    case OpSpecConstantStringAMDX: return "OpSpecConstantStringAMDX";
+    case OpGroupNonUniformQuadAllKHR: return "OpGroupNonUniformQuadAllKHR";
+    case OpGroupNonUniformQuadAnyKHR: return "OpGroupNonUniformQuadAnyKHR";
+    case OpHitObjectRecordHitMotionNV: return "OpHitObjectRecordHitMotionNV";
+    case OpHitObjectRecordHitWithIndexMotionNV: return "OpHitObjectRecordHitWithIndexMotionNV";
+    case OpHitObjectRecordMissMotionNV: return "OpHitObjectRecordMissMotionNV";
+    case OpHitObjectGetWorldToObjectNV: return "OpHitObjectGetWorldToObjectNV";
+    case OpHitObjectGetObjectToWorldNV: return "OpHitObjectGetObjectToWorldNV";
+    case OpHitObjectGetObjectRayDirectionNV: return "OpHitObjectGetObjectRayDirectionNV";
+    case OpHitObjectGetObjectRayOriginNV: return "OpHitObjectGetObjectRayOriginNV";
+    case OpHitObjectTraceRayMotionNV: return "OpHitObjectTraceRayMotionNV";
+    case OpHitObjectGetShaderRecordBufferHandleNV: return "OpHitObjectGetShaderRecordBufferHandleNV";
+    case OpHitObjectGetShaderBindingTableRecordIndexNV: return "OpHitObjectGetShaderBindingTableRecordIndexNV";
+    case OpHitObjectRecordEmptyNV: return "OpHitObjectRecordEmptyNV";
+    case OpHitObjectTraceRayNV: return "OpHitObjectTraceRayNV";
+    case OpHitObjectRecordHitNV: return "OpHitObjectRecordHitNV";
+    case OpHitObjectRecordHitWithIndexNV: return "OpHitObjectRecordHitWithIndexNV";
+    case OpHitObjectRecordMissNV: return "OpHitObjectRecordMissNV";
+    case OpHitObjectExecuteShaderNV: return "OpHitObjectExecuteShaderNV";
+    case OpHitObjectGetCurrentTimeNV: return "OpHitObjectGetCurrentTimeNV";
+    case OpHitObjectGetAttributesNV: return "OpHitObjectGetAttributesNV";
+    case OpHitObjectGetHitKindNV: return "OpHitObjectGetHitKindNV";
+    case OpHitObjectGetPrimitiveIndexNV: return "OpHitObjectGetPrimitiveIndexNV";
+    case OpHitObjectGetGeometryIndexNV: return "OpHitObjectGetGeometryIndexNV";
+    case OpHitObjectGetInstanceIdNV: return "OpHitObjectGetInstanceIdNV";
+    case OpHitObjectGetInstanceCustomIndexNV: return "OpHitObjectGetInstanceCustomIndexNV";
+    case OpHitObjectGetWorldRayDirectionNV: return "OpHitObjectGetWorldRayDirectionNV";
+    case OpHitObjectGetWorldRayOriginNV: return "OpHitObjectGetWorldRayOriginNV";
+    case OpHitObjectGetRayTMaxNV: return "OpHitObjectGetRayTMaxNV";
+    case OpHitObjectGetRayTMinNV: return "OpHitObjectGetRayTMinNV";
+    case OpHitObjectIsEmptyNV: return "OpHitObjectIsEmptyNV";
+    case OpHitObjectIsHitNV: return "OpHitObjectIsHitNV";
+    case OpHitObjectIsMissNV: return "OpHitObjectIsMissNV";
+    case OpReorderThreadWithHitObjectNV: return "OpReorderThreadWithHitObjectNV";
+    case OpReorderThreadWithHintNV: return "OpReorderThreadWithHintNV";
+    case OpTypeHitObjectNV: return "OpTypeHitObjectNV";
+    case OpImageSampleFootprintNV: return "OpImageSampleFootprintNV";
+    case OpCooperativeMatrixConvertNV: return "OpCooperativeMatrixConvertNV";
+    case OpEmitMeshTasksEXT: return "OpEmitMeshTasksEXT";
+    case OpSetMeshOutputsEXT: return "OpSetMeshOutputsEXT";
+    case OpGroupNonUniformPartitionNV: return "OpGroupNonUniformPartitionNV";
+    case OpWritePackedPrimitiveIndices4x8NV: return "OpWritePackedPrimitiveIndices4x8NV";
+    case OpFetchMicroTriangleVertexPositionNV: return "OpFetchMicroTriangleVertexPositionNV";
+    case OpFetchMicroTriangleVertexBarycentricNV: return "OpFetchMicroTriangleVertexBarycentricNV";
+    case OpReportIntersectionKHR: return "OpReportIntersectionKHR";
+    case OpIgnoreIntersectionNV: return "OpIgnoreIntersectionNV";
+    case OpTerminateRayNV: return "OpTerminateRayNV";
+    case OpTraceNV: return "OpTraceNV";
+    case OpTraceMotionNV: return "OpTraceMotionNV";
+    case OpTraceRayMotionNV: return "OpTraceRayMotionNV";
+    case OpRayQueryGetIntersectionTriangleVertexPositionsKHR: return "OpRayQueryGetIntersectionTriangleVertexPositionsKHR";
+    case OpTypeAccelerationStructureKHR: return "OpTypeAccelerationStructureKHR";
+    case OpExecuteCallableNV: return "OpExecuteCallableNV";
+    case OpTypeCooperativeMatrixNV: return "OpTypeCooperativeMatrixNV";
+    case OpCooperativeMatrixLoadNV: return "OpCooperativeMatrixLoadNV";
+    case OpCooperativeMatrixStoreNV: return "OpCooperativeMatrixStoreNV";
+    case OpCooperativeMatrixMulAddNV: return "OpCooperativeMatrixMulAddNV";
+    case OpCooperativeMatrixLengthNV: return "OpCooperativeMatrixLengthNV";
+    case OpBeginInvocationInterlockEXT: return "OpBeginInvocationInterlockEXT";
+    case OpEndInvocationInterlockEXT: return "OpEndInvocationInterlockEXT";
+    case OpCooperativeMatrixReduceNV: return "OpCooperativeMatrixReduceNV";
+    case OpCooperativeMatrixLoadTensorNV: return "OpCooperativeMatrixLoadTensorNV";
+    case OpCooperativeMatrixStoreTensorNV: return "OpCooperativeMatrixStoreTensorNV";
+    case OpCooperativeMatrixPerElementOpNV: return "OpCooperativeMatrixPerElementOpNV";
+    case OpTypeTensorLayoutNV: return "OpTypeTensorLayoutNV";
+    case OpTypeTensorViewNV: return "OpTypeTensorViewNV";
+    case OpCreateTensorLayoutNV: return "OpCreateTensorLayoutNV";
+    case OpTensorLayoutSetDimensionNV: return "OpTensorLayoutSetDimensionNV";
+    case OpTensorLayoutSetStrideNV: return "OpTensorLayoutSetStrideNV";
+    case OpTensorLayoutSliceNV: return "OpTensorLayoutSliceNV";
+    case OpTensorLayoutSetClampValueNV: return "OpTensorLayoutSetClampValueNV";
+    case OpCreateTensorViewNV: return "OpCreateTensorViewNV";
+    case OpTensorViewSetDimensionNV: return "OpTensorViewSetDimensionNV";
+    case OpTensorViewSetStrideNV: return "OpTensorViewSetStrideNV";
+    case OpDemoteToHelperInvocation: return "OpDemoteToHelperInvocation";
+    case OpIsHelperInvocationEXT: return "OpIsHelperInvocationEXT";
+    case OpTensorViewSetClipNV: return "OpTensorViewSetClipNV";
+    case OpTensorLayoutSetBlockSizeNV: return "OpTensorLayoutSetBlockSizeNV";
+    case OpCooperativeMatrixTransposeNV: return "OpCooperativeMatrixTransposeNV";
+    case OpConvertUToImageNV: return "OpConvertUToImageNV";
+    case OpConvertUToSamplerNV: return "OpConvertUToSamplerNV";
+    case OpConvertImageToUNV: return "OpConvertImageToUNV";
+    case OpConvertSamplerToUNV: return "OpConvertSamplerToUNV";
+    case OpConvertUToSampledImageNV: return "OpConvertUToSampledImageNV";
+    case OpConvertSampledImageToUNV: return "OpConvertSampledImageToUNV";
+    case OpSamplerImageAddressingModeNV: return "OpSamplerImageAddressingModeNV";
+    case OpRawAccessChainNV: return "OpRawAccessChainNV";
+    case OpSubgroupShuffleINTEL: return "OpSubgroupShuffleINTEL";
+    case OpSubgroupShuffleDownINTEL: return "OpSubgroupShuffleDownINTEL";
+    case OpSubgroupShuffleUpINTEL: return "OpSubgroupShuffleUpINTEL";
+    case OpSubgroupShuffleXorINTEL: return "OpSubgroupShuffleXorINTEL";
+    case OpSubgroupBlockReadINTEL: return "OpSubgroupBlockReadINTEL";
+    case OpSubgroupBlockWriteINTEL: return "OpSubgroupBlockWriteINTEL";
+    case OpSubgroupImageBlockReadINTEL: return "OpSubgroupImageBlockReadINTEL";
+    case OpSubgroupImageBlockWriteINTEL: return "OpSubgroupImageBlockWriteINTEL";
+    case OpSubgroupImageMediaBlockReadINTEL: return "OpSubgroupImageMediaBlockReadINTEL";
+    case OpSubgroupImageMediaBlockWriteINTEL: return "OpSubgroupImageMediaBlockWriteINTEL";
+    case OpUCountLeadingZerosINTEL: return "OpUCountLeadingZerosINTEL";
+    case OpUCountTrailingZerosINTEL: return "OpUCountTrailingZerosINTEL";
+    case OpAbsISubINTEL: return "OpAbsISubINTEL";
+    case OpAbsUSubINTEL: return "OpAbsUSubINTEL";
+    case OpIAddSatINTEL: return "OpIAddSatINTEL";
+    case OpUAddSatINTEL: return "OpUAddSatINTEL";
+    case OpIAverageINTEL: return "OpIAverageINTEL";
+    case OpUAverageINTEL: return "OpUAverageINTEL";
+    case OpIAverageRoundedINTEL: return "OpIAverageRoundedINTEL";
+    case OpUAverageRoundedINTEL: return "OpUAverageRoundedINTEL";
+    case OpISubSatINTEL: return "OpISubSatINTEL";
+    case OpUSubSatINTEL: return "OpUSubSatINTEL";
+    case OpIMul32x16INTEL: return "OpIMul32x16INTEL";
+    case OpUMul32x16INTEL: return "OpUMul32x16INTEL";
+    case OpConstantFunctionPointerINTEL: return "OpConstantFunctionPointerINTEL";
+    case OpFunctionPointerCallINTEL: return "OpFunctionPointerCallINTEL";
+    case OpAsmTargetINTEL: return "OpAsmTargetINTEL";
+    case OpAsmINTEL: return "OpAsmINTEL";
+    case OpAsmCallINTEL: return "OpAsmCallINTEL";
+    case OpAtomicFMinEXT: return "OpAtomicFMinEXT";
+    case OpAtomicFMaxEXT: return "OpAtomicFMaxEXT";
+    case OpAssumeTrueKHR: return "OpAssumeTrueKHR";
+    case OpExpectKHR: return "OpExpectKHR";
+    case OpDecorateString: return "OpDecorateString";
+    case OpMemberDecorateString: return "OpMemberDecorateString";
+    case OpVmeImageINTEL: return "OpVmeImageINTEL";
+    case OpTypeVmeImageINTEL: return "OpTypeVmeImageINTEL";
+    case OpTypeAvcImePayloadINTEL: return "OpTypeAvcImePayloadINTEL";
+    case OpTypeAvcRefPayloadINTEL: return "OpTypeAvcRefPayloadINTEL";
+    case OpTypeAvcSicPayloadINTEL: return "OpTypeAvcSicPayloadINTEL";
+    case OpTypeAvcMcePayloadINTEL: return "OpTypeAvcMcePayloadINTEL";
+    case OpTypeAvcMceResultINTEL: return "OpTypeAvcMceResultINTEL";
+    case OpTypeAvcImeResultINTEL: return "OpTypeAvcImeResultINTEL";
+    case OpTypeAvcImeResultSingleReferenceStreamoutINTEL: return "OpTypeAvcImeResultSingleReferenceStreamoutINTEL";
+    case OpTypeAvcImeResultDualReferenceStreamoutINTEL: return "OpTypeAvcImeResultDualReferenceStreamoutINTEL";
+    case OpTypeAvcImeSingleReferenceStreaminINTEL: return "OpTypeAvcImeSingleReferenceStreaminINTEL";
+    case OpTypeAvcImeDualReferenceStreaminINTEL: return "OpTypeAvcImeDualReferenceStreaminINTEL";
+    case OpTypeAvcRefResultINTEL: return "OpTypeAvcRefResultINTEL";
+    case OpTypeAvcSicResultINTEL: return "OpTypeAvcSicResultINTEL";
+    case OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL: return "OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL";
+    case OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL: return "OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL";
+    case OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL: return "OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL";
+    case OpSubgroupAvcMceSetInterShapePenaltyINTEL: return "OpSubgroupAvcMceSetInterShapePenaltyINTEL";
+    case OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL: return "OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL";
+    case OpSubgroupAvcMceSetInterDirectionPenaltyINTEL: return "OpSubgroupAvcMceSetInterDirectionPenaltyINTEL";
+    case OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL: return "OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL";
+    case OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL: return "OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL";
+    case OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL: return "OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL";
+    case OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL: return "OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL";
+    case OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL: return "OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL";
+    case OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL: return "OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL";
+    case OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL: return "OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL";
+    case OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL: return "OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL";
+    case OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL: return "OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL";
+    case OpSubgroupAvcMceSetAcOnlyHaarINTEL: return "OpSubgroupAvcMceSetAcOnlyHaarINTEL";
+    case OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL: return "OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL";
+    case OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL: return "OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL";
+    case OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL: return "OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL";
+    case OpSubgroupAvcMceConvertToImePayloadINTEL: return "OpSubgroupAvcMceConvertToImePayloadINTEL";
+    case OpSubgroupAvcMceConvertToImeResultINTEL: return "OpSubgroupAvcMceConvertToImeResultINTEL";
+    case OpSubgroupAvcMceConvertToRefPayloadINTEL: return "OpSubgroupAvcMceConvertToRefPayloadINTEL";
+    case OpSubgroupAvcMceConvertToRefResultINTEL: return "OpSubgroupAvcMceConvertToRefResultINTEL";
+    case OpSubgroupAvcMceConvertToSicPayloadINTEL: return "OpSubgroupAvcMceConvertToSicPayloadINTEL";
+    case OpSubgroupAvcMceConvertToSicResultINTEL: return "OpSubgroupAvcMceConvertToSicResultINTEL";
+    case OpSubgroupAvcMceGetMotionVectorsINTEL: return "OpSubgroupAvcMceGetMotionVectorsINTEL";
+    case OpSubgroupAvcMceGetInterDistortionsINTEL: return "OpSubgroupAvcMceGetInterDistortionsINTEL";
+    case OpSubgroupAvcMceGetBestInterDistortionsINTEL: return "OpSubgroupAvcMceGetBestInterDistortionsINTEL";
+    case OpSubgroupAvcMceGetInterMajorShapeINTEL: return "OpSubgroupAvcMceGetInterMajorShapeINTEL";
+    case OpSubgroupAvcMceGetInterMinorShapeINTEL: return "OpSubgroupAvcMceGetInterMinorShapeINTEL";
+    case OpSubgroupAvcMceGetInterDirectionsINTEL: return "OpSubgroupAvcMceGetInterDirectionsINTEL";
+    case OpSubgroupAvcMceGetInterMotionVectorCountINTEL: return "OpSubgroupAvcMceGetInterMotionVectorCountINTEL";
+    case OpSubgroupAvcMceGetInterReferenceIdsINTEL: return "OpSubgroupAvcMceGetInterReferenceIdsINTEL";
+    case OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL: return "OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL";
+    case OpSubgroupAvcImeInitializeINTEL: return "OpSubgroupAvcImeInitializeINTEL";
+    case OpSubgroupAvcImeSetSingleReferenceINTEL: return "OpSubgroupAvcImeSetSingleReferenceINTEL";
+    case OpSubgroupAvcImeSetDualReferenceINTEL: return "OpSubgroupAvcImeSetDualReferenceINTEL";
+    case OpSubgroupAvcImeRefWindowSizeINTEL: return "OpSubgroupAvcImeRefWindowSizeINTEL";
+    case OpSubgroupAvcImeAdjustRefOffsetINTEL: return "OpSubgroupAvcImeAdjustRefOffsetINTEL";
+    case OpSubgroupAvcImeConvertToMcePayloadINTEL: return "OpSubgroupAvcImeConvertToMcePayloadINTEL";
+    case OpSubgroupAvcImeSetMaxMotionVectorCountINTEL: return "OpSubgroupAvcImeSetMaxMotionVectorCountINTEL";
+    case OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL: return "OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL";
+    case OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL: return "OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL";
+    case OpSubgroupAvcImeSetWeightedSadINTEL: return "OpSubgroupAvcImeSetWeightedSadINTEL";
+    case OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL: return "OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL";
+    case OpSubgroupAvcImeEvaluateWithDualReferenceINTEL: return "OpSubgroupAvcImeEvaluateWithDualReferenceINTEL";
+    case OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL: return "OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL";
+    case OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL: return "OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL";
+    case OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL: return "OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL";
+    case OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL: return "OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL";
+    case OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL: return "OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL";
+    case OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL: return "OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL";
+    case OpSubgroupAvcImeConvertToMceResultINTEL: return "OpSubgroupAvcImeConvertToMceResultINTEL";
+    case OpSubgroupAvcImeGetSingleReferenceStreaminINTEL: return "OpSubgroupAvcImeGetSingleReferenceStreaminINTEL";
+    case OpSubgroupAvcImeGetDualReferenceStreaminINTEL: return "OpSubgroupAvcImeGetDualReferenceStreaminINTEL";
+    case OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL: return "OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL";
+    case OpSubgroupAvcImeStripDualReferenceStreamoutINTEL: return "OpSubgroupAvcImeStripDualReferenceStreamoutINTEL";
+    case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL: return "OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL";
+    case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL: return "OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL";
+    case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL: return "OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL";
+    case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL: return "OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL";
+    case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL: return "OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL";
+    case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL: return "OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL";
+    case OpSubgroupAvcImeGetBorderReachedINTEL: return "OpSubgroupAvcImeGetBorderReachedINTEL";
+    case OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL: return "OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL";
+    case OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL: return "OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL";
+    case OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL: return "OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL";
+    case OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL: return "OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL";
+    case OpSubgroupAvcFmeInitializeINTEL: return "OpSubgroupAvcFmeInitializeINTEL";
+    case OpSubgroupAvcBmeInitializeINTEL: return "OpSubgroupAvcBmeInitializeINTEL";
+    case OpSubgroupAvcRefConvertToMcePayloadINTEL: return "OpSubgroupAvcRefConvertToMcePayloadINTEL";
+    case OpSubgroupAvcRefSetBidirectionalMixDisableINTEL: return "OpSubgroupAvcRefSetBidirectionalMixDisableINTEL";
+    case OpSubgroupAvcRefSetBilinearFilterEnableINTEL: return "OpSubgroupAvcRefSetBilinearFilterEnableINTEL";
+    case OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL: return "OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL";
+    case OpSubgroupAvcRefEvaluateWithDualReferenceINTEL: return "OpSubgroupAvcRefEvaluateWithDualReferenceINTEL";
+    case OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL: return "OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL";
+    case OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL: return "OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL";
+    case OpSubgroupAvcRefConvertToMceResultINTEL: return "OpSubgroupAvcRefConvertToMceResultINTEL";
+    case OpSubgroupAvcSicInitializeINTEL: return "OpSubgroupAvcSicInitializeINTEL";
+    case OpSubgroupAvcSicConfigureSkcINTEL: return "OpSubgroupAvcSicConfigureSkcINTEL";
+    case OpSubgroupAvcSicConfigureIpeLumaINTEL: return "OpSubgroupAvcSicConfigureIpeLumaINTEL";
+    case OpSubgroupAvcSicConfigureIpeLumaChromaINTEL: return "OpSubgroupAvcSicConfigureIpeLumaChromaINTEL";
+    case OpSubgroupAvcSicGetMotionVectorMaskINTEL: return "OpSubgroupAvcSicGetMotionVectorMaskINTEL";
+    case OpSubgroupAvcSicConvertToMcePayloadINTEL: return "OpSubgroupAvcSicConvertToMcePayloadINTEL";
+    case OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL: return "OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL";
+    case OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL: return "OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL";
+    case OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL: return "OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL";
+    case OpSubgroupAvcSicSetBilinearFilterEnableINTEL: return "OpSubgroupAvcSicSetBilinearFilterEnableINTEL";
+    case OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL: return "OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL";
+    case OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL: return "OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL";
+    case OpSubgroupAvcSicEvaluateIpeINTEL: return "OpSubgroupAvcSicEvaluateIpeINTEL";
+    case OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL: return "OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL";
+    case OpSubgroupAvcSicEvaluateWithDualReferenceINTEL: return "OpSubgroupAvcSicEvaluateWithDualReferenceINTEL";
+    case OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL: return "OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL";
+    case OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL: return "OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL";
+    case OpSubgroupAvcSicConvertToMceResultINTEL: return "OpSubgroupAvcSicConvertToMceResultINTEL";
+    case OpSubgroupAvcSicGetIpeLumaShapeINTEL: return "OpSubgroupAvcSicGetIpeLumaShapeINTEL";
+    case OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL: return "OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL";
+    case OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL: return "OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL";
+    case OpSubgroupAvcSicGetPackedIpeLumaModesINTEL: return "OpSubgroupAvcSicGetPackedIpeLumaModesINTEL";
+    case OpSubgroupAvcSicGetIpeChromaModeINTEL: return "OpSubgroupAvcSicGetIpeChromaModeINTEL";
+    case OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL: return "OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL";
+    case OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL: return "OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL";
+    case OpSubgroupAvcSicGetInterRawSadsINTEL: return "OpSubgroupAvcSicGetInterRawSadsINTEL";
+    case OpVariableLengthArrayINTEL: return "OpVariableLengthArrayINTEL";
+    case OpSaveMemoryINTEL: return "OpSaveMemoryINTEL";
+    case OpRestoreMemoryINTEL: return "OpRestoreMemoryINTEL";
+    case OpArbitraryFloatSinCosPiINTEL: return "OpArbitraryFloatSinCosPiINTEL";
+    case OpArbitraryFloatCastINTEL: return "OpArbitraryFloatCastINTEL";
+    case OpArbitraryFloatCastFromIntINTEL: return "OpArbitraryFloatCastFromIntINTEL";
+    case OpArbitraryFloatCastToIntINTEL: return "OpArbitraryFloatCastToIntINTEL";
+    case OpArbitraryFloatAddINTEL: return "OpArbitraryFloatAddINTEL";
+    case OpArbitraryFloatSubINTEL: return "OpArbitraryFloatSubINTEL";
+    case OpArbitraryFloatMulINTEL: return "OpArbitraryFloatMulINTEL";
+    case OpArbitraryFloatDivINTEL: return "OpArbitraryFloatDivINTEL";
+    case OpArbitraryFloatGTINTEL: return "OpArbitraryFloatGTINTEL";
+    case OpArbitraryFloatGEINTEL: return "OpArbitraryFloatGEINTEL";
+    case OpArbitraryFloatLTINTEL: return "OpArbitraryFloatLTINTEL";
+    case OpArbitraryFloatLEINTEL: return "OpArbitraryFloatLEINTEL";
+    case OpArbitraryFloatEQINTEL: return "OpArbitraryFloatEQINTEL";
+    case OpArbitraryFloatRecipINTEL: return "OpArbitraryFloatRecipINTEL";
+    case OpArbitraryFloatRSqrtINTEL: return "OpArbitraryFloatRSqrtINTEL";
+    case OpArbitraryFloatCbrtINTEL: return "OpArbitraryFloatCbrtINTEL";
+    case OpArbitraryFloatHypotINTEL: return "OpArbitraryFloatHypotINTEL";
+    case OpArbitraryFloatSqrtINTEL: return "OpArbitraryFloatSqrtINTEL";
+    case OpArbitraryFloatLogINTEL: return "OpArbitraryFloatLogINTEL";
+    case OpArbitraryFloatLog2INTEL: return "OpArbitraryFloatLog2INTEL";
+    case OpArbitraryFloatLog10INTEL: return "OpArbitraryFloatLog10INTEL";
+    case OpArbitraryFloatLog1pINTEL: return "OpArbitraryFloatLog1pINTEL";
+    case OpArbitraryFloatExpINTEL: return "OpArbitraryFloatExpINTEL";
+    case OpArbitraryFloatExp2INTEL: return "OpArbitraryFloatExp2INTEL";
+    case OpArbitraryFloatExp10INTEL: return "OpArbitraryFloatExp10INTEL";
+    case OpArbitraryFloatExpm1INTEL: return "OpArbitraryFloatExpm1INTEL";
+    case OpArbitraryFloatSinINTEL: return "OpArbitraryFloatSinINTEL";
+    case OpArbitraryFloatCosINTEL: return "OpArbitraryFloatCosINTEL";
+    case OpArbitraryFloatSinCosINTEL: return "OpArbitraryFloatSinCosINTEL";
+    case OpArbitraryFloatSinPiINTEL: return "OpArbitraryFloatSinPiINTEL";
+    case OpArbitraryFloatCosPiINTEL: return "OpArbitraryFloatCosPiINTEL";
+    case OpArbitraryFloatASinINTEL: return "OpArbitraryFloatASinINTEL";
+    case OpArbitraryFloatASinPiINTEL: return "OpArbitraryFloatASinPiINTEL";
+    case OpArbitraryFloatACosINTEL: return "OpArbitraryFloatACosINTEL";
+    case OpArbitraryFloatACosPiINTEL: return "OpArbitraryFloatACosPiINTEL";
+    case OpArbitraryFloatATanINTEL: return "OpArbitraryFloatATanINTEL";
+    case OpArbitraryFloatATanPiINTEL: return "OpArbitraryFloatATanPiINTEL";
+    case OpArbitraryFloatATan2INTEL: return "OpArbitraryFloatATan2INTEL";
+    case OpArbitraryFloatPowINTEL: return "OpArbitraryFloatPowINTEL";
+    case OpArbitraryFloatPowRINTEL: return "OpArbitraryFloatPowRINTEL";
+    case OpArbitraryFloatPowNINTEL: return "OpArbitraryFloatPowNINTEL";
+    case OpLoopControlINTEL: return "OpLoopControlINTEL";
+    case OpAliasDomainDeclINTEL: return "OpAliasDomainDeclINTEL";
+    case OpAliasScopeDeclINTEL: return "OpAliasScopeDeclINTEL";
+    case OpAliasScopeListDeclINTEL: return "OpAliasScopeListDeclINTEL";
+    case OpFixedSqrtINTEL: return "OpFixedSqrtINTEL";
+    case OpFixedRecipINTEL: return "OpFixedRecipINTEL";
+    case OpFixedRsqrtINTEL: return "OpFixedRsqrtINTEL";
+    case OpFixedSinINTEL: return "OpFixedSinINTEL";
+    case OpFixedCosINTEL: return "OpFixedCosINTEL";
+    case OpFixedSinCosINTEL: return "OpFixedSinCosINTEL";
+    case OpFixedSinPiINTEL: return "OpFixedSinPiINTEL";
+    case OpFixedCosPiINTEL: return "OpFixedCosPiINTEL";
+    case OpFixedSinCosPiINTEL: return "OpFixedSinCosPiINTEL";
+    case OpFixedLogINTEL: return "OpFixedLogINTEL";
+    case OpFixedExpINTEL: return "OpFixedExpINTEL";
+    case OpPtrCastToCrossWorkgroupINTEL: return "OpPtrCastToCrossWorkgroupINTEL";
+    case OpCrossWorkgroupCastToPtrINTEL: return "OpCrossWorkgroupCastToPtrINTEL";
+    case OpReadPipeBlockingINTEL: return "OpReadPipeBlockingINTEL";
+    case OpWritePipeBlockingINTEL: return "OpWritePipeBlockingINTEL";
+    case OpFPGARegINTEL: return "OpFPGARegINTEL";
+    case OpRayQueryGetRayTMinKHR: return "OpRayQueryGetRayTMinKHR";
+    case OpRayQueryGetRayFlagsKHR: return "OpRayQueryGetRayFlagsKHR";
+    case OpRayQueryGetIntersectionTKHR: return "OpRayQueryGetIntersectionTKHR";
+    case OpRayQueryGetIntersectionInstanceCustomIndexKHR: return "OpRayQueryGetIntersectionInstanceCustomIndexKHR";
+    case OpRayQueryGetIntersectionInstanceIdKHR: return "OpRayQueryGetIntersectionInstanceIdKHR";
+    case OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR: return "OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR";
+    case OpRayQueryGetIntersectionGeometryIndexKHR: return "OpRayQueryGetIntersectionGeometryIndexKHR";
+    case OpRayQueryGetIntersectionPrimitiveIndexKHR: return "OpRayQueryGetIntersectionPrimitiveIndexKHR";
+    case OpRayQueryGetIntersectionBarycentricsKHR: return "OpRayQueryGetIntersectionBarycentricsKHR";
+    case OpRayQueryGetIntersectionFrontFaceKHR: return "OpRayQueryGetIntersectionFrontFaceKHR";
+    case OpRayQueryGetIntersectionCandidateAABBOpaqueKHR: return "OpRayQueryGetIntersectionCandidateAABBOpaqueKHR";
+    case OpRayQueryGetIntersectionObjectRayDirectionKHR: return "OpRayQueryGetIntersectionObjectRayDirectionKHR";
+    case OpRayQueryGetIntersectionObjectRayOriginKHR: return "OpRayQueryGetIntersectionObjectRayOriginKHR";
+    case OpRayQueryGetWorldRayDirectionKHR: return "OpRayQueryGetWorldRayDirectionKHR";
+    case OpRayQueryGetWorldRayOriginKHR: return "OpRayQueryGetWorldRayOriginKHR";
+    case OpRayQueryGetIntersectionObjectToWorldKHR: return "OpRayQueryGetIntersectionObjectToWorldKHR";
+    case OpRayQueryGetIntersectionWorldToObjectKHR: return "OpRayQueryGetIntersectionWorldToObjectKHR";
+    case OpAtomicFAddEXT: return "OpAtomicFAddEXT";
+    case OpTypeBufferSurfaceINTEL: return "OpTypeBufferSurfaceINTEL";
+    case OpTypeStructContinuedINTEL: return "OpTypeStructContinuedINTEL";
+    case OpConstantCompositeContinuedINTEL: return "OpConstantCompositeContinuedINTEL";
+    case OpSpecConstantCompositeContinuedINTEL: return "OpSpecConstantCompositeContinuedINTEL";
+    case OpCompositeConstructContinuedINTEL: return "OpCompositeConstructContinuedINTEL";
+    case OpConvertFToBF16INTEL: return "OpConvertFToBF16INTEL";
+    case OpConvertBF16ToFINTEL: return "OpConvertBF16ToFINTEL";
+    case OpControlBarrierArriveINTEL: return "OpControlBarrierArriveINTEL";
+    case OpControlBarrierWaitINTEL: return "OpControlBarrierWaitINTEL";
+    case OpArithmeticFenceEXT: return "OpArithmeticFenceEXT";
+    case OpSubgroupBlockPrefetchINTEL: return "OpSubgroupBlockPrefetchINTEL";
+    case OpGroupIMulKHR: return "OpGroupIMulKHR";
+    case OpGroupFMulKHR: return "OpGroupFMulKHR";
+    case OpGroupBitwiseAndKHR: return "OpGroupBitwiseAndKHR";
+    case OpGroupBitwiseOrKHR: return "OpGroupBitwiseOrKHR";
+    case OpGroupBitwiseXorKHR: return "OpGroupBitwiseXorKHR";
+    case OpGroupLogicalAndKHR: return "OpGroupLogicalAndKHR";
+    case OpGroupLogicalOrKHR: return "OpGroupLogicalOrKHR";
+    case OpGroupLogicalXorKHR: return "OpGroupLogicalXorKHR";
+    case OpMaskedGatherINTEL: return "OpMaskedGatherINTEL";
+    case OpMaskedScatterINTEL: return "OpMaskedScatterINTEL";
+    default: return "Unknown";
+    }
+}
+
 #endif /* SPV_ENABLE_UTILITY_CODE */
 
 // Overload bitwise operators for mask bit combining
@@ -2816,6 +4944,24 @@
 inline CooperativeMatrixOperandsMask operator^(CooperativeMatrixOperandsMask a, CooperativeMatrixOperandsMask b) { return CooperativeMatrixOperandsMask(unsigned(a) ^ unsigned(b)); }
 inline CooperativeMatrixOperandsMask operator~(CooperativeMatrixOperandsMask a) { return CooperativeMatrixOperandsMask(~unsigned(a)); }
 #endif
+inline CooperativeMatrixReduceMask operator|(CooperativeMatrixReduceMask a, CooperativeMatrixReduceMask b) { return CooperativeMatrixReduceMask(unsigned(a) | unsigned(b)); }
+#if !defined(UBSAN_WORKAROUND)
+inline CooperativeMatrixReduceMask operator&(CooperativeMatrixReduceMask a, CooperativeMatrixReduceMask b) { return CooperativeMatrixReduceMask(unsigned(a) & unsigned(b)); }
+inline CooperativeMatrixReduceMask operator^(CooperativeMatrixReduceMask a, CooperativeMatrixReduceMask b) { return CooperativeMatrixReduceMask(unsigned(a) ^ unsigned(b)); }
+inline CooperativeMatrixReduceMask operator~(CooperativeMatrixReduceMask a) { return CooperativeMatrixReduceMask(~unsigned(a)); }
+#endif
+inline TensorAddressingOperandsMask operator|(TensorAddressingOperandsMask a, TensorAddressingOperandsMask b) { return TensorAddressingOperandsMask(unsigned(a) | unsigned(b)); }
+#if !defined(UBSAN_WORKAROUND)
+inline TensorAddressingOperandsMask operator&(TensorAddressingOperandsMask a, TensorAddressingOperandsMask b) { return TensorAddressingOperandsMask(unsigned(a) & unsigned(b)); }
+inline TensorAddressingOperandsMask operator^(TensorAddressingOperandsMask a, TensorAddressingOperandsMask b) { return TensorAddressingOperandsMask(unsigned(a) ^ unsigned(b)); }
+inline TensorAddressingOperandsMask operator~(TensorAddressingOperandsMask a) { return TensorAddressingOperandsMask(~unsigned(a)); }
+#endif
+inline RawAccessChainOperandsMask operator|(RawAccessChainOperandsMask a, RawAccessChainOperandsMask b) { return RawAccessChainOperandsMask(unsigned(a) | unsigned(b)); }
+#if !defined(UBSAN_WORKAROUND)
+inline RawAccessChainOperandsMask operator&(RawAccessChainOperandsMask a, RawAccessChainOperandsMask b) { return RawAccessChainOperandsMask(unsigned(a) & unsigned(b)); }
+inline RawAccessChainOperandsMask operator^(RawAccessChainOperandsMask a, RawAccessChainOperandsMask b) { return RawAccessChainOperandsMask(unsigned(a) ^ unsigned(b)); }
+inline RawAccessChainOperandsMask operator~(RawAccessChainOperandsMask a) { return RawAccessChainOperandsMask(~unsigned(a)); }
+#endif
 
 }  // end namespace spv
 
diff --git a/SPIRV/spvIR.h b/SPIRV/spvIR.h
index 1f8e28f..e723f0e 100644
--- a/SPIRV/spvIR.h
+++ b/SPIRV/spvIR.h
@@ -56,6 +56,7 @@
 #include <memory>
 #include <vector>
 #include <set>
+#include <optional>
 
 namespace spv {
 
@@ -96,12 +97,24 @@
     Instruction(Id resultId, Id typeId, Op opCode) : resultId(resultId), typeId(typeId), opCode(opCode), block(nullptr) { }
     explicit Instruction(Op opCode) : resultId(NoResult), typeId(NoType), opCode(opCode), block(nullptr) { }
     virtual ~Instruction() {}
+    void reserveOperands(size_t count) {
+        operands.reserve(count);
+        idOperand.reserve(count);
+    }
     void addIdOperand(Id id) {
         // ids can't be 0
         assert(id);
         operands.push_back(id);
         idOperand.push_back(true);
     }
+    // This method is potentially dangerous as it can break assumptions
+    // about SSA and lack of forward references.
+    void setIdOperand(unsigned idx, Id id) {
+        assert(id);
+        assert(idOperand[idx]);
+        operands[idx] = id;
+    }
+
     void addImmediateOperand(unsigned int immediate) {
         operands.push_back(immediate);
         idOperand.push_back(false);
@@ -176,6 +189,15 @@
             out.push_back(operands[op]);
     }
 
+    const char *getNameString() const {
+        if (opCode == OpString) {
+            return (const char *)&operands[0];
+        } else {
+            assert(opCode == OpName);
+            return (const char *)&operands[1];
+        }
+    }
+
 protected:
     Instruction(const Instruction&);
     Id resultId;
@@ -190,6 +212,12 @@
 // SPIR-V IR block.
 //
 
+struct DebugSourceLocation {
+    int line;
+    int column;
+    spv::Id fileId;
+};
+
 class Block {
 public:
     Block(Id id, Function& parent);
@@ -200,12 +228,34 @@
     Id getId() { return instructions.front()->getResultId(); }
 
     Function& getParent() const { return parent; }
+    // Returns true if the source location is actually updated.
+    // Note we still need the builder to insert the line marker instruction. This is just a tracker.
+    bool updateDebugSourceLocation(int line, int column, spv::Id fileId) {
+        if (currentSourceLoc && currentSourceLoc->line == line && currentSourceLoc->column == column &&
+            currentSourceLoc->fileId == fileId) {
+            return false;
+        }
+
+        currentSourceLoc = DebugSourceLocation{line, column, fileId};
+        return true;
+    }
+    // Returns true if the scope is actually updated.
+    // Note we still need the builder to insert the debug scope instruction. This is just a tracker.
+    bool updateDebugScope(spv::Id scopeId) {
+        assert(scopeId);
+        if (currentDebugScope && *currentDebugScope == scopeId) {
+            return false;
+        }
+
+        currentDebugScope = scopeId;
+        return true;
+    }
     void addInstruction(std::unique_ptr<Instruction> inst);
     void addPredecessor(Block* pred) { predecessors.push_back(pred); pred->successors.push_back(this);}
     void addLocalVariable(std::unique_ptr<Instruction> inst) { localVariables.push_back(std::move(inst)); }
     const std::vector<Block*>& getPredecessors() const { return predecessors; }
     const std::vector<Block*>& getSuccessors() const { return successors; }
-    const std::vector<std::unique_ptr<Instruction> >& getInstructions() const {
+    std::vector<std::unique_ptr<Instruction> >& getInstructions() {
         return instructions;
     }
     const std::vector<std::unique_ptr<Instruction> >& getLocalVariables() const { return localVariables; }
@@ -292,6 +342,12 @@
     std::vector<std::unique_ptr<Instruction> > localVariables;
     Function& parent;
 
+    // Track source location of the last source location marker instruction.
+    std::optional<DebugSourceLocation> currentSourceLoc;
+
+    // Track scope of the last debug scope instruction.
+    std::optional<spv::Id> currentDebugScope;
+
     // track whether this block is known to be uncreachable (not necessarily
     // true for all unreachable blocks, but should be set at least
     // for the extraneous ones introduced by the builder).
@@ -352,6 +408,7 @@
     void addLocalVariable(std::unique_ptr<Instruction> inst);
     Id getReturnType() const { return functionInstruction.getTypeId(); }
     Id getFuncId() const { return functionInstruction.getResultId(); }
+    Id getFuncTypeId() const { return functionInstruction.getIdOperand(1); }
     void setReturnPrecision(Decoration precision)
     {
         if (precision == DecorationRelaxedPrecision)
@@ -362,6 +419,7 @@
 
     void setDebugLineInfo(Id fileName, int line, int column) {
         lineInstruction = std::unique_ptr<Instruction>{new Instruction(OpLine)};
+        lineInstruction->reserveOperands(3);
         lineInstruction->addIdOperand(fileName);
         lineInstruction->addImmediateOperand(line);
         lineInstruction->addImmediateOperand(column);
@@ -485,6 +543,7 @@
       linkType(linkage)
 {
     // OpFunction
+    functionInstruction.reserveOperands(2);
     functionInstruction.addImmediateOperand(FunctionControlMaskNone);
     functionInstruction.addIdOperand(functionType);
     parent.mapInstruction(&functionInstruction);
diff --git a/StandAlone/CMakeLists.txt b/StandAlone/CMakeLists.txt
index ad88442..30e8d03 100644
--- a/StandAlone/CMakeLists.txt
+++ b/StandAlone/CMakeLists.txt
@@ -31,7 +31,7 @@
 # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 # POSSIBILITY OF SUCH DAMAGE.
 
-find_host_package(Python3 REQUIRED)
+find_package(Python3 REQUIRED)
 
 set(GLSLANG_INTRINSIC_H          "${GLSLANG_GENERATED_INCLUDEDIR}/glslang/glsl_intrinsic_header.h")
 set(GLSLANG_INTRINSIC_PY         "${CMAKE_CURRENT_SOURCE_DIR}/../gen_extension_headers.py")
@@ -48,14 +48,17 @@
 set(SOURCES StandAlone.cpp DirStackFileIncluder.h  ${GLSLANG_INTRINSIC_H})
 
 add_executable(glslang-standalone ${SOURCES})
+if(${CMAKE_CXX_COMPILER_ID} MATCHES "GNU")
+    target_compile_options(glslang-standalone PRIVATE -Wconversion)
+elseif(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang" AND NOT MSVC)
+    target_compile_options(glslang-standalone PRIVATE -Wshorten-64-to-32)
+endif()
 set_property(TARGET glslang-standalone PROPERTY FOLDER tools)
 set_property(TARGET glslang-standalone PROPERTY OUTPUT_NAME glslang)
 glslang_set_link_args(glslang-standalone)
 
 set(LIBRARIES
     glslang
-    OSDependent
-    SPIRV
     glslang-default-resource-limits)
 
 if(WIN32)
@@ -68,72 +71,51 @@
 
 target_link_libraries(glslang-standalone ${LIBRARIES})
 target_include_directories(glslang-standalone PUBLIC
-    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../External>
-    $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/External>)
+    $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../External>)
 
-if(ENABLE_OPT)
-    target_include_directories(glslang-standalone
-        PRIVATE ${spirv-tools_SOURCE_DIR}/include
-    )
-endif()
-
-if(ENABLE_SPVREMAPPER)
-    set(REMAPPER_SOURCES spirv-remap.cpp)
-    add_executable(spirv-remap ${REMAPPER_SOURCES})
-    set_property(TARGET spirv-remap PROPERTY FOLDER tools)
-    glslang_set_link_args(spirv-remap)
-    target_link_libraries(spirv-remap SPVRemapper ${LIBRARIES})
+if(ENABLE_SPIRV)
+    if(ENABLE_SPVREMAPPER)
+        set(REMAPPER_SOURCES spirv-remap.cpp)
+        add_executable(spirv-remap ${REMAPPER_SOURCES})
+        set_property(TARGET spirv-remap PROPERTY FOLDER tools)
+        glslang_set_link_args(spirv-remap)
+        target_link_libraries(spirv-remap SPVRemapper ${LIBRARIES})
+    endif()
 endif()
 
 if(WIN32)
     source_group("Source" FILES ${SOURCES})
 endif()
 
-if(ENABLE_GLSLANG_INSTALL)
+# Create a symbolic link to glslang named glslangValidator for backwards compatibility
+set(legacy_glslang_name "glslangValidator${CMAKE_EXECUTABLE_SUFFIX}")
+set(link_method create_symlink)
+if(WIN32 OR MINGW)
+  set(link_method copy_if_different)
+endif()
+
+add_custom_command(
+    TARGET glslang-standalone POST_BUILD
+    COMMAND "${CMAKE_COMMAND}" -E "${link_method}" "\$<TARGET_FILE_NAME:glslang-standalone>" "${legacy_glslang_name}"
+    WORKING_DIRECTORY "\$<TARGET_FILE_DIR:glslang-standalone>"
+    VERBATIM
+)
+
+if(GLSLANG_ENABLE_INSTALL)
     install(TARGETS glslang-standalone EXPORT glslang-targets)
 
-    # Backward compatibility
-    file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/glslang-standaloneTargets.cmake" "
-        message(WARNING \"Using `glslang-standaloneTargets.cmake` is deprecated: use `find_package(glslang)` to find glslang CMake targets.\")
-
-        if (NOT TARGET glslang::glslang-standalone)
-            include(\"${CMAKE_INSTALL_FULL_LIBDIR}/cmake/${PROJECT_NAME}/glslang-targets.cmake\")
-        endif()
-
-        add_library(glslang-standalone ALIAS glslang::glslang-standalone)
-    ")
-    install(FILES "${CMAKE_CURRENT_BINARY_DIR}/glslang-standaloneTargets.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
-
-    # Create a symbolic link to glslang named glslangValidator for backwards compatibility
-    set(legacy_glslang_name "glslangValidator${CMAKE_EXECUTABLE_SUFFIX}")
-    set(link_method create_symlink)
-    if (WIN32 OR MINGW)
-        set(link_method copy_if_different)
-    endif()
-    add_custom_command(TARGET glslang-standalone
-                       POST_BUILD
-                       COMMAND ${CMAKE_COMMAND} -E ${link_method} $<TARGET_FILE_NAME:glslang-standalone> ${legacy_glslang_name}
-                       WORKING_DIRECTORY $<TARGET_FILE_DIR:glslang-standalone>)
-
     # Create the same symlink at install time
-    install(CODE "execute_process( \
-                      COMMAND ${CMAKE_COMMAND} -E ${link_method} $<TARGET_FILE_NAME:glslang-standalone> ${legacy_glslang_name} \
-                      WORKING_DIRECTORY \$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR})")
+    install(CODE "\
+        message(STATUS \"Installing (${link_method}): \$<TARGET_FILE_NAME:glslang-standalone> -> \$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}\")
+        execute_process(
+            COMMAND \"\${CMAKE_COMMAND}\" -E ${link_method} [=[\$<TARGET_FILE_NAME:glslang-standalone>]=] [=[${legacy_glslang_name}]=]
+            WORKING_DIRECTORY \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_BINDIR}\"
+        )
+    ")
 
-    if(ENABLE_SPVREMAPPER)
-        install(TARGETS spirv-remap EXPORT glslang-targets)
-
-        # Backward compatibility
-        file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/spirv-remapTargets.cmake" "
-            message(WARNING \"Using `spirv-remapTargets.cmake` is deprecated: use `find_package(glslang)` to find glslang CMake targets.\")
-
-            if (NOT TARGET glslang::spirv-remap)
-                include(\"${CMAKE_INSTALL_FULL_LIBDIR}/cmake/${PROJECT_NAME}/glslang-targets.cmake\")
-            endif()
-
-            add_library(spirv-remap ALIAS glslang::spirv-remap)
-        ")
-        install(FILES "${CMAKE_CURRENT_BINARY_DIR}/spirv-remapTargets.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
+    if(ENABLE_SPIRV)
+        if(ENABLE_SPVREMAPPER)
+            install(TARGETS spirv-remap EXPORT glslang-targets)
+        endif()
     endif()
-
-endif()
+endif(GLSLANG_ENABLE_INSTALL)
diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp
index b31a644..8323845 100644
--- a/StandAlone/StandAlone.cpp
+++ b/StandAlone/StandAlone.cpp
@@ -44,11 +44,10 @@
 #include "glslang/Public/ResourceLimits.h"
 #include "Worklist.h"
 #include "DirStackFileIncluder.h"
-#include "./../glslang/Include/ShHandle.h"
 #include "./../glslang/Public/ShaderLang.h"
+#include "../glslang/MachineIndependent/localintermediate.h"
 #include "../SPIRV/GlslangToSpv.h"
 #include "../SPIRV/GLSL.std.450.h"
-#include "../SPIRV/doc.h"
 #include "../SPIRV/disassemble.h"
 
 #include <array>
@@ -109,6 +108,8 @@
     EOptionInvertY = (1ull << 30),
     EOptionDumpBareVersion = (1ull << 31),
     EOptionCompileOnly = (1ull << 32),
+    EOptionDisplayErrorColumn = (1ull << 33),
+    EOptionLinkTimeOptimization = (1ull << 34),
 };
 bool targetHlslFunctionality1 = false;
 bool SpvToolsDisassembler = false;
@@ -181,6 +182,7 @@
 bool HlslDX9compatible = false;
 bool HlslDxPositionW = false;
 bool EnhancedMsgs = false;
+bool AbsolutePath = false;
 bool DumpBuiltinSymbols = false;
 std::vector<std::string> IncludeDirectoryList;
 
@@ -516,7 +518,7 @@
 
     if (set) {
         errno = 0;
-        int setVal = ::strtol(argv[curArg], nullptr, 10);
+        int setVal = static_cast<int>(::strtol(argv[curArg], nullptr, 10));
         if (errno || setVal < 0) {
             printf("%s: invalid set\n", argv[curArg]);
             usage();
@@ -528,7 +530,7 @@
 
     if (binding) {
         errno = 0;
-        int bindingVal = ::strtol(argv[curArg], nullptr, 10);
+        int bindingVal = static_cast<int>(::strtol(argv[curArg], nullptr, 10));
         if (errno || bindingVal < 0) {
             printf("%s: invalid binding\n", argv[curArg]);
             usage();
@@ -611,7 +613,7 @@
             exit(EFailUsage);
         }
         errno = 0;
-        int location = ::strtol(split + 1, nullptr, 10);
+        int location = static_cast<int>(::strtol(split + 1, nullptr, 10));
         if (errno) {
             printf("%s: invalid location\n", arg);
             exit(EFailUsage);
@@ -638,7 +640,7 @@
                     } else if (lowerword == "uniform-base") {
                         if (argc <= 1)
                             Error("no <base> provided", lowerword.c_str());
-                        uniformBase = ::strtol(argv[1], nullptr, 10);
+                        uniformBase = static_cast<int>(::strtol(argv[1], nullptr, 10));
                         bumpArg();
                         break;
                     } else if (lowerword == "client") {
@@ -726,6 +728,8 @@
                         HlslDxPositionW = true;
                     } else if (lowerword == "enhanced-msgs") {
                         EnhancedMsgs = true;
+                    } else if (lowerword == "absolute-path") {
+                        AbsolutePath = true;
                     } else if (lowerword == "auto-sampled-textures") {
                         autoSampledTextures = true;
                     } else if (lowerword == "invert-y" ||  // synonyms
@@ -838,6 +842,9 @@
                             } else if (strcmp(argv[1], "vulkan1.3") == 0) {
                                 setVulkanSpv();
                                 ClientVersion = glslang::EShTargetVulkan_1_3;
+                            } else if (strcmp(argv[1], "vulkan1.4") == 0) {
+                                setVulkanSpv();
+                                ClientVersion = glslang::EShTargetVulkan_1_4;
                             } else if (strcmp(argv[1], "opengl") == 0) {
                                 setOpenGlSpv();
                                 ClientVersion = glslang::EShTargetOpenGL_450;
@@ -894,6 +901,10 @@
                         Options |= EOptionDumpVersions;
                     } else if (lowerword == "no-link") {
                         Options |= EOptionCompileOnly;
+                    } else if (lowerword == "error-column") {
+                        Options |= EOptionDisplayErrorColumn;
+                    } else if (lowerword == "lto") {
+                        Options |= EOptionLinkTimeOptimization;
                     } else if (lowerword == "help") {
                         usage();
                         break;
@@ -1078,6 +1089,10 @@
     if ((Options & EOptionDumpReflection) && !(Options & EOptionLinkProgram))
         Error("reflection requires -l for linking");
 
+    // link time optimization makes no sense unless linking
+    if ((Options & EOptionLinkTimeOptimization) && !(Options & EOptionLinkProgram))
+        Error("link time optimization requires -l for linking");
+
     // -o or -x makes no sense if there is no target binary
     if (binaryFileName && (Options & EOptionSpv) == 0)
         Error("no binary generation requested (e.g., -V)");
@@ -1109,6 +1124,10 @@
             TargetLanguage = glslang::EShTargetSpv;
             TargetVersion = glslang::EShTargetSpv_1_6;
             break;
+        case glslang::EShTargetVulkan_1_4:
+            TargetLanguage = glslang::EShTargetSpv;
+            TargetVersion = glslang::EShTargetSpv_1_6;
+            break;
         case glslang::EShTargetOpenGL_450:
             TargetLanguage = glslang::EShTargetSpv;
             TargetVersion = glslang::EShTargetSpv_1_0;
@@ -1158,6 +1177,12 @@
         messages = (EShMessages)(messages | EShMsgBuiltinSymbolTable);
     if (EnhancedMsgs)
         messages = (EShMessages)(messages | EShMsgEnhanced);
+    if (AbsolutePath)
+        messages = (EShMessages)(messages | EShMsgAbsolutePath);
+    if (Options & EOptionDisplayErrorColumn)
+        messages = (EShMessages)(messages | EShMsgDisplayErrorColumn);
+    if (Options & EOptionLinkTimeOptimization)
+        messages = (EShMessages)(messages | EShMsgLinkTimeOptimization);
 }
 
 //
@@ -1172,7 +1197,7 @@
     glslang::TWorkItem* workItem;
     if (Options & EOptionStdin) {
         if (worklist.remove(workItem)) {
-            ShHandle compiler = ShConstructCompiler(FindLanguage("stdin"), Options);
+            ShHandle compiler = ShConstructCompiler(FindLanguage("stdin"), 0);
             if (compiler == nullptr)
                 return;
 
@@ -1185,10 +1210,11 @@
         }
     } else {
         while (worklist.remove(workItem)) {
-            ShHandle compiler = ShConstructCompiler(FindLanguage(workItem->name), Options);
+            ShHandle compiler = ShConstructCompiler(FindLanguage(workItem->name), 0);
             if (compiler == nullptr)
                 return;
 
+
             CompileFile(workItem->name.c_str(), compiler);
 
             if (! (Options & EOptionSuppressInfolog))
@@ -1499,6 +1525,7 @@
 
     // Dump SPIR-V
     if (Options & EOptionSpv) {
+#ifdef ENABLE_SPIRV
         CompileOrLinkFailed.fetch_or(CompileFailed);
         CompileOrLinkFailed.fetch_or(LinkFailed);
         if (static_cast<bool>(CompileOrLinkFailed.load()))
@@ -1558,6 +1585,9 @@
                 }
             }
         }
+#else
+        Error("This configuration of glslang does not have SPIR-V support");
+#endif
     }
 
     CompileOrLinkFailed.fetch_or(CompileFailed);
@@ -1657,21 +1687,31 @@
     }
 
     if (Options & EOptionDumpBareVersion) {
-        printf("%d:%d.%d.%d%s\n", glslang::GetSpirvGeneratorVersion(), GLSLANG_VERSION_MAJOR, GLSLANG_VERSION_MINOR,
+        int spirvGeneratorVersion = 0;
+#ifdef ENABLE_SPIRV
+        spirvGeneratorVersion = glslang::GetSpirvGeneratorVersion();
+#endif
+        printf("%d:%d.%d.%d%s\n", spirvGeneratorVersion, GLSLANG_VERSION_MAJOR, GLSLANG_VERSION_MINOR,
                 GLSLANG_VERSION_PATCH, GLSLANG_VERSION_FLAVOR);
         if (workList.empty())
             return ESuccess;
     } else if (Options & EOptionDumpVersions) {
-        printf("Glslang Version: %d:%d.%d.%d%s\n", glslang::GetSpirvGeneratorVersion(), GLSLANG_VERSION_MAJOR,
+        int spirvGeneratorVersion = 0;
+#ifdef ENABLE_SPIRV
+        spirvGeneratorVersion = glslang::GetSpirvGeneratorVersion();
+#endif
+        printf("Glslang Version: %d:%d.%d.%d%s\n", spirvGeneratorVersion, GLSLANG_VERSION_MAJOR,
                 GLSLANG_VERSION_MINOR, GLSLANG_VERSION_PATCH, GLSLANG_VERSION_FLAVOR);
         printf("ESSL Version: %s\n", glslang::GetEsslVersionString());
         printf("GLSL Version: %s\n", glslang::GetGlslVersionString());
         std::string spirvVersion;
+#if ENABLE_SPIRV
         glslang::GetSpirvVersion(spirvVersion);
+#endif
         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("SPIR-V Generator Version %d\n", spirvGeneratorVersion);
         printf("GL_KHR_vulkan_glsl version %d\n", 100);
         printf("ARB_GL_gl_spirv version %d\n", 100);
         if (workList.empty())
@@ -1876,7 +1916,8 @@
     for (int i = 0; i < ((Options & EOptionMemoryLeakMode) ? 100 : 1); ++i) {
         for (int j = 0; j < ((Options & EOptionMemoryLeakMode) ? 100 : 1); ++j) {
             // ret = ShCompile(compiler, shaderStrings, NumShaderStrings, lengths, EShOptNone, &Resources, Options, (Options & EOptionDefaultDesktop) ? 110 : 100, false, messages);
-            ret = ShCompile(compiler, &shaderString, 1, nullptr, EShOptNone, GetResources(), Options, (Options & EOptionDefaultDesktop) ? 110 : 100, false, messages);
+            ret = ShCompile(compiler, &shaderString, 1, nullptr, EShOptNone, GetResources(), 0,
+                            (Options & EOptionDefaultDesktop) ? 110 : 100, false, messages, fileName);
             // const char* multi[12] = { "# ve", "rsion", " 300 e", "s", "\n#err",
             //                         "or should be l", "ine 1", "string 5\n", "float glo", "bal",
             //                         ";\n#error should be line 2\n void main() {", "global = 2.3;}" };
@@ -1991,6 +2032,7 @@
            "                                    without explicit bindings\n"
            "  --auto-map-locations | --aml      automatically locate input/output lacking\n"
            "                                    'location' (fragile, not cross stage)\n"
+           "  --absolute-path                   Prints absolute path for messages\n"
            "  --auto-sampled-textures           Removes sampler variables and converts\n"
            "                                    existing textures to sampled textures\n"
            "  --client {vulkan<ver>|opengl<ver>} see -V and -G\n"
@@ -2015,6 +2057,7 @@
            "                                    shaders compatible with DirectX\n"
            "  --invert-y | --iy                 invert position.Y output in vertex shader\n"
            "  --enhanced-msgs                   print more readable error messages (GLSL only)\n"
+           "  --error-column                    display the column of the error along the line\n"
            "  --keep-uncalled | --ku            don't eliminate uncalled functions\n"
            "  --nan-clamp                       favor non-NaN operand in min, max, and clamp\n"
            "  --no-storage-format | --nsf       use Unknown image format\n"
@@ -2108,7 +2151,8 @@
            "                                    initialized with the shader binary code\n"
            "  --no-link                         Only compile shader; do not link (GLSL-only)\n"
            "                                    NOTE: this option will set the export linkage\n"
-           "                                          attribute on all functions\n");
+           "                                          attribute on all functions\n"
+           "  --lto                             perform link time optimization\n");
 
     exit(EFailUsage);
 }
@@ -2158,6 +2202,20 @@
 
     fseek(in, 0, SEEK_SET);
 
+    if (count > 3) {
+        unsigned char head[3];
+        if (fread(head, 1, 3, in) == 3) {
+            if (head[0] == 0xef && head[1] == 0xbb && head[2] == 0xbf) {
+                // skip BOM
+                count -= 3;
+            } else {
+                fseek(in, 0, SEEK_SET);
+            }
+        } else {
+            Error("can't read input file");
+        }
+    }
+
     char* return_data = (char*)malloc(count + 1);  // freed in FreeFileData()
     if ((int)fread(return_data, 1, count, in) != count) {
         free(return_data);
diff --git a/StandAlone/Worklist.h b/StandAlone/Worklist.h
index 91b6f51..dc72627 100644
--- a/StandAlone/Worklist.h
+++ b/StandAlone/Worklist.h
@@ -35,7 +35,6 @@
 #ifndef WORKLIST_H_INCLUDED
 #define WORKLIST_H_INCLUDED
 
-#include "../glslang/OSDependent/osinclude.h"
 #include <list>
 #include <mutex>
 #include <string>
diff --git a/Test/400.frag b/Test/400.frag
index 039d480..b9bc17a 100644
--- a/Test/400.frag
+++ b/Test/400.frag
@@ -7,6 +7,39 @@
 uniform usampler2DRect samp2dr;
 uniform isampler2DArray isamp2DA;
 
+#extension GL_ARB_shader_storage_buffer_object : enable
+
+buffer Buffer
+{
+    int atomi;
+    uint atomu;
+};
+
+void atomicOpPass()
+{
+    int origi = atomicAdd(atomi, 3);
+    uint origu = atomicAnd(atomu, 7u);
+    origi = atomicExchange(atomi, 4);
+    origu = atomicCompSwap(atomu, 10u, 8u);
+}
+
+buffer ssboElem01
+{
+    int member01;
+    int memberArr01[2];
+    int memberUnsizedArr01[];
+} ssboStd430Arr[2];
+
+// if turns on EShReflectionSharedStd140SSBO, SPIR-V would be different
+buffer ssboElem02
+{
+    int member02;
+    int memberArr02[2];
+    int memberUnsizedArr02[];
+} ssboSharedArr[2];
+
+#extension GL_ARB_shader_storage_buffer_object : disable
+
 void main()
 {
     vec4 v;
diff --git a/Test/GL_ARB_texture_multisample.vert b/Test/GL_ARB_texture_multisample.vert
new file mode 100644
index 0000000..d3c5e85
--- /dev/null
+++ b/Test/GL_ARB_texture_multisample.vert
@@ -0,0 +1,28 @@
+#version 140

+#extension GL_ARB_texture_multisample : enable

+

+out float result;

+out int result1;

+out uint result2;

+

+uniform sampler2DMS data;

+uniform sampler2DMSArray data1;

+uniform isampler2DMS data2;

+uniform usampler2DMSArray data3;

+uniform usampler2DMS data4;

+uniform isampler2DMSArray data5;

+void main()

+{

+    result = texelFetch(data, ivec2(0), 3).r;

+    ivec2 temp = textureSize(data);

+    result = texelFetch(data1, ivec3(0), 3).r;

+    ivec3 temp1 = textureSize(data1);

+	result1 = texelFetch(data2, ivec2(0), 3).r;

+    temp = textureSize(data2);

+	result2 = texelFetch(data3, ivec3(0), 3).r;

+    temp1 = textureSize(data3);

+	result2 = texelFetch(data4, ivec2(0), 3).r;

+    temp = textureSize(data4);

+	result1 = texelFetch(data5, ivec3(0), 3).r;

+    temp1 = textureSize(data5);

+}

diff --git a/Test/GL_EXT_draw_instanced.vert b/Test/GL_EXT_draw_instanced.vert
new file mode 100644
index 0000000..601e3d7
--- /dev/null
+++ b/Test/GL_EXT_draw_instanced.vert
@@ -0,0 +1,18 @@
+#version 120
+#extension GL_EXT_draw_instanced : require
+#define ID gl_InstanceID
+
+uniform mat4 gtf_ModelViewProjectionMatrix;
+uniform vec3 instanceOffsets[3];
+uniform vec4 va[gl_MaxVertexAttribs];
+vec4 color;
+
+void main (void)
+{
+        vec4 vertex = vec4(va[0].xy / 3.0, va[0].zw) + vec4(instanceOffsets[ID], 1.0);
+        color = vec4(0, 0, 0, 0);
+        for (int i = 1; i < gl_MaxVertexAttribs; i++)
+                color += va[i];
+        gl_Position = gtf_ModelViewProjectionMatrix * vertex;
+        gl_PointSize = 1.0;
+}
\ No newline at end of file
diff --git a/Test/GL_EXT_texture_array.frag b/Test/GL_EXT_texture_array.frag
new file mode 100644
index 0000000..50a40a0
--- /dev/null
+++ b/Test/GL_EXT_texture_array.frag
@@ -0,0 +1,34 @@
+#version 110

+

+#extension GL_EXT_texture_array : enable

+

+uniform sampler1DArray s1DA;

+uniform sampler2DArray s2DA;

+uniform sampler1DArrayShadow s1DAS;

+uniform sampler2DArrayShadow s2DAS;

+

+void foo()

+{

+    float f;

+    vec2 v2;

+    vec3 v3;

+    vec4 v4;

+

+    v4 = texture1DArray(s1DA, v2);

+    v4 = texture2DArray(s2DA, v3);

+    v4 = shadow1DArray(s1DAS, v3);

+    v4 = shadow2DArray(s2DAS, v4);

+

+    v4 = texture1DArray(s1DA, v2, f);

+    v4 = texture2DArray(s2DA, v3, f);

+    v4 = shadow1DArray(s1DAS, v3, f);

+	

+    v4 = texture1DArrayLod(s1DA, v2, f);

+    v4 = texture2DArrayLod(s2DA, v3, f);

+    v4 = shadow1DArrayLod(s1DAS, v3, f);

+}

+

+void main()

+{

+    foo();

+}

diff --git a/Test/UTF8BOM.vert b/Test/UTF8BOM.vert
new file mode 100644
index 0000000..357cc54
--- /dev/null
+++ b/Test/UTF8BOM.vert
@@ -0,0 +1,11 @@
+/*

+

+glslangValidator.exe --glsl-version 410 -V -S vert -o UTF8BOM.vert.out UTF8BOM.vert

+

+*/

+

+#version 110

+

+void main()

+{

+}

diff --git a/Test/baseLegalResults/hlsl.aliasOpaque.frag.out b/Test/baseLegalResults/hlsl.aliasOpaque.frag.out
index 100f6d7..1e6521e 100644
--- a/Test/baseLegalResults/hlsl.aliasOpaque.frag.out
+++ b/Test/baseLegalResults/hlsl.aliasOpaque.frag.out
@@ -13,10 +13,10 @@
                               Name 47  "gss"
                               Name 51  "gtex"
                               Name 62  "@entryPointOutput"
-                              Decorate 47(gss) DescriptorSet 0
                               Decorate 47(gss) Binding 0
-                              Decorate 51(gtex) DescriptorSet 0
+                              Decorate 47(gss) DescriptorSet 0
                               Decorate 51(gtex) Binding 2
+                              Decorate 51(gtex) DescriptorSet 0
                               Decorate 62(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseLegalResults/hlsl.flattenOpaque.frag.out b/Test/baseLegalResults/hlsl.flattenOpaque.frag.out
index be1637f..3a839db 100644
--- a/Test/baseLegalResults/hlsl.flattenOpaque.frag.out
+++ b/Test/baseLegalResults/hlsl.flattenOpaque.frag.out
@@ -15,14 +15,14 @@
                               Name 97  "s2.s2D"
                               Name 100  "s2.tex"
                               Name 120  "@entryPointOutput"
-                              Decorate 38(tex) DescriptorSet 0
                               Decorate 38(tex) Binding 0
-                              Decorate 82(s.s2D) DescriptorSet 0
+                              Decorate 38(tex) DescriptorSet 0
                               Decorate 82(s.s2D) Binding 1
-                              Decorate 97(s2.s2D) DescriptorSet 0
+                              Decorate 82(s.s2D) DescriptorSet 0
                               Decorate 97(s2.s2D) Binding 2
-                              Decorate 100(s2.tex) DescriptorSet 0
+                              Decorate 97(s2.s2D) DescriptorSet 0
                               Decorate 100(s2.tex) Binding 3
+                              Decorate 100(s2.tex) DescriptorSet 0
                               Decorate 120(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseLegalResults/hlsl.flattenOpaqueInit.vert.out b/Test/baseLegalResults/hlsl.flattenOpaqueInit.vert.out
index 18d7694..5aa5fdc 100644
--- a/Test/baseLegalResults/hlsl.flattenOpaqueInit.vert.out
+++ b/Test/baseLegalResults/hlsl.flattenOpaqueInit.vert.out
@@ -12,10 +12,10 @@
                               Name 43  "g_tInputTexture_sampler"
                               Name 47  "g_tInputTexture"
                               Name 80  "@entryPointOutput"
-                              Decorate 43(g_tInputTexture_sampler) DescriptorSet 0
                               Decorate 43(g_tInputTexture_sampler) Binding 0
-                              Decorate 47(g_tInputTexture) DescriptorSet 0
+                              Decorate 43(g_tInputTexture_sampler) DescriptorSet 0
                               Decorate 47(g_tInputTexture) Binding 1
+                              Decorate 47(g_tInputTexture) DescriptorSet 0
                               Decorate 80(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out b/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out
index 914d9b5..60e7151 100644
--- a/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out
+++ b/Test/baseLegalResults/hlsl.flattenOpaqueInitMix.vert.out
@@ -12,10 +12,10 @@
                               Name 44  "g_tInputTexture_sampler"
                               Name 47  "g_tInputTexture"
                               Name 57  "@entryPointOutput"
-                              Decorate 44(g_tInputTexture_sampler) DescriptorSet 0
                               Decorate 44(g_tInputTexture_sampler) Binding 0
-                              Decorate 47(g_tInputTexture) DescriptorSet 0
+                              Decorate 44(g_tInputTexture_sampler) DescriptorSet 0
                               Decorate 47(g_tInputTexture) Binding 1
+                              Decorate 47(g_tInputTexture) DescriptorSet 0
                               Decorate 57(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseLegalResults/hlsl.flattenSubset.frag.out b/Test/baseLegalResults/hlsl.flattenSubset.frag.out
index 2be41f0..92c62cf 100644
--- a/Test/baseLegalResults/hlsl.flattenSubset.frag.out
+++ b/Test/baseLegalResults/hlsl.flattenSubset.frag.out
@@ -13,10 +13,10 @@
                               Name 21  "samp"
                               Name 33  "tex"
                               Name 50  "@entryPointOutput"
-                              Decorate 21(samp) DescriptorSet 0
                               Decorate 21(samp) Binding 0
-                              Decorate 33(tex) DescriptorSet 0
+                              Decorate 21(samp) DescriptorSet 0
                               Decorate 33(tex) Binding 1
+                              Decorate 33(tex) DescriptorSet 0
                               Decorate 50(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/130.vert.out b/Test/baseResults/130.vert.out
index e38043c..ee7fdde 100644
--- a/Test/baseResults/130.vert.out
+++ b/Test/baseResults/130.vert.out
@@ -1,9 +1,8 @@
 130.vert
-ERROR: 0:59: 'gl_InstanceID' : undeclared identifier 
-ERROR: 0:59: '=' :  cannot convert from ' temp float' to ' temp int'
+ERROR: 0:59: 'gl_InstanceID' : required extension not requested: GL_EXT_draw_instanced
 ERROR: 0:61: 'texelFetch' : no matching overloaded function found 
 ERROR: 0:61: 'assign' :  cannot convert from ' const float' to ' temp int'
-ERROR: 4 compilation errors.  No code generated.
+ERROR: 3 compilation errors.  No code generated.
 
 
 Shader version: 130
@@ -120,7 +119,11 @@
 0:46          0.300000
 0:57  Function Definition: foo88( ( global void)
 0:57    Function Parameters: 
-0:?     Sequence
+0:59    Sequence
+0:59      Sequence
+0:59        move second child to first child ( temp int)
+0:59          'id' ( temp int)
+0:59          'gl_InstanceID' ( gl_InstanceId int InstanceId)
 0:61      'id' ( temp int)
 0:63      'gl_ClipVertex' ( gl_ClipVertex 4-component vector of float ClipVertex)
 0:64      'gl_Color' ( in 4-component vector of float Color)
diff --git a/Test/baseResults/150.geom.out b/Test/baseResults/150.geom.out
index c5a31f5..bf27824 100644
--- a/Test/baseResults/150.geom.out
+++ b/Test/baseResults/150.geom.out
@@ -2,8 +2,8 @@
 ERROR: 0:15: 'fromVertex' : block instance name redefinition 
 ERROR: 0:19: 'fromVertex' : redefinition 
 ERROR: 0:21: 'fooC' : block instance name redefinition 
-ERROR: 0:29: 'if the verison is 150 , the EmitStreamVertex and EndStreamPrimitive only support at extension GL_ARB_gpu_shader5' : required extension not requested: GL_ARB_gpu_shader5
-ERROR: 0:30: 'if the verison is 150 , the EmitStreamVertex and EndStreamPrimitive only support at extension GL_ARB_gpu_shader5' : required extension not requested: GL_ARB_gpu_shader5
+ERROR: 0:29: 'if the version is 150 , the EmitStreamVertex and EndStreamPrimitive only support at extension GL_ARB_gpu_shader5' : required extension not requested: GL_ARB_gpu_shader5
+ERROR: 0:30: 'if the version is 150 , the EmitStreamVertex and EndStreamPrimitive only support at extension GL_ARB_gpu_shader5' : required extension not requested: GL_ARB_gpu_shader5
 ERROR: 0:44: 'stream' : can only be used on an output 
 ERROR: 0:45: 'stream' : can only be used on an output 
 ERROR: 0:46: 'stream' : can only be used on an output 
diff --git a/Test/baseResults/400.frag.out b/Test/baseResults/400.frag.out
index db3cd24..a148ae5 100644
--- a/Test/baseResults/400.frag.out
+++ b/Test/baseResults/400.frag.out
@@ -1,510 +1,554 @@
 400.frag
-ERROR: 0:18: 'textureGatherOffsets(...)' : must be a compile-time constant: offsets argument
-ERROR: 0:22: 'textureGatherOffset(...)' : must be a compile-time constant: component argument
-ERROR: 0:23: 'textureGatherOffset(...)' : must be 0, 1, 2, or 3: component argument
-ERROR: 0:30: 'location qualifier on input' : not supported for this version or the enabled extensions 
-ERROR: 0:38: 'location qualifier on uniform or buffer' : not supported for this version or the enabled extensions 
-ERROR: 0:40: 'gl_Color' : identifiers starting with "gl_" are reserved 
-ERROR: 0:41: 'redeclaration' : cannot change qualification of gl_ClipDistance
-ERROR: 0:43: 'gl_FragCoord' : cannot redeclare after use 
-ERROR: 0:51: 'texel offset' : argument must be compile-time constant 
-ERROR: 0:53: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset]
-ERROR: 0:53: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset]
-ERROR: 0:54: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset]
-ERROR: 0:54: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset]
-ERROR: 0:57: 'patch' : not supported in this stage: fragment
-ERROR: 0:58: 'patch' : not supported in this stage: fragment
-ERROR: 0:58: 'centroid/sample/patch' : can't use auxiliary qualifier on a fragment output 
-ERROR: 0:73: 'dFdxFine' : required extension not requested: GL_ARB_derivative_control
-ERROR: 0:74: 'dFdyCoarse' : required extension not requested: GL_ARB_derivative_control
-ERROR: 0:75: 'fwidthCoarse' : required extension not requested: GL_ARB_derivative_control
-ERROR: 0:75: 'fwidthFine' : required extension not requested: GL_ARB_derivative_control
-ERROR: 0:104: 'centroid/sample/patch' : can't use auxiliary qualifier on a fragment output 
-ERROR: 0:123: 'interpolateAtCentroid' : no matching overloaded function found 
-ERROR: 0:125: 'interpolateAtCentroid' : first argument must be an interpolant, or interpolant-array element 
-ERROR: 0:127: 'interpolateAtSample' : no matching overloaded function found 
-ERROR: 0:132: 'interpolateAtOffset' : no matching overloaded function found 
-ERROR: 0:134: 'interpolateAtOffset' : first argument must be an interpolant, or interpolant-array element 
-ERROR: 0:135: 'interpolateAtOffset' : first argument must be an interpolant, or interpolant-array element 
-ERROR: 0:136: 'interpolateAtOffset' : first argument must be an interpolant, or interpolant-array element 
-ERROR: 0:139: 'interpolateAtCentroid' : first argument must be an interpolant, or interpolant-array element 
-ERROR: 0:140: 'interpolateAtSample' : first argument must be an interpolant, or interpolant-array element 
-ERROR: 0:183: 'textureQueryLod' : no matching overloaded function found 
-ERROR: 0:183: 'assign' :  cannot convert from ' const float' to ' temp 2-component vector of float'
-ERROR: 0:184: 'textureQueryLod' : no matching overloaded function found 
-ERROR: 0:184: 'assign' :  cannot convert from ' const float' to ' temp 2-component vector of float'
-ERROR: 0:197: 'subroutine' : feature not yet implemented 
-ERROR: 0:197: '' : default qualifier requires 'uniform', 'buffer', 'in', 'out' or 'shared' storage qualification 
-ERROR: 0:198: 'subroutine' : feature not yet implemented 
-ERROR: 0:199: 'subroutine' : feature not yet implemented 
-ERROR: 0:201: '' :  syntax error, unexpected PRECISE, expecting IDENTIFIER
+ERROR: 0:51: 'textureGatherOffsets(...)' : must be a compile-time constant: offsets argument
+ERROR: 0:55: 'textureGatherOffset(...)' : must be a compile-time constant: component argument
+ERROR: 0:56: 'textureGatherOffset(...)' : must be 0, 1, 2, or 3: component argument
+ERROR: 0:63: 'location qualifier on input' : not supported for this version or the enabled extensions 
+ERROR: 0:71: 'location qualifier on uniform or buffer' : not supported for this version or the enabled extensions 
+ERROR: 0:73: 'gl_Color' : identifiers starting with "gl_" are reserved 
+ERROR: 0:74: 'redeclaration' : cannot change qualification of gl_ClipDistance
+ERROR: 0:76: 'gl_FragCoord' : cannot redeclare after use 
+ERROR: 0:84: 'texel offset' : argument must be compile-time constant 
+ERROR: 0:86: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset]
+ERROR: 0:86: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset]
+ERROR: 0:87: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset]
+ERROR: 0:87: 'texel offset' : value is out of range: [gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset]
+ERROR: 0:90: 'patch' : not supported in this stage: fragment
+ERROR: 0:91: 'patch' : not supported in this stage: fragment
+ERROR: 0:91: 'centroid/sample/patch' : can't use auxiliary qualifier on a fragment output 
+ERROR: 0:106: 'dFdxFine' : required extension not requested: GL_ARB_derivative_control
+ERROR: 0:107: 'dFdyCoarse' : required extension not requested: GL_ARB_derivative_control
+ERROR: 0:108: 'fwidthCoarse' : required extension not requested: GL_ARB_derivative_control
+ERROR: 0:108: 'fwidthFine' : required extension not requested: GL_ARB_derivative_control
+ERROR: 0:137: 'centroid/sample/patch' : can't use auxiliary qualifier on a fragment output 
+ERROR: 0:156: 'interpolateAtCentroid' : no matching overloaded function found 
+ERROR: 0:158: 'interpolateAtCentroid' : first argument must be an interpolant, or interpolant-array element 
+ERROR: 0:160: 'interpolateAtSample' : no matching overloaded function found 
+ERROR: 0:165: 'interpolateAtOffset' : no matching overloaded function found 
+ERROR: 0:167: 'interpolateAtOffset' : first argument must be an interpolant, or interpolant-array element 
+ERROR: 0:168: 'interpolateAtOffset' : first argument must be an interpolant, or interpolant-array element 
+ERROR: 0:169: 'interpolateAtOffset' : first argument must be an interpolant, or interpolant-array element 
+ERROR: 0:172: 'interpolateAtCentroid' : first argument must be an interpolant, or interpolant-array element 
+ERROR: 0:173: 'interpolateAtSample' : first argument must be an interpolant, or interpolant-array element 
+ERROR: 0:216: 'textureQueryLod' : no matching overloaded function found 
+ERROR: 0:216: 'assign' :  cannot convert from ' const float' to ' temp 2-component vector of float'
+ERROR: 0:217: 'textureQueryLod' : no matching overloaded function found 
+ERROR: 0:217: 'assign' :  cannot convert from ' const float' to ' temp 2-component vector of float'
+ERROR: 0:230: 'subroutine' : feature not yet implemented 
+ERROR: 0:230: '' : default qualifier requires 'uniform', 'buffer', 'in', 'out' or 'shared' storage qualification 
+ERROR: 0:231: 'subroutine' : feature not yet implemented 
+ERROR: 0:232: 'subroutine' : feature not yet implemented 
+ERROR: 0:234: '' :  syntax error, unexpected PRECISE, expecting IDENTIFIER
 ERROR: 39 compilation errors.  No code generated.
 
 
 Shader version: 400
 Requested GL_ARB_derivative_control
 Requested GL_ARB_separate_shader_objects
+Requested GL_ARB_shader_storage_buffer_object
 gl_FragCoord pixel center is integer
 gl_FragCoord origin is upper left
 ERROR: node is still EOpNull!
-0:10  Function Definition: main( ( global void)
-0:10    Function Parameters: 
-0:?     Sequence
-0:13      move second child to first child ( temp 4-component vector of float)
-0:13        'v' ( temp 4-component vector of float)
-0:13        texture ( global 4-component vector of float)
-0:13          indirect index ( temp sampler2D)
-0:13            'arrayedSampler' ( uniform 5-element array of sampler2D)
-0:13            'i' ( flat in int)
-0:13          'c2D' ( smooth in 2-component vector of float)
-0:14      move second child to first child ( temp float)
-0:14        direct index ( temp float)
-0:14          'outp' ( out 4-component vector of float)
-0:14          Constant:
-0:14            0 (const int)
-0:14        direct index ( smooth temp float ClipDistance)
-0:14          'gl_ClipDistance' ( smooth in 4-element array of float ClipDistance)
-0:14          Constant:
-0:14            1 (const int)
-0:18      Sequence
-0:18        move second child to first child ( temp 4-component vector of uint)
-0:18          'uv4' ( temp 4-component vector of uint)
-0:18          textureGatherOffsets ( global 4-component vector of uint)
-0:18            'samp2dr' ( uniform usampler2DRect)
-0:18            'c2D' ( smooth in 2-component vector of float)
-0:18            'offsets' ( temp 4-element array of 2-component vector of int)
-0:18            Constant:
-0:18              2 (const int)
-0:19      move second child to first child ( temp 4-component vector of uint)
-0:19        'uv4' ( temp 4-component vector of uint)
-0:19        textureGatherOffsets ( global 4-component vector of uint)
-0:19          'samp2dr' ( uniform usampler2DRect)
-0:19          'c2D' ( smooth in 2-component vector of float)
-0:19          Constant:
-0:19            1 (const int)
-0:19            2 (const int)
-0:19            3 (const int)
-0:19            4 (const int)
-0:19            15 (const int)
-0:19            16 (const int)
-0:19            -2 (const int)
-0:19            0 (const int)
-0:19          Constant:
-0:19            2 (const int)
+0:18  Function Definition: atomicOpPass( ( global void)
+0:18    Function Parameters: 
+0:20    Sequence
 0:20      Sequence
-0:20        move second child to first child ( temp 4-component vector of float)
-0:20          'v4' ( temp 4-component vector of float)
-0:20          textureGather ( global 4-component vector of float)
-0:20            direct index ( temp sampler2D)
-0:20              'arrayedSampler' ( uniform 5-element array of sampler2D)
+0:20        move second child to first child ( temp int)
+0:20          'origi' ( temp int)
+0:20          AtomicAdd ( global int)
+0:20            atomi: direct index for structure (layout( column_major shared) buffer int)
+0:20              'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer int atomi, layout( column_major shared) buffer uint atomu})
 0:20              Constant:
-0:20                0 (const int)
-0:20            'c2D' ( smooth in 2-component vector of float)
+0:20                0 (const uint)
+0:20            Constant:
+0:20              3 (const int)
 0:21      Sequence
-0:21        move second child to first child ( temp 4-component vector of int)
-0:21          'iv4' ( temp 4-component vector of int)
-0:21          textureGatherOffset ( global 4-component vector of int)
-0:21            'isamp2DA' ( uniform isampler2DArray)
+0:21        move second child to first child ( temp uint)
+0:21          'origu' ( temp uint)
+0:21          AtomicAnd ( global uint)
+0:21            atomu: direct index for structure (layout( column_major shared) buffer uint)
+0:21              'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer int atomi, layout( column_major shared) buffer uint atomu})
+0:21              Constant:
+0:21                1 (const uint)
 0:21            Constant:
-0:21              0.100000
-0:21              0.100000
-0:21              0.100000
-0:21            Constant:
-0:21              1 (const int)
-0:21              1 (const int)
-0:21            Constant:
-0:21              3 (const int)
-0:22      move second child to first child ( temp 4-component vector of int)
-0:22        'iv4' ( temp 4-component vector of int)
-0:22        textureGatherOffset ( global 4-component vector of int)
-0:22          'isamp2DA' ( uniform isampler2DArray)
+0:21              7 (const uint)
+0:22      move second child to first child ( temp int)
+0:22        'origi' ( temp int)
+0:22        AtomicExchange ( global int)
+0:22          atomi: direct index for structure (layout( column_major shared) buffer int)
+0:22            'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer int atomi, layout( column_major shared) buffer uint atomu})
+0:22            Constant:
+0:22              0 (const uint)
 0:22          Constant:
-0:22            0.100000
-0:22            0.100000
-0:22            0.100000
-0:22          Constant:
-0:22            1 (const int)
-0:22            1 (const int)
-0:22          'i' ( flat in int)
-0:23      move second child to first child ( temp 4-component vector of int)
-0:23        'iv4' ( temp 4-component vector of int)
-0:23        textureGatherOffset ( global 4-component vector of int)
-0:23          'isamp2DA' ( uniform isampler2DArray)
+0:22            4 (const int)
+0:23      move second child to first child ( temp uint)
+0:23        'origu' ( temp uint)
+0:23        AtomicCompSwap ( global uint)
+0:23          atomu: direct index for structure (layout( column_major shared) buffer uint)
+0:23            'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer int atomi, layout( column_major shared) buffer uint atomu})
+0:23            Constant:
+0:23              1 (const uint)
 0:23          Constant:
-0:23            0.100000
-0:23            0.100000
-0:23            0.100000
+0:23            10 (const uint)
 0:23          Constant:
-0:23            1 (const int)
-0:23            1 (const int)
-0:23          Constant:
-0:23            4 (const int)
-0:24      move second child to first child ( temp 4-component vector of int)
-0:24        'iv4' ( temp 4-component vector of int)
-0:24        textureGatherOffset ( global 4-component vector of int)
-0:24          'isamp2DA' ( uniform isampler2DArray)
-0:24          Constant:
-0:24            0.100000
-0:24            0.100000
-0:24            0.100000
-0:24          Constant:
-0:24            1 (const int)
-0:24            1 (const int)
-0:24          Constant:
-0:24            3 (const int)
-0:25      move second child to first child ( temp 4-component vector of int)
-0:25        'iv4' ( temp 4-component vector of int)
-0:25        textureGatherOffset ( global 4-component vector of int)
-0:25          'isamp2DA' ( uniform isampler2DArray)
-0:25          Constant:
-0:25            0.100000
-0:25            0.100000
-0:25            0.100000
-0:25          Construct ivec2 ( temp 2-component vector of int)
-0:25            'i' ( flat in int)
-0:27      Sequence
-0:27        move second child to first child ( temp 4-component vector of float)
-0:27          'c' ( temp 4-component vector of float)
-0:27          'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)
-0:47  Function Definition: foo23( ( global void)
-0:47    Function Parameters: 
+0:23            8 (const uint)
+0:43  Function Definition: main( ( global void)
+0:43    Function Parameters: 
 0:?     Sequence
-0:51      textureProjGradOffset ( global float)
-0:51        'u2drs' ( uniform sampler2DRectShadow)
-0:51        'outp' ( out 4-component vector of float)
-0:51        Constant:
-0:51          0.000000
-0:51          0.000000
-0:51        Constant:
-0:51          0.000000
-0:51          0.000000
-0:51        Convert float to int ( temp 2-component vector of int)
-0:51          'c2D' ( smooth in 2-component vector of float)
-0:52      textureProjGradOffset ( global float)
-0:52        'u2drs' ( uniform sampler2DRectShadow)
-0:52        'outp' ( out 4-component vector of float)
-0:52        Constant:
-0:52          0.000000
-0:52          0.000000
-0:52        Constant:
-0:52          0.000000
-0:52          0.000000
-0:52        Constant:
-0:52          3 (const int)
-0:52          4 (const int)
-0:53      textureProjGradOffset ( global float)
-0:53        'u2drs' ( uniform sampler2DRectShadow)
-0:53        'outp' ( out 4-component vector of float)
-0:53        Constant:
-0:53          0.000000
-0:53          0.000000
-0:53        Constant:
-0:53          0.000000
-0:53          0.000000
-0:53        Constant:
-0:53          15 (const int)
-0:53          16 (const int)
-0:54      textureProjGradOffset ( global float)
-0:54        'u2drs' ( uniform sampler2DRectShadow)
-0:54        'outp' ( out 4-component vector of float)
-0:54        Constant:
-0:54          0.000000
-0:54          0.000000
-0:54        Constant:
-0:54          0.000000
-0:54          0.000000
-0:54        Constant:
-0:54          -10 (const int)
-0:54          20 (const int)
-0:60  Function Definition: foo24( ( global void)
-0:60    Function Parameters: 
-0:?     Sequence
-0:63      move second child to first child ( temp 3-component vector of double)
-0:63        'df' ( temp 3-component vector of double)
-0:63        modf ( global 3-component vector of double)
-0:63          Convert float to double ( temp 3-component vector of double)
-0:63            vector swizzle ( temp 3-component vector of float)
-0:63              'outp' ( out 4-component vector of float)
-0:63              Sequence
-0:63                Constant:
-0:63                  0 (const int)
-0:63                Constant:
-0:63                  1 (const int)
-0:63                Constant:
-0:63                  2 (const int)
-0:63          'di' ( temp 3-component vector of double)
-0:71  Function Definition: foodc1( ( global void)
-0:71    Function Parameters: 
-0:73    Sequence
-0:73      Sequence
-0:73        move second child to first child ( temp 2-component vector of float)
-0:73          'v2' ( temp 2-component vector of float)
-0:73          dPdxFine ( global 2-component vector of float)
-0:73            'in2' ( smooth in 2-component vector of float)
-0:74      Sequence
-0:74        move second child to first child ( temp 3-component vector of float)
-0:74          'v3' ( temp 3-component vector of float)
-0:74          dPdyCoarse ( global 3-component vector of float)
-0:74            'in3' ( smooth in 3-component vector of float)
-0:75      Sequence
-0:75        move second child to first child ( temp 4-component vector of float)
-0:75          'v4' ( temp 4-component vector of float)
-0:75          add ( temp 4-component vector of float)
-0:75            fwidthCoarse ( global 4-component vector of float)
-0:75              'in4' ( smooth in 4-component vector of float)
-0:75            fwidthFine ( global 4-component vector of float)
-0:75              'in4' ( smooth in 4-component vector of float)
-0:80  Function Definition: foodc2( ( global void)
+0:46      move second child to first child ( temp 4-component vector of float)
+0:46        'v' ( temp 4-component vector of float)
+0:46        texture ( global 4-component vector of float)
+0:46          indirect index ( temp sampler2D)
+0:46            'arrayedSampler' ( uniform 5-element array of sampler2D)
+0:46            'i' ( flat in int)
+0:46          'c2D' ( smooth in 2-component vector of float)
+0:47      move second child to first child ( temp float)
+0:47        direct index ( temp float)
+0:47          'outp' ( out 4-component vector of float)
+0:47          Constant:
+0:47            0 (const int)
+0:47        direct index ( smooth temp float ClipDistance)
+0:47          'gl_ClipDistance' ( smooth in 4-element array of float ClipDistance)
+0:47          Constant:
+0:47            1 (const int)
+0:51      Sequence
+0:51        move second child to first child ( temp 4-component vector of uint)
+0:51          'uv4' ( temp 4-component vector of uint)
+0:51          textureGatherOffsets ( global 4-component vector of uint)
+0:51            'samp2dr' ( uniform usampler2DRect)
+0:51            'c2D' ( smooth in 2-component vector of float)
+0:51            'offsets' ( temp 4-element array of 2-component vector of int)
+0:51            Constant:
+0:51              2 (const int)
+0:52      move second child to first child ( temp 4-component vector of uint)
+0:52        'uv4' ( temp 4-component vector of uint)
+0:52        textureGatherOffsets ( global 4-component vector of uint)
+0:52          'samp2dr' ( uniform usampler2DRect)
+0:52          'c2D' ( smooth in 2-component vector of float)
+0:52          Constant:
+0:52            1 (const int)
+0:52            2 (const int)
+0:52            3 (const int)
+0:52            4 (const int)
+0:52            15 (const int)
+0:52            16 (const int)
+0:52            -2 (const int)
+0:52            0 (const int)
+0:52          Constant:
+0:52            2 (const int)
+0:53      Sequence
+0:53        move second child to first child ( temp 4-component vector of float)
+0:53          'v4' ( temp 4-component vector of float)
+0:53          textureGather ( global 4-component vector of float)
+0:53            direct index ( temp sampler2D)
+0:53              'arrayedSampler' ( uniform 5-element array of sampler2D)
+0:53              Constant:
+0:53                0 (const int)
+0:53            'c2D' ( smooth in 2-component vector of float)
+0:54      Sequence
+0:54        move second child to first child ( temp 4-component vector of int)
+0:54          'iv4' ( temp 4-component vector of int)
+0:54          textureGatherOffset ( global 4-component vector of int)
+0:54            'isamp2DA' ( uniform isampler2DArray)
+0:54            Constant:
+0:54              0.100000
+0:54              0.100000
+0:54              0.100000
+0:54            Constant:
+0:54              1 (const int)
+0:54              1 (const int)
+0:54            Constant:
+0:54              3 (const int)
+0:55      move second child to first child ( temp 4-component vector of int)
+0:55        'iv4' ( temp 4-component vector of int)
+0:55        textureGatherOffset ( global 4-component vector of int)
+0:55          'isamp2DA' ( uniform isampler2DArray)
+0:55          Constant:
+0:55            0.100000
+0:55            0.100000
+0:55            0.100000
+0:55          Constant:
+0:55            1 (const int)
+0:55            1 (const int)
+0:55          'i' ( flat in int)
+0:56      move second child to first child ( temp 4-component vector of int)
+0:56        'iv4' ( temp 4-component vector of int)
+0:56        textureGatherOffset ( global 4-component vector of int)
+0:56          'isamp2DA' ( uniform isampler2DArray)
+0:56          Constant:
+0:56            0.100000
+0:56            0.100000
+0:56            0.100000
+0:56          Constant:
+0:56            1 (const int)
+0:56            1 (const int)
+0:56          Constant:
+0:56            4 (const int)
+0:57      move second child to first child ( temp 4-component vector of int)
+0:57        'iv4' ( temp 4-component vector of int)
+0:57        textureGatherOffset ( global 4-component vector of int)
+0:57          'isamp2DA' ( uniform isampler2DArray)
+0:57          Constant:
+0:57            0.100000
+0:57            0.100000
+0:57            0.100000
+0:57          Constant:
+0:57            1 (const int)
+0:57            1 (const int)
+0:57          Constant:
+0:57            3 (const int)
+0:58      move second child to first child ( temp 4-component vector of int)
+0:58        'iv4' ( temp 4-component vector of int)
+0:58        textureGatherOffset ( global 4-component vector of int)
+0:58          'isamp2DA' ( uniform isampler2DArray)
+0:58          Constant:
+0:58            0.100000
+0:58            0.100000
+0:58            0.100000
+0:58          Construct ivec2 ( temp 2-component vector of int)
+0:58            'i' ( flat in int)
+0:60      Sequence
+0:60        move second child to first child ( temp 4-component vector of float)
+0:60          'c' ( temp 4-component vector of float)
+0:60          'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)
+0:80  Function Definition: foo23( ( global void)
 0:80    Function Parameters: 
-0:82    Sequence
-0:82      Sequence
-0:82        move second child to first child ( temp 2-component vector of float)
-0:82          'v2' ( temp 2-component vector of float)
-0:82          dPdxFine ( global 2-component vector of float)
-0:82            'in2' ( smooth in 2-component vector of float)
-0:83      Sequence
-0:83        move second child to first child ( temp 3-component vector of float)
-0:83          'v3' ( temp 3-component vector of float)
-0:83          dPdyCoarse ( global 3-component vector of float)
-0:83            'in3' ( smooth in 3-component vector of float)
-0:84      Sequence
-0:84        move second child to first child ( temp 4-component vector of float)
-0:84          'v4' ( temp 4-component vector of float)
-0:84          add ( temp 4-component vector of float)
-0:84            fwidthCoarse ( global 4-component vector of float)
-0:84              'in4' ( smooth in 4-component vector of float)
-0:84            fwidthFine ( global 4-component vector of float)
-0:84              'in4' ( smooth in 4-component vector of float)
-0:89      move second child to first child ( temp 2-component vector of float)
-0:89        'v2' ( temp 2-component vector of float)
-0:89        frexp ( global 2-component vector of float)
-0:89          'v2' ( temp 2-component vector of float)
-0:89          'i2' ( temp 2-component vector of int)
-0:90      move second child to first child ( temp 3-component vector of float)
-0:90        'v3' ( temp 3-component vector of float)
-0:90        ldexp ( global 3-component vector of float)
-0:90          'v3' ( temp 3-component vector of float)
-0:90          'i3' ( temp 3-component vector of int)
-0:92      move second child to first child ( temp uint)
-0:92        'u1' ( temp uint)
-0:92        PackUnorm4x8 ( global uint)
-0:92          'v4' ( temp 4-component vector of float)
-0:93      move second child to first child ( temp uint)
-0:93        'u1' ( temp uint)
-0:93        PackSnorm4x8 ( global uint)
-0:93          'v4' ( temp 4-component vector of float)
-0:94      move second child to first child ( temp 4-component vector of float)
-0:94        'v4' ( temp 4-component vector of float)
-0:94        UnpackUnorm4x8 ( global 4-component vector of float)
-0:94          'u1' ( temp uint)
-0:95      move second child to first child ( temp 4-component vector of float)
-0:95        'v4' ( temp 4-component vector of float)
-0:95        UnpackSnorm4x8 ( global 4-component vector of float)
-0:95          'u1' ( temp uint)
-0:99      move second child to first child ( temp double)
-0:99        'd' ( temp double)
-0:99        PackDouble2x32 ( global double)
-0:99          'u2' ( temp 2-component vector of uint)
-0:100      move second child to first child ( temp 2-component vector of uint)
-0:100        'u2' ( temp 2-component vector of uint)
-0:100        UnpackDouble2x32 ( global 2-component vector of uint)
-0:100          'd' ( temp double)
-0:117  Function Definition: interp( ( global void)
-0:117    Function Parameters: 
-0:119    Sequence
-0:119      interpolateAtCentroid ( global 2-component vector of float)
-0:119        'colorfc' ( centroid flat in 2-component vector of float)
-0:120      interpolateAtCentroid ( global 4-component vector of float)
-0:120        'colorSampIn' ( smooth sample in 4-component vector of float)
-0:121      interpolateAtCentroid ( global 4-component vector of float)
-0:121        'colorfsi' ( noperspective in 4-component vector of float)
-0:122      interpolateAtCentroid ( global float)
-0:122        'scalarIn' ( smooth in float)
-0:123      Constant:
-0:123        0.000000
-0:124      interpolateAtCentroid ( global 3-component vector of float)
-0:124        direct index ( smooth sample temp 3-component vector of float)
-0:124          'sampInArray' ( smooth sample in 4-element array of 3-component vector of float)
-0:124          Constant:
-0:124            2 (const int)
-0:125      interpolateAtCentroid ( global 2-component vector of float)
-0:125        vector swizzle ( temp 2-component vector of float)
-0:125          direct index ( smooth sample temp 3-component vector of float)
-0:125            'sampInArray' ( smooth sample in 4-element array of 3-component vector of float)
-0:125            Constant:
-0:125              2 (const int)
-0:125          Sequence
-0:125            Constant:
-0:125              0 (const int)
-0:125            Constant:
-0:125              1 (const int)
-0:127      Constant:
-0:127        0.000000
-0:128      interpolateAtSample ( global 3-component vector of float)
-0:128        indirect index ( smooth sample temp 3-component vector of float)
-0:128          'sampInArray' ( smooth sample in 4-element array of 3-component vector of float)
-0:128          'i' ( flat in int)
-0:128        Constant:
-0:128          0 (const int)
-0:129      interpolateAtSample ( global float)
-0:129        x: direct index for structure ( global float)
-0:129          's1' ( smooth in structure{ global float x})
-0:129          Constant:
-0:129            0 (const int)
-0:129        Constant:
-0:129          2 (const int)
-0:130      interpolateAtSample ( global float)
-0:130        'scalarIn' ( smooth in float)
-0:130        Constant:
-0:130          1 (const int)
-0:132      Constant:
-0:132        0.000000
-0:133      interpolateAtOffset ( global 3-component vector of float)
-0:133        direct index ( smooth sample temp 3-component vector of float)
-0:133          'sampInArray' ( smooth sample in 4-element array of 3-component vector of float)
-0:133          Constant:
-0:133            2 (const int)
-0:133        Constant:
-0:133          0.200000
-0:133          0.200000
-0:134      interpolateAtOffset ( global 2-component vector of float)
-0:134        vector swizzle ( temp 2-component vector of float)
-0:134          direct index ( smooth sample temp 3-component vector of float)
-0:134            'sampInArray' ( smooth sample in 4-element array of 3-component vector of float)
-0:134            Constant:
-0:134              2 (const int)
-0:134          Sequence
-0:134            Constant:
-0:134              0 (const int)
-0:134            Constant:
-0:134              1 (const int)
-0:134        Constant:
-0:134          0.200000
-0:134          0.200000
-0:135      interpolateAtOffset ( global float)
-0:135        add ( temp float)
-0:135          'scalarIn' ( smooth in float)
-0:135          'scalarIn' ( smooth in float)
-0:135        Constant:
-0:135          0.200000
-0:135          0.200000
-0:136      interpolateAtOffset ( global float)
-0:136        x: direct index for structure ( global float)
-0:136          's2' ( sample temp structure{ global float x})
-0:136          Constant:
-0:136            0 (const int)
-0:136        Constant:
-0:136          0.200000
-0:136          0.200000
-0:139      interpolateAtCentroid ( global float)
-0:139        'f' ( temp float)
-0:140      interpolateAtSample ( global 4-component vector of float)
-0:140        'outp' ( out 4-component vector of float)
-0:140        Constant:
-0:140          0 (const int)
-0:161  Function Definition: qlod( ( global void)
-0:161    Function Parameters: 
 0:?     Sequence
-0:168      move second child to first child ( temp 2-component vector of float)
-0:168        'lod' ( temp 2-component vector of float)
-0:168        textureQueryLod ( global 2-component vector of float)
-0:168          'samp1D' ( uniform sampler1D)
-0:168          'pf' ( temp float)
-0:169      move second child to first child ( temp 2-component vector of float)
-0:169        'lod' ( temp 2-component vector of float)
-0:169        textureQueryLod ( global 2-component vector of float)
-0:169          'isamp2D' ( uniform isampler2D)
-0:169          'pf2' ( temp 2-component vector of float)
-0:170      move second child to first child ( temp 2-component vector of float)
-0:170        'lod' ( temp 2-component vector of float)
-0:170        textureQueryLod ( global 2-component vector of float)
-0:170          'usamp3D' ( uniform usampler3D)
-0:170          'pf3' ( temp 3-component vector of float)
-0:171      move second child to first child ( temp 2-component vector of float)
-0:171        'lod' ( temp 2-component vector of float)
-0:171        textureQueryLod ( global 2-component vector of float)
-0:171          'sampCube' ( uniform samplerCube)
-0:171          'pf3' ( temp 3-component vector of float)
-0:172      move second child to first child ( temp 2-component vector of float)
-0:172        'lod' ( temp 2-component vector of float)
-0:172        textureQueryLod ( global 2-component vector of float)
-0:172          'isamp1DA' ( uniform isampler1DArray)
-0:172          'pf' ( temp float)
-0:173      move second child to first child ( temp 2-component vector of float)
-0:173        'lod' ( temp 2-component vector of float)
-0:173        textureQueryLod ( global 2-component vector of float)
-0:173          'usamp2DA' ( uniform usampler2DArray)
-0:173          'pf2' ( temp 2-component vector of float)
-0:174      move second child to first child ( temp 2-component vector of float)
-0:174        'lod' ( temp 2-component vector of float)
-0:174        textureQueryLod ( global 2-component vector of float)
-0:174          'isampCubeA' ( uniform isamplerCubeArray)
-0:174          'pf3' ( temp 3-component vector of float)
-0:176      move second child to first child ( temp 2-component vector of float)
-0:176        'lod' ( temp 2-component vector of float)
-0:176        textureQueryLod ( global 2-component vector of float)
-0:176          'samp1Ds' ( uniform sampler1DShadow)
-0:176          'pf' ( temp float)
-0:177      move second child to first child ( temp 2-component vector of float)
-0:177        'lod' ( temp 2-component vector of float)
-0:177        textureQueryLod ( global 2-component vector of float)
-0:177          'samp2Ds' ( uniform sampler2DShadow)
-0:177          'pf2' ( temp 2-component vector of float)
-0:178      move second child to first child ( temp 2-component vector of float)
-0:178        'lod' ( temp 2-component vector of float)
-0:178        textureQueryLod ( global 2-component vector of float)
-0:178          'sampCubes' ( uniform samplerCubeShadow)
-0:178          'pf3' ( temp 3-component vector of float)
-0:179      move second child to first child ( temp 2-component vector of float)
-0:179        'lod' ( temp 2-component vector of float)
-0:179        textureQueryLod ( global 2-component vector of float)
-0:179          'samp1DAs' ( uniform sampler1DArrayShadow)
-0:179          'pf' ( temp float)
-0:180      move second child to first child ( temp 2-component vector of float)
-0:180        'lod' ( temp 2-component vector of float)
-0:180        textureQueryLod ( global 2-component vector of float)
-0:180          'samp2DAs' ( uniform sampler2DArrayShadow)
-0:180          'pf2' ( temp 2-component vector of float)
-0:181      move second child to first child ( temp 2-component vector of float)
-0:181        'lod' ( temp 2-component vector of float)
-0:181        textureQueryLod ( global 2-component vector of float)
-0:181          'sampCubeAs' ( uniform samplerCubeArrayShadow)
-0:181          'pf3' ( temp 3-component vector of float)
-0:183      'lod' ( temp 2-component vector of float)
-0:184      'lod' ( temp 2-component vector of float)
-0:190  Function Definition: bitwiseConv( ( global void)
-0:190    Function Parameters: 
-0:192    Sequence
-0:192      move second child to first child ( temp uint)
-0:192        'iout' ( out uint)
-0:192        bitwise and ( temp uint)
-0:192          'uu' ( uniform uint)
-0:192          Convert int to uint ( temp uint)
-0:192            'i' ( flat in int)
-0:193      add second child into first child ( temp uint)
-0:193        'iout' ( out uint)
-0:193        exclusive-or ( temp uint)
-0:193          'uu' ( uniform uint)
-0:193          Convert int to uint ( temp uint)
-0:193            'i' ( flat in int)
-0:194      add second child into first child ( temp uint)
-0:194        'iout' ( out uint)
-0:194        inclusive-or ( temp uint)
-0:194          Convert int to uint ( temp uint)
-0:194            'i' ( flat in int)
-0:194          'uu' ( uniform uint)
-0:198  Function Definition: subT1( ( temp float)
-0:198    Function Parameters: 
-0:198    Sequence
-0:198      Branch: Return with expression
-0:198        Constant:
-0:198          1.000000
-0:199  Function Definition: subT2( ( temp float)
-0:199    Function Parameters: 
-0:199    Sequence
-0:199      Branch: Return with expression
-0:199        Constant:
-0:199          1.000000
+0:84      textureProjGradOffset ( global float)
+0:84        'u2drs' ( uniform sampler2DRectShadow)
+0:84        'outp' ( out 4-component vector of float)
+0:84        Constant:
+0:84          0.000000
+0:84          0.000000
+0:84        Constant:
+0:84          0.000000
+0:84          0.000000
+0:84        Convert float to int ( temp 2-component vector of int)
+0:84          'c2D' ( smooth in 2-component vector of float)
+0:85      textureProjGradOffset ( global float)
+0:85        'u2drs' ( uniform sampler2DRectShadow)
+0:85        'outp' ( out 4-component vector of float)
+0:85        Constant:
+0:85          0.000000
+0:85          0.000000
+0:85        Constant:
+0:85          0.000000
+0:85          0.000000
+0:85        Constant:
+0:85          3 (const int)
+0:85          4 (const int)
+0:86      textureProjGradOffset ( global float)
+0:86        'u2drs' ( uniform sampler2DRectShadow)
+0:86        'outp' ( out 4-component vector of float)
+0:86        Constant:
+0:86          0.000000
+0:86          0.000000
+0:86        Constant:
+0:86          0.000000
+0:86          0.000000
+0:86        Constant:
+0:86          15 (const int)
+0:86          16 (const int)
+0:87      textureProjGradOffset ( global float)
+0:87        'u2drs' ( uniform sampler2DRectShadow)
+0:87        'outp' ( out 4-component vector of float)
+0:87        Constant:
+0:87          0.000000
+0:87          0.000000
+0:87        Constant:
+0:87          0.000000
+0:87          0.000000
+0:87        Constant:
+0:87          -10 (const int)
+0:87          20 (const int)
+0:93  Function Definition: foo24( ( global void)
+0:93    Function Parameters: 
+0:?     Sequence
+0:96      move second child to first child ( temp 3-component vector of double)
+0:96        'df' ( temp 3-component vector of double)
+0:96        modf ( global 3-component vector of double)
+0:96          Convert float to double ( temp 3-component vector of double)
+0:96            vector swizzle ( temp 3-component vector of float)
+0:96              'outp' ( out 4-component vector of float)
+0:96              Sequence
+0:96                Constant:
+0:96                  0 (const int)
+0:96                Constant:
+0:96                  1 (const int)
+0:96                Constant:
+0:96                  2 (const int)
+0:96          'di' ( temp 3-component vector of double)
+0:104  Function Definition: foodc1( ( global void)
+0:104    Function Parameters: 
+0:106    Sequence
+0:106      Sequence
+0:106        move second child to first child ( temp 2-component vector of float)
+0:106          'v2' ( temp 2-component vector of float)
+0:106          dPdxFine ( global 2-component vector of float)
+0:106            'in2' ( smooth in 2-component vector of float)
+0:107      Sequence
+0:107        move second child to first child ( temp 3-component vector of float)
+0:107          'v3' ( temp 3-component vector of float)
+0:107          dPdyCoarse ( global 3-component vector of float)
+0:107            'in3' ( smooth in 3-component vector of float)
+0:108      Sequence
+0:108        move second child to first child ( temp 4-component vector of float)
+0:108          'v4' ( temp 4-component vector of float)
+0:108          add ( temp 4-component vector of float)
+0:108            fwidthCoarse ( global 4-component vector of float)
+0:108              'in4' ( smooth in 4-component vector of float)
+0:108            fwidthFine ( global 4-component vector of float)
+0:108              'in4' ( smooth in 4-component vector of float)
+0:113  Function Definition: foodc2( ( global void)
+0:113    Function Parameters: 
+0:115    Sequence
+0:115      Sequence
+0:115        move second child to first child ( temp 2-component vector of float)
+0:115          'v2' ( temp 2-component vector of float)
+0:115          dPdxFine ( global 2-component vector of float)
+0:115            'in2' ( smooth in 2-component vector of float)
+0:116      Sequence
+0:116        move second child to first child ( temp 3-component vector of float)
+0:116          'v3' ( temp 3-component vector of float)
+0:116          dPdyCoarse ( global 3-component vector of float)
+0:116            'in3' ( smooth in 3-component vector of float)
+0:117      Sequence
+0:117        move second child to first child ( temp 4-component vector of float)
+0:117          'v4' ( temp 4-component vector of float)
+0:117          add ( temp 4-component vector of float)
+0:117            fwidthCoarse ( global 4-component vector of float)
+0:117              'in4' ( smooth in 4-component vector of float)
+0:117            fwidthFine ( global 4-component vector of float)
+0:117              'in4' ( smooth in 4-component vector of float)
+0:122      move second child to first child ( temp 2-component vector of float)
+0:122        'v2' ( temp 2-component vector of float)
+0:122        frexp ( global 2-component vector of float)
+0:122          'v2' ( temp 2-component vector of float)
+0:122          'i2' ( temp 2-component vector of int)
+0:123      move second child to first child ( temp 3-component vector of float)
+0:123        'v3' ( temp 3-component vector of float)
+0:123        ldexp ( global 3-component vector of float)
+0:123          'v3' ( temp 3-component vector of float)
+0:123          'i3' ( temp 3-component vector of int)
+0:125      move second child to first child ( temp uint)
+0:125        'u1' ( temp uint)
+0:125        PackUnorm4x8 ( global uint)
+0:125          'v4' ( temp 4-component vector of float)
+0:126      move second child to first child ( temp uint)
+0:126        'u1' ( temp uint)
+0:126        PackSnorm4x8 ( global uint)
+0:126          'v4' ( temp 4-component vector of float)
+0:127      move second child to first child ( temp 4-component vector of float)
+0:127        'v4' ( temp 4-component vector of float)
+0:127        UnpackUnorm4x8 ( global 4-component vector of float)
+0:127          'u1' ( temp uint)
+0:128      move second child to first child ( temp 4-component vector of float)
+0:128        'v4' ( temp 4-component vector of float)
+0:128        UnpackSnorm4x8 ( global 4-component vector of float)
+0:128          'u1' ( temp uint)
+0:132      move second child to first child ( temp double)
+0:132        'd' ( temp double)
+0:132        PackDouble2x32 ( global double)
+0:132          'u2' ( temp 2-component vector of uint)
+0:133      move second child to first child ( temp 2-component vector of uint)
+0:133        'u2' ( temp 2-component vector of uint)
+0:133        UnpackDouble2x32 ( global 2-component vector of uint)
+0:133          'd' ( temp double)
+0:150  Function Definition: interp( ( global void)
+0:150    Function Parameters: 
+0:152    Sequence
+0:152      interpolateAtCentroid ( global 2-component vector of float)
+0:152        'colorfc' ( centroid flat in 2-component vector of float)
+0:153      interpolateAtCentroid ( global 4-component vector of float)
+0:153        'colorSampIn' ( smooth sample in 4-component vector of float)
+0:154      interpolateAtCentroid ( global 4-component vector of float)
+0:154        'colorfsi' ( noperspective in 4-component vector of float)
+0:155      interpolateAtCentroid ( global float)
+0:155        'scalarIn' ( smooth in float)
+0:156      Constant:
+0:156        0.000000
+0:157      interpolateAtCentroid ( global 3-component vector of float)
+0:157        direct index ( smooth sample temp 3-component vector of float)
+0:157          'sampInArray' ( smooth sample in 4-element array of 3-component vector of float)
+0:157          Constant:
+0:157            2 (const int)
+0:158      interpolateAtCentroid ( global 2-component vector of float)
+0:158        vector swizzle ( temp 2-component vector of float)
+0:158          direct index ( smooth sample temp 3-component vector of float)
+0:158            'sampInArray' ( smooth sample in 4-element array of 3-component vector of float)
+0:158            Constant:
+0:158              2 (const int)
+0:158          Sequence
+0:158            Constant:
+0:158              0 (const int)
+0:158            Constant:
+0:158              1 (const int)
+0:160      Constant:
+0:160        0.000000
+0:161      interpolateAtSample ( global 3-component vector of float)
+0:161        indirect index ( smooth sample temp 3-component vector of float)
+0:161          'sampInArray' ( smooth sample in 4-element array of 3-component vector of float)
+0:161          'i' ( flat in int)
+0:161        Constant:
+0:161          0 (const int)
+0:162      interpolateAtSample ( global float)
+0:162        x: direct index for structure ( global float)
+0:162          's1' ( smooth in structure{ global float x})
+0:162          Constant:
+0:162            0 (const int)
+0:162        Constant:
+0:162          2 (const int)
+0:163      interpolateAtSample ( global float)
+0:163        'scalarIn' ( smooth in float)
+0:163        Constant:
+0:163          1 (const int)
+0:165      Constant:
+0:165        0.000000
+0:166      interpolateAtOffset ( global 3-component vector of float)
+0:166        direct index ( smooth sample temp 3-component vector of float)
+0:166          'sampInArray' ( smooth sample in 4-element array of 3-component vector of float)
+0:166          Constant:
+0:166            2 (const int)
+0:166        Constant:
+0:166          0.200000
+0:166          0.200000
+0:167      interpolateAtOffset ( global 2-component vector of float)
+0:167        vector swizzle ( temp 2-component vector of float)
+0:167          direct index ( smooth sample temp 3-component vector of float)
+0:167            'sampInArray' ( smooth sample in 4-element array of 3-component vector of float)
+0:167            Constant:
+0:167              2 (const int)
+0:167          Sequence
+0:167            Constant:
+0:167              0 (const int)
+0:167            Constant:
+0:167              1 (const int)
+0:167        Constant:
+0:167          0.200000
+0:167          0.200000
+0:168      interpolateAtOffset ( global float)
+0:168        add ( temp float)
+0:168          'scalarIn' ( smooth in float)
+0:168          'scalarIn' ( smooth in float)
+0:168        Constant:
+0:168          0.200000
+0:168          0.200000
+0:169      interpolateAtOffset ( global float)
+0:169        x: direct index for structure ( global float)
+0:169          's2' ( sample temp structure{ global float x})
+0:169          Constant:
+0:169            0 (const int)
+0:169        Constant:
+0:169          0.200000
+0:169          0.200000
+0:172      interpolateAtCentroid ( global float)
+0:172        'f' ( temp float)
+0:173      interpolateAtSample ( global 4-component vector of float)
+0:173        'outp' ( out 4-component vector of float)
+0:173        Constant:
+0:173          0 (const int)
+0:194  Function Definition: qlod( ( global void)
+0:194    Function Parameters: 
+0:?     Sequence
+0:201      move second child to first child ( temp 2-component vector of float)
+0:201        'lod' ( temp 2-component vector of float)
+0:201        textureQueryLod ( global 2-component vector of float)
+0:201          'samp1D' ( uniform sampler1D)
+0:201          'pf' ( temp float)
+0:202      move second child to first child ( temp 2-component vector of float)
+0:202        'lod' ( temp 2-component vector of float)
+0:202        textureQueryLod ( global 2-component vector of float)
+0:202          'isamp2D' ( uniform isampler2D)
+0:202          'pf2' ( temp 2-component vector of float)
+0:203      move second child to first child ( temp 2-component vector of float)
+0:203        'lod' ( temp 2-component vector of float)
+0:203        textureQueryLod ( global 2-component vector of float)
+0:203          'usamp3D' ( uniform usampler3D)
+0:203          'pf3' ( temp 3-component vector of float)
+0:204      move second child to first child ( temp 2-component vector of float)
+0:204        'lod' ( temp 2-component vector of float)
+0:204        textureQueryLod ( global 2-component vector of float)
+0:204          'sampCube' ( uniform samplerCube)
+0:204          'pf3' ( temp 3-component vector of float)
+0:205      move second child to first child ( temp 2-component vector of float)
+0:205        'lod' ( temp 2-component vector of float)
+0:205        textureQueryLod ( global 2-component vector of float)
+0:205          'isamp1DA' ( uniform isampler1DArray)
+0:205          'pf' ( temp float)
+0:206      move second child to first child ( temp 2-component vector of float)
+0:206        'lod' ( temp 2-component vector of float)
+0:206        textureQueryLod ( global 2-component vector of float)
+0:206          'usamp2DA' ( uniform usampler2DArray)
+0:206          'pf2' ( temp 2-component vector of float)
+0:207      move second child to first child ( temp 2-component vector of float)
+0:207        'lod' ( temp 2-component vector of float)
+0:207        textureQueryLod ( global 2-component vector of float)
+0:207          'isampCubeA' ( uniform isamplerCubeArray)
+0:207          'pf3' ( temp 3-component vector of float)
+0:209      move second child to first child ( temp 2-component vector of float)
+0:209        'lod' ( temp 2-component vector of float)
+0:209        textureQueryLod ( global 2-component vector of float)
+0:209          'samp1Ds' ( uniform sampler1DShadow)
+0:209          'pf' ( temp float)
+0:210      move second child to first child ( temp 2-component vector of float)
+0:210        'lod' ( temp 2-component vector of float)
+0:210        textureQueryLod ( global 2-component vector of float)
+0:210          'samp2Ds' ( uniform sampler2DShadow)
+0:210          'pf2' ( temp 2-component vector of float)
+0:211      move second child to first child ( temp 2-component vector of float)
+0:211        'lod' ( temp 2-component vector of float)
+0:211        textureQueryLod ( global 2-component vector of float)
+0:211          'sampCubes' ( uniform samplerCubeShadow)
+0:211          'pf3' ( temp 3-component vector of float)
+0:212      move second child to first child ( temp 2-component vector of float)
+0:212        'lod' ( temp 2-component vector of float)
+0:212        textureQueryLod ( global 2-component vector of float)
+0:212          'samp1DAs' ( uniform sampler1DArrayShadow)
+0:212          'pf' ( temp float)
+0:213      move second child to first child ( temp 2-component vector of float)
+0:213        'lod' ( temp 2-component vector of float)
+0:213        textureQueryLod ( global 2-component vector of float)
+0:213          'samp2DAs' ( uniform sampler2DArrayShadow)
+0:213          'pf2' ( temp 2-component vector of float)
+0:214      move second child to first child ( temp 2-component vector of float)
+0:214        'lod' ( temp 2-component vector of float)
+0:214        textureQueryLod ( global 2-component vector of float)
+0:214          'sampCubeAs' ( uniform samplerCubeArrayShadow)
+0:214          'pf3' ( temp 3-component vector of float)
+0:216      'lod' ( temp 2-component vector of float)
+0:217      'lod' ( temp 2-component vector of float)
+0:223  Function Definition: bitwiseConv( ( global void)
+0:223    Function Parameters: 
+0:225    Sequence
+0:225      move second child to first child ( temp uint)
+0:225        'iout' ( out uint)
+0:225        bitwise and ( temp uint)
+0:225          'uu' ( uniform uint)
+0:225          Convert int to uint ( temp uint)
+0:225            'i' ( flat in int)
+0:226      add second child into first child ( temp uint)
+0:226        'iout' ( out uint)
+0:226        exclusive-or ( temp uint)
+0:226          'uu' ( uniform uint)
+0:226          Convert int to uint ( temp uint)
+0:226            'i' ( flat in int)
+0:227      add second child into first child ( temp uint)
+0:227        'iout' ( out uint)
+0:227        inclusive-or ( temp uint)
+0:227          Convert int to uint ( temp uint)
+0:227            'i' ( flat in int)
+0:227          'uu' ( uniform uint)
+0:231  Function Definition: subT1( ( temp float)
+0:231    Function Parameters: 
+0:231    Sequence
+0:231      Branch: Return with expression
+0:231        Constant:
+0:231          1.000000
+0:232  Function Definition: subT2( ( temp float)
+0:232    Function Parameters: 
+0:232    Sequence
+0:232      Branch: Return with expression
+0:232        Constant:
+0:232          1.000000
 0:?   Linker Objects
 0:?     'c2D' ( smooth in 2-component vector of float)
 0:?     'i' ( flat in int)
@@ -512,6 +556,9 @@
 0:?     'arrayedSampler' ( uniform 5-element array of sampler2D)
 0:?     'samp2dr' ( uniform usampler2DRect)
 0:?     'isamp2DA' ( uniform isampler2DArray)
+0:?     'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer int atomi, layout( column_major shared) buffer uint atomu})
+0:?     'ssboStd430Arr' (layout( column_major shared) buffer 2-element array of block{layout( column_major shared) buffer int member01, layout( column_major shared) buffer 2-element array of int memberArr01, layout( column_major shared) buffer unsized 1-element array of int memberUnsizedArr01})
+0:?     'ssboSharedArr' (layout( column_major shared) buffer 2-element array of block{layout( column_major shared) buffer int member02, layout( column_major shared) buffer 2-element array of int memberArr02, layout( column_major shared) buffer unsized 1-element array of int memberUnsizedArr02})
 0:?     'gl_ClipDistance' ( smooth in 4-element array of float ClipDistance)
 0:?     'vl' (layout( location=4) smooth in 4-component vector of float)
 0:?     'vl2' (layout( location=6) smooth in 4-component vector of float)
@@ -558,128 +605,129 @@
 Shader version: 400
 Requested GL_ARB_derivative_control
 Requested GL_ARB_separate_shader_objects
+Requested GL_ARB_shader_storage_buffer_object
 gl_FragCoord pixel center is integer
 gl_FragCoord origin is upper left
 ERROR: node is still EOpNull!
-0:10  Function Definition: main( ( global void)
-0:10    Function Parameters: 
+0:43  Function Definition: main( ( global void)
+0:43    Function Parameters: 
 0:?     Sequence
-0:13      move second child to first child ( temp 4-component vector of float)
-0:13        'v' ( temp 4-component vector of float)
-0:13        texture ( global 4-component vector of float)
-0:13          indirect index ( temp sampler2D)
-0:13            'arrayedSampler' ( uniform 5-element array of sampler2D)
-0:13            'i' ( flat in int)
-0:13          'c2D' ( smooth in 2-component vector of float)
-0:14      move second child to first child ( temp float)
-0:14        direct index ( temp float)
-0:14          'outp' ( out 4-component vector of float)
-0:14          Constant:
-0:14            0 (const int)
-0:14        direct index ( smooth temp float ClipDistance)
-0:14          'gl_ClipDistance' ( smooth in 4-element array of float ClipDistance)
-0:14          Constant:
-0:14            1 (const int)
-0:18      Sequence
-0:18        move second child to first child ( temp 4-component vector of uint)
-0:18          'uv4' ( temp 4-component vector of uint)
-0:18          textureGatherOffsets ( global 4-component vector of uint)
-0:18            'samp2dr' ( uniform usampler2DRect)
-0:18            'c2D' ( smooth in 2-component vector of float)
-0:18            'offsets' ( temp 4-element array of 2-component vector of int)
-0:18            Constant:
-0:18              2 (const int)
-0:19      move second child to first child ( temp 4-component vector of uint)
-0:19        'uv4' ( temp 4-component vector of uint)
-0:19        textureGatherOffsets ( global 4-component vector of uint)
-0:19          'samp2dr' ( uniform usampler2DRect)
-0:19          'c2D' ( smooth in 2-component vector of float)
-0:19          Constant:
-0:19            1 (const int)
-0:19            2 (const int)
-0:19            3 (const int)
-0:19            4 (const int)
-0:19            15 (const int)
-0:19            16 (const int)
-0:19            -2 (const int)
-0:19            0 (const int)
-0:19          Constant:
-0:19            2 (const int)
-0:20      Sequence
-0:20        move second child to first child ( temp 4-component vector of float)
-0:20          'v4' ( temp 4-component vector of float)
-0:20          textureGather ( global 4-component vector of float)
-0:20            direct index ( temp sampler2D)
-0:20              'arrayedSampler' ( uniform 5-element array of sampler2D)
-0:20              Constant:
-0:20                0 (const int)
-0:20            'c2D' ( smooth in 2-component vector of float)
-0:21      Sequence
-0:21        move second child to first child ( temp 4-component vector of int)
-0:21          'iv4' ( temp 4-component vector of int)
-0:21          textureGatherOffset ( global 4-component vector of int)
-0:21            'isamp2DA' ( uniform isampler2DArray)
-0:21            Constant:
-0:21              0.100000
-0:21              0.100000
-0:21              0.100000
-0:21            Constant:
-0:21              1 (const int)
-0:21              1 (const int)
-0:21            Constant:
-0:21              3 (const int)
-0:22      move second child to first child ( temp 4-component vector of int)
-0:22        'iv4' ( temp 4-component vector of int)
-0:22        textureGatherOffset ( global 4-component vector of int)
-0:22          'isamp2DA' ( uniform isampler2DArray)
-0:22          Constant:
-0:22            0.100000
-0:22            0.100000
-0:22            0.100000
-0:22          Constant:
-0:22            1 (const int)
-0:22            1 (const int)
-0:22          'i' ( flat in int)
-0:23      move second child to first child ( temp 4-component vector of int)
-0:23        'iv4' ( temp 4-component vector of int)
-0:23        textureGatherOffset ( global 4-component vector of int)
-0:23          'isamp2DA' ( uniform isampler2DArray)
-0:23          Constant:
-0:23            0.100000
-0:23            0.100000
-0:23            0.100000
-0:23          Constant:
-0:23            1 (const int)
-0:23            1 (const int)
-0:23          Constant:
-0:23            4 (const int)
-0:24      move second child to first child ( temp 4-component vector of int)
-0:24        'iv4' ( temp 4-component vector of int)
-0:24        textureGatherOffset ( global 4-component vector of int)
-0:24          'isamp2DA' ( uniform isampler2DArray)
-0:24          Constant:
-0:24            0.100000
-0:24            0.100000
-0:24            0.100000
-0:24          Constant:
-0:24            1 (const int)
-0:24            1 (const int)
-0:24          Constant:
-0:24            3 (const int)
-0:25      move second child to first child ( temp 4-component vector of int)
-0:25        'iv4' ( temp 4-component vector of int)
-0:25        textureGatherOffset ( global 4-component vector of int)
-0:25          'isamp2DA' ( uniform isampler2DArray)
-0:25          Constant:
-0:25            0.100000
-0:25            0.100000
-0:25            0.100000
-0:25          Construct ivec2 ( temp 2-component vector of int)
-0:25            'i' ( flat in int)
-0:27      Sequence
-0:27        move second child to first child ( temp 4-component vector of float)
-0:27          'c' ( temp 4-component vector of float)
-0:27          'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)
+0:46      move second child to first child ( temp 4-component vector of float)
+0:46        'v' ( temp 4-component vector of float)
+0:46        texture ( global 4-component vector of float)
+0:46          indirect index ( temp sampler2D)
+0:46            'arrayedSampler' ( uniform 5-element array of sampler2D)
+0:46            'i' ( flat in int)
+0:46          'c2D' ( smooth in 2-component vector of float)
+0:47      move second child to first child ( temp float)
+0:47        direct index ( temp float)
+0:47          'outp' ( out 4-component vector of float)
+0:47          Constant:
+0:47            0 (const int)
+0:47        direct index ( smooth temp float ClipDistance)
+0:47          'gl_ClipDistance' ( smooth in 4-element array of float ClipDistance)
+0:47          Constant:
+0:47            1 (const int)
+0:51      Sequence
+0:51        move second child to first child ( temp 4-component vector of uint)
+0:51          'uv4' ( temp 4-component vector of uint)
+0:51          textureGatherOffsets ( global 4-component vector of uint)
+0:51            'samp2dr' ( uniform usampler2DRect)
+0:51            'c2D' ( smooth in 2-component vector of float)
+0:51            'offsets' ( temp 4-element array of 2-component vector of int)
+0:51            Constant:
+0:51              2 (const int)
+0:52      move second child to first child ( temp 4-component vector of uint)
+0:52        'uv4' ( temp 4-component vector of uint)
+0:52        textureGatherOffsets ( global 4-component vector of uint)
+0:52          'samp2dr' ( uniform usampler2DRect)
+0:52          'c2D' ( smooth in 2-component vector of float)
+0:52          Constant:
+0:52            1 (const int)
+0:52            2 (const int)
+0:52            3 (const int)
+0:52            4 (const int)
+0:52            15 (const int)
+0:52            16 (const int)
+0:52            -2 (const int)
+0:52            0 (const int)
+0:52          Constant:
+0:52            2 (const int)
+0:53      Sequence
+0:53        move second child to first child ( temp 4-component vector of float)
+0:53          'v4' ( temp 4-component vector of float)
+0:53          textureGather ( global 4-component vector of float)
+0:53            direct index ( temp sampler2D)
+0:53              'arrayedSampler' ( uniform 5-element array of sampler2D)
+0:53              Constant:
+0:53                0 (const int)
+0:53            'c2D' ( smooth in 2-component vector of float)
+0:54      Sequence
+0:54        move second child to first child ( temp 4-component vector of int)
+0:54          'iv4' ( temp 4-component vector of int)
+0:54          textureGatherOffset ( global 4-component vector of int)
+0:54            'isamp2DA' ( uniform isampler2DArray)
+0:54            Constant:
+0:54              0.100000
+0:54              0.100000
+0:54              0.100000
+0:54            Constant:
+0:54              1 (const int)
+0:54              1 (const int)
+0:54            Constant:
+0:54              3 (const int)
+0:55      move second child to first child ( temp 4-component vector of int)
+0:55        'iv4' ( temp 4-component vector of int)
+0:55        textureGatherOffset ( global 4-component vector of int)
+0:55          'isamp2DA' ( uniform isampler2DArray)
+0:55          Constant:
+0:55            0.100000
+0:55            0.100000
+0:55            0.100000
+0:55          Constant:
+0:55            1 (const int)
+0:55            1 (const int)
+0:55          'i' ( flat in int)
+0:56      move second child to first child ( temp 4-component vector of int)
+0:56        'iv4' ( temp 4-component vector of int)
+0:56        textureGatherOffset ( global 4-component vector of int)
+0:56          'isamp2DA' ( uniform isampler2DArray)
+0:56          Constant:
+0:56            0.100000
+0:56            0.100000
+0:56            0.100000
+0:56          Constant:
+0:56            1 (const int)
+0:56            1 (const int)
+0:56          Constant:
+0:56            4 (const int)
+0:57      move second child to first child ( temp 4-component vector of int)
+0:57        'iv4' ( temp 4-component vector of int)
+0:57        textureGatherOffset ( global 4-component vector of int)
+0:57          'isamp2DA' ( uniform isampler2DArray)
+0:57          Constant:
+0:57            0.100000
+0:57            0.100000
+0:57            0.100000
+0:57          Constant:
+0:57            1 (const int)
+0:57            1 (const int)
+0:57          Constant:
+0:57            3 (const int)
+0:58      move second child to first child ( temp 4-component vector of int)
+0:58        'iv4' ( temp 4-component vector of int)
+0:58        textureGatherOffset ( global 4-component vector of int)
+0:58          'isamp2DA' ( uniform isampler2DArray)
+0:58          Constant:
+0:58            0.100000
+0:58            0.100000
+0:58            0.100000
+0:58          Construct ivec2 ( temp 2-component vector of int)
+0:58            'i' ( flat in int)
+0:60      Sequence
+0:60        move second child to first child ( temp 4-component vector of float)
+0:60          'c' ( temp 4-component vector of float)
+0:60          'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord)
 0:?   Linker Objects
 0:?     'c2D' ( smooth in 2-component vector of float)
 0:?     'i' ( flat in int)
@@ -687,6 +735,9 @@
 0:?     'arrayedSampler' ( uniform 5-element array of sampler2D)
 0:?     'samp2dr' ( uniform usampler2DRect)
 0:?     'isamp2DA' ( uniform isampler2DArray)
+0:?     'anon@0' (layout( column_major shared) buffer block{layout( column_major shared) buffer int atomi, layout( column_major shared) buffer uint atomu})
+0:?     'ssboStd430Arr' (layout( column_major shared) buffer 2-element array of block{layout( column_major shared) buffer int member01, layout( column_major shared) buffer 2-element array of int memberArr01, layout( column_major shared) buffer unsized 1-element array of int memberUnsizedArr01})
+0:?     'ssboSharedArr' (layout( column_major shared) buffer 2-element array of block{layout( column_major shared) buffer int member02, layout( column_major shared) buffer 2-element array of int memberArr02, layout( column_major shared) buffer unsized 1-element array of int memberUnsizedArr02})
 0:?     'gl_ClipDistance' ( smooth in 4-element array of float ClipDistance)
 0:?     'vl' (layout( location=4) smooth in 4-component vector of float)
 0:?     'vl2' (layout( location=6) smooth in 4-component vector of float)
diff --git a/Test/baseResults/440.frag.out b/Test/baseResults/440.frag.out
index 7ea1926..9de029a 100644
--- a/Test/baseResults/440.frag.out
+++ b/Test/baseResults/440.frag.out
@@ -1,7 +1,7 @@
 440.frag
 ERROR: 0:11: 'location' : overlapping use of location 4
 ERROR: 0:13: 'component' : type overflows the available 4 components 
-ERROR: 0:22: 'location' : fragment outputs or tileImageEXTs sharing the same location 30 must be the same basic type
+ERROR: 0:22: 'location' : the aliases sharing the location 30 must be the same basic type and interpolation qualification
 ERROR: 0:24: 'qualifier' : cannot use auxiliary, memory, interpolation, or precision qualifier in a default qualifier declaration (declaration with no type) 
 ERROR: 0:25: 'qualifier' : cannot use auxiliary, memory, interpolation, or precision qualifier in a default qualifier declaration (declaration with no type) 
 ERROR: 0:26: 'qualifier' : cannot use auxiliary, memory, interpolation, or precision qualifier in a default qualifier declaration (declaration with no type) 
diff --git a/Test/baseResults/440.vert.out b/Test/baseResults/440.vert.out
index 6c975c0..f341548 100644
--- a/Test/baseResults/440.vert.out
+++ b/Test/baseResults/440.vert.out
@@ -10,16 +10,21 @@
 ERROR: 0:40: 'component' : type overflows the available 4 components 
 ERROR: 0:42: 'component' : cannot apply to a matrix, structure, or block 
 ERROR: 0:43: 'component' : cannot apply to a matrix, structure, or block 
+ERROR: 0:43: 'location' : the aliases sharing the location 33 must be the same basic type and interpolation qualification
 ERROR: 0:44: 'component' : cannot apply to a matrix, structure, or block 
+ERROR: 0:44: 'location' : the aliases sharing the location 34 must be the same basic type and interpolation qualification
 ERROR: 0:46: 'component' : must specify 'location' to use 'component' 
 ERROR: 0:52: 'location' : overlapping use of location 40
 ERROR: 0:54: 'component' : type overflows the available 4 components 
 ERROR: 0:55: 'component' : type overflows the available 4 components 
 ERROR: 0:57: 'component' : cannot apply to a matrix, structure, or block 
 ERROR: 0:58: 'component' : cannot apply to a matrix, structure, or block 
+ERROR: 0:58: 'location' : the aliases sharing the location 43 must be the same basic type and interpolation qualification
 ERROR: 0:61: 'location/component/index' : cannot declare a default, use a full declaration 
+ERROR: 0:64: 'location' : the aliases sharing the location 50 must be the same basic type and interpolation qualification
 ERROR: 0:66: 'component' : doubles cannot start on an odd-numbered component 
 ERROR: 0:67: 'component' : type overflows the available 4 components 
+ERROR: 0:69: 'location' : the aliases sharing the location 53 must be the same basic type and interpolation qualification
 ERROR: 0:71: 'location' : overlapping use of location 55
 ERROR: 0:75: 'location' : overlapping use of location 57
 ERROR: 0:78: 'location' : overlapping use of location 59
@@ -56,7 +61,7 @@
 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.
+ERROR: 62 compilation errors.  No code generated.
 
 
 Shader version: 440
diff --git a/Test/baseResults/460.frag.out b/Test/baseResults/460.frag.out
index 8670e6e..ced3bb8 100644
--- a/Test/baseResults/460.frag.out
+++ b/Test/baseResults/460.frag.out
@@ -1,5 +1,7 @@
 460.frag
-ERROR: 0:22: 'attribute' : required extension not requested: GL_EXT_control_flow_attributes
+ERROR: 0:22: 'attribute' : required extension not requested: Possible extensions include:
+GL_EXT_control_flow_attributes
+GL_EXT_control_flow_attributes2
 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 
diff --git a/Test/baseResults/GL_ARB_texture_multisample.vert.out b/Test/baseResults/GL_ARB_texture_multisample.vert.out
new file mode 100644
index 0000000..16912a4
--- /dev/null
+++ b/Test/baseResults/GL_ARB_texture_multisample.vert.out
@@ -0,0 +1,245 @@
+GL_ARB_texture_multisample.vert
+Shader version: 140
+Requested GL_ARB_texture_multisample
+0:? Sequence
+0:14  Function Definition: main( ( global void)
+0:14    Function Parameters: 
+0:16    Sequence
+0:16      move second child to first child ( temp float)
+0:16        'result' ( smooth out float)
+0:16        direct index ( temp float)
+0:16          textureFetch ( global 4-component vector of float)
+0:16            'data' ( uniform sampler2DMS)
+0:16            Constant:
+0:16              0 (const int)
+0:16              0 (const int)
+0:16            Constant:
+0:16              3 (const int)
+0:16          Constant:
+0:16            0 (const int)
+0:17      Sequence
+0:17        move second child to first child ( temp 2-component vector of int)
+0:17          'temp' ( temp 2-component vector of int)
+0:17          textureSize ( global 2-component vector of int)
+0:17            'data' ( uniform sampler2DMS)
+0:18      move second child to first child ( temp float)
+0:18        'result' ( smooth out float)
+0:18        direct index ( temp float)
+0:18          textureFetch ( global 4-component vector of float)
+0:18            'data1' ( uniform sampler2DMSArray)
+0:18            Constant:
+0:18              0 (const int)
+0:18              0 (const int)
+0:18              0 (const int)
+0:18            Constant:
+0:18              3 (const int)
+0:18          Constant:
+0:18            0 (const int)
+0:19      Sequence
+0:19        move second child to first child ( temp 3-component vector of int)
+0:19          'temp1' ( temp 3-component vector of int)
+0:19          textureSize ( global 3-component vector of int)
+0:19            'data1' ( uniform sampler2DMSArray)
+0:20      move second child to first child ( temp int)
+0:20        'result1' ( smooth out int)
+0:20        direct index ( temp int)
+0:20          textureFetch ( global 4-component vector of int)
+0:20            'data2' ( uniform isampler2DMS)
+0:20            Constant:
+0:20              0 (const int)
+0:20              0 (const int)
+0:20            Constant:
+0:20              3 (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        'temp' ( temp 2-component vector of int)
+0:21        textureSize ( global 2-component vector of int)
+0:21          'data2' ( uniform isampler2DMS)
+0:22      move second child to first child ( temp uint)
+0:22        'result2' ( smooth out uint)
+0:22        direct index ( temp uint)
+0:22          textureFetch ( global 4-component vector of uint)
+0:22            'data3' ( uniform usampler2DMSArray)
+0:22            Constant:
+0:22              0 (const int)
+0:22              0 (const int)
+0:22              0 (const int)
+0:22            Constant:
+0:22              3 (const int)
+0:22          Constant:
+0:22            0 (const int)
+0:23      move second child to first child ( temp 3-component vector of int)
+0:23        'temp1' ( temp 3-component vector of int)
+0:23        textureSize ( global 3-component vector of int)
+0:23          'data3' ( uniform usampler2DMSArray)
+0:24      move second child to first child ( temp uint)
+0:24        'result2' ( smooth out uint)
+0:24        direct index ( temp uint)
+0:24          textureFetch ( global 4-component vector of uint)
+0:24            'data4' ( uniform usampler2DMS)
+0:24            Constant:
+0:24              0 (const int)
+0:24              0 (const int)
+0:24            Constant:
+0:24              3 (const int)
+0:24          Constant:
+0:24            0 (const int)
+0:25      move second child to first child ( temp 2-component vector of int)
+0:25        'temp' ( temp 2-component vector of int)
+0:25        textureSize ( global 2-component vector of int)
+0:25          'data4' ( uniform usampler2DMS)
+0:26      move second child to first child ( temp int)
+0:26        'result1' ( smooth out int)
+0:26        direct index ( temp int)
+0:26          textureFetch ( global 4-component vector of int)
+0:26            'data5' ( uniform isampler2DMSArray)
+0:26            Constant:
+0:26              0 (const int)
+0:26              0 (const int)
+0:26              0 (const int)
+0:26            Constant:
+0:26              3 (const int)
+0:26          Constant:
+0:26            0 (const int)
+0:27      move second child to first child ( temp 3-component vector of int)
+0:27        'temp1' ( temp 3-component vector of int)
+0:27        textureSize ( global 3-component vector of int)
+0:27          'data5' ( uniform isampler2DMSArray)
+0:?   Linker Objects
+0:?     'result' ( smooth out float)
+0:?     'result1' ( smooth out int)
+0:?     'result2' ( smooth out uint)
+0:?     'data' ( uniform sampler2DMS)
+0:?     'data1' ( uniform sampler2DMSArray)
+0:?     'data2' ( uniform isampler2DMS)
+0:?     'data3' ( uniform usampler2DMSArray)
+0:?     'data4' ( uniform usampler2DMS)
+0:?     'data5' ( uniform isampler2DMSArray)
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
+
+Linked vertex stage:
+
+
+Shader version: 140
+Requested GL_ARB_texture_multisample
+0:? Sequence
+0:14  Function Definition: main( ( global void)
+0:14    Function Parameters: 
+0:16    Sequence
+0:16      move second child to first child ( temp float)
+0:16        'result' ( smooth out float)
+0:16        direct index ( temp float)
+0:16          textureFetch ( global 4-component vector of float)
+0:16            'data' ( uniform sampler2DMS)
+0:16            Constant:
+0:16              0 (const int)
+0:16              0 (const int)
+0:16            Constant:
+0:16              3 (const int)
+0:16          Constant:
+0:16            0 (const int)
+0:17      Sequence
+0:17        move second child to first child ( temp 2-component vector of int)
+0:17          'temp' ( temp 2-component vector of int)
+0:17          textureSize ( global 2-component vector of int)
+0:17            'data' ( uniform sampler2DMS)
+0:18      move second child to first child ( temp float)
+0:18        'result' ( smooth out float)
+0:18        direct index ( temp float)
+0:18          textureFetch ( global 4-component vector of float)
+0:18            'data1' ( uniform sampler2DMSArray)
+0:18            Constant:
+0:18              0 (const int)
+0:18              0 (const int)
+0:18              0 (const int)
+0:18            Constant:
+0:18              3 (const int)
+0:18          Constant:
+0:18            0 (const int)
+0:19      Sequence
+0:19        move second child to first child ( temp 3-component vector of int)
+0:19          'temp1' ( temp 3-component vector of int)
+0:19          textureSize ( global 3-component vector of int)
+0:19            'data1' ( uniform sampler2DMSArray)
+0:20      move second child to first child ( temp int)
+0:20        'result1' ( smooth out int)
+0:20        direct index ( temp int)
+0:20          textureFetch ( global 4-component vector of int)
+0:20            'data2' ( uniform isampler2DMS)
+0:20            Constant:
+0:20              0 (const int)
+0:20              0 (const int)
+0:20            Constant:
+0:20              3 (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        'temp' ( temp 2-component vector of int)
+0:21        textureSize ( global 2-component vector of int)
+0:21          'data2' ( uniform isampler2DMS)
+0:22      move second child to first child ( temp uint)
+0:22        'result2' ( smooth out uint)
+0:22        direct index ( temp uint)
+0:22          textureFetch ( global 4-component vector of uint)
+0:22            'data3' ( uniform usampler2DMSArray)
+0:22            Constant:
+0:22              0 (const int)
+0:22              0 (const int)
+0:22              0 (const int)
+0:22            Constant:
+0:22              3 (const int)
+0:22          Constant:
+0:22            0 (const int)
+0:23      move second child to first child ( temp 3-component vector of int)
+0:23        'temp1' ( temp 3-component vector of int)
+0:23        textureSize ( global 3-component vector of int)
+0:23          'data3' ( uniform usampler2DMSArray)
+0:24      move second child to first child ( temp uint)
+0:24        'result2' ( smooth out uint)
+0:24        direct index ( temp uint)
+0:24          textureFetch ( global 4-component vector of uint)
+0:24            'data4' ( uniform usampler2DMS)
+0:24            Constant:
+0:24              0 (const int)
+0:24              0 (const int)
+0:24            Constant:
+0:24              3 (const int)
+0:24          Constant:
+0:24            0 (const int)
+0:25      move second child to first child ( temp 2-component vector of int)
+0:25        'temp' ( temp 2-component vector of int)
+0:25        textureSize ( global 2-component vector of int)
+0:25          'data4' ( uniform usampler2DMS)
+0:26      move second child to first child ( temp int)
+0:26        'result1' ( smooth out int)
+0:26        direct index ( temp int)
+0:26          textureFetch ( global 4-component vector of int)
+0:26            'data5' ( uniform isampler2DMSArray)
+0:26            Constant:
+0:26              0 (const int)
+0:26              0 (const int)
+0:26              0 (const int)
+0:26            Constant:
+0:26              3 (const int)
+0:26          Constant:
+0:26            0 (const int)
+0:27      move second child to first child ( temp 3-component vector of int)
+0:27        'temp1' ( temp 3-component vector of int)
+0:27        textureSize ( global 3-component vector of int)
+0:27          'data5' ( uniform isampler2DMSArray)
+0:?   Linker Objects
+0:?     'result' ( smooth out float)
+0:?     'result1' ( smooth out int)
+0:?     'result2' ( smooth out uint)
+0:?     'data' ( uniform sampler2DMS)
+0:?     'data1' ( uniform sampler2DMSArray)
+0:?     'data2' ( uniform isampler2DMS)
+0:?     'data3' ( uniform usampler2DMSArray)
+0:?     'data4' ( uniform usampler2DMS)
+0:?     'data5' ( uniform isampler2DMSArray)
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
diff --git a/Test/baseResults/GL_EXT_draw_instanced.vert.out b/Test/baseResults/GL_EXT_draw_instanced.vert.out
new file mode 100644
index 0000000..cce01a1
--- /dev/null
+++ b/Test/baseResults/GL_EXT_draw_instanced.vert.out
@@ -0,0 +1,173 @@
+GL_EXT_draw_instanced.vert
+Shader version: 120
+Requested GL_EXT_draw_instanced
+0:? Sequence
+0:10  Function Definition: main( ( global void)
+0:10    Function Parameters: 
+0:12    Sequence
+0:12      Sequence
+0:12        move second child to first child ( temp 4-component vector of float)
+0:12          'vertex' ( temp 4-component vector of float)
+0:12          add ( temp 4-component vector of float)
+0:12            Construct vec4 ( temp 4-component vector of float)
+0:12              divide ( temp 2-component vector of float)
+0:12                vector swizzle ( temp 2-component vector of float)
+0:12                  direct index ( temp 4-component vector of float)
+0:12                    'va' ( uniform 64-element array of 4-component vector of float)
+0:12                    Constant:
+0:12                      0 (const int)
+0:12                  Sequence
+0:12                    Constant:
+0:12                      0 (const int)
+0:12                    Constant:
+0:12                      1 (const int)
+0:12                Constant:
+0:12                  3.000000
+0:12              vector swizzle ( temp 2-component vector of float)
+0:12                direct index ( temp 4-component vector of float)
+0:12                  'va' ( uniform 64-element array of 4-component vector of float)
+0:12                  Constant:
+0:12                    0 (const int)
+0:12                Sequence
+0:12                  Constant:
+0:12                    2 (const int)
+0:12                  Constant:
+0:12                    3 (const int)
+0:12            Construct vec4 ( temp 4-component vector of float)
+0:12              indirect index ( temp 3-component vector of float)
+0:12                'instanceOffsets' ( uniform 3-element array of 3-component vector of float)
+0:12                'gl_InstanceID' ( gl_InstanceId int InstanceId)
+0:12              Constant:
+0:12                1.000000
+0:13      move second child to first child ( temp 4-component vector of float)
+0:13        'color' ( global 4-component vector of float)
+0:13        Constant:
+0:13          0.000000
+0:13          0.000000
+0:13          0.000000
+0:13          0.000000
+0:14      Sequence
+0:14        Sequence
+0:14          move second child to first child ( temp int)
+0:14            'i' ( temp int)
+0:14            Constant:
+0:14              1 (const int)
+0:14        Loop with condition tested first
+0:14          Loop Condition
+0:14          Compare Less Than ( temp bool)
+0:14            'i' ( temp int)
+0:14            Constant:
+0:14              64 (const int)
+0:14          Loop Body
+0:15          add second child into first child ( temp 4-component vector of float)
+0:15            'color' ( global 4-component vector of float)
+0:15            indirect index ( temp 4-component vector of float)
+0:15              'va' ( uniform 64-element array of 4-component vector of float)
+0:15              'i' ( temp int)
+0:14          Loop Terminal Expression
+0:14          Post-Increment ( temp int)
+0:14            'i' ( temp int)
+0:16      move second child to first child ( temp 4-component vector of float)
+0:16        'gl_Position' ( gl_Position 4-component vector of float Position)
+0:16        matrix-times-vector ( temp 4-component vector of float)
+0:16          'gtf_ModelViewProjectionMatrix' ( uniform 4X4 matrix of float)
+0:16          'vertex' ( temp 4-component vector of float)
+0:17      move second child to first child ( temp float)
+0:17        'gl_PointSize' ( gl_PointSize float PointSize)
+0:17        Constant:
+0:17          1.000000
+0:?   Linker Objects
+0:?     'gtf_ModelViewProjectionMatrix' ( uniform 4X4 matrix of float)
+0:?     'instanceOffsets' ( uniform 3-element array of 3-component vector of float)
+0:?     'va' ( uniform 64-element array of 4-component vector of float)
+0:?     'color' ( global 4-component vector of float)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
+
+Linked vertex stage:
+
+
+Shader version: 120
+Requested GL_EXT_draw_instanced
+0:? Sequence
+0:10  Function Definition: main( ( global void)
+0:10    Function Parameters: 
+0:12    Sequence
+0:12      Sequence
+0:12        move second child to first child ( temp 4-component vector of float)
+0:12          'vertex' ( temp 4-component vector of float)
+0:12          add ( temp 4-component vector of float)
+0:12            Construct vec4 ( temp 4-component vector of float)
+0:12              divide ( temp 2-component vector of float)
+0:12                vector swizzle ( temp 2-component vector of float)
+0:12                  direct index ( temp 4-component vector of float)
+0:12                    'va' ( uniform 64-element array of 4-component vector of float)
+0:12                    Constant:
+0:12                      0 (const int)
+0:12                  Sequence
+0:12                    Constant:
+0:12                      0 (const int)
+0:12                    Constant:
+0:12                      1 (const int)
+0:12                Constant:
+0:12                  3.000000
+0:12              vector swizzle ( temp 2-component vector of float)
+0:12                direct index ( temp 4-component vector of float)
+0:12                  'va' ( uniform 64-element array of 4-component vector of float)
+0:12                  Constant:
+0:12                    0 (const int)
+0:12                Sequence
+0:12                  Constant:
+0:12                    2 (const int)
+0:12                  Constant:
+0:12                    3 (const int)
+0:12            Construct vec4 ( temp 4-component vector of float)
+0:12              indirect index ( temp 3-component vector of float)
+0:12                'instanceOffsets' ( uniform 3-element array of 3-component vector of float)
+0:12                'gl_InstanceID' ( gl_InstanceId int InstanceId)
+0:12              Constant:
+0:12                1.000000
+0:13      move second child to first child ( temp 4-component vector of float)
+0:13        'color' ( global 4-component vector of float)
+0:13        Constant:
+0:13          0.000000
+0:13          0.000000
+0:13          0.000000
+0:13          0.000000
+0:14      Sequence
+0:14        Sequence
+0:14          move second child to first child ( temp int)
+0:14            'i' ( temp int)
+0:14            Constant:
+0:14              1 (const int)
+0:14        Loop with condition tested first
+0:14          Loop Condition
+0:14          Compare Less Than ( temp bool)
+0:14            'i' ( temp int)
+0:14            Constant:
+0:14              64 (const int)
+0:14          Loop Body
+0:15          add second child into first child ( temp 4-component vector of float)
+0:15            'color' ( global 4-component vector of float)
+0:15            indirect index ( temp 4-component vector of float)
+0:15              'va' ( uniform 64-element array of 4-component vector of float)
+0:15              'i' ( temp int)
+0:14          Loop Terminal Expression
+0:14          Post-Increment ( temp int)
+0:14            'i' ( temp int)
+0:16      move second child to first child ( temp 4-component vector of float)
+0:16        'gl_Position' ( gl_Position 4-component vector of float Position)
+0:16        matrix-times-vector ( temp 4-component vector of float)
+0:16          'gtf_ModelViewProjectionMatrix' ( uniform 4X4 matrix of float)
+0:16          'vertex' ( temp 4-component vector of float)
+0:17      move second child to first child ( temp float)
+0:17        'gl_PointSize' ( gl_PointSize float PointSize)
+0:17        Constant:
+0:17          1.000000
+0:?   Linker Objects
+0:?     'gtf_ModelViewProjectionMatrix' ( uniform 4X4 matrix of float)
+0:?     'instanceOffsets' ( uniform 3-element array of 3-component vector of float)
+0:?     'va' ( uniform 64-element array of 4-component vector of float)
+0:?     'color' ( global 4-component vector of float)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
diff --git a/Test/baseResults/GL_EXT_texture_array.frag.out b/Test/baseResults/GL_EXT_texture_array.frag.out
new file mode 100644
index 0000000..977d932
--- /dev/null
+++ b/Test/baseResults/GL_EXT_texture_array.frag.out
@@ -0,0 +1,149 @@
+GL_EXT_texture_array.frag
+Shader version: 110
+Requested GL_EXT_texture_array
+0:? Sequence
+0:10  Function Definition: foo( ( global void)
+0:10    Function Parameters: 
+0:?     Sequence
+0:17      move second child to first child ( temp 4-component vector of float)
+0:17        'v4' ( temp 4-component vector of float)
+0:17        texture ( global 4-component vector of float)
+0:17          's1DA' ( uniform sampler1DArray)
+0:17          'v2' ( temp 2-component vector of float)
+0:18      move second child to first child ( temp 4-component vector of float)
+0:18        'v4' ( temp 4-component vector of float)
+0:18        texture ( global 4-component vector of float)
+0:18          's2DA' ( uniform sampler2DArray)
+0:18          'v3' ( temp 3-component vector of float)
+0:19      move second child to first child ( temp 4-component vector of float)
+0:19        'v4' ( temp 4-component vector of float)
+0:19        texture ( global 4-component vector of float)
+0:19          's1DAS' ( uniform sampler1DArrayShadow)
+0:19          'v3' ( temp 3-component vector of float)
+0:20      move second child to first child ( temp 4-component vector of float)
+0:20        'v4' ( temp 4-component vector of float)
+0:20        texture ( global 4-component vector of float)
+0:20          's2DAS' ( uniform sampler2DArrayShadow)
+0:20          'v4' ( temp 4-component vector of float)
+0:22      move second child to first child ( temp 4-component vector of float)
+0:22        'v4' ( temp 4-component vector of float)
+0:22        texture ( global 4-component vector of float)
+0:22          's1DA' ( uniform sampler1DArray)
+0:22          'v2' ( temp 2-component vector of float)
+0:22          'f' ( temp float)
+0:23      move second child to first child ( temp 4-component vector of float)
+0:23        'v4' ( temp 4-component vector of float)
+0:23        texture ( global 4-component vector of float)
+0:23          's2DA' ( uniform sampler2DArray)
+0:23          'v3' ( temp 3-component vector of float)
+0:23          'f' ( temp float)
+0:24      move second child to first child ( temp 4-component vector of float)
+0:24        'v4' ( temp 4-component vector of float)
+0:24        texture ( global 4-component vector of float)
+0:24          's1DAS' ( uniform sampler1DArrayShadow)
+0:24          'v3' ( temp 3-component vector of float)
+0:24          'f' ( temp float)
+0:26      move second child to first child ( temp 4-component vector of float)
+0:26        'v4' ( temp 4-component vector of float)
+0:26        textureLod ( global 4-component vector of float)
+0:26          's1DA' ( uniform sampler1DArray)
+0:26          'v2' ( temp 2-component vector of float)
+0:26          'f' ( temp float)
+0:27      move second child to first child ( temp 4-component vector of float)
+0:27        'v4' ( temp 4-component vector of float)
+0:27        textureLod ( global 4-component vector of float)
+0:27          's2DA' ( uniform sampler2DArray)
+0:27          'v3' ( temp 3-component vector of float)
+0:27          'f' ( temp float)
+0:28      move second child to first child ( temp 4-component vector of float)
+0:28        'v4' ( temp 4-component vector of float)
+0:28        textureLod ( global 4-component vector of float)
+0:28          's1DAS' ( uniform sampler1DArrayShadow)
+0:28          'v3' ( temp 3-component vector of float)
+0:28          'f' ( temp float)
+0:31  Function Definition: main( ( global void)
+0:31    Function Parameters: 
+0:33    Sequence
+0:33      Function Call: foo( ( global void)
+0:?   Linker Objects
+0:?     's1DA' ( uniform sampler1DArray)
+0:?     's2DA' ( uniform sampler2DArray)
+0:?     's1DAS' ( uniform sampler1DArrayShadow)
+0:?     's2DAS' ( uniform sampler2DArrayShadow)
+
+
+Linked fragment stage:
+
+
+Shader version: 110
+Requested GL_EXT_texture_array
+0:? Sequence
+0:10  Function Definition: foo( ( global void)
+0:10    Function Parameters: 
+0:?     Sequence
+0:17      move second child to first child ( temp 4-component vector of float)
+0:17        'v4' ( temp 4-component vector of float)
+0:17        texture ( global 4-component vector of float)
+0:17          's1DA' ( uniform sampler1DArray)
+0:17          'v2' ( temp 2-component vector of float)
+0:18      move second child to first child ( temp 4-component vector of float)
+0:18        'v4' ( temp 4-component vector of float)
+0:18        texture ( global 4-component vector of float)
+0:18          's2DA' ( uniform sampler2DArray)
+0:18          'v3' ( temp 3-component vector of float)
+0:19      move second child to first child ( temp 4-component vector of float)
+0:19        'v4' ( temp 4-component vector of float)
+0:19        texture ( global 4-component vector of float)
+0:19          's1DAS' ( uniform sampler1DArrayShadow)
+0:19          'v3' ( temp 3-component vector of float)
+0:20      move second child to first child ( temp 4-component vector of float)
+0:20        'v4' ( temp 4-component vector of float)
+0:20        texture ( global 4-component vector of float)
+0:20          's2DAS' ( uniform sampler2DArrayShadow)
+0:20          'v4' ( temp 4-component vector of float)
+0:22      move second child to first child ( temp 4-component vector of float)
+0:22        'v4' ( temp 4-component vector of float)
+0:22        texture ( global 4-component vector of float)
+0:22          's1DA' ( uniform sampler1DArray)
+0:22          'v2' ( temp 2-component vector of float)
+0:22          'f' ( temp float)
+0:23      move second child to first child ( temp 4-component vector of float)
+0:23        'v4' ( temp 4-component vector of float)
+0:23        texture ( global 4-component vector of float)
+0:23          's2DA' ( uniform sampler2DArray)
+0:23          'v3' ( temp 3-component vector of float)
+0:23          'f' ( temp float)
+0:24      move second child to first child ( temp 4-component vector of float)
+0:24        'v4' ( temp 4-component vector of float)
+0:24        texture ( global 4-component vector of float)
+0:24          's1DAS' ( uniform sampler1DArrayShadow)
+0:24          'v3' ( temp 3-component vector of float)
+0:24          'f' ( temp float)
+0:26      move second child to first child ( temp 4-component vector of float)
+0:26        'v4' ( temp 4-component vector of float)
+0:26        textureLod ( global 4-component vector of float)
+0:26          's1DA' ( uniform sampler1DArray)
+0:26          'v2' ( temp 2-component vector of float)
+0:26          'f' ( temp float)
+0:27      move second child to first child ( temp 4-component vector of float)
+0:27        'v4' ( temp 4-component vector of float)
+0:27        textureLod ( global 4-component vector of float)
+0:27          's2DA' ( uniform sampler2DArray)
+0:27          'v3' ( temp 3-component vector of float)
+0:27          'f' ( temp float)
+0:28      move second child to first child ( temp 4-component vector of float)
+0:28        'v4' ( temp 4-component vector of float)
+0:28        textureLod ( global 4-component vector of float)
+0:28          's1DAS' ( uniform sampler1DArrayShadow)
+0:28          'v3' ( temp 3-component vector of float)
+0:28          'f' ( temp float)
+0:31  Function Definition: main( ( global void)
+0:31    Function Parameters: 
+0:33    Sequence
+0:33      Function Call: foo( ( global void)
+0:?   Linker Objects
+0:?     's1DA' ( uniform sampler1DArray)
+0:?     's2DA' ( uniform sampler2DArray)
+0:?     's1DAS' ( uniform sampler1DArrayShadow)
+0:?     's2DAS' ( uniform sampler2DArrayShadow)
+
diff --git a/Test/baseResults/UTF8BOM.vert.out b/Test/baseResults/UTF8BOM.vert.out
new file mode 100644
index 0000000..19db13f
--- /dev/null
+++ b/Test/baseResults/UTF8BOM.vert.out
@@ -0,0 +1 @@
+UTF8BOM.vert
diff --git a/Test/baseResults/constFoldIntMin.frag.out b/Test/baseResults/constFoldIntMin.frag.out
index 2c45ca8..e7dd353 100644
--- a/Test/baseResults/constFoldIntMin.frag.out
+++ b/Test/baseResults/constFoldIntMin.frag.out
@@ -25,7 +25,7 @@
 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:9            0 (const int16_t)
 0:10      Sequence
 0:10        move second child to first child ( temp int)
 0:10          'y' ( temp int)
diff --git a/Test/baseResults/cppBad.vert.out b/Test/baseResults/cppBad.vert.out
index 8ab04bc..e0a1504 100644
--- a/Test/baseResults/cppBad.vert.out
+++ b/Test/baseResults/cppBad.vert.out
@@ -1,5 +1,7 @@
 cppBad.vert
 WARNING: 0:1: '#define' : missing space after macro name 
+ERROR: 0:1: '#' : (#) can be preceded in its line only by spaces or horizontal tabs 
+ERROR: 0:2: '#' : (#) can be preceded in its line only by spaces or horizontal tabs 
 ERROR: 0:3: 'preprocessor evaluation' : bad expression 
 ERROR: 0:3: '#if' : unexpected tokens following directive 
 ERROR: 0:6: 'string' : End of line in string 
@@ -7,7 +9,7 @@
 GL_EXT_debug_printf
 GL_EXT_spirv_intrinsics
 ERROR: 0:6: '' :  syntax error, unexpected INT, expecting COMMA or SEMICOLON
-ERROR: 5 compilation errors.  No code generated.
+ERROR: 7 compilation errors.  No code generated.
 
 
 Shader version: 100
diff --git a/Test/baseResults/cppBad4.vert.out b/Test/baseResults/cppBad4.vert.out
index 693ea8e..23f149d 100644
--- a/Test/baseResults/cppBad4.vert.out
+++ b/Test/baseResults/cppBad4.vert.out
@@ -1,7 +1,8 @@
 cppBad4.vert
+ERROR: 0:2: '#' : (#) can be preceded in its line only by spaces or horizontal tabs 
 ERROR: 0:4: 'macro expansion' : unexpected '#' g
 ERROR: 0:5: '' :  syntax error, unexpected SEMICOLON, expecting LEFT_PAREN
-ERROR: 2 compilation errors.  No code generated.
+ERROR: 3 compilation errors.  No code generated.
 
 
 Shader version: 100
diff --git a/Test/baseResults/error-column.vert.out b/Test/baseResults/error-column.vert.out
new file mode 100644
index 0000000..6538e82
--- /dev/null
+++ b/Test/baseResults/error-column.vert.out
@@ -0,0 +1,12 @@
+error-column.vert
+ERROR: error-column.vert:7:16: 'model' : member storage qualifier cannot contradict block storage qualifier 
+ERROR: error-column.vert:8:16: 'view' : member storage qualifier cannot contradict block storage qualifier 
+ERROR: error-column.vert:9:16: 'projection' : member storage qualifier cannot contradict block storage qualifier 
+ERROR: error-column.vert:17:16: 'texCoord1' : member storage qualifier cannot contradict block storage qualifier 
+ERROR: error-column.vert:24:52: 'Pos' : undeclared identifier 
+ERROR: error-column.vert:24:60: 'constructor' : not enough data provided for construction 
+ERROR: error-column.vert:24:17: 'assign' :  cannot convert from ' temp highp 4X4 matrix of float' to ' gl_Position 4-component vector of float Position'
+ERROR: 7 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/findFunction.frag.out b/Test/baseResults/findFunction.frag.out
index cc9b15a..d7b06c4 100644
--- a/Test/baseResults/findFunction.frag.out
+++ b/Test/baseResults/findFunction.frag.out
@@ -20,7 +20,7 @@
 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        Convert int16_t to int64_t ( 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)
@@ -34,7 +34,7 @@
 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        Convert int to int64_t ( temp int64_t)
 0:12          inclusive-or ( temp int)
 0:12            Convert int8_t to int ( temp int)
 0:12              'a' ( in int8_t)
@@ -49,7 +49,7 @@
 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        Convert int to int64_t ( temp int64_t)
 0:17          add ( temp int)
 0:17            divide ( temp int)
 0:17              'a' ( in int)
@@ -62,7 +62,7 @@
 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        Convert float to int64_t ( temp int64_t)
 0:22          subtract ( temp float)
 0:22            Convert float16_t to float ( temp float)
 0:22              'a' ( in float16_t)
@@ -77,7 +77,7 @@
 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        Convert float to int64_t ( temp int64_t)
 0:27          subtract ( temp float)
 0:27            Convert float16_t to float ( temp float)
 0:27              'a' ( in float16_t)
@@ -146,7 +146,7 @@
 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        Convert int to int64_t ( temp int64_t)
 0:12          inclusive-or ( temp int)
 0:12            Convert int8_t to int ( temp int)
 0:12              'a' ( in int8_t)
@@ -161,7 +161,7 @@
 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        Convert float to int64_t ( temp int64_t)
 0:22          subtract ( temp float)
 0:22            Convert float16_t to float ( temp float)
 0:22              'a' ( in float16_t)
@@ -176,7 +176,7 @@
 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        Convert float to int64_t ( temp int64_t)
 0:27          subtract ( temp float)
 0:27            Convert float16_t to float ( temp float)
 0:27              'a' ( in float16_t)
diff --git a/Test/baseResults/gl_samplemask_array_size.frag.out b/Test/baseResults/gl_samplemask_array_size.frag.out
new file mode 100644
index 0000000..a7d5b76
--- /dev/null
+++ b/Test/baseResults/gl_samplemask_array_size.frag.out
@@ -0,0 +1,81 @@
+gl_samplemask_array_size.frag
+Shader version: 320
+0:? Sequence
+0:4  Function Definition: main( ( global void)
+0:4    Function Parameters: 
+0:6    Sequence
+0:6      Sequence
+0:6        Sequence
+0:6          move second child to first child ( temp mediump int)
+0:6            'i' ( temp mediump int)
+0:6            Constant:
+0:6              0 (const int)
+0:6        Loop with condition tested first
+0:6          Loop Condition
+0:6          Compare Less Than ( temp bool)
+0:6            'i' ( temp mediump int)
+0:6            Constant:
+0:6              1 (const int)
+0:6          Loop Body
+0:7          move second child to first child ( temp highp int)
+0:7            indirect index ( temp highp int SampleMaskIn)
+0:7              'gl_SampleMask' ( out runtime-sized array of highp int SampleMaskIn)
+0:7              'i' ( temp mediump int)
+0:7            Constant:
+0:7              -1431655766 (const int)
+0:6          Loop Terminal Expression
+0:6          Pre-Increment ( temp mediump int)
+0:6            'i' ( temp mediump int)
+0:9      move second child to first child ( temp mediump 4-component vector of float)
+0:9        'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:9        Constant:
+0:9          0.000000
+0:9          1.000000
+0:9          0.000000
+0:9          1.000000
+0:?   Linker Objects
+0:?     'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:?     'gl_SampleMask' ( out runtime-sized array of highp int SampleMaskIn)
+
+
+Linked fragment stage:
+
+
+Shader version: 320
+0:? Sequence
+0:4  Function Definition: main( ( global void)
+0:4    Function Parameters: 
+0:6    Sequence
+0:6      Sequence
+0:6        Sequence
+0:6          move second child to first child ( temp mediump int)
+0:6            'i' ( temp mediump int)
+0:6            Constant:
+0:6              0 (const int)
+0:6        Loop with condition tested first
+0:6          Loop Condition
+0:6          Compare Less Than ( temp bool)
+0:6            'i' ( temp mediump int)
+0:6            Constant:
+0:6              1 (const int)
+0:6          Loop Body
+0:7          move second child to first child ( temp highp int)
+0:7            indirect index ( temp highp int SampleMaskIn)
+0:7              'gl_SampleMask' ( out 1-element array of highp int SampleMaskIn)
+0:7              'i' ( temp mediump int)
+0:7            Constant:
+0:7              -1431655766 (const int)
+0:6          Loop Terminal Expression
+0:6          Pre-Increment ( temp mediump int)
+0:6            'i' ( temp mediump int)
+0:9      move second child to first child ( temp mediump 4-component vector of float)
+0:9        'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:9        Constant:
+0:9          0.000000
+0:9          1.000000
+0:9          0.000000
+0:9          1.000000
+0:?   Linker Objects
+0:?     'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:?     'gl_SampleMask' ( out 1-element array of highp int SampleMaskIn)
+
diff --git a/Test/baseResults/gl_samplemask_array_size_32.frag.out b/Test/baseResults/gl_samplemask_array_size_32.frag.out
new file mode 100644
index 0000000..0569873
--- /dev/null
+++ b/Test/baseResults/gl_samplemask_array_size_32.frag.out
@@ -0,0 +1,39 @@
+gl_samplemask_array_size.frag
+Shader version: 320
+0:? Sequence
+0:4  Function Definition: main( ( global void)
+0:4    Function Parameters: 
+0:6    Sequence
+0:6      Sequence
+0:6        Sequence
+0:6          move second child to first child ( temp mediump int)
+0:6            'i' ( temp mediump int)
+0:6            Constant:
+0:6              0 (const int)
+0:6        Loop with condition tested first
+0:6          Loop Condition
+0:6          Compare Less Than ( temp bool)
+0:6            'i' ( temp mediump int)
+0:6            Constant:
+0:6              1 (const int)
+0:6          Loop Body
+0:7          move second child to first child ( temp highp int)
+0:7            indirect index ( temp highp int SampleMaskIn)
+0:7              'gl_SampleMask' ( out runtime-sized array of highp int SampleMaskIn)
+0:7              'i' ( temp mediump int)
+0:7            Constant:
+0:7              -1431655766 (const int)
+0:6          Loop Terminal Expression
+0:6          Pre-Increment ( temp mediump int)
+0:6            'i' ( temp mediump int)
+0:9      move second child to first child ( temp mediump 4-component vector of float)
+0:9        'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:9        Constant:
+0:9          0.000000
+0:9          1.000000
+0:9          0.000000
+0:9          1.000000
+0:?   Linker Objects
+0:?     'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:?     'gl_SampleMask' ( out runtime-sized array of highp int SampleMaskIn)
+
diff --git a/Test/baseResults/gl_samplemask_array_size_64.frag.out b/Test/baseResults/gl_samplemask_array_size_64.frag.out
new file mode 100644
index 0000000..3780bec
--- /dev/null
+++ b/Test/baseResults/gl_samplemask_array_size_64.frag.out
@@ -0,0 +1,39 @@
+gl_samplemask_array_size.frag
+Shader version: 320
+0:? Sequence
+0:4  Function Definition: main( ( global void)
+0:4    Function Parameters: 
+0:6    Sequence
+0:6      Sequence
+0:6        Sequence
+0:6          move second child to first child ( temp mediump int)
+0:6            'i' ( temp mediump int)
+0:6            Constant:
+0:6              0 (const int)
+0:6        Loop with condition tested first
+0:6          Loop Condition
+0:6          Compare Less Than ( temp bool)
+0:6            'i' ( temp mediump int)
+0:6            Constant:
+0:6              2 (const int)
+0:6          Loop Body
+0:7          move second child to first child ( temp highp int)
+0:7            indirect index ( temp highp int SampleMaskIn)
+0:7              'gl_SampleMask' ( out runtime-sized array of highp int SampleMaskIn)
+0:7              'i' ( temp mediump int)
+0:7            Constant:
+0:7              -1431655766 (const int)
+0:6          Loop Terminal Expression
+0:6          Pre-Increment ( temp mediump int)
+0:6            'i' ( temp mediump int)
+0:9      move second child to first child ( temp mediump 4-component vector of float)
+0:9        'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:9        Constant:
+0:9          0.000000
+0:9          1.000000
+0:9          0.000000
+0:9          1.000000
+0:?   Linker Objects
+0:?     'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:?     'gl_SampleMask' ( out runtime-sized array of highp int SampleMaskIn)
+
diff --git a/Test/baseResults/glsl.450.subgroupRotate.comp.out b/Test/baseResults/glsl.450.subgroupRotate.comp.out
new file mode 100644
index 0000000..31d025b
--- /dev/null
+++ b/Test/baseResults/glsl.450.subgroupRotate.comp.out
@@ -0,0 +1,2177 @@
+glsl.450.subgroupRotate.comp
+Shader version: 450
+Requested GL_KHR_shader_subgroup_rotate
+local_size = (8, 8, 1)
+0:? Sequence
+0:20  Function Definition: main( ( global void)
+0:20    Function Parameters: 
+0:22    Sequence
+0:22      Sequence
+0:22        move second child to first child ( temp uint)
+0:22          'delta' ( temp uint)
+0:22          delta: direct index for structure (layout( column_major shared) readonly buffer uint)
+0:22            'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) readonly buffer uint delta})
+0:22            Constant:
+0:22              0 (const int)
+0:24      move second child to first child ( temp float)
+0:24        direct index ( temp float)
+0:24          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:24            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24              'delta' ( temp uint)
+0:24            Constant:
+0:24              0 (const int)
+0:24          Constant:
+0:24            0 (const int)
+0:24        subgroupRotate ( global float)
+0:24          direct index ( temp float)
+0:24            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:24              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24                Constant:
+0:24                  0 (const int)
+0:24              Constant:
+0:24                0 (const int)
+0:24            Constant:
+0:24              0 (const int)
+0:24          'delta' ( temp uint)
+0:25      move second child to first child ( temp 2-component vector of float)
+0:25        vector swizzle ( temp 2-component vector of float)
+0:25          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:25            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25              'delta' ( temp uint)
+0:25            Constant:
+0:25              0 (const int)
+0:25          Sequence
+0:25            Constant:
+0:25              0 (const int)
+0:25            Constant:
+0:25              1 (const int)
+0:25        subgroupRotate ( global 2-component vector of float)
+0:25          vector swizzle ( temp 2-component vector of float)
+0:25            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:25              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25                Constant:
+0:25                  1 (const int)
+0:25              Constant:
+0:25                0 (const int)
+0:25            Sequence
+0:25              Constant:
+0:25                0 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25          'delta' ( temp uint)
+0:26      move second child to first child ( temp 3-component vector of float)
+0:26        vector swizzle ( temp 3-component vector of float)
+0:26          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:26            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26              'delta' ( temp uint)
+0:26            Constant:
+0:26              0 (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              2 (const int)
+0:26        subgroupRotate ( global 3-component vector of float)
+0:26          vector swizzle ( temp 3-component vector of float)
+0:26            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:26              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26                Constant:
+0:26                  2 (const int)
+0:26              Constant:
+0:26                0 (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                2 (const int)
+0:26          'delta' ( temp uint)
+0:27      move second child to first child ( temp 4-component vector of float)
+0:27        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:27          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27            'delta' ( temp uint)
+0:27          Constant:
+0:27            0 (const int)
+0:27        subgroupRotate ( global 4-component vector of float)
+0:27          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:27            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27              Constant:
+0:27                3 (const int)
+0:27            Constant:
+0:27              0 (const int)
+0:27          'delta' ( temp uint)
+0:29      move second child to first child ( temp int)
+0:29        direct index ( temp int)
+0:29          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:29            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29              'delta' ( temp uint)
+0:29            Constant:
+0:29              1 (const int)
+0:29          Constant:
+0:29            0 (const int)
+0:29        subgroupRotate ( global int)
+0:29          direct index ( temp int)
+0:29            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:29              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29                Constant:
+0:29                  0 (const int)
+0:29              Constant:
+0:29                1 (const int)
+0:29            Constant:
+0:29              0 (const int)
+0:29          'delta' ( temp uint)
+0:30      move second child to first child ( temp 2-component vector of int)
+0:30        vector swizzle ( temp 2-component vector of int)
+0:30          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:30            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30              'delta' ( temp uint)
+0:30            Constant:
+0:30              1 (const int)
+0:30          Sequence
+0:30            Constant:
+0:30              0 (const int)
+0:30            Constant:
+0:30              1 (const int)
+0:30        subgroupRotate ( global 2-component vector of int)
+0:30          vector swizzle ( temp 2-component vector of int)
+0:30            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:30              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30                Constant:
+0:30                  1 (const int)
+0:30              Constant:
+0:30                1 (const int)
+0:30            Sequence
+0:30              Constant:
+0:30                0 (const int)
+0:30              Constant:
+0:30                1 (const int)
+0:30          'delta' ( temp uint)
+0:31      move second child to first child ( temp 3-component vector of int)
+0:31        vector swizzle ( temp 3-component vector of int)
+0:31          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:31            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31              'delta' ( temp uint)
+0:31            Constant:
+0:31              1 (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              2 (const int)
+0:31        subgroupRotate ( global 3-component vector of int)
+0:31          vector swizzle ( temp 3-component vector of int)
+0:31            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:31              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31                Constant:
+0:31                  2 (const int)
+0:31              Constant:
+0:31                1 (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                2 (const int)
+0:31          'delta' ( temp uint)
+0:32      move second child to first child ( temp 4-component vector of int)
+0:32        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:32          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32            'delta' ( temp uint)
+0:32          Constant:
+0:32            1 (const int)
+0:32        subgroupRotate ( global 4-component vector of int)
+0:32          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:32            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32              Constant:
+0:32                3 (const int)
+0:32            Constant:
+0:32              1 (const int)
+0:32          'delta' ( temp uint)
+0:34      move second child to first child ( temp uint)
+0:34        direct index ( temp uint)
+0:34          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:34            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34              'delta' ( temp uint)
+0:34            Constant:
+0:34              2 (const int)
+0:34          Constant:
+0:34            0 (const int)
+0:34        subgroupRotate ( global uint)
+0:34          direct index ( temp uint)
+0:34            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:34              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34                Constant:
+0:34                  0 (const int)
+0:34              Constant:
+0:34                2 (const int)
+0:34            Constant:
+0:34              0 (const int)
+0:34          'delta' ( temp uint)
+0:35      move second child to first child ( temp 2-component vector of uint)
+0:35        vector swizzle ( temp 2-component vector of uint)
+0:35          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:35            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35              'delta' ( temp uint)
+0:35            Constant:
+0:35              2 (const int)
+0:35          Sequence
+0:35            Constant:
+0:35              0 (const int)
+0:35            Constant:
+0:35              1 (const int)
+0:35        subgroupRotate ( global 2-component vector of uint)
+0:35          vector swizzle ( temp 2-component vector of uint)
+0:35            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:35              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35                Constant:
+0:35                  1 (const int)
+0:35              Constant:
+0:35                2 (const int)
+0:35            Sequence
+0:35              Constant:
+0:35                0 (const int)
+0:35              Constant:
+0:35                1 (const int)
+0:35          'delta' ( temp uint)
+0:36      move second child to first child ( temp 3-component vector of uint)
+0:36        vector swizzle ( temp 3-component vector of uint)
+0:36          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:36            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36              'delta' ( temp uint)
+0:36            Constant:
+0:36              2 (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              2 (const int)
+0:36        subgroupRotate ( global 3-component vector of uint)
+0:36          vector swizzle ( temp 3-component vector of uint)
+0:36            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:36              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36                Constant:
+0:36                  2 (const int)
+0:36              Constant:
+0:36                2 (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                2 (const int)
+0:36          'delta' ( temp uint)
+0:37      move second child to first child ( temp 4-component vector of uint)
+0:37        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:37          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37            'delta' ( temp uint)
+0:37          Constant:
+0:37            2 (const int)
+0:37        subgroupRotate ( global 4-component vector of uint)
+0:37          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:37            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37              Constant:
+0:37                3 (const int)
+0:37            Constant:
+0:37              2 (const int)
+0:37          'delta' ( temp uint)
+0:39      move second child to first child ( temp double)
+0:39        direct index ( temp double)
+0:39          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:39            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39              'delta' ( temp uint)
+0:39            Constant:
+0:39              3 (const int)
+0:39          Constant:
+0:39            0 (const int)
+0:39        subgroupRotate ( global double)
+0:39          direct index ( temp double)
+0:39            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:39              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39                Constant:
+0:39                  0 (const int)
+0:39              Constant:
+0:39                3 (const int)
+0:39            Constant:
+0:39              0 (const int)
+0:39          'delta' ( temp uint)
+0:40      move second child to first child ( temp 2-component vector of double)
+0:40        vector swizzle ( temp 2-component vector of double)
+0:40          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:40            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40              'delta' ( temp uint)
+0:40            Constant:
+0:40              3 (const int)
+0:40          Sequence
+0:40            Constant:
+0:40              0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40        subgroupRotate ( global 2-component vector of double)
+0:40          vector swizzle ( temp 2-component vector of double)
+0:40            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:40              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40                Constant:
+0:40                  1 (const int)
+0:40              Constant:
+0:40                3 (const int)
+0:40            Sequence
+0:40              Constant:
+0:40                0 (const int)
+0:40              Constant:
+0:40                1 (const int)
+0:40          'delta' ( temp uint)
+0:41      move second child to first child ( temp 3-component vector of double)
+0:41        vector swizzle ( temp 3-component vector of double)
+0:41          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:41            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41              'delta' ( temp uint)
+0:41            Constant:
+0:41              3 (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              2 (const int)
+0:41        subgroupRotate ( global 3-component vector of double)
+0:41          vector swizzle ( temp 3-component vector of double)
+0:41            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:41              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41                Constant:
+0:41                  2 (const int)
+0:41              Constant:
+0:41                3 (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                2 (const int)
+0:41          'delta' ( temp uint)
+0:42      move second child to first child ( temp 4-component vector of double)
+0:42        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:42          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42            'delta' ( temp uint)
+0:42          Constant:
+0:42            3 (const int)
+0:42        subgroupRotate ( global 4-component vector of double)
+0:42          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:42            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42              Constant:
+0:42                3 (const int)
+0:42            Constant:
+0:42              3 (const int)
+0:42          'delta' ( temp uint)
+0:44      move second child to first child ( temp int)
+0:44        direct index ( temp int)
+0:44          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:44            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44              'delta' ( temp uint)
+0:44            Constant:
+0:44              1 (const int)
+0:44          Constant:
+0:44            0 (const int)
+0:44        Convert bool to int ( temp int)
+0:44          subgroupRotate ( global bool)
+0:44            Compare Less Than ( temp bool)
+0:44              direct index ( temp int)
+0:44                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:44                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44                    Constant:
+0:44                      0 (const int)
+0:44                  Constant:
+0:44                    1 (const int)
+0:44                Constant:
+0:44                  0 (const int)
+0:44              Constant:
+0:44                0 (const int)
+0:44            'delta' ( temp uint)
+0:45      move second child to first child ( temp 2-component vector of int)
+0:45        vector swizzle ( temp 2-component vector of int)
+0:45          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:45            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45              'delta' ( temp uint)
+0:45            Constant:
+0:45              1 (const int)
+0:45          Sequence
+0:45            Constant:
+0:45              0 (const int)
+0:45            Constant:
+0:45              1 (const int)
+0:45        Convert bool to int ( temp 2-component vector of int)
+0:45          subgroupRotate ( global 2-component vector of bool)
+0:45            Compare Less Than ( global 2-component vector of bool)
+0:45              vector swizzle ( temp 2-component vector of int)
+0:45                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:45                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45                    Constant:
+0:45                      1 (const int)
+0:45                  Constant:
+0:45                    1 (const int)
+0:45                Sequence
+0:45                  Constant:
+0:45                    0 (const int)
+0:45                  Constant:
+0:45                    1 (const int)
+0:45              Constant:
+0:45                0 (const int)
+0:45                0 (const int)
+0:45            'delta' ( temp uint)
+0:46      move second child to first child ( temp 3-component vector of int)
+0:46        vector swizzle ( temp 3-component vector of int)
+0:46          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:46            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46              'delta' ( temp uint)
+0:46            Constant:
+0:46              1 (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              2 (const int)
+0:46        Convert bool to int ( temp 3-component vector of int)
+0:46          subgroupRotate ( global 3-component vector of bool)
+0:46            Compare Less Than ( global 3-component vector of bool)
+0:46              vector swizzle ( temp 3-component vector of int)
+0:46                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:46                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46                    Constant:
+0:46                      1 (const int)
+0:46                  Constant:
+0:46                    1 (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                    2 (const int)
+0:46              Constant:
+0:46                0 (const int)
+0:46                0 (const int)
+0:46                0 (const int)
+0:46            'delta' ( temp uint)
+0:47      move second child to first child ( temp 4-component vector of int)
+0:47        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:47          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47            'delta' ( temp uint)
+0:47          Constant:
+0:47            1 (const int)
+0:47        Convert bool to int ( temp 4-component vector of int)
+0:47          subgroupRotate ( global 4-component vector of bool)
+0:47            Compare Less Than ( global 4-component vector of bool)
+0:47              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:47                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47                  Constant:
+0:47                    1 (const int)
+0:47                Constant:
+0:47                  1 (const int)
+0:47              Constant:
+0:47                0 (const int)
+0:47                0 (const int)
+0:47                0 (const int)
+0:47                0 (const int)
+0:47            'delta' ( temp uint)
+0:49      move second child to first child ( temp float)
+0:49        direct index ( temp float)
+0:49          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:49            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49              'delta' ( temp uint)
+0:49            Constant:
+0:49              0 (const int)
+0:49          Constant:
+0:49            0 (const int)
+0:49        subgroupClusteredRotate ( global float)
+0:49          direct index ( temp float)
+0:49            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:49              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49                Constant:
+0:49                  0 (const int)
+0:49              Constant:
+0:49                0 (const int)
+0:49            Constant:
+0:49              0 (const int)
+0:49          'delta' ( temp uint)
+0:49          Constant:
+0:49            1 (const uint)
+0:50      move second child to first child ( temp 2-component vector of float)
+0:50        vector swizzle ( temp 2-component vector of float)
+0:50          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:50            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50              'delta' ( temp uint)
+0:50            Constant:
+0:50              0 (const int)
+0:50          Sequence
+0:50            Constant:
+0:50              0 (const int)
+0:50            Constant:
+0:50              1 (const int)
+0:50        subgroupClusteredRotate ( global 2-component vector of float)
+0:50          vector swizzle ( temp 2-component vector of float)
+0:50            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:50              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50                Constant:
+0:50                  1 (const int)
+0:50              Constant:
+0:50                0 (const int)
+0:50            Sequence
+0:50              Constant:
+0:50                0 (const int)
+0:50              Constant:
+0:50                1 (const int)
+0:50          'delta' ( temp uint)
+0:50          Constant:
+0:50            1 (const uint)
+0:51      move second child to first child ( temp 3-component vector of float)
+0:51        vector swizzle ( temp 3-component vector of float)
+0:51          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:51            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51              'delta' ( temp uint)
+0:51            Constant:
+0:51              0 (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              2 (const int)
+0:51        subgroupClusteredRotate ( global 3-component vector of float)
+0:51          vector swizzle ( temp 3-component vector of float)
+0:51            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:51              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51                Constant:
+0:51                  2 (const int)
+0:51              Constant:
+0:51                0 (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                2 (const int)
+0:51          'delta' ( temp uint)
+0:51          Constant:
+0:51            1 (const uint)
+0:52      move second child to first child ( temp 4-component vector of float)
+0:52        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:52          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52            'delta' ( temp uint)
+0:52          Constant:
+0:52            0 (const int)
+0:52        subgroupClusteredRotate ( global 4-component vector of float)
+0:52          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:52            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52              Constant:
+0:52                3 (const int)
+0:52            Constant:
+0:52              0 (const int)
+0:52          'delta' ( temp uint)
+0:52          Constant:
+0:52            1 (const uint)
+0:54      move second child to first child ( temp int)
+0:54        direct index ( temp int)
+0:54          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:54            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54              'delta' ( temp uint)
+0:54            Constant:
+0:54              1 (const int)
+0:54          Constant:
+0:54            0 (const int)
+0:54        subgroupClusteredRotate ( global int)
+0:54          direct index ( temp int)
+0:54            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:54              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54                Constant:
+0:54                  0 (const int)
+0:54              Constant:
+0:54                1 (const int)
+0:54            Constant:
+0:54              0 (const int)
+0:54          'delta' ( temp uint)
+0:54          Constant:
+0:54            1 (const uint)
+0:55      move second child to first child ( temp 2-component vector of int)
+0:55        vector swizzle ( temp 2-component vector of int)
+0:55          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:55            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55              'delta' ( temp uint)
+0:55            Constant:
+0:55              1 (const int)
+0:55          Sequence
+0:55            Constant:
+0:55              0 (const int)
+0:55            Constant:
+0:55              1 (const int)
+0:55        subgroupClusteredRotate ( global 2-component vector of int)
+0:55          vector swizzle ( temp 2-component vector of int)
+0:55            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:55              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55                Constant:
+0:55                  1 (const int)
+0:55              Constant:
+0:55                1 (const int)
+0:55            Sequence
+0:55              Constant:
+0:55                0 (const int)
+0:55              Constant:
+0:55                1 (const int)
+0:55          'delta' ( temp uint)
+0:55          Constant:
+0:55            1 (const uint)
+0:56      move second child to first child ( temp 3-component vector of int)
+0:56        vector swizzle ( temp 3-component vector of int)
+0:56          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:56            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56              'delta' ( temp uint)
+0:56            Constant:
+0:56              1 (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 int)
+0:56        subgroupClusteredRotate ( global 3-component vector of int)
+0:56          vector swizzle ( temp 3-component vector of int)
+0:56            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:56              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56                Constant:
+0:56                  2 (const int)
+0:56              Constant:
+0:56                1 (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 int)
+0:56          'delta' ( temp uint)
+0:56          Constant:
+0:56            1 (const uint)
+0:57      move second child to first child ( temp 4-component vector of int)
+0:57        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:57          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57            'delta' ( temp uint)
+0:57          Constant:
+0:57            1 (const int)
+0:57        subgroupClusteredRotate ( global 4-component vector of int)
+0:57          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:57            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57              Constant:
+0:57                3 (const int)
+0:57            Constant:
+0:57              1 (const int)
+0:57          'delta' ( temp uint)
+0:57          Constant:
+0:57            1 (const uint)
+0:59      move second child to first child ( temp uint)
+0:59        direct index ( temp uint)
+0:59          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:59            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59              'delta' ( temp uint)
+0:59            Constant:
+0:59              2 (const int)
+0:59          Constant:
+0:59            0 (const int)
+0:59        subgroupClusteredRotate ( global uint)
+0:59          direct index ( temp uint)
+0:59            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:59              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59                Constant:
+0:59                  0 (const int)
+0:59              Constant:
+0:59                2 (const int)
+0:59            Constant:
+0:59              0 (const int)
+0:59          'delta' ( temp uint)
+0:59          Constant:
+0:59            1 (const uint)
+0:60      move second child to first child ( temp 2-component vector of uint)
+0:60        vector swizzle ( temp 2-component vector of uint)
+0:60          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:60            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60              'delta' ( temp uint)
+0:60            Constant:
+0:60              2 (const int)
+0:60          Sequence
+0:60            Constant:
+0:60              0 (const int)
+0:60            Constant:
+0:60              1 (const int)
+0:60        subgroupClusteredRotate ( global 2-component vector of uint)
+0:60          vector swizzle ( temp 2-component vector of uint)
+0:60            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:60              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60                Constant:
+0:60                  1 (const int)
+0:60              Constant:
+0:60                2 (const int)
+0:60            Sequence
+0:60              Constant:
+0:60                0 (const int)
+0:60              Constant:
+0:60                1 (const int)
+0:60          'delta' ( temp uint)
+0:60          Constant:
+0:60            1 (const uint)
+0:61      move second child to first child ( temp 3-component vector of uint)
+0:61        vector swizzle ( temp 3-component vector of uint)
+0:61          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:61            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61              'delta' ( temp uint)
+0:61            Constant:
+0:61              2 (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 int)
+0:61        subgroupClusteredRotate ( global 3-component vector of uint)
+0:61          vector swizzle ( temp 3-component vector of uint)
+0:61            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:61              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61                Constant:
+0:61                  2 (const int)
+0:61              Constant:
+0:61                2 (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 int)
+0:61          'delta' ( temp uint)
+0:61          Constant:
+0:61            1 (const uint)
+0:62      move second child to first child ( temp 4-component vector of uint)
+0:62        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:62          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62            'delta' ( temp uint)
+0:62          Constant:
+0:62            2 (const int)
+0:62        subgroupClusteredRotate ( global 4-component vector of uint)
+0:62          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:62            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62              Constant:
+0:62                3 (const int)
+0:62            Constant:
+0:62              2 (const int)
+0:62          'delta' ( temp uint)
+0:62          Constant:
+0:62            1 (const uint)
+0:64      move second child to first child ( temp double)
+0:64        direct index ( temp double)
+0:64          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:64            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64              'delta' ( temp uint)
+0:64            Constant:
+0:64              3 (const int)
+0:64          Constant:
+0:64            0 (const int)
+0:64        subgroupClusteredRotate ( global double)
+0:64          direct index ( temp double)
+0:64            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:64              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64                Constant:
+0:64                  0 (const int)
+0:64              Constant:
+0:64                3 (const int)
+0:64            Constant:
+0:64              0 (const int)
+0:64          'delta' ( temp uint)
+0:64          Constant:
+0:64            1 (const uint)
+0:65      move second child to first child ( temp 2-component vector of double)
+0:65        vector swizzle ( temp 2-component vector of double)
+0:65          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:65            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65              'delta' ( temp uint)
+0:65            Constant:
+0:65              3 (const int)
+0:65          Sequence
+0:65            Constant:
+0:65              0 (const int)
+0:65            Constant:
+0:65              1 (const int)
+0:65        subgroupClusteredRotate ( global 2-component vector of double)
+0:65          vector swizzle ( temp 2-component vector of double)
+0:65            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:65              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65                Constant:
+0:65                  1 (const int)
+0:65              Constant:
+0:65                3 (const int)
+0:65            Sequence
+0:65              Constant:
+0:65                0 (const int)
+0:65              Constant:
+0:65                1 (const int)
+0:65          'delta' ( temp uint)
+0:65          Constant:
+0:65            1 (const uint)
+0:66      move second child to first child ( temp 3-component vector of double)
+0:66        vector swizzle ( temp 3-component vector of double)
+0:66          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:66            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66              'delta' ( temp uint)
+0:66            Constant:
+0:66              3 (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 int)
+0:66        subgroupClusteredRotate ( global 3-component vector of double)
+0:66          vector swizzle ( temp 3-component vector of double)
+0:66            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:66              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66                Constant:
+0:66                  2 (const int)
+0:66              Constant:
+0:66                3 (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 int)
+0:66          'delta' ( temp uint)
+0:66          Constant:
+0:66            1 (const uint)
+0:67      move second child to first child ( temp 4-component vector of double)
+0:67        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:67          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67            'delta' ( temp uint)
+0:67          Constant:
+0:67            3 (const int)
+0:67        subgroupClusteredRotate ( global 4-component vector of double)
+0:67          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:67            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67              Constant:
+0:67                3 (const int)
+0:67            Constant:
+0:67              3 (const int)
+0:67          'delta' ( temp uint)
+0:67          Constant:
+0:67            1 (const uint)
+0:69      move second child to first child ( temp int)
+0:69        direct index ( temp int)
+0:69          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:69            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69              'delta' ( temp uint)
+0:69            Constant:
+0:69              1 (const int)
+0:69          Constant:
+0:69            0 (const int)
+0:69        Convert bool to int ( temp int)
+0:69          subgroupClusteredRotate ( global bool)
+0:69            Compare Less Than ( temp bool)
+0:69              direct index ( temp int)
+0:69                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:69                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69                    Constant:
+0:69                      0 (const int)
+0:69                  Constant:
+0:69                    1 (const int)
+0:69                Constant:
+0:69                  0 (const int)
+0:69              Constant:
+0:69                0 (const int)
+0:69            'delta' ( temp uint)
+0:69            Constant:
+0:69              1 (const uint)
+0:70      move second child to first child ( temp 2-component vector of int)
+0:70        vector swizzle ( temp 2-component vector of int)
+0:70          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:70            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70              'delta' ( temp uint)
+0:70            Constant:
+0:70              1 (const int)
+0:70          Sequence
+0:70            Constant:
+0:70              0 (const int)
+0:70            Constant:
+0:70              1 (const int)
+0:70        Convert bool to int ( temp 2-component vector of int)
+0:70          subgroupClusteredRotate ( global 2-component vector of bool)
+0:70            Compare Less Than ( global 2-component vector of bool)
+0:70              vector swizzle ( temp 2-component vector of int)
+0:70                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:70                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70                    Constant:
+0:70                      1 (const int)
+0:70                  Constant:
+0:70                    1 (const int)
+0:70                Sequence
+0:70                  Constant:
+0:70                    0 (const int)
+0:70                  Constant:
+0:70                    1 (const int)
+0:70              Constant:
+0:70                0 (const int)
+0:70                0 (const int)
+0:70            'delta' ( temp uint)
+0:70            Constant:
+0:70              1 (const uint)
+0:71      move second child to first child ( temp 3-component vector of int)
+0:71        vector swizzle ( temp 3-component vector of int)
+0:71          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:71            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71              'delta' ( temp uint)
+0:71            Constant:
+0:71              1 (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 int)
+0:71        Convert bool to int ( temp 3-component vector of int)
+0:71          subgroupClusteredRotate ( global 3-component vector of bool)
+0:71            Compare Less Than ( global 3-component vector of bool)
+0:71              vector swizzle ( temp 3-component vector of int)
+0:71                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:71                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71                    Constant:
+0:71                      1 (const int)
+0:71                  Constant:
+0:71                    1 (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 int)
+0:71              Constant:
+0:71                0 (const int)
+0:71                0 (const int)
+0:71                0 (const int)
+0:71            'delta' ( temp uint)
+0:71            Constant:
+0:71              1 (const uint)
+0:72      move second child to first child ( temp 4-component vector of int)
+0:72        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:72          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72            'delta' ( temp uint)
+0:72          Constant:
+0:72            1 (const int)
+0:72        Convert bool to int ( temp 4-component vector of int)
+0:72          subgroupClusteredRotate ( global 4-component vector of bool)
+0:72            Compare Less Than ( global 4-component vector of bool)
+0:72              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:72                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72                  Constant:
+0:72                    1 (const int)
+0:72                Constant:
+0:72                  1 (const int)
+0:72              Constant:
+0:72                0 (const int)
+0:72                0 (const int)
+0:72                0 (const int)
+0:72                0 (const int)
+0:72            'delta' ( temp uint)
+0:72            Constant:
+0:72              1 (const uint)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?     'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) readonly buffer uint delta})
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+
+
+Linked compute stage:
+
+
+Shader version: 450
+Requested GL_KHR_shader_subgroup_rotate
+local_size = (8, 8, 1)
+0:? Sequence
+0:20  Function Definition: main( ( global void)
+0:20    Function Parameters: 
+0:22    Sequence
+0:22      Sequence
+0:22        move second child to first child ( temp uint)
+0:22          'delta' ( temp uint)
+0:22          delta: direct index for structure (layout( column_major shared) readonly buffer uint)
+0:22            'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) readonly buffer uint delta})
+0:22            Constant:
+0:22              0 (const int)
+0:24      move second child to first child ( temp float)
+0:24        direct index ( temp float)
+0:24          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:24            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24              'delta' ( temp uint)
+0:24            Constant:
+0:24              0 (const int)
+0:24          Constant:
+0:24            0 (const int)
+0:24        subgroupRotate ( global float)
+0:24          direct index ( temp float)
+0:24            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:24              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:24                Constant:
+0:24                  0 (const int)
+0:24              Constant:
+0:24                0 (const int)
+0:24            Constant:
+0:24              0 (const int)
+0:24          'delta' ( temp uint)
+0:25      move second child to first child ( temp 2-component vector of float)
+0:25        vector swizzle ( temp 2-component vector of float)
+0:25          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:25            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25              'delta' ( temp uint)
+0:25            Constant:
+0:25              0 (const int)
+0:25          Sequence
+0:25            Constant:
+0:25              0 (const int)
+0:25            Constant:
+0:25              1 (const int)
+0:25        subgroupRotate ( global 2-component vector of float)
+0:25          vector swizzle ( temp 2-component vector of float)
+0:25            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:25              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:25                Constant:
+0:25                  1 (const int)
+0:25              Constant:
+0:25                0 (const int)
+0:25            Sequence
+0:25              Constant:
+0:25                0 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25          'delta' ( temp uint)
+0:26      move second child to first child ( temp 3-component vector of float)
+0:26        vector swizzle ( temp 3-component vector of float)
+0:26          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:26            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26              'delta' ( temp uint)
+0:26            Constant:
+0:26              0 (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              2 (const int)
+0:26        subgroupRotate ( global 3-component vector of float)
+0:26          vector swizzle ( temp 3-component vector of float)
+0:26            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:26              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:26                Constant:
+0:26                  2 (const int)
+0:26              Constant:
+0:26                0 (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                2 (const int)
+0:26          'delta' ( temp uint)
+0:27      move second child to first child ( temp 4-component vector of float)
+0:27        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:27          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27            'delta' ( temp uint)
+0:27          Constant:
+0:27            0 (const int)
+0:27        subgroupRotate ( global 4-component vector of float)
+0:27          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:27            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:27              Constant:
+0:27                3 (const int)
+0:27            Constant:
+0:27              0 (const int)
+0:27          'delta' ( temp uint)
+0:29      move second child to first child ( temp int)
+0:29        direct index ( temp int)
+0:29          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:29            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29              'delta' ( temp uint)
+0:29            Constant:
+0:29              1 (const int)
+0:29          Constant:
+0:29            0 (const int)
+0:29        subgroupRotate ( global int)
+0:29          direct index ( temp int)
+0:29            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:29              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:29                Constant:
+0:29                  0 (const int)
+0:29              Constant:
+0:29                1 (const int)
+0:29            Constant:
+0:29              0 (const int)
+0:29          'delta' ( temp uint)
+0:30      move second child to first child ( temp 2-component vector of int)
+0:30        vector swizzle ( temp 2-component vector of int)
+0:30          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:30            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30              'delta' ( temp uint)
+0:30            Constant:
+0:30              1 (const int)
+0:30          Sequence
+0:30            Constant:
+0:30              0 (const int)
+0:30            Constant:
+0:30              1 (const int)
+0:30        subgroupRotate ( global 2-component vector of int)
+0:30          vector swizzle ( temp 2-component vector of int)
+0:30            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:30              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:30                Constant:
+0:30                  1 (const int)
+0:30              Constant:
+0:30                1 (const int)
+0:30            Sequence
+0:30              Constant:
+0:30                0 (const int)
+0:30              Constant:
+0:30                1 (const int)
+0:30          'delta' ( temp uint)
+0:31      move second child to first child ( temp 3-component vector of int)
+0:31        vector swizzle ( temp 3-component vector of int)
+0:31          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:31            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31              'delta' ( temp uint)
+0:31            Constant:
+0:31              1 (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              2 (const int)
+0:31        subgroupRotate ( global 3-component vector of int)
+0:31          vector swizzle ( temp 3-component vector of int)
+0:31            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:31              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:31                Constant:
+0:31                  2 (const int)
+0:31              Constant:
+0:31                1 (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                2 (const int)
+0:31          'delta' ( temp uint)
+0:32      move second child to first child ( temp 4-component vector of int)
+0:32        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:32          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32            'delta' ( temp uint)
+0:32          Constant:
+0:32            1 (const int)
+0:32        subgroupRotate ( global 4-component vector of int)
+0:32          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:32            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:32              Constant:
+0:32                3 (const int)
+0:32            Constant:
+0:32              1 (const int)
+0:32          'delta' ( temp uint)
+0:34      move second child to first child ( temp uint)
+0:34        direct index ( temp uint)
+0:34          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:34            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34              'delta' ( temp uint)
+0:34            Constant:
+0:34              2 (const int)
+0:34          Constant:
+0:34            0 (const int)
+0:34        subgroupRotate ( global uint)
+0:34          direct index ( temp uint)
+0:34            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:34              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:34                Constant:
+0:34                  0 (const int)
+0:34              Constant:
+0:34                2 (const int)
+0:34            Constant:
+0:34              0 (const int)
+0:34          'delta' ( temp uint)
+0:35      move second child to first child ( temp 2-component vector of uint)
+0:35        vector swizzle ( temp 2-component vector of uint)
+0:35          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:35            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35              'delta' ( temp uint)
+0:35            Constant:
+0:35              2 (const int)
+0:35          Sequence
+0:35            Constant:
+0:35              0 (const int)
+0:35            Constant:
+0:35              1 (const int)
+0:35        subgroupRotate ( global 2-component vector of uint)
+0:35          vector swizzle ( temp 2-component vector of uint)
+0:35            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:35              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:35                Constant:
+0:35                  1 (const int)
+0:35              Constant:
+0:35                2 (const int)
+0:35            Sequence
+0:35              Constant:
+0:35                0 (const int)
+0:35              Constant:
+0:35                1 (const int)
+0:35          'delta' ( temp uint)
+0:36      move second child to first child ( temp 3-component vector of uint)
+0:36        vector swizzle ( temp 3-component vector of uint)
+0:36          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:36            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36              'delta' ( temp uint)
+0:36            Constant:
+0:36              2 (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              2 (const int)
+0:36        subgroupRotate ( global 3-component vector of uint)
+0:36          vector swizzle ( temp 3-component vector of uint)
+0:36            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:36              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:36                Constant:
+0:36                  2 (const int)
+0:36              Constant:
+0:36                2 (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                2 (const int)
+0:36          'delta' ( temp uint)
+0:37      move second child to first child ( temp 4-component vector of uint)
+0:37        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:37          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37            'delta' ( temp uint)
+0:37          Constant:
+0:37            2 (const int)
+0:37        subgroupRotate ( global 4-component vector of uint)
+0:37          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:37            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:37              Constant:
+0:37                3 (const int)
+0:37            Constant:
+0:37              2 (const int)
+0:37          'delta' ( temp uint)
+0:39      move second child to first child ( temp double)
+0:39        direct index ( temp double)
+0:39          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:39            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39              'delta' ( temp uint)
+0:39            Constant:
+0:39              3 (const int)
+0:39          Constant:
+0:39            0 (const int)
+0:39        subgroupRotate ( global double)
+0:39          direct index ( temp double)
+0:39            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:39              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:39                Constant:
+0:39                  0 (const int)
+0:39              Constant:
+0:39                3 (const int)
+0:39            Constant:
+0:39              0 (const int)
+0:39          'delta' ( temp uint)
+0:40      move second child to first child ( temp 2-component vector of double)
+0:40        vector swizzle ( temp 2-component vector of double)
+0:40          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:40            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40              'delta' ( temp uint)
+0:40            Constant:
+0:40              3 (const int)
+0:40          Sequence
+0:40            Constant:
+0:40              0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40        subgroupRotate ( global 2-component vector of double)
+0:40          vector swizzle ( temp 2-component vector of double)
+0:40            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:40              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:40                Constant:
+0:40                  1 (const int)
+0:40              Constant:
+0:40                3 (const int)
+0:40            Sequence
+0:40              Constant:
+0:40                0 (const int)
+0:40              Constant:
+0:40                1 (const int)
+0:40          'delta' ( temp uint)
+0:41      move second child to first child ( temp 3-component vector of double)
+0:41        vector swizzle ( temp 3-component vector of double)
+0:41          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:41            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41              'delta' ( temp uint)
+0:41            Constant:
+0:41              3 (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              2 (const int)
+0:41        subgroupRotate ( global 3-component vector of double)
+0:41          vector swizzle ( temp 3-component vector of double)
+0:41            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:41              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:41                Constant:
+0:41                  2 (const int)
+0:41              Constant:
+0:41                3 (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                2 (const int)
+0:41          'delta' ( temp uint)
+0:42      move second child to first child ( temp 4-component vector of double)
+0:42        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:42          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42            'delta' ( temp uint)
+0:42          Constant:
+0:42            3 (const int)
+0:42        subgroupRotate ( global 4-component vector of double)
+0:42          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:42            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:42              Constant:
+0:42                3 (const int)
+0:42            Constant:
+0:42              3 (const int)
+0:42          'delta' ( temp uint)
+0:44      move second child to first child ( temp int)
+0:44        direct index ( temp int)
+0:44          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:44            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44              'delta' ( temp uint)
+0:44            Constant:
+0:44              1 (const int)
+0:44          Constant:
+0:44            0 (const int)
+0:44        Convert bool to int ( temp int)
+0:44          subgroupRotate ( global bool)
+0:44            Compare Less Than ( temp bool)
+0:44              direct index ( temp int)
+0:44                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:44                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:44                    Constant:
+0:44                      0 (const int)
+0:44                  Constant:
+0:44                    1 (const int)
+0:44                Constant:
+0:44                  0 (const int)
+0:44              Constant:
+0:44                0 (const int)
+0:44            'delta' ( temp uint)
+0:45      move second child to first child ( temp 2-component vector of int)
+0:45        vector swizzle ( temp 2-component vector of int)
+0:45          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:45            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45              'delta' ( temp uint)
+0:45            Constant:
+0:45              1 (const int)
+0:45          Sequence
+0:45            Constant:
+0:45              0 (const int)
+0:45            Constant:
+0:45              1 (const int)
+0:45        Convert bool to int ( temp 2-component vector of int)
+0:45          subgroupRotate ( global 2-component vector of bool)
+0:45            Compare Less Than ( global 2-component vector of bool)
+0:45              vector swizzle ( temp 2-component vector of int)
+0:45                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:45                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:45                    Constant:
+0:45                      1 (const int)
+0:45                  Constant:
+0:45                    1 (const int)
+0:45                Sequence
+0:45                  Constant:
+0:45                    0 (const int)
+0:45                  Constant:
+0:45                    1 (const int)
+0:45              Constant:
+0:45                0 (const int)
+0:45                0 (const int)
+0:45            'delta' ( temp uint)
+0:46      move second child to first child ( temp 3-component vector of int)
+0:46        vector swizzle ( temp 3-component vector of int)
+0:46          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:46            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46              'delta' ( temp uint)
+0:46            Constant:
+0:46              1 (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              2 (const int)
+0:46        Convert bool to int ( temp 3-component vector of int)
+0:46          subgroupRotate ( global 3-component vector of bool)
+0:46            Compare Less Than ( global 3-component vector of bool)
+0:46              vector swizzle ( temp 3-component vector of int)
+0:46                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:46                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:46                    Constant:
+0:46                      1 (const int)
+0:46                  Constant:
+0:46                    1 (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                    2 (const int)
+0:46              Constant:
+0:46                0 (const int)
+0:46                0 (const int)
+0:46                0 (const int)
+0:46            'delta' ( temp uint)
+0:47      move second child to first child ( temp 4-component vector of int)
+0:47        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:47          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47            'delta' ( temp uint)
+0:47          Constant:
+0:47            1 (const int)
+0:47        Convert bool to int ( temp 4-component vector of int)
+0:47          subgroupRotate ( global 4-component vector of bool)
+0:47            Compare Less Than ( global 4-component vector of bool)
+0:47              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:47                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:47                  Constant:
+0:47                    1 (const int)
+0:47                Constant:
+0:47                  1 (const int)
+0:47              Constant:
+0:47                0 (const int)
+0:47                0 (const int)
+0:47                0 (const int)
+0:47                0 (const int)
+0:47            'delta' ( temp uint)
+0:49      move second child to first child ( temp float)
+0:49        direct index ( temp float)
+0:49          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:49            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49              'delta' ( temp uint)
+0:49            Constant:
+0:49              0 (const int)
+0:49          Constant:
+0:49            0 (const int)
+0:49        subgroupClusteredRotate ( global float)
+0:49          direct index ( temp float)
+0:49            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:49              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:49                Constant:
+0:49                  0 (const int)
+0:49              Constant:
+0:49                0 (const int)
+0:49            Constant:
+0:49              0 (const int)
+0:49          'delta' ( temp uint)
+0:49          Constant:
+0:49            1 (const uint)
+0:50      move second child to first child ( temp 2-component vector of float)
+0:50        vector swizzle ( temp 2-component vector of float)
+0:50          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:50            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50              'delta' ( temp uint)
+0:50            Constant:
+0:50              0 (const int)
+0:50          Sequence
+0:50            Constant:
+0:50              0 (const int)
+0:50            Constant:
+0:50              1 (const int)
+0:50        subgroupClusteredRotate ( global 2-component vector of float)
+0:50          vector swizzle ( temp 2-component vector of float)
+0:50            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:50              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:50                Constant:
+0:50                  1 (const int)
+0:50              Constant:
+0:50                0 (const int)
+0:50            Sequence
+0:50              Constant:
+0:50                0 (const int)
+0:50              Constant:
+0:50                1 (const int)
+0:50          'delta' ( temp uint)
+0:50          Constant:
+0:50            1 (const uint)
+0:51      move second child to first child ( temp 3-component vector of float)
+0:51        vector swizzle ( temp 3-component vector of float)
+0:51          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:51            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51              'delta' ( temp uint)
+0:51            Constant:
+0:51              0 (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              2 (const int)
+0:51        subgroupClusteredRotate ( global 3-component vector of float)
+0:51          vector swizzle ( temp 3-component vector of float)
+0:51            f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:51              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:51                Constant:
+0:51                  2 (const int)
+0:51              Constant:
+0:51                0 (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                2 (const int)
+0:51          'delta' ( temp uint)
+0:51          Constant:
+0:51            1 (const uint)
+0:52      move second child to first child ( temp 4-component vector of float)
+0:52        f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:52          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52            'delta' ( temp uint)
+0:52          Constant:
+0:52            0 (const int)
+0:52        subgroupClusteredRotate ( global 4-component vector of float)
+0:52          f4: direct index for structure (layout( column_major shared) buffer 4-component vector of float)
+0:52            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:52              Constant:
+0:52                3 (const int)
+0:52            Constant:
+0:52              0 (const int)
+0:52          'delta' ( temp uint)
+0:52          Constant:
+0:52            1 (const uint)
+0:54      move second child to first child ( temp int)
+0:54        direct index ( temp int)
+0:54          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:54            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54              'delta' ( temp uint)
+0:54            Constant:
+0:54              1 (const int)
+0:54          Constant:
+0:54            0 (const int)
+0:54        subgroupClusteredRotate ( global int)
+0:54          direct index ( temp int)
+0:54            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:54              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:54                Constant:
+0:54                  0 (const int)
+0:54              Constant:
+0:54                1 (const int)
+0:54            Constant:
+0:54              0 (const int)
+0:54          'delta' ( temp uint)
+0:54          Constant:
+0:54            1 (const uint)
+0:55      move second child to first child ( temp 2-component vector of int)
+0:55        vector swizzle ( temp 2-component vector of int)
+0:55          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:55            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55              'delta' ( temp uint)
+0:55            Constant:
+0:55              1 (const int)
+0:55          Sequence
+0:55            Constant:
+0:55              0 (const int)
+0:55            Constant:
+0:55              1 (const int)
+0:55        subgroupClusteredRotate ( global 2-component vector of int)
+0:55          vector swizzle ( temp 2-component vector of int)
+0:55            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:55              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:55                Constant:
+0:55                  1 (const int)
+0:55              Constant:
+0:55                1 (const int)
+0:55            Sequence
+0:55              Constant:
+0:55                0 (const int)
+0:55              Constant:
+0:55                1 (const int)
+0:55          'delta' ( temp uint)
+0:55          Constant:
+0:55            1 (const uint)
+0:56      move second child to first child ( temp 3-component vector of int)
+0:56        vector swizzle ( temp 3-component vector of int)
+0:56          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:56            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56              'delta' ( temp uint)
+0:56            Constant:
+0:56              1 (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 int)
+0:56        subgroupClusteredRotate ( global 3-component vector of int)
+0:56          vector swizzle ( temp 3-component vector of int)
+0:56            i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:56              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:56                Constant:
+0:56                  2 (const int)
+0:56              Constant:
+0:56                1 (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 int)
+0:56          'delta' ( temp uint)
+0:56          Constant:
+0:56            1 (const uint)
+0:57      move second child to first child ( temp 4-component vector of int)
+0:57        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:57          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57            'delta' ( temp uint)
+0:57          Constant:
+0:57            1 (const int)
+0:57        subgroupClusteredRotate ( global 4-component vector of int)
+0:57          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:57            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:57              Constant:
+0:57                3 (const int)
+0:57            Constant:
+0:57              1 (const int)
+0:57          'delta' ( temp uint)
+0:57          Constant:
+0:57            1 (const uint)
+0:59      move second child to first child ( temp uint)
+0:59        direct index ( temp uint)
+0:59          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:59            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59              'delta' ( temp uint)
+0:59            Constant:
+0:59              2 (const int)
+0:59          Constant:
+0:59            0 (const int)
+0:59        subgroupClusteredRotate ( global uint)
+0:59          direct index ( temp uint)
+0:59            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:59              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:59                Constant:
+0:59                  0 (const int)
+0:59              Constant:
+0:59                2 (const int)
+0:59            Constant:
+0:59              0 (const int)
+0:59          'delta' ( temp uint)
+0:59          Constant:
+0:59            1 (const uint)
+0:60      move second child to first child ( temp 2-component vector of uint)
+0:60        vector swizzle ( temp 2-component vector of uint)
+0:60          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:60            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60              'delta' ( temp uint)
+0:60            Constant:
+0:60              2 (const int)
+0:60          Sequence
+0:60            Constant:
+0:60              0 (const int)
+0:60            Constant:
+0:60              1 (const int)
+0:60        subgroupClusteredRotate ( global 2-component vector of uint)
+0:60          vector swizzle ( temp 2-component vector of uint)
+0:60            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:60              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:60                Constant:
+0:60                  1 (const int)
+0:60              Constant:
+0:60                2 (const int)
+0:60            Sequence
+0:60              Constant:
+0:60                0 (const int)
+0:60              Constant:
+0:60                1 (const int)
+0:60          'delta' ( temp uint)
+0:60          Constant:
+0:60            1 (const uint)
+0:61      move second child to first child ( temp 3-component vector of uint)
+0:61        vector swizzle ( temp 3-component vector of uint)
+0:61          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:61            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61              'delta' ( temp uint)
+0:61            Constant:
+0:61              2 (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 int)
+0:61        subgroupClusteredRotate ( global 3-component vector of uint)
+0:61          vector swizzle ( temp 3-component vector of uint)
+0:61            u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:61              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:61                Constant:
+0:61                  2 (const int)
+0:61              Constant:
+0:61                2 (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 int)
+0:61          'delta' ( temp uint)
+0:61          Constant:
+0:61            1 (const uint)
+0:62      move second child to first child ( temp 4-component vector of uint)
+0:62        u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:62          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62            'delta' ( temp uint)
+0:62          Constant:
+0:62            2 (const int)
+0:62        subgroupClusteredRotate ( global 4-component vector of uint)
+0:62          u4: direct index for structure (layout( column_major shared) buffer 4-component vector of uint)
+0:62            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:62              Constant:
+0:62                3 (const int)
+0:62            Constant:
+0:62              2 (const int)
+0:62          'delta' ( temp uint)
+0:62          Constant:
+0:62            1 (const uint)
+0:64      move second child to first child ( temp double)
+0:64        direct index ( temp double)
+0:64          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:64            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64              'delta' ( temp uint)
+0:64            Constant:
+0:64              3 (const int)
+0:64          Constant:
+0:64            0 (const int)
+0:64        subgroupClusteredRotate ( global double)
+0:64          direct index ( temp double)
+0:64            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:64              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:64                Constant:
+0:64                  0 (const int)
+0:64              Constant:
+0:64                3 (const int)
+0:64            Constant:
+0:64              0 (const int)
+0:64          'delta' ( temp uint)
+0:64          Constant:
+0:64            1 (const uint)
+0:65      move second child to first child ( temp 2-component vector of double)
+0:65        vector swizzle ( temp 2-component vector of double)
+0:65          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:65            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65              'delta' ( temp uint)
+0:65            Constant:
+0:65              3 (const int)
+0:65          Sequence
+0:65            Constant:
+0:65              0 (const int)
+0:65            Constant:
+0:65              1 (const int)
+0:65        subgroupClusteredRotate ( global 2-component vector of double)
+0:65          vector swizzle ( temp 2-component vector of double)
+0:65            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:65              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:65                Constant:
+0:65                  1 (const int)
+0:65              Constant:
+0:65                3 (const int)
+0:65            Sequence
+0:65              Constant:
+0:65                0 (const int)
+0:65              Constant:
+0:65                1 (const int)
+0:65          'delta' ( temp uint)
+0:65          Constant:
+0:65            1 (const uint)
+0:66      move second child to first child ( temp 3-component vector of double)
+0:66        vector swizzle ( temp 3-component vector of double)
+0:66          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:66            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66              'delta' ( temp uint)
+0:66            Constant:
+0:66              3 (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 int)
+0:66        subgroupClusteredRotate ( global 3-component vector of double)
+0:66          vector swizzle ( temp 3-component vector of double)
+0:66            d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:66              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:66                Constant:
+0:66                  2 (const int)
+0:66              Constant:
+0:66                3 (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 int)
+0:66          'delta' ( temp uint)
+0:66          Constant:
+0:66            1 (const uint)
+0:67      move second child to first child ( temp 4-component vector of double)
+0:67        d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:67          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67            'delta' ( temp uint)
+0:67          Constant:
+0:67            3 (const int)
+0:67        subgroupClusteredRotate ( global 4-component vector of double)
+0:67          d4: direct index for structure (layout( column_major shared) buffer 4-component vector of double)
+0:67            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:67              Constant:
+0:67                3 (const int)
+0:67            Constant:
+0:67              3 (const int)
+0:67          'delta' ( temp uint)
+0:67          Constant:
+0:67            1 (const uint)
+0:69      move second child to first child ( temp int)
+0:69        direct index ( temp int)
+0:69          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:69            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69              'delta' ( temp uint)
+0:69            Constant:
+0:69              1 (const int)
+0:69          Constant:
+0:69            0 (const int)
+0:69        Convert bool to int ( temp int)
+0:69          subgroupClusteredRotate ( global bool)
+0:69            Compare Less Than ( temp bool)
+0:69              direct index ( temp int)
+0:69                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:69                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:69                    Constant:
+0:69                      0 (const int)
+0:69                  Constant:
+0:69                    1 (const int)
+0:69                Constant:
+0:69                  0 (const int)
+0:69              Constant:
+0:69                0 (const int)
+0:69            'delta' ( temp uint)
+0:69            Constant:
+0:69              1 (const uint)
+0:70      move second child to first child ( temp 2-component vector of int)
+0:70        vector swizzle ( temp 2-component vector of int)
+0:70          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:70            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70              'delta' ( temp uint)
+0:70            Constant:
+0:70              1 (const int)
+0:70          Sequence
+0:70            Constant:
+0:70              0 (const int)
+0:70            Constant:
+0:70              1 (const int)
+0:70        Convert bool to int ( temp 2-component vector of int)
+0:70          subgroupClusteredRotate ( global 2-component vector of bool)
+0:70            Compare Less Than ( global 2-component vector of bool)
+0:70              vector swizzle ( temp 2-component vector of int)
+0:70                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:70                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:70                    Constant:
+0:70                      1 (const int)
+0:70                  Constant:
+0:70                    1 (const int)
+0:70                Sequence
+0:70                  Constant:
+0:70                    0 (const int)
+0:70                  Constant:
+0:70                    1 (const int)
+0:70              Constant:
+0:70                0 (const int)
+0:70                0 (const int)
+0:70            'delta' ( temp uint)
+0:70            Constant:
+0:70              1 (const uint)
+0:71      move second child to first child ( temp 3-component vector of int)
+0:71        vector swizzle ( temp 3-component vector of int)
+0:71          i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:71            indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71              'delta' ( temp uint)
+0:71            Constant:
+0:71              1 (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 int)
+0:71        Convert bool to int ( temp 3-component vector of int)
+0:71          subgroupClusteredRotate ( global 3-component vector of bool)
+0:71            Compare Less Than ( global 3-component vector of bool)
+0:71              vector swizzle ( temp 3-component vector of int)
+0:71                i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:71                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:71                    Constant:
+0:71                      1 (const int)
+0:71                  Constant:
+0:71                    1 (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 int)
+0:71              Constant:
+0:71                0 (const int)
+0:71                0 (const int)
+0:71                0 (const int)
+0:71            'delta' ( temp uint)
+0:71            Constant:
+0:71              1 (const uint)
+0:72      move second child to first child ( temp 4-component vector of int)
+0:72        i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:72          indirect index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72            'delta' ( temp uint)
+0:72          Constant:
+0:72            1 (const int)
+0:72        Convert bool to int ( temp 4-component vector of int)
+0:72          subgroupClusteredRotate ( global 4-component vector of bool)
+0:72            Compare Less Than ( global 4-component vector of bool)
+0:72              i4: direct index for structure (layout( column_major shared) buffer 4-component vector of int)
+0:72                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+0:72                  Constant:
+0:72                    1 (const int)
+0:72                Constant:
+0:72                  1 (const int)
+0:72              Constant:
+0:72                0 (const int)
+0:72                0 (const int)
+0:72                0 (const int)
+0:72                0 (const int)
+0:72            'delta' ( temp uint)
+0:72            Constant:
+0:72              1 (const uint)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?     'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) readonly buffer uint delta})
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer 4-component vector of float f4, layout( column_major shared) buffer 4-component vector of int i4, layout( column_major shared) buffer 4-component vector of uint u4, layout( column_major shared) buffer 4-component vector of double d4})
+
diff --git a/Test/baseResults/glsl.460.subgroup.rahit.out b/Test/baseResults/glsl.460.subgroup.rahit.out
index 0a1e4f4..77fbbe3 100644
--- a/Test/baseResults/glsl.460.subgroup.rahit.out
+++ b/Test/baseResults/glsl.460.subgroup.rahit.out
@@ -383,7 +383,7 @@
 0:119      Sequence
 0:119        move second child to first child ( temp float)
 0:119          'v11' ( temp float)
-0:119          'gl_HitTNV' ( in float HitTNV)
+0:119          'gl_RayTmaxNV' ( in float ObjectRayTmaxNV)
 0:120      Sequence
 0:120        move second child to first child ( temp uint)
 0:120          'v12' ( temp uint)
@@ -760,7 +760,7 @@
 0:119      Sequence
 0:119        move second child to first child ( temp float)
 0:119          'v11' ( temp float)
-0:119          'gl_HitTNV' ( in float HitTNV)
+0:119          'gl_RayTmaxNV' ( in float ObjectRayTmaxNV)
 0:120      Sequence
 0:120        move second child to first child ( temp uint)
 0:120          'v12' ( temp uint)
diff --git a/Test/baseResults/glsl.460.subgroup.rchit.out b/Test/baseResults/glsl.460.subgroup.rchit.out
index f5083e0..2a3de40 100644
--- a/Test/baseResults/glsl.460.subgroup.rchit.out
+++ b/Test/baseResults/glsl.460.subgroup.rchit.out
@@ -383,7 +383,7 @@
 0:121      Sequence
 0:121        move second child to first child ( temp float)
 0:121          'v11' ( temp float)
-0:121          'gl_HitTNV' ( in float HitTNV)
+0:121          'gl_RayTmaxNV' ( in float ObjectRayTmaxNV)
 0:122      Sequence
 0:122        move second child to first child ( temp uint)
 0:122          'v12' ( temp uint)
@@ -771,7 +771,7 @@
 0:121      Sequence
 0:121        move second child to first child ( temp float)
 0:121          'v11' ( temp float)
-0:121          'gl_HitTNV' ( in float HitTNV)
+0:121          'gl_RayTmaxNV' ( in float ObjectRayTmaxNV)
 0:122      Sequence
 0:122        move second child to first child ( temp uint)
 0:122          'v12' ( temp uint)
diff --git a/Test/baseResults/glsl.autosampledtextures.frag.out b/Test/baseResults/glsl.autosampledtextures.frag.out
index cbbb202..522cc4a 100644
--- a/Test/baseResults/glsl.autosampledtextures.frag.out
+++ b/Test/baseResults/glsl.autosampledtextures.frag.out
@@ -14,8 +14,8 @@
                               Name 13  "u_Tex"
                               Name 17  "in_UV"
                               Name 21  "out_Color"
-                              Decorate 13(u_Tex) DescriptorSet 0
                               Decorate 13(u_Tex) Binding 0
+                              Decorate 13(u_Tex) DescriptorSet 0
                               Decorate 17(in_UV) Location 0
                               Decorate 21(out_Color) Location 0
                2:             TypeVoid
diff --git a/Test/baseResults/glsl.entryPointRename.vert.bad.out b/Test/baseResults/glsl.entryPointRename.vert.bad.out
index ae5de6e..d46ef59 100644
--- a/Test/baseResults/glsl.entryPointRename.vert.bad.out
+++ b/Test/baseResults/glsl.entryPointRename.vert.bad.out
@@ -17,11 +17,11 @@
                               MemberName 11(gl_PerVertex) 2  "gl_ClipDistance"
                               MemberName 11(gl_PerVertex) 3  "gl_CullDistance"
                               Name 13  ""
+                              Decorate 11(gl_PerVertex) Block
                               MemberDecorate 11(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 11(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 11(gl_PerVertex) 2 BuiltIn ClipDistance
                               MemberDecorate 11(gl_PerVertex) 3 BuiltIn CullDistance
-                              Decorate 11(gl_PerVertex) Block
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/glsl.entryPointRename.vert.out b/Test/baseResults/glsl.entryPointRename.vert.out
index bc142a5..87ddf2a 100644
--- a/Test/baseResults/glsl.entryPointRename.vert.out
+++ b/Test/baseResults/glsl.entryPointRename.vert.out
@@ -15,11 +15,11 @@
                               MemberName 11(gl_PerVertex) 2  "gl_ClipDistance"
                               MemberName 11(gl_PerVertex) 3  "gl_CullDistance"
                               Name 13  ""
+                              Decorate 11(gl_PerVertex) Block
                               MemberDecorate 11(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 11(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 11(gl_PerVertex) 2 BuiltIn ClipDistance
                               MemberDecorate 11(gl_PerVertex) 3 BuiltIn CullDistance
-                              Decorate 11(gl_PerVertex) Block
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/glsl.es320.subgroupRotate.comp.out b/Test/baseResults/glsl.es320.subgroupRotate.comp.out
new file mode 100644
index 0000000..8aaa371
--- /dev/null
+++ b/Test/baseResults/glsl.es320.subgroupRotate.comp.out
@@ -0,0 +1,1833 @@
+glsl.es320.subgroupRotate.comp
+Shader version: 320
+Requested GL_KHR_shader_subgroup_rotate
+local_size = (8, 8, 1)
+0:? Sequence
+0:19  Function Definition: main( ( global void)
+0:19    Function Parameters: 
+0:21    Sequence
+0:21      Sequence
+0:21        move second child to first child ( temp highp uint)
+0:21          'delta' ( temp highp uint)
+0:21          delta: direct index for structure (layout( column_major shared) readonly buffer highp uint)
+0:21            'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) readonly buffer highp uint delta})
+0:21            Constant:
+0:21              0 (const int)
+0:23      move second child to first child ( temp highp float)
+0:23        direct index ( temp highp float)
+0:23          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:23            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23              Constant:
+0:23                0 (const int)
+0:23            Constant:
+0:23              0 (const int)
+0:23          Constant:
+0:23            0 (const int)
+0:23        subgroupRotate ( global highp float)
+0:23          direct index ( temp highp float)
+0:23            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:23              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23                Constant:
+0:23                  0 (const int)
+0:23              Constant:
+0:23                0 (const int)
+0:23            Constant:
+0:23              0 (const int)
+0:23          'delta' ( temp highp uint)
+0:24      move second child to first child ( temp highp 2-component vector of float)
+0:24        vector swizzle ( temp highp 2-component vector of float)
+0:24          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:24            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24              Constant:
+0:24                0 (const int)
+0:24            Constant:
+0:24              0 (const int)
+0:24          Sequence
+0:24            Constant:
+0:24              0 (const int)
+0:24            Constant:
+0:24              1 (const int)
+0:24        subgroupRotate ( global highp 2-component vector of float)
+0:24          vector swizzle ( temp highp 2-component vector of float)
+0:24            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:24              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24                Constant:
+0:24                  1 (const int)
+0:24              Constant:
+0:24                0 (const int)
+0:24            Sequence
+0:24              Constant:
+0:24                0 (const int)
+0:24              Constant:
+0:24                1 (const int)
+0:24          'delta' ( temp highp uint)
+0:25      move second child to first child ( temp highp 3-component vector of float)
+0:25        vector swizzle ( temp highp 3-component vector of float)
+0:25          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:25            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25              Constant:
+0:25                0 (const int)
+0:25            Constant:
+0:25              0 (const int)
+0:25          Sequence
+0:25            Constant:
+0:25              0 (const int)
+0:25            Constant:
+0:25              1 (const int)
+0:25            Constant:
+0:25              2 (const int)
+0:25        subgroupRotate ( global highp 3-component vector of float)
+0:25          vector swizzle ( temp highp 3-component vector of float)
+0:25            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:25              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25                Constant:
+0:25                  2 (const int)
+0:25              Constant:
+0:25                0 (const int)
+0:25            Sequence
+0:25              Constant:
+0:25                0 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25              Constant:
+0:25                2 (const int)
+0:25          'delta' ( temp highp uint)
+0:26      move second child to first child ( temp highp 4-component vector of float)
+0:26        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:26          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26            Constant:
+0:26              0 (const int)
+0:26          Constant:
+0:26            0 (const int)
+0:26        subgroupRotate ( global highp 4-component vector of float)
+0:26          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:26            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26              Constant:
+0:26                3 (const int)
+0:26            Constant:
+0:26              0 (const int)
+0:26          'delta' ( temp highp uint)
+0:28      move second child to first child ( temp highp int)
+0:28        direct index ( temp highp int)
+0:28          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:28            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28              Constant:
+0:28                0 (const int)
+0:28            Constant:
+0:28              1 (const int)
+0:28          Constant:
+0:28            0 (const int)
+0:28        subgroupRotate ( global highp int)
+0:28          direct index ( temp highp int)
+0:28            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:28              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28                Constant:
+0:28                  0 (const int)
+0:28              Constant:
+0:28                1 (const int)
+0:28            Constant:
+0:28              0 (const int)
+0:28          'delta' ( temp highp uint)
+0:29      move second child to first child ( temp highp 2-component vector of int)
+0:29        vector swizzle ( temp highp 2-component vector of int)
+0:29          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:29            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29              Constant:
+0:29                0 (const int)
+0:29            Constant:
+0:29              1 (const int)
+0:29          Sequence
+0:29            Constant:
+0:29              0 (const int)
+0:29            Constant:
+0:29              1 (const int)
+0:29        subgroupRotate ( global highp 2-component vector of int)
+0:29          vector swizzle ( temp highp 2-component vector of int)
+0:29            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:29              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29                Constant:
+0:29                  1 (const int)
+0:29              Constant:
+0:29                1 (const int)
+0:29            Sequence
+0:29              Constant:
+0:29                0 (const int)
+0:29              Constant:
+0:29                1 (const int)
+0:29          'delta' ( temp highp uint)
+0:30      move second child to first child ( temp highp 3-component vector of int)
+0:30        vector swizzle ( temp highp 3-component vector of int)
+0:30          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:30            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30              Constant:
+0:30                0 (const int)
+0:30            Constant:
+0:30              1 (const int)
+0:30          Sequence
+0:30            Constant:
+0:30              0 (const int)
+0:30            Constant:
+0:30              1 (const int)
+0:30            Constant:
+0:30              2 (const int)
+0:30        subgroupRotate ( global highp 3-component vector of int)
+0:30          vector swizzle ( temp highp 3-component vector of int)
+0:30            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:30              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30                Constant:
+0:30                  2 (const int)
+0:30              Constant:
+0:30                1 (const int)
+0:30            Sequence
+0:30              Constant:
+0:30                0 (const int)
+0:30              Constant:
+0:30                1 (const int)
+0:30              Constant:
+0:30                2 (const int)
+0:30          'delta' ( temp highp uint)
+0:31      move second child to first child ( temp highp 4-component vector of int)
+0:31        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:31          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31            Constant:
+0:31              0 (const int)
+0:31          Constant:
+0:31            1 (const int)
+0:31        subgroupRotate ( global highp 4-component vector of int)
+0:31          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:31            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31              Constant:
+0:31                3 (const int)
+0:31            Constant:
+0:31              1 (const int)
+0:31          'delta' ( temp highp uint)
+0:33      move second child to first child ( temp highp uint)
+0:33        direct index ( temp highp uint)
+0:33          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:33            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33              Constant:
+0:33                1 (const int)
+0:33            Constant:
+0:33              2 (const int)
+0:33          Constant:
+0:33            0 (const int)
+0:33        subgroupRotate ( global highp uint)
+0:33          direct index ( temp highp uint)
+0:33            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:33              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33                Constant:
+0:33                  0 (const int)
+0:33              Constant:
+0:33                2 (const int)
+0:33            Constant:
+0:33              0 (const int)
+0:33          'delta' ( temp highp uint)
+0:34      move second child to first child ( temp highp 2-component vector of uint)
+0:34        vector swizzle ( temp highp 2-component vector of uint)
+0:34          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:34            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34              Constant:
+0:34                1 (const int)
+0:34            Constant:
+0:34              2 (const int)
+0:34          Sequence
+0:34            Constant:
+0:34              0 (const int)
+0:34            Constant:
+0:34              1 (const int)
+0:34        subgroupRotate ( global highp 2-component vector of uint)
+0:34          vector swizzle ( temp highp 2-component vector of uint)
+0:34            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:34              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34                Constant:
+0:34                  1 (const int)
+0:34              Constant:
+0:34                2 (const int)
+0:34            Sequence
+0:34              Constant:
+0:34                0 (const int)
+0:34              Constant:
+0:34                1 (const int)
+0:34          'delta' ( temp highp uint)
+0:35      move second child to first child ( temp highp 3-component vector of uint)
+0:35        vector swizzle ( temp highp 3-component vector of uint)
+0:35          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:35            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35              Constant:
+0:35                1 (const int)
+0:35            Constant:
+0:35              2 (const int)
+0:35          Sequence
+0:35            Constant:
+0:35              0 (const int)
+0:35            Constant:
+0:35              1 (const int)
+0:35            Constant:
+0:35              2 (const int)
+0:35        subgroupRotate ( global highp 3-component vector of uint)
+0:35          vector swizzle ( temp highp 3-component vector of uint)
+0:35            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:35              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35                Constant:
+0:35                  2 (const int)
+0:35              Constant:
+0:35                2 (const int)
+0:35            Sequence
+0:35              Constant:
+0:35                0 (const int)
+0:35              Constant:
+0:35                1 (const int)
+0:35              Constant:
+0:35                2 (const int)
+0:35          'delta' ( temp highp uint)
+0:36      move second child to first child ( temp highp 4-component vector of uint)
+0:36        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:36          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36            Constant:
+0:36              1 (const int)
+0:36          Constant:
+0:36            2 (const int)
+0:36        subgroupRotate ( global highp 4-component vector of uint)
+0:36          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:36            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36              Constant:
+0:36                3 (const int)
+0:36            Constant:
+0:36              2 (const int)
+0:36          'delta' ( temp highp uint)
+0:38      move second child to first child ( temp highp int)
+0:38        direct index ( temp highp int)
+0:38          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:38            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38              Constant:
+0:38                1 (const int)
+0:38            Constant:
+0:38              1 (const int)
+0:38          Constant:
+0:38            0 (const int)
+0:38        Convert bool to int ( temp highp int)
+0:38          subgroupRotate ( global bool, operation at highp)
+0:38            Compare Less Than ( temp bool)
+0:38              direct index ( temp highp int)
+0:38                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:38                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38                    Constant:
+0:38                      0 (const int)
+0:38                  Constant:
+0:38                    1 (const int)
+0:38                Constant:
+0:38                  0 (const int)
+0:38              Constant:
+0:38                0 (const int)
+0:38            'delta' ( temp highp uint)
+0:39      move second child to first child ( temp highp 2-component vector of int)
+0:39        vector swizzle ( temp highp 2-component vector of int)
+0:39          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:39            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39              Constant:
+0:39                1 (const int)
+0:39            Constant:
+0:39              1 (const int)
+0:39          Sequence
+0:39            Constant:
+0:39              0 (const int)
+0:39            Constant:
+0:39              1 (const int)
+0:39        Convert bool to int ( temp highp 2-component vector of int)
+0:39          subgroupRotate ( global 2-component vector of bool, operation at highp)
+0:39            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:39              vector swizzle ( temp highp 2-component vector of int)
+0:39                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:39                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39                    Constant:
+0:39                      1 (const int)
+0:39                  Constant:
+0:39                    1 (const int)
+0:39                Sequence
+0:39                  Constant:
+0:39                    0 (const int)
+0:39                  Constant:
+0:39                    1 (const int)
+0:39              Constant:
+0:39                0 (const int)
+0:39                0 (const int)
+0:39            'delta' ( temp highp uint)
+0:40      move second child to first child ( temp highp 3-component vector of int)
+0:40        vector swizzle ( temp highp 3-component vector of int)
+0:40          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:40            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40              Constant:
+0:40                1 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40          Sequence
+0:40            Constant:
+0:40              0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40            Constant:
+0:40              2 (const int)
+0:40        Convert bool to int ( temp highp 3-component vector of int)
+0:40          subgroupRotate ( global 3-component vector of bool, operation at highp)
+0:40            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:40              vector swizzle ( temp highp 3-component vector of int)
+0:40                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:40                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40                    Constant:
+0:40                      1 (const int)
+0:40                  Constant:
+0:40                    1 (const int)
+0:40                Sequence
+0:40                  Constant:
+0:40                    0 (const int)
+0:40                  Constant:
+0:40                    1 (const int)
+0:40                  Constant:
+0:40                    2 (const int)
+0:40              Constant:
+0:40                0 (const int)
+0:40                0 (const int)
+0:40                0 (const int)
+0:40            'delta' ( temp highp uint)
+0:41      move second child to first child ( temp highp 4-component vector of int)
+0:41        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:41          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41            Constant:
+0:41              1 (const int)
+0:41          Constant:
+0:41            1 (const int)
+0:41        Convert bool to int ( temp highp 4-component vector of int)
+0:41          subgroupRotate ( global 4-component vector of bool, operation at highp)
+0:41            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:41              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:41                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41                  Constant:
+0:41                    1 (const int)
+0:41                Constant:
+0:41                  1 (const int)
+0:41              Constant:
+0:41                0 (const int)
+0:41                0 (const int)
+0:41                0 (const int)
+0:41                0 (const int)
+0:41            'delta' ( temp highp uint)
+0:43      move second child to first child ( temp highp float)
+0:43        direct index ( temp highp float)
+0:43          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:43            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43              Constant:
+0:43                2 (const int)
+0:43            Constant:
+0:43              0 (const int)
+0:43          Constant:
+0:43            0 (const int)
+0:43        subgroupClusteredRotate ( global highp float)
+0:43          direct index ( temp highp float)
+0:43            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:43              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43                Constant:
+0:43                  0 (const int)
+0:43              Constant:
+0:43                0 (const int)
+0:43            Constant:
+0:43              0 (const int)
+0:43          'delta' ( temp highp uint)
+0:43          Constant:
+0:43            1 (const uint)
+0:44      move second child to first child ( temp highp 2-component vector of float)
+0:44        vector swizzle ( temp highp 2-component vector of float)
+0:44          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:44            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44              Constant:
+0:44                2 (const int)
+0:44            Constant:
+0:44              0 (const int)
+0:44          Sequence
+0:44            Constant:
+0:44              0 (const int)
+0:44            Constant:
+0:44              1 (const int)
+0:44        subgroupClusteredRotate ( global highp 2-component vector of float)
+0:44          vector swizzle ( temp highp 2-component vector of float)
+0:44            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:44              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44                Constant:
+0:44                  1 (const int)
+0:44              Constant:
+0:44                0 (const int)
+0:44            Sequence
+0:44              Constant:
+0:44                0 (const int)
+0:44              Constant:
+0:44                1 (const int)
+0:44          'delta' ( temp highp uint)
+0:44          Constant:
+0:44            1 (const uint)
+0:45      move second child to first child ( temp highp 3-component vector of float)
+0:45        vector swizzle ( temp highp 3-component vector of float)
+0:45          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:45            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45              Constant:
+0:45                2 (const int)
+0:45            Constant:
+0:45              0 (const int)
+0:45          Sequence
+0:45            Constant:
+0:45              0 (const int)
+0:45            Constant:
+0:45              1 (const int)
+0:45            Constant:
+0:45              2 (const int)
+0:45        subgroupClusteredRotate ( global highp 3-component vector of float)
+0:45          vector swizzle ( temp highp 3-component vector of float)
+0:45            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:45              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45                Constant:
+0:45                  2 (const int)
+0:45              Constant:
+0:45                0 (const int)
+0:45            Sequence
+0:45              Constant:
+0:45                0 (const int)
+0:45              Constant:
+0:45                1 (const int)
+0:45              Constant:
+0:45                2 (const int)
+0:45          'delta' ( temp highp uint)
+0:45          Constant:
+0:45            1 (const uint)
+0:46      move second child to first child ( temp highp 4-component vector of float)
+0:46        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:46          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46            Constant:
+0:46              2 (const int)
+0:46          Constant:
+0:46            0 (const int)
+0:46        subgroupClusteredRotate ( global highp 4-component vector of float)
+0:46          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:46            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46              Constant:
+0:46                3 (const int)
+0:46            Constant:
+0:46              0 (const int)
+0:46          'delta' ( temp highp uint)
+0:46          Constant:
+0:46            1 (const uint)
+0:48      move second child to first child ( temp highp int)
+0:48        direct index ( temp highp int)
+0:48          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:48            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48              Constant:
+0:48                2 (const int)
+0:48            Constant:
+0:48              1 (const int)
+0:48          Constant:
+0:48            0 (const int)
+0:48        subgroupClusteredRotate ( global highp int)
+0:48          direct index ( temp highp int)
+0:48            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:48              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48                Constant:
+0:48                  0 (const int)
+0:48              Constant:
+0:48                1 (const int)
+0:48            Constant:
+0:48              0 (const int)
+0:48          'delta' ( temp highp uint)
+0:48          Constant:
+0:48            1 (const uint)
+0:49      move second child to first child ( temp highp 2-component vector of int)
+0:49        vector swizzle ( temp highp 2-component vector of int)
+0:49          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:49            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49              Constant:
+0:49                2 (const int)
+0:49            Constant:
+0:49              1 (const int)
+0:49          Sequence
+0:49            Constant:
+0:49              0 (const int)
+0:49            Constant:
+0:49              1 (const int)
+0:49        subgroupClusteredRotate ( global highp 2-component vector of int)
+0:49          vector swizzle ( temp highp 2-component vector of int)
+0:49            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:49              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49                Constant:
+0:49                  1 (const int)
+0:49              Constant:
+0:49                1 (const int)
+0:49            Sequence
+0:49              Constant:
+0:49                0 (const int)
+0:49              Constant:
+0:49                1 (const int)
+0:49          'delta' ( temp highp uint)
+0:49          Constant:
+0:49            1 (const uint)
+0:50      move second child to first child ( temp highp 3-component vector of int)
+0:50        vector swizzle ( temp highp 3-component vector of int)
+0:50          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:50            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50              Constant:
+0:50                2 (const int)
+0:50            Constant:
+0:50              1 (const int)
+0:50          Sequence
+0:50            Constant:
+0:50              0 (const int)
+0:50            Constant:
+0:50              1 (const int)
+0:50            Constant:
+0:50              2 (const int)
+0:50        subgroupClusteredRotate ( global highp 3-component vector of int)
+0:50          vector swizzle ( temp highp 3-component vector of int)
+0:50            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:50              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50                Constant:
+0:50                  2 (const int)
+0:50              Constant:
+0:50                1 (const int)
+0:50            Sequence
+0:50              Constant:
+0:50                0 (const int)
+0:50              Constant:
+0:50                1 (const int)
+0:50              Constant:
+0:50                2 (const int)
+0:50          'delta' ( temp highp uint)
+0:50          Constant:
+0:50            1 (const uint)
+0:51      move second child to first child ( temp highp 4-component vector of int)
+0:51        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:51          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51            Constant:
+0:51              2 (const int)
+0:51          Constant:
+0:51            1 (const int)
+0:51        subgroupClusteredRotate ( global highp 4-component vector of int)
+0:51          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:51            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51              Constant:
+0:51                3 (const int)
+0:51            Constant:
+0:51              1 (const int)
+0:51          'delta' ( temp highp uint)
+0:51          Constant:
+0:51            1 (const uint)
+0:53      move second child to first child ( temp highp uint)
+0:53        direct index ( temp highp uint)
+0:53          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:53            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53              Constant:
+0:53                3 (const int)
+0:53            Constant:
+0:53              2 (const int)
+0:53          Constant:
+0:53            0 (const int)
+0:53        subgroupClusteredRotate ( global highp uint)
+0:53          direct index ( temp highp uint)
+0:53            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:53              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53                Constant:
+0:53                  0 (const int)
+0:53              Constant:
+0:53                2 (const int)
+0:53            Constant:
+0:53              0 (const int)
+0:53          'delta' ( temp highp uint)
+0:53          Constant:
+0:53            1 (const uint)
+0:54      move second child to first child ( temp highp 2-component vector of uint)
+0:54        vector swizzle ( temp highp 2-component vector of uint)
+0:54          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:54            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54              Constant:
+0:54                3 (const int)
+0:54            Constant:
+0:54              2 (const int)
+0:54          Sequence
+0:54            Constant:
+0:54              0 (const int)
+0:54            Constant:
+0:54              1 (const int)
+0:54        subgroupClusteredRotate ( global highp 2-component vector of uint)
+0:54          vector swizzle ( temp highp 2-component vector of uint)
+0:54            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:54              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54                Constant:
+0:54                  1 (const int)
+0:54              Constant:
+0:54                2 (const int)
+0:54            Sequence
+0:54              Constant:
+0:54                0 (const int)
+0:54              Constant:
+0:54                1 (const int)
+0:54          'delta' ( temp highp uint)
+0:54          Constant:
+0:54            1 (const uint)
+0:55      move second child to first child ( temp highp 3-component vector of uint)
+0:55        vector swizzle ( temp highp 3-component vector of uint)
+0:55          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:55            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55              Constant:
+0:55                3 (const int)
+0:55            Constant:
+0:55              2 (const int)
+0:55          Sequence
+0:55            Constant:
+0:55              0 (const int)
+0:55            Constant:
+0:55              1 (const int)
+0:55            Constant:
+0:55              2 (const int)
+0:55        subgroupClusteredRotate ( global highp 3-component vector of uint)
+0:55          vector swizzle ( temp highp 3-component vector of uint)
+0:55            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:55              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55                Constant:
+0:55                  2 (const int)
+0:55              Constant:
+0:55                2 (const int)
+0:55            Sequence
+0:55              Constant:
+0:55                0 (const int)
+0:55              Constant:
+0:55                1 (const int)
+0:55              Constant:
+0:55                2 (const int)
+0:55          'delta' ( temp highp uint)
+0:55          Constant:
+0:55            1 (const uint)
+0:56      move second child to first child ( temp highp 4-component vector of uint)
+0:56        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:56          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56            Constant:
+0:56              3 (const int)
+0:56          Constant:
+0:56            2 (const int)
+0:56        subgroupClusteredRotate ( global highp 4-component vector of uint)
+0:56          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:56            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56              Constant:
+0:56                3 (const int)
+0:56            Constant:
+0:56              2 (const int)
+0:56          'delta' ( temp highp uint)
+0:56          Constant:
+0:56            1 (const uint)
+0:58      move second child to first child ( temp highp int)
+0:58        direct index ( temp highp int)
+0:58          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:58            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58              Constant:
+0:58                3 (const int)
+0:58            Constant:
+0:58              1 (const int)
+0:58          Constant:
+0:58            0 (const int)
+0:58        Convert bool to int ( temp highp int)
+0:58          subgroupClusteredRotate ( global bool, operation at highp)
+0:58            Compare Less Than ( temp bool)
+0:58              direct index ( temp highp int)
+0:58                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:58                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58                    Constant:
+0:58                      0 (const int)
+0:58                  Constant:
+0:58                    1 (const int)
+0:58                Constant:
+0:58                  0 (const int)
+0:58              Constant:
+0:58                0 (const int)
+0:58            'delta' ( temp highp uint)
+0:58            Constant:
+0:58              1 (const uint)
+0:59      move second child to first child ( temp highp 2-component vector of int)
+0:59        vector swizzle ( temp highp 2-component vector of int)
+0:59          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:59            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59              Constant:
+0:59                3 (const int)
+0:59            Constant:
+0:59              1 (const int)
+0:59          Sequence
+0:59            Constant:
+0:59              0 (const int)
+0:59            Constant:
+0:59              1 (const int)
+0:59        Convert bool to int ( temp highp 2-component vector of int)
+0:59          subgroupClusteredRotate ( global 2-component vector of bool, operation at highp)
+0:59            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:59              vector swizzle ( temp highp 2-component vector of int)
+0:59                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:59                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59                    Constant:
+0:59                      1 (const int)
+0:59                  Constant:
+0:59                    1 (const int)
+0:59                Sequence
+0:59                  Constant:
+0:59                    0 (const int)
+0:59                  Constant:
+0:59                    1 (const int)
+0:59              Constant:
+0:59                0 (const int)
+0:59                0 (const int)
+0:59            'delta' ( temp highp uint)
+0:59            Constant:
+0:59              1 (const uint)
+0:60      move second child to first child ( temp highp 3-component vector of int)
+0:60        vector swizzle ( temp highp 3-component vector of int)
+0:60          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:60            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60              Constant:
+0:60                3 (const int)
+0:60            Constant:
+0:60              1 (const int)
+0:60          Sequence
+0:60            Constant:
+0:60              0 (const int)
+0:60            Constant:
+0:60              1 (const int)
+0:60            Constant:
+0:60              2 (const int)
+0:60        Convert bool to int ( temp highp 3-component vector of int)
+0:60          subgroupClusteredRotate ( global 3-component vector of bool, operation at highp)
+0:60            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:60              vector swizzle ( temp highp 3-component vector of int)
+0:60                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:60                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60                    Constant:
+0:60                      1 (const int)
+0:60                  Constant:
+0:60                    1 (const int)
+0:60                Sequence
+0:60                  Constant:
+0:60                    0 (const int)
+0:60                  Constant:
+0:60                    1 (const int)
+0:60                  Constant:
+0:60                    2 (const int)
+0:60              Constant:
+0:60                0 (const int)
+0:60                0 (const int)
+0:60                0 (const int)
+0:60            'delta' ( temp highp uint)
+0:60            Constant:
+0:60              1 (const uint)
+0:61      move second child to first child ( temp highp 4-component vector of int)
+0:61        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:61          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61            Constant:
+0:61              3 (const int)
+0:61          Constant:
+0:61            1 (const int)
+0:61        Convert bool to int ( temp highp 4-component vector of int)
+0:61          subgroupClusteredRotate ( global 4-component vector of bool, operation at highp)
+0:61            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:61              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:61                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61                  Constant:
+0:61                    1 (const int)
+0:61                Constant:
+0:61                  1 (const int)
+0:61              Constant:
+0:61                0 (const int)
+0:61                0 (const int)
+0:61                0 (const int)
+0:61                0 (const int)
+0:61            'delta' ( temp highp uint)
+0:61            Constant:
+0:61              1 (const uint)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?     'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) readonly buffer highp uint delta})
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+
+
+Linked compute stage:
+
+
+Shader version: 320
+Requested GL_KHR_shader_subgroup_rotate
+local_size = (8, 8, 1)
+0:? Sequence
+0:19  Function Definition: main( ( global void)
+0:19    Function Parameters: 
+0:21    Sequence
+0:21      Sequence
+0:21        move second child to first child ( temp highp uint)
+0:21          'delta' ( temp highp uint)
+0:21          delta: direct index for structure (layout( column_major shared) readonly buffer highp uint)
+0:21            'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) readonly buffer highp uint delta})
+0:21            Constant:
+0:21              0 (const int)
+0:23      move second child to first child ( temp highp float)
+0:23        direct index ( temp highp float)
+0:23          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:23            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23              Constant:
+0:23                0 (const int)
+0:23            Constant:
+0:23              0 (const int)
+0:23          Constant:
+0:23            0 (const int)
+0:23        subgroupRotate ( global highp float)
+0:23          direct index ( temp highp float)
+0:23            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:23              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:23                Constant:
+0:23                  0 (const int)
+0:23              Constant:
+0:23                0 (const int)
+0:23            Constant:
+0:23              0 (const int)
+0:23          'delta' ( temp highp uint)
+0:24      move second child to first child ( temp highp 2-component vector of float)
+0:24        vector swizzle ( temp highp 2-component vector of float)
+0:24          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:24            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24              Constant:
+0:24                0 (const int)
+0:24            Constant:
+0:24              0 (const int)
+0:24          Sequence
+0:24            Constant:
+0:24              0 (const int)
+0:24            Constant:
+0:24              1 (const int)
+0:24        subgroupRotate ( global highp 2-component vector of float)
+0:24          vector swizzle ( temp highp 2-component vector of float)
+0:24            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:24              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:24                Constant:
+0:24                  1 (const int)
+0:24              Constant:
+0:24                0 (const int)
+0:24            Sequence
+0:24              Constant:
+0:24                0 (const int)
+0:24              Constant:
+0:24                1 (const int)
+0:24          'delta' ( temp highp uint)
+0:25      move second child to first child ( temp highp 3-component vector of float)
+0:25        vector swizzle ( temp highp 3-component vector of float)
+0:25          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:25            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25              Constant:
+0:25                0 (const int)
+0:25            Constant:
+0:25              0 (const int)
+0:25          Sequence
+0:25            Constant:
+0:25              0 (const int)
+0:25            Constant:
+0:25              1 (const int)
+0:25            Constant:
+0:25              2 (const int)
+0:25        subgroupRotate ( global highp 3-component vector of float)
+0:25          vector swizzle ( temp highp 3-component vector of float)
+0:25            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:25              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:25                Constant:
+0:25                  2 (const int)
+0:25              Constant:
+0:25                0 (const int)
+0:25            Sequence
+0:25              Constant:
+0:25                0 (const int)
+0:25              Constant:
+0:25                1 (const int)
+0:25              Constant:
+0:25                2 (const int)
+0:25          'delta' ( temp highp uint)
+0:26      move second child to first child ( temp highp 4-component vector of float)
+0:26        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:26          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26            Constant:
+0:26              0 (const int)
+0:26          Constant:
+0:26            0 (const int)
+0:26        subgroupRotate ( global highp 4-component vector of float)
+0:26          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:26            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:26              Constant:
+0:26                3 (const int)
+0:26            Constant:
+0:26              0 (const int)
+0:26          'delta' ( temp highp uint)
+0:28      move second child to first child ( temp highp int)
+0:28        direct index ( temp highp int)
+0:28          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:28            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28              Constant:
+0:28                0 (const int)
+0:28            Constant:
+0:28              1 (const int)
+0:28          Constant:
+0:28            0 (const int)
+0:28        subgroupRotate ( global highp int)
+0:28          direct index ( temp highp int)
+0:28            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:28              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:28                Constant:
+0:28                  0 (const int)
+0:28              Constant:
+0:28                1 (const int)
+0:28            Constant:
+0:28              0 (const int)
+0:28          'delta' ( temp highp uint)
+0:29      move second child to first child ( temp highp 2-component vector of int)
+0:29        vector swizzle ( temp highp 2-component vector of int)
+0:29          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:29            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29              Constant:
+0:29                0 (const int)
+0:29            Constant:
+0:29              1 (const int)
+0:29          Sequence
+0:29            Constant:
+0:29              0 (const int)
+0:29            Constant:
+0:29              1 (const int)
+0:29        subgroupRotate ( global highp 2-component vector of int)
+0:29          vector swizzle ( temp highp 2-component vector of int)
+0:29            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:29              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:29                Constant:
+0:29                  1 (const int)
+0:29              Constant:
+0:29                1 (const int)
+0:29            Sequence
+0:29              Constant:
+0:29                0 (const int)
+0:29              Constant:
+0:29                1 (const int)
+0:29          'delta' ( temp highp uint)
+0:30      move second child to first child ( temp highp 3-component vector of int)
+0:30        vector swizzle ( temp highp 3-component vector of int)
+0:30          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:30            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30              Constant:
+0:30                0 (const int)
+0:30            Constant:
+0:30              1 (const int)
+0:30          Sequence
+0:30            Constant:
+0:30              0 (const int)
+0:30            Constant:
+0:30              1 (const int)
+0:30            Constant:
+0:30              2 (const int)
+0:30        subgroupRotate ( global highp 3-component vector of int)
+0:30          vector swizzle ( temp highp 3-component vector of int)
+0:30            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:30              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:30                Constant:
+0:30                  2 (const int)
+0:30              Constant:
+0:30                1 (const int)
+0:30            Sequence
+0:30              Constant:
+0:30                0 (const int)
+0:30              Constant:
+0:30                1 (const int)
+0:30              Constant:
+0:30                2 (const int)
+0:30          'delta' ( temp highp uint)
+0:31      move second child to first child ( temp highp 4-component vector of int)
+0:31        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:31          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31            Constant:
+0:31              0 (const int)
+0:31          Constant:
+0:31            1 (const int)
+0:31        subgroupRotate ( global highp 4-component vector of int)
+0:31          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:31            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:31              Constant:
+0:31                3 (const int)
+0:31            Constant:
+0:31              1 (const int)
+0:31          'delta' ( temp highp uint)
+0:33      move second child to first child ( temp highp uint)
+0:33        direct index ( temp highp uint)
+0:33          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:33            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33              Constant:
+0:33                1 (const int)
+0:33            Constant:
+0:33              2 (const int)
+0:33          Constant:
+0:33            0 (const int)
+0:33        subgroupRotate ( global highp uint)
+0:33          direct index ( temp highp uint)
+0:33            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:33              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:33                Constant:
+0:33                  0 (const int)
+0:33              Constant:
+0:33                2 (const int)
+0:33            Constant:
+0:33              0 (const int)
+0:33          'delta' ( temp highp uint)
+0:34      move second child to first child ( temp highp 2-component vector of uint)
+0:34        vector swizzle ( temp highp 2-component vector of uint)
+0:34          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:34            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34              Constant:
+0:34                1 (const int)
+0:34            Constant:
+0:34              2 (const int)
+0:34          Sequence
+0:34            Constant:
+0:34              0 (const int)
+0:34            Constant:
+0:34              1 (const int)
+0:34        subgroupRotate ( global highp 2-component vector of uint)
+0:34          vector swizzle ( temp highp 2-component vector of uint)
+0:34            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:34              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:34                Constant:
+0:34                  1 (const int)
+0:34              Constant:
+0:34                2 (const int)
+0:34            Sequence
+0:34              Constant:
+0:34                0 (const int)
+0:34              Constant:
+0:34                1 (const int)
+0:34          'delta' ( temp highp uint)
+0:35      move second child to first child ( temp highp 3-component vector of uint)
+0:35        vector swizzle ( temp highp 3-component vector of uint)
+0:35          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:35            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35              Constant:
+0:35                1 (const int)
+0:35            Constant:
+0:35              2 (const int)
+0:35          Sequence
+0:35            Constant:
+0:35              0 (const int)
+0:35            Constant:
+0:35              1 (const int)
+0:35            Constant:
+0:35              2 (const int)
+0:35        subgroupRotate ( global highp 3-component vector of uint)
+0:35          vector swizzle ( temp highp 3-component vector of uint)
+0:35            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:35              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:35                Constant:
+0:35                  2 (const int)
+0:35              Constant:
+0:35                2 (const int)
+0:35            Sequence
+0:35              Constant:
+0:35                0 (const int)
+0:35              Constant:
+0:35                1 (const int)
+0:35              Constant:
+0:35                2 (const int)
+0:35          'delta' ( temp highp uint)
+0:36      move second child to first child ( temp highp 4-component vector of uint)
+0:36        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:36          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36            Constant:
+0:36              1 (const int)
+0:36          Constant:
+0:36            2 (const int)
+0:36        subgroupRotate ( global highp 4-component vector of uint)
+0:36          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:36            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:36              Constant:
+0:36                3 (const int)
+0:36            Constant:
+0:36              2 (const int)
+0:36          'delta' ( temp highp uint)
+0:38      move second child to first child ( temp highp int)
+0:38        direct index ( temp highp int)
+0:38          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:38            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38              Constant:
+0:38                1 (const int)
+0:38            Constant:
+0:38              1 (const int)
+0:38          Constant:
+0:38            0 (const int)
+0:38        Convert bool to int ( temp highp int)
+0:38          subgroupRotate ( global bool, operation at highp)
+0:38            Compare Less Than ( temp bool)
+0:38              direct index ( temp highp int)
+0:38                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:38                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:38                    Constant:
+0:38                      0 (const int)
+0:38                  Constant:
+0:38                    1 (const int)
+0:38                Constant:
+0:38                  0 (const int)
+0:38              Constant:
+0:38                0 (const int)
+0:38            'delta' ( temp highp uint)
+0:39      move second child to first child ( temp highp 2-component vector of int)
+0:39        vector swizzle ( temp highp 2-component vector of int)
+0:39          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:39            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39              Constant:
+0:39                1 (const int)
+0:39            Constant:
+0:39              1 (const int)
+0:39          Sequence
+0:39            Constant:
+0:39              0 (const int)
+0:39            Constant:
+0:39              1 (const int)
+0:39        Convert bool to int ( temp highp 2-component vector of int)
+0:39          subgroupRotate ( global 2-component vector of bool, operation at highp)
+0:39            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:39              vector swizzle ( temp highp 2-component vector of int)
+0:39                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:39                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:39                    Constant:
+0:39                      1 (const int)
+0:39                  Constant:
+0:39                    1 (const int)
+0:39                Sequence
+0:39                  Constant:
+0:39                    0 (const int)
+0:39                  Constant:
+0:39                    1 (const int)
+0:39              Constant:
+0:39                0 (const int)
+0:39                0 (const int)
+0:39            'delta' ( temp highp uint)
+0:40      move second child to first child ( temp highp 3-component vector of int)
+0:40        vector swizzle ( temp highp 3-component vector of int)
+0:40          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:40            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40              Constant:
+0:40                1 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40          Sequence
+0:40            Constant:
+0:40              0 (const int)
+0:40            Constant:
+0:40              1 (const int)
+0:40            Constant:
+0:40              2 (const int)
+0:40        Convert bool to int ( temp highp 3-component vector of int)
+0:40          subgroupRotate ( global 3-component vector of bool, operation at highp)
+0:40            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:40              vector swizzle ( temp highp 3-component vector of int)
+0:40                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:40                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:40                    Constant:
+0:40                      1 (const int)
+0:40                  Constant:
+0:40                    1 (const int)
+0:40                Sequence
+0:40                  Constant:
+0:40                    0 (const int)
+0:40                  Constant:
+0:40                    1 (const int)
+0:40                  Constant:
+0:40                    2 (const int)
+0:40              Constant:
+0:40                0 (const int)
+0:40                0 (const int)
+0:40                0 (const int)
+0:40            'delta' ( temp highp uint)
+0:41      move second child to first child ( temp highp 4-component vector of int)
+0:41        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:41          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41            Constant:
+0:41              1 (const int)
+0:41          Constant:
+0:41            1 (const int)
+0:41        Convert bool to int ( temp highp 4-component vector of int)
+0:41          subgroupRotate ( global 4-component vector of bool, operation at highp)
+0:41            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:41              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:41                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:41                  Constant:
+0:41                    1 (const int)
+0:41                Constant:
+0:41                  1 (const int)
+0:41              Constant:
+0:41                0 (const int)
+0:41                0 (const int)
+0:41                0 (const int)
+0:41                0 (const int)
+0:41            'delta' ( temp highp uint)
+0:43      move second child to first child ( temp highp float)
+0:43        direct index ( temp highp float)
+0:43          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:43            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43              Constant:
+0:43                2 (const int)
+0:43            Constant:
+0:43              0 (const int)
+0:43          Constant:
+0:43            0 (const int)
+0:43        subgroupClusteredRotate ( global highp float)
+0:43          direct index ( temp highp float)
+0:43            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:43              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:43                Constant:
+0:43                  0 (const int)
+0:43              Constant:
+0:43                0 (const int)
+0:43            Constant:
+0:43              0 (const int)
+0:43          'delta' ( temp highp uint)
+0:43          Constant:
+0:43            1 (const uint)
+0:44      move second child to first child ( temp highp 2-component vector of float)
+0:44        vector swizzle ( temp highp 2-component vector of float)
+0:44          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:44            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44              Constant:
+0:44                2 (const int)
+0:44            Constant:
+0:44              0 (const int)
+0:44          Sequence
+0:44            Constant:
+0:44              0 (const int)
+0:44            Constant:
+0:44              1 (const int)
+0:44        subgroupClusteredRotate ( global highp 2-component vector of float)
+0:44          vector swizzle ( temp highp 2-component vector of float)
+0:44            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:44              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:44                Constant:
+0:44                  1 (const int)
+0:44              Constant:
+0:44                0 (const int)
+0:44            Sequence
+0:44              Constant:
+0:44                0 (const int)
+0:44              Constant:
+0:44                1 (const int)
+0:44          'delta' ( temp highp uint)
+0:44          Constant:
+0:44            1 (const uint)
+0:45      move second child to first child ( temp highp 3-component vector of float)
+0:45        vector swizzle ( temp highp 3-component vector of float)
+0:45          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:45            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45              Constant:
+0:45                2 (const int)
+0:45            Constant:
+0:45              0 (const int)
+0:45          Sequence
+0:45            Constant:
+0:45              0 (const int)
+0:45            Constant:
+0:45              1 (const int)
+0:45            Constant:
+0:45              2 (const int)
+0:45        subgroupClusteredRotate ( global highp 3-component vector of float)
+0:45          vector swizzle ( temp highp 3-component vector of float)
+0:45            f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:45              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:45                Constant:
+0:45                  2 (const int)
+0:45              Constant:
+0:45                0 (const int)
+0:45            Sequence
+0:45              Constant:
+0:45                0 (const int)
+0:45              Constant:
+0:45                1 (const int)
+0:45              Constant:
+0:45                2 (const int)
+0:45          'delta' ( temp highp uint)
+0:45          Constant:
+0:45            1 (const uint)
+0:46      move second child to first child ( temp highp 4-component vector of float)
+0:46        f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:46          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46            Constant:
+0:46              2 (const int)
+0:46          Constant:
+0:46            0 (const int)
+0:46        subgroupClusteredRotate ( global highp 4-component vector of float)
+0:46          f4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of float)
+0:46            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:46              Constant:
+0:46                3 (const int)
+0:46            Constant:
+0:46              0 (const int)
+0:46          'delta' ( temp highp uint)
+0:46          Constant:
+0:46            1 (const uint)
+0:48      move second child to first child ( temp highp int)
+0:48        direct index ( temp highp int)
+0:48          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:48            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48              Constant:
+0:48                2 (const int)
+0:48            Constant:
+0:48              1 (const int)
+0:48          Constant:
+0:48            0 (const int)
+0:48        subgroupClusteredRotate ( global highp int)
+0:48          direct index ( temp highp int)
+0:48            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:48              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:48                Constant:
+0:48                  0 (const int)
+0:48              Constant:
+0:48                1 (const int)
+0:48            Constant:
+0:48              0 (const int)
+0:48          'delta' ( temp highp uint)
+0:48          Constant:
+0:48            1 (const uint)
+0:49      move second child to first child ( temp highp 2-component vector of int)
+0:49        vector swizzle ( temp highp 2-component vector of int)
+0:49          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:49            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49              Constant:
+0:49                2 (const int)
+0:49            Constant:
+0:49              1 (const int)
+0:49          Sequence
+0:49            Constant:
+0:49              0 (const int)
+0:49            Constant:
+0:49              1 (const int)
+0:49        subgroupClusteredRotate ( global highp 2-component vector of int)
+0:49          vector swizzle ( temp highp 2-component vector of int)
+0:49            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:49              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:49                Constant:
+0:49                  1 (const int)
+0:49              Constant:
+0:49                1 (const int)
+0:49            Sequence
+0:49              Constant:
+0:49                0 (const int)
+0:49              Constant:
+0:49                1 (const int)
+0:49          'delta' ( temp highp uint)
+0:49          Constant:
+0:49            1 (const uint)
+0:50      move second child to first child ( temp highp 3-component vector of int)
+0:50        vector swizzle ( temp highp 3-component vector of int)
+0:50          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:50            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50              Constant:
+0:50                2 (const int)
+0:50            Constant:
+0:50              1 (const int)
+0:50          Sequence
+0:50            Constant:
+0:50              0 (const int)
+0:50            Constant:
+0:50              1 (const int)
+0:50            Constant:
+0:50              2 (const int)
+0:50        subgroupClusteredRotate ( global highp 3-component vector of int)
+0:50          vector swizzle ( temp highp 3-component vector of int)
+0:50            i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:50              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:50                Constant:
+0:50                  2 (const int)
+0:50              Constant:
+0:50                1 (const int)
+0:50            Sequence
+0:50              Constant:
+0:50                0 (const int)
+0:50              Constant:
+0:50                1 (const int)
+0:50              Constant:
+0:50                2 (const int)
+0:50          'delta' ( temp highp uint)
+0:50          Constant:
+0:50            1 (const uint)
+0:51      move second child to first child ( temp highp 4-component vector of int)
+0:51        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:51          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51            Constant:
+0:51              2 (const int)
+0:51          Constant:
+0:51            1 (const int)
+0:51        subgroupClusteredRotate ( global highp 4-component vector of int)
+0:51          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:51            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:51              Constant:
+0:51                3 (const int)
+0:51            Constant:
+0:51              1 (const int)
+0:51          'delta' ( temp highp uint)
+0:51          Constant:
+0:51            1 (const uint)
+0:53      move second child to first child ( temp highp uint)
+0:53        direct index ( temp highp uint)
+0:53          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:53            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53              Constant:
+0:53                3 (const int)
+0:53            Constant:
+0:53              2 (const int)
+0:53          Constant:
+0:53            0 (const int)
+0:53        subgroupClusteredRotate ( global highp uint)
+0:53          direct index ( temp highp uint)
+0:53            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:53              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:53                Constant:
+0:53                  0 (const int)
+0:53              Constant:
+0:53                2 (const int)
+0:53            Constant:
+0:53              0 (const int)
+0:53          'delta' ( temp highp uint)
+0:53          Constant:
+0:53            1 (const uint)
+0:54      move second child to first child ( temp highp 2-component vector of uint)
+0:54        vector swizzle ( temp highp 2-component vector of uint)
+0:54          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:54            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54              Constant:
+0:54                3 (const int)
+0:54            Constant:
+0:54              2 (const int)
+0:54          Sequence
+0:54            Constant:
+0:54              0 (const int)
+0:54            Constant:
+0:54              1 (const int)
+0:54        subgroupClusteredRotate ( global highp 2-component vector of uint)
+0:54          vector swizzle ( temp highp 2-component vector of uint)
+0:54            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:54              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:54                Constant:
+0:54                  1 (const int)
+0:54              Constant:
+0:54                2 (const int)
+0:54            Sequence
+0:54              Constant:
+0:54                0 (const int)
+0:54              Constant:
+0:54                1 (const int)
+0:54          'delta' ( temp highp uint)
+0:54          Constant:
+0:54            1 (const uint)
+0:55      move second child to first child ( temp highp 3-component vector of uint)
+0:55        vector swizzle ( temp highp 3-component vector of uint)
+0:55          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:55            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55              Constant:
+0:55                3 (const int)
+0:55            Constant:
+0:55              2 (const int)
+0:55          Sequence
+0:55            Constant:
+0:55              0 (const int)
+0:55            Constant:
+0:55              1 (const int)
+0:55            Constant:
+0:55              2 (const int)
+0:55        subgroupClusteredRotate ( global highp 3-component vector of uint)
+0:55          vector swizzle ( temp highp 3-component vector of uint)
+0:55            u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:55              direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55                'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:55                Constant:
+0:55                  2 (const int)
+0:55              Constant:
+0:55                2 (const int)
+0:55            Sequence
+0:55              Constant:
+0:55                0 (const int)
+0:55              Constant:
+0:55                1 (const int)
+0:55              Constant:
+0:55                2 (const int)
+0:55          'delta' ( temp highp uint)
+0:55          Constant:
+0:55            1 (const uint)
+0:56      move second child to first child ( temp highp 4-component vector of uint)
+0:56        u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:56          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56            Constant:
+0:56              3 (const int)
+0:56          Constant:
+0:56            2 (const int)
+0:56        subgroupClusteredRotate ( global highp 4-component vector of uint)
+0:56          u4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of uint)
+0:56            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:56              Constant:
+0:56                3 (const int)
+0:56            Constant:
+0:56              2 (const int)
+0:56          'delta' ( temp highp uint)
+0:56          Constant:
+0:56            1 (const uint)
+0:58      move second child to first child ( temp highp int)
+0:58        direct index ( temp highp int)
+0:58          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:58            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58              Constant:
+0:58                3 (const int)
+0:58            Constant:
+0:58              1 (const int)
+0:58          Constant:
+0:58            0 (const int)
+0:58        Convert bool to int ( temp highp int)
+0:58          subgroupClusteredRotate ( global bool, operation at highp)
+0:58            Compare Less Than ( temp bool)
+0:58              direct index ( temp highp int)
+0:58                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:58                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:58                    Constant:
+0:58                      0 (const int)
+0:58                  Constant:
+0:58                    1 (const int)
+0:58                Constant:
+0:58                  0 (const int)
+0:58              Constant:
+0:58                0 (const int)
+0:58            'delta' ( temp highp uint)
+0:58            Constant:
+0:58              1 (const uint)
+0:59      move second child to first child ( temp highp 2-component vector of int)
+0:59        vector swizzle ( temp highp 2-component vector of int)
+0:59          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:59            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59              Constant:
+0:59                3 (const int)
+0:59            Constant:
+0:59              1 (const int)
+0:59          Sequence
+0:59            Constant:
+0:59              0 (const int)
+0:59            Constant:
+0:59              1 (const int)
+0:59        Convert bool to int ( temp highp 2-component vector of int)
+0:59          subgroupClusteredRotate ( global 2-component vector of bool, operation at highp)
+0:59            Compare Less Than ( global 2-component vector of bool, operation at highp)
+0:59              vector swizzle ( temp highp 2-component vector of int)
+0:59                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:59                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:59                    Constant:
+0:59                      1 (const int)
+0:59                  Constant:
+0:59                    1 (const int)
+0:59                Sequence
+0:59                  Constant:
+0:59                    0 (const int)
+0:59                  Constant:
+0:59                    1 (const int)
+0:59              Constant:
+0:59                0 (const int)
+0:59                0 (const int)
+0:59            'delta' ( temp highp uint)
+0:59            Constant:
+0:59              1 (const uint)
+0:60      move second child to first child ( temp highp 3-component vector of int)
+0:60        vector swizzle ( temp highp 3-component vector of int)
+0:60          i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:60            direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60              'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60              Constant:
+0:60                3 (const int)
+0:60            Constant:
+0:60              1 (const int)
+0:60          Sequence
+0:60            Constant:
+0:60              0 (const int)
+0:60            Constant:
+0:60              1 (const int)
+0:60            Constant:
+0:60              2 (const int)
+0:60        Convert bool to int ( temp highp 3-component vector of int)
+0:60          subgroupClusteredRotate ( global 3-component vector of bool, operation at highp)
+0:60            Compare Less Than ( global 3-component vector of bool, operation at highp)
+0:60              vector swizzle ( temp highp 3-component vector of int)
+0:60                i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:60                  direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60                    'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:60                    Constant:
+0:60                      1 (const int)
+0:60                  Constant:
+0:60                    1 (const int)
+0:60                Sequence
+0:60                  Constant:
+0:60                    0 (const int)
+0:60                  Constant:
+0:60                    1 (const int)
+0:60                  Constant:
+0:60                    2 (const int)
+0:60              Constant:
+0:60                0 (const int)
+0:60                0 (const int)
+0:60                0 (const int)
+0:60            'delta' ( temp highp uint)
+0:60            Constant:
+0:60              1 (const uint)
+0:61      move second child to first child ( temp highp 4-component vector of int)
+0:61        i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:61          direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61            'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61            Constant:
+0:61              3 (const int)
+0:61          Constant:
+0:61            1 (const int)
+0:61        Convert bool to int ( temp highp 4-component vector of int)
+0:61          subgroupClusteredRotate ( global 4-component vector of bool, operation at highp)
+0:61            Compare Less Than ( global 4-component vector of bool, operation at highp)
+0:61              i4: direct index for structure (layout( column_major shared) buffer highp 4-component vector of int)
+0:61                direct index (layout( binding=0 column_major shared) temp block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61                  'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+0:61                  Constant:
+0:61                    1 (const int)
+0:61                Constant:
+0:61                  1 (const int)
+0:61              Constant:
+0:61                0 (const int)
+0:61                0 (const int)
+0:61                0 (const int)
+0:61                0 (const int)
+0:61            'delta' ( temp highp uint)
+0:61            Constant:
+0:61              1 (const uint)
+0:?   Linker Objects
+0:?     'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize)
+0:?       8 (const uint)
+0:?       8 (const uint)
+0:?       1 (const uint)
+0:?     'ro' (layout( column_major shared) readonly buffer block{layout( column_major shared) readonly buffer highp uint delta})
+0:?     'data' (layout( binding=0 column_major shared) buffer 4-element array of block{layout( column_major shared) buffer highp 4-component vector of float f4, layout( column_major shared) buffer highp 4-component vector of int i4, layout( column_major shared) buffer highp 4-component vector of uint u4})
+
diff --git a/Test/baseResults/glsl.interpOp.error.frag.out b/Test/baseResults/glsl.interpOp.error.frag.out
new file mode 100644
index 0000000..36b66ae
--- /dev/null
+++ b/Test/baseResults/glsl.interpOp.error.frag.out
@@ -0,0 +1,501 @@
+glsl.interpOp.error.frag
+ERROR: 0:39: 'interpolateAtCentroid' : first argument must be an interpolant, or interpolant-array element. Using the field of a named struct as an interpolant argument is not allowed (ES-only). 
+ERROR: 0:40: 'interpolateAtCentroid' : first argument must be an interpolant, or interpolant-array element 
+ERROR: 0:41: 'interpolateAtCentroid' : first argument must be an interpolant, or interpolant-array element. Using the field of a named struct as an interpolant argument is not allowed (ES-only). 
+ERROR: 0:54: 'interpolateAtSample' : first argument must be an interpolant, or interpolant-array element. Using the field of a named struct as an interpolant argument is not allowed (ES-only). 
+ERROR: 0:55: 'interpolateAtSample' : first argument must be an interpolant, or interpolant-array element 
+ERROR: 0:56: 'interpolateAtSample' : first argument must be an interpolant, or interpolant-array element. Using the field of a named struct as an interpolant argument is not allowed (ES-only). 
+ERROR: 0:69: 'interpolateAtOffset' : first argument must be an interpolant, or interpolant-array element. Using the field of a named struct as an interpolant argument is not allowed (ES-only). 
+ERROR: 0:70: 'interpolateAtOffset' : first argument must be an interpolant, or interpolant-array element 
+ERROR: 0:71: 'interpolateAtOffset' : first argument must be an interpolant, or interpolant-array element. Using the field of a named struct as an interpolant argument is not allowed (ES-only). 
+ERROR: 9 compilation errors.  No code generated.
+
+
+Shader version: 320
+ERROR: node is still EOpNull!
+0:27  Function Definition: main( ( global void)
+0:27    Function Parameters: 
+0:32    Sequence
+0:32      Sequence
+0:32        move second child to first child ( temp mediump 4-component vector of float)
+0:32          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:32          Construct vec4 ( temp mediump 4-component vector of float)
+0:32            interpolateAtCentroid ( global highp float)
+0:32              'v' (layout( location=2) smooth in highp float)
+0:33        move second child to first child ( temp mediump 4-component vector of float)
+0:33          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:33          Construct vec4 ( temp mediump 4-component vector of float)
+0:33            interpolateAtCentroid ( global highp float)
+0:33              x: direct index for structure ( in highp float)
+0:33                'anon@0' (layout( location=3) in block{ in highp float x,  in 1-element array of highp 4-component vector of float xyz,  in structure{ global highp 4-component vector of float s_v} s0})
+0:33                Constant:
+0:33                  0 (const uint)
+0:34        move second child to first child ( temp mediump 4-component vector of float)
+0:34          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:34          Construct vec4 ( temp mediump 4-component vector of float)
+0:34            interpolateAtCentroid ( global highp float)
+0:34              direct index (layout( location=7) smooth temp highp float)
+0:34                'z' (layout( location=7) smooth in 1-element array of highp float)
+0:34                Constant:
+0:34                  0 (const int)
+0:35        move second child to first child ( temp highp 4-component vector of float)
+0:35          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:35          interpolateAtCentroid ( global highp 4-component vector of float)
+0:35            'w' (layout( location=8) smooth in highp 4-component vector of float)
+0:36        move second child to first child ( temp highp 4-component vector of float)
+0:36          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:36          interpolateAtCentroid ( global highp 4-component vector of float)
+0:36            direct index ( temp highp 4-component vector of float)
+0:36              xyz: direct index for structure ( in 1-element array of highp 4-component vector of float)
+0:36                'anon@0' (layout( location=3) in block{ in highp float x,  in 1-element array of highp 4-component vector of float xyz,  in structure{ global highp 4-component vector of float s_v} s0})
+0:36                Constant:
+0:36                  1 (const uint)
+0:36              Constant:
+0:36                0 (const int)
+0:39        move second child to first child ( temp mediump 4-component vector of float)
+0:39          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:39          Construct vec4 ( temp mediump 4-component vector of float)
+0:39            interpolateAtCentroid ( global highp float)
+0:39              a: direct index for structure ( global highp float)
+0:39                'v_var' (layout( location=0) smooth in structure{ global highp float a,  global highp float b})
+0:39                Constant:
+0:39                  0 (const int)
+0:40        move second child to first child ( temp mediump 4-component vector of float)
+0:40          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:40          Construct vec4 ( temp mediump 4-component vector of float)
+0:40            interpolateAtCentroid ( global highp float)
+0:40              direct index ( temp highp float)
+0:40                'w' (layout( location=8) smooth in highp 4-component vector of float)
+0:40                Constant:
+0:40                  0 (const int)
+0:41        move second child to first child ( temp mediump 4-component vector of float)
+0:41          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:41          Construct vec4 ( temp mediump 4-component vector of float)
+0:41            interpolateAtCentroid ( global highp 4-component vector of float)
+0:41              s_v: direct index for structure ( global highp 4-component vector of float)
+0:41                s0: direct index for structure ( in structure{ global highp 4-component vector of float s_v})
+0:41                  'anon@0' (layout( location=3) in block{ in highp float x,  in 1-element array of highp 4-component vector of float xyz,  in structure{ global highp 4-component vector of float s_v} s0})
+0:41                  Constant:
+0:41                    2 (const uint)
+0:41                Constant:
+0:41                  0 (const int)
+0:47      Sequence
+0:47        move second child to first child ( temp mediump 4-component vector of float)
+0:47          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:47          Construct vec4 ( temp mediump 4-component vector of float)
+0:47            interpolateAtSample ( global highp float)
+0:47              'v' (layout( location=2) smooth in highp float)
+0:47              Constant:
+0:47                0 (const int)
+0:48        move second child to first child ( temp mediump 4-component vector of float)
+0:48          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:48          Construct vec4 ( temp mediump 4-component vector of float)
+0:48            interpolateAtSample ( global highp float)
+0:48              x: direct index for structure ( in highp float)
+0:48                'anon@0' (layout( location=3) in block{ in highp float x,  in 1-element array of highp 4-component vector of float xyz,  in structure{ global highp 4-component vector of float s_v} s0})
+0:48                Constant:
+0:48                  0 (const uint)
+0:48              Constant:
+0:48                0 (const int)
+0:49        move second child to first child ( temp mediump 4-component vector of float)
+0:49          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:49          Construct vec4 ( temp mediump 4-component vector of float)
+0:49            interpolateAtSample ( global highp float)
+0:49              direct index (layout( location=7) smooth temp highp float)
+0:49                'z' (layout( location=7) smooth in 1-element array of highp float)
+0:49                Constant:
+0:49                  0 (const int)
+0:49              Constant:
+0:49                0 (const int)
+0:50        move second child to first child ( temp highp 4-component vector of float)
+0:50          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:50          interpolateAtSample ( global highp 4-component vector of float)
+0:50            'w' (layout( location=8) smooth in highp 4-component vector of float)
+0:50            Constant:
+0:50              0 (const int)
+0:51        move second child to first child ( temp highp 4-component vector of float)
+0:51          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:51          interpolateAtSample ( global highp 4-component vector of float)
+0:51            direct index ( temp highp 4-component vector of float)
+0:51              xyz: direct index for structure ( in 1-element array of highp 4-component vector of float)
+0:51                'anon@0' (layout( location=3) in block{ in highp float x,  in 1-element array of highp 4-component vector of float xyz,  in structure{ global highp 4-component vector of float s_v} s0})
+0:51                Constant:
+0:51                  1 (const uint)
+0:51              Constant:
+0:51                0 (const int)
+0:51            Constant:
+0:51              0 (const int)
+0:54        move second child to first child ( temp mediump 4-component vector of float)
+0:54          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:54          Construct vec4 ( temp mediump 4-component vector of float)
+0:54            interpolateAtSample ( global highp float)
+0:54              a: direct index for structure ( global highp float)
+0:54                'v_var' (layout( location=0) smooth in structure{ global highp float a,  global highp float b})
+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 mediump 4-component vector of float)
+0:55          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:55          Construct vec4 ( temp mediump 4-component vector of float)
+0:55            interpolateAtSample ( global highp float)
+0:55              direct index ( temp highp float)
+0:55                'w' (layout( location=8) smooth in highp 4-component vector of float)
+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 mediump 4-component vector of float)
+0:56          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:56          Construct vec4 ( temp mediump 4-component vector of float)
+0:56            interpolateAtSample ( global highp 4-component vector of float)
+0:56              s_v: direct index for structure ( global highp 4-component vector of float)
+0:56                s0: direct index for structure ( in structure{ global highp 4-component vector of float s_v})
+0:56                  'anon@0' (layout( location=3) in block{ in highp float x,  in 1-element array of highp 4-component vector of float xyz,  in structure{ global highp 4-component vector of float s_v} s0})
+0:56                  Constant:
+0:56                    2 (const uint)
+0:56                Constant:
+0:56                  0 (const int)
+0:56              Constant:
+0:56                0 (const int)
+0:62      Sequence
+0:62        move second child to first child ( temp mediump 4-component vector of float)
+0:62          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:62          Construct vec4 ( temp mediump 4-component vector of float)
+0:62            interpolateAtOffset ( global highp float)
+0:62              'v' (layout( location=2) smooth in highp float)
+0:62              Constant:
+0:62                0.000000
+0:62                0.000000
+0:63        move second child to first child ( temp mediump 4-component vector of float)
+0:63          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:63          Construct vec4 ( temp mediump 4-component vector of float)
+0:63            interpolateAtOffset ( global highp float)
+0:63              x: direct index for structure ( in highp float)
+0:63                'anon@0' (layout( location=3) in block{ in highp float x,  in 1-element array of highp 4-component vector of float xyz,  in structure{ global highp 4-component vector of float s_v} s0})
+0:63                Constant:
+0:63                  0 (const uint)
+0:63              Constant:
+0:63                0.000000
+0:63                0.000000
+0:64        move second child to first child ( temp mediump 4-component vector of float)
+0:64          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:64          Construct vec4 ( temp mediump 4-component vector of float)
+0:64            interpolateAtOffset ( global highp float)
+0:64              direct index (layout( location=7) smooth temp highp float)
+0:64                'z' (layout( location=7) smooth in 1-element array of highp float)
+0:64                Constant:
+0:64                  0 (const int)
+0:64              Constant:
+0:64                0.000000
+0:64                0.000000
+0:65        move second child to first child ( temp highp 4-component vector of float)
+0:65          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:65          interpolateAtOffset ( global highp 4-component vector of float)
+0:65            'w' (layout( location=8) smooth in highp 4-component vector of float)
+0:65            Constant:
+0:65              0.000000
+0:65              0.000000
+0:66        move second child to first child ( temp highp 4-component vector of float)
+0:66          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:66          interpolateAtOffset ( global highp 4-component vector of float)
+0:66            direct index ( temp highp 4-component vector of float)
+0:66              xyz: direct index for structure ( in 1-element array of highp 4-component vector of float)
+0:66                'anon@0' (layout( location=3) in block{ in highp float x,  in 1-element array of highp 4-component vector of float xyz,  in structure{ global highp 4-component vector of float s_v} s0})
+0:66                Constant:
+0:66                  1 (const uint)
+0:66              Constant:
+0:66                0 (const int)
+0:66            Constant:
+0:66              0.000000
+0:66              0.000000
+0:69        move second child to first child ( temp mediump 4-component vector of float)
+0:69          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:69          Construct vec4 ( temp mediump 4-component vector of float)
+0:69            interpolateAtOffset ( global highp float)
+0:69              a: direct index for structure ( global highp float)
+0:69                'v_var' (layout( location=0) smooth in structure{ global highp float a,  global highp float b})
+0:69                Constant:
+0:69                  0 (const int)
+0:69              Constant:
+0:69                0.000000
+0:69                0.000000
+0:70        move second child to first child ( temp mediump 4-component vector of float)
+0:70          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:70          Construct vec4 ( temp mediump 4-component vector of float)
+0:70            interpolateAtOffset ( global highp float)
+0:70              direct index ( temp highp float)
+0:70                'w' (layout( location=8) smooth in highp 4-component vector of float)
+0:70                Constant:
+0:70                  0 (const int)
+0:70              Constant:
+0:70                0.000000
+0:70                0.000000
+0:71        move second child to first child ( temp mediump 4-component vector of float)
+0:71          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:71          Construct vec4 ( temp mediump 4-component vector of float)
+0:71            interpolateAtOffset ( global highp 4-component vector of float)
+0:71              s_v: direct index for structure ( global highp 4-component vector of float)
+0:71                s0: direct index for structure ( in structure{ global highp 4-component vector of float s_v})
+0:71                  'anon@0' (layout( location=3) in block{ in highp float x,  in 1-element array of highp 4-component vector of float xyz,  in structure{ global highp 4-component vector of float s_v} s0})
+0:71                  Constant:
+0:71                    2 (const uint)
+0:71                Constant:
+0:71                  0 (const int)
+0:71              Constant:
+0:71                0.000000
+0:71                0.000000
+0:?   Linker Objects
+0:?     'v_var' (layout( location=0) smooth in structure{ global highp float a,  global highp float b})
+0:?     'v' (layout( location=2) smooth in highp float)
+0:?     'anon@0' (layout( location=3) in block{ in highp float x,  in 1-element array of highp 4-component vector of float xyz,  in structure{ global highp 4-component vector of float s_v} s0})
+0:?     'z' (layout( location=7) smooth in 1-element array of highp float)
+0:?     'w' (layout( location=8) smooth in highp 4-component vector of float)
+0:?     'fragColor' (layout( location=0) out mediump 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 320
+ERROR: node is still EOpNull!
+0:27  Function Definition: main( ( global void)
+0:27    Function Parameters: 
+0:32    Sequence
+0:32      Sequence
+0:32        move second child to first child ( temp mediump 4-component vector of float)
+0:32          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:32          Construct vec4 ( temp mediump 4-component vector of float)
+0:32            interpolateAtCentroid ( global highp float)
+0:32              'v' (layout( location=2) smooth in highp float)
+0:33        move second child to first child ( temp mediump 4-component vector of float)
+0:33          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:33          Construct vec4 ( temp mediump 4-component vector of float)
+0:33            interpolateAtCentroid ( global highp float)
+0:33              x: direct index for structure ( in highp float)
+0:33                'anon@0' (layout( location=3) in block{ in highp float x,  in 1-element array of highp 4-component vector of float xyz,  in structure{ global highp 4-component vector of float s_v} s0})
+0:33                Constant:
+0:33                  0 (const uint)
+0:34        move second child to first child ( temp mediump 4-component vector of float)
+0:34          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:34          Construct vec4 ( temp mediump 4-component vector of float)
+0:34            interpolateAtCentroid ( global highp float)
+0:34              direct index (layout( location=7) smooth temp highp float)
+0:34                'z' (layout( location=7) smooth in 1-element array of highp float)
+0:34                Constant:
+0:34                  0 (const int)
+0:35        move second child to first child ( temp highp 4-component vector of float)
+0:35          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:35          interpolateAtCentroid ( global highp 4-component vector of float)
+0:35            'w' (layout( location=8) smooth in highp 4-component vector of float)
+0:36        move second child to first child ( temp highp 4-component vector of float)
+0:36          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:36          interpolateAtCentroid ( global highp 4-component vector of float)
+0:36            direct index ( temp highp 4-component vector of float)
+0:36              xyz: direct index for structure ( in 1-element array of highp 4-component vector of float)
+0:36                'anon@0' (layout( location=3) in block{ in highp float x,  in 1-element array of highp 4-component vector of float xyz,  in structure{ global highp 4-component vector of float s_v} s0})
+0:36                Constant:
+0:36                  1 (const uint)
+0:36              Constant:
+0:36                0 (const int)
+0:39        move second child to first child ( temp mediump 4-component vector of float)
+0:39          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:39          Construct vec4 ( temp mediump 4-component vector of float)
+0:39            interpolateAtCentroid ( global highp float)
+0:39              a: direct index for structure ( global highp float)
+0:39                'v_var' (layout( location=0) smooth in structure{ global highp float a,  global highp float b})
+0:39                Constant:
+0:39                  0 (const int)
+0:40        move second child to first child ( temp mediump 4-component vector of float)
+0:40          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:40          Construct vec4 ( temp mediump 4-component vector of float)
+0:40            interpolateAtCentroid ( global highp float)
+0:40              direct index ( temp highp float)
+0:40                'w' (layout( location=8) smooth in highp 4-component vector of float)
+0:40                Constant:
+0:40                  0 (const int)
+0:41        move second child to first child ( temp mediump 4-component vector of float)
+0:41          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:41          Construct vec4 ( temp mediump 4-component vector of float)
+0:41            interpolateAtCentroid ( global highp 4-component vector of float)
+0:41              s_v: direct index for structure ( global highp 4-component vector of float)
+0:41                s0: direct index for structure ( in structure{ global highp 4-component vector of float s_v})
+0:41                  'anon@0' (layout( location=3) in block{ in highp float x,  in 1-element array of highp 4-component vector of float xyz,  in structure{ global highp 4-component vector of float s_v} s0})
+0:41                  Constant:
+0:41                    2 (const uint)
+0:41                Constant:
+0:41                  0 (const int)
+0:47      Sequence
+0:47        move second child to first child ( temp mediump 4-component vector of float)
+0:47          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:47          Construct vec4 ( temp mediump 4-component vector of float)
+0:47            interpolateAtSample ( global highp float)
+0:47              'v' (layout( location=2) smooth in highp float)
+0:47              Constant:
+0:47                0 (const int)
+0:48        move second child to first child ( temp mediump 4-component vector of float)
+0:48          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:48          Construct vec4 ( temp mediump 4-component vector of float)
+0:48            interpolateAtSample ( global highp float)
+0:48              x: direct index for structure ( in highp float)
+0:48                'anon@0' (layout( location=3) in block{ in highp float x,  in 1-element array of highp 4-component vector of float xyz,  in structure{ global highp 4-component vector of float s_v} s0})
+0:48                Constant:
+0:48                  0 (const uint)
+0:48              Constant:
+0:48                0 (const int)
+0:49        move second child to first child ( temp mediump 4-component vector of float)
+0:49          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:49          Construct vec4 ( temp mediump 4-component vector of float)
+0:49            interpolateAtSample ( global highp float)
+0:49              direct index (layout( location=7) smooth temp highp float)
+0:49                'z' (layout( location=7) smooth in 1-element array of highp float)
+0:49                Constant:
+0:49                  0 (const int)
+0:49              Constant:
+0:49                0 (const int)
+0:50        move second child to first child ( temp highp 4-component vector of float)
+0:50          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:50          interpolateAtSample ( global highp 4-component vector of float)
+0:50            'w' (layout( location=8) smooth in highp 4-component vector of float)
+0:50            Constant:
+0:50              0 (const int)
+0:51        move second child to first child ( temp highp 4-component vector of float)
+0:51          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:51          interpolateAtSample ( global highp 4-component vector of float)
+0:51            direct index ( temp highp 4-component vector of float)
+0:51              xyz: direct index for structure ( in 1-element array of highp 4-component vector of float)
+0:51                'anon@0' (layout( location=3) in block{ in highp float x,  in 1-element array of highp 4-component vector of float xyz,  in structure{ global highp 4-component vector of float s_v} s0})
+0:51                Constant:
+0:51                  1 (const uint)
+0:51              Constant:
+0:51                0 (const int)
+0:51            Constant:
+0:51              0 (const int)
+0:54        move second child to first child ( temp mediump 4-component vector of float)
+0:54          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:54          Construct vec4 ( temp mediump 4-component vector of float)
+0:54            interpolateAtSample ( global highp float)
+0:54              a: direct index for structure ( global highp float)
+0:54                'v_var' (layout( location=0) smooth in structure{ global highp float a,  global highp float b})
+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 mediump 4-component vector of float)
+0:55          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:55          Construct vec4 ( temp mediump 4-component vector of float)
+0:55            interpolateAtSample ( global highp float)
+0:55              direct index ( temp highp float)
+0:55                'w' (layout( location=8) smooth in highp 4-component vector of float)
+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 mediump 4-component vector of float)
+0:56          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:56          Construct vec4 ( temp mediump 4-component vector of float)
+0:56            interpolateAtSample ( global highp 4-component vector of float)
+0:56              s_v: direct index for structure ( global highp 4-component vector of float)
+0:56                s0: direct index for structure ( in structure{ global highp 4-component vector of float s_v})
+0:56                  'anon@0' (layout( location=3) in block{ in highp float x,  in 1-element array of highp 4-component vector of float xyz,  in structure{ global highp 4-component vector of float s_v} s0})
+0:56                  Constant:
+0:56                    2 (const uint)
+0:56                Constant:
+0:56                  0 (const int)
+0:56              Constant:
+0:56                0 (const int)
+0:62      Sequence
+0:62        move second child to first child ( temp mediump 4-component vector of float)
+0:62          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:62          Construct vec4 ( temp mediump 4-component vector of float)
+0:62            interpolateAtOffset ( global highp float)
+0:62              'v' (layout( location=2) smooth in highp float)
+0:62              Constant:
+0:62                0.000000
+0:62                0.000000
+0:63        move second child to first child ( temp mediump 4-component vector of float)
+0:63          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:63          Construct vec4 ( temp mediump 4-component vector of float)
+0:63            interpolateAtOffset ( global highp float)
+0:63              x: direct index for structure ( in highp float)
+0:63                'anon@0' (layout( location=3) in block{ in highp float x,  in 1-element array of highp 4-component vector of float xyz,  in structure{ global highp 4-component vector of float s_v} s0})
+0:63                Constant:
+0:63                  0 (const uint)
+0:63              Constant:
+0:63                0.000000
+0:63                0.000000
+0:64        move second child to first child ( temp mediump 4-component vector of float)
+0:64          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:64          Construct vec4 ( temp mediump 4-component vector of float)
+0:64            interpolateAtOffset ( global highp float)
+0:64              direct index (layout( location=7) smooth temp highp float)
+0:64                'z' (layout( location=7) smooth in 1-element array of highp float)
+0:64                Constant:
+0:64                  0 (const int)
+0:64              Constant:
+0:64                0.000000
+0:64                0.000000
+0:65        move second child to first child ( temp highp 4-component vector of float)
+0:65          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:65          interpolateAtOffset ( global highp 4-component vector of float)
+0:65            'w' (layout( location=8) smooth in highp 4-component vector of float)
+0:65            Constant:
+0:65              0.000000
+0:65              0.000000
+0:66        move second child to first child ( temp highp 4-component vector of float)
+0:66          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:66          interpolateAtOffset ( global highp 4-component vector of float)
+0:66            direct index ( temp highp 4-component vector of float)
+0:66              xyz: direct index for structure ( in 1-element array of highp 4-component vector of float)
+0:66                'anon@0' (layout( location=3) in block{ in highp float x,  in 1-element array of highp 4-component vector of float xyz,  in structure{ global highp 4-component vector of float s_v} s0})
+0:66                Constant:
+0:66                  1 (const uint)
+0:66              Constant:
+0:66                0 (const int)
+0:66            Constant:
+0:66              0.000000
+0:66              0.000000
+0:69        move second child to first child ( temp mediump 4-component vector of float)
+0:69          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:69          Construct vec4 ( temp mediump 4-component vector of float)
+0:69            interpolateAtOffset ( global highp float)
+0:69              a: direct index for structure ( global highp float)
+0:69                'v_var' (layout( location=0) smooth in structure{ global highp float a,  global highp float b})
+0:69                Constant:
+0:69                  0 (const int)
+0:69              Constant:
+0:69                0.000000
+0:69                0.000000
+0:70        move second child to first child ( temp mediump 4-component vector of float)
+0:70          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:70          Construct vec4 ( temp mediump 4-component vector of float)
+0:70            interpolateAtOffset ( global highp float)
+0:70              direct index ( temp highp float)
+0:70                'w' (layout( location=8) smooth in highp 4-component vector of float)
+0:70                Constant:
+0:70                  0 (const int)
+0:70              Constant:
+0:70                0.000000
+0:70                0.000000
+0:71        move second child to first child ( temp mediump 4-component vector of float)
+0:71          'fragColor' (layout( location=0) out mediump 4-component vector of float)
+0:71          Construct vec4 ( temp mediump 4-component vector of float)
+0:71            interpolateAtOffset ( global highp 4-component vector of float)
+0:71              s_v: direct index for structure ( global highp 4-component vector of float)
+0:71                s0: direct index for structure ( in structure{ global highp 4-component vector of float s_v})
+0:71                  'anon@0' (layout( location=3) in block{ in highp float x,  in 1-element array of highp 4-component vector of float xyz,  in structure{ global highp 4-component vector of float s_v} s0})
+0:71                  Constant:
+0:71                    2 (const uint)
+0:71                Constant:
+0:71                  0 (const int)
+0:71              Constant:
+0:71                0.000000
+0:71                0.000000
+0:?   Linker Objects
+0:?     'v_var' (layout( location=0) smooth in structure{ global highp float a,  global highp float b})
+0:?     'v' (layout( location=2) smooth in highp float)
+0:?     'anon@0' (layout( location=3) in block{ in highp float x,  in 1-element array of highp 4-component vector of float xyz,  in structure{ global highp 4-component vector of float s_v} s0})
+0:?     'z' (layout( location=7) smooth in 1-element array of highp float)
+0:?     'w' (layout( location=8) smooth in highp 4-component vector of float)
+0:?     'fragColor' (layout( location=0) out mediump 4-component vector of float)
+
diff --git a/Test/baseResults/hlsl.aliasOpaque.frag.out b/Test/baseResults/hlsl.aliasOpaque.frag.out
index 7bea691..af6d18b 100644
--- a/Test/baseResults/hlsl.aliasOpaque.frag.out
+++ b/Test/baseResults/hlsl.aliasOpaque.frag.out
@@ -166,12 +166,12 @@
                               Name 51  "gtex"
                               Name 56  "param"
                               Name 62  "@entryPointOutput"
-                              Decorate 44(gss2) DescriptorSet 0
                               Decorate 44(gss2) Binding 1
-                              Decorate 47(gss) DescriptorSet 0
+                              Decorate 44(gss2) DescriptorSet 0
                               Decorate 47(gss) Binding 0
-                              Decorate 51(gtex) DescriptorSet 0
+                              Decorate 47(gss) DescriptorSet 0
                               Decorate 51(gtex) Binding 2
+                              Decorate 51(gtex) DescriptorSet 0
                               Decorate 62(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.amend.frag.out b/Test/baseResults/hlsl.amend.frag.out
index b8ac133..89b0c94 100644
--- a/Test/baseResults/hlsl.amend.frag.out
+++ b/Test/baseResults/hlsl.amend.frag.out
@@ -182,14 +182,14 @@
                               MemberName 20($Global) 3  "d"
                               MemberName 20($Global) 4  "e"
                               Name 22  ""
+                              Decorate 20($Global) Block
                               MemberDecorate 20($Global) 0 Offset 0
                               MemberDecorate 20($Global) 1 Offset 16
                               MemberDecorate 20($Global) 2 Offset 32
                               MemberDecorate 20($Global) 3 Offset 44
                               MemberDecorate 20($Global) 4 Offset 48
-                              Decorate 20($Global) Block
-                              Decorate 22 DescriptorSet 0
                               Decorate 22 Binding 0
+                              Decorate 22 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
               14:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.array.flatten.frag.out b/Test/baseResults/hlsl.array.flatten.frag.out
index 264a716..e225f19 100644
--- a/Test/baseResults/hlsl.array.flatten.frag.out
+++ b/Test/baseResults/hlsl.array.flatten.frag.out
@@ -392,44 +392,44 @@
                               Name 140  "g_samp_explicit[0]"
                               Name 141  "g_samp_explicit[1]"
                               Name 142  "g_samp_explicit[2]"
-                              Decorate 42(g_tex[1]) DescriptorSet 0
                               Decorate 42(g_tex[1]) Binding 4
-                              Decorate 45(g_samp[1]) DescriptorSet 0
+                              Decorate 42(g_tex[1]) DescriptorSet 0
                               Decorate 45(g_samp[1]) Binding 10
-                              Decorate 65(g_samp[0]) DescriptorSet 0
+                              Decorate 45(g_samp[1]) DescriptorSet 0
                               Decorate 65(g_samp[0]) Binding 9
-                              Decorate 70(g_samp[2]) DescriptorSet 0
+                              Decorate 65(g_samp[0]) DescriptorSet 0
                               Decorate 70(g_samp[2]) Binding 11
-                              Decorate 74(g_tex[0]) DescriptorSet 0
+                              Decorate 70(g_samp[2]) DescriptorSet 0
                               Decorate 74(g_tex[0]) Binding 0
-                              Decorate 79(g_tex[2]) DescriptorSet 0
+                              Decorate 74(g_tex[0]) DescriptorSet 0
                               Decorate 79(g_tex[2]) Binding 8
+                              Decorate 79(g_tex[2]) DescriptorSet 0
                               Decorate 88 ArrayStride 48
                               Decorate 89 ArrayStride 48
                               Decorate 90 ArrayStride 16
-                              MemberDecorate 91($Global) 0 RowMajor
-                              MemberDecorate 91($Global) 0 Offset 0
-                              MemberDecorate 91($Global) 0 MatrixStride 16
-                              MemberDecorate 91($Global) 1 RowMajor
-                              MemberDecorate 91($Global) 1 Offset 192
-                              MemberDecorate 91($Global) 1 MatrixStride 16
-                              MemberDecorate 91($Global) 2 Offset 384
                               Decorate 91($Global) Block
-                              Decorate 93 DescriptorSet 0
+                              MemberDecorate 91($Global) 0 RowMajor
+                              MemberDecorate 91($Global) 0 MatrixStride 16
+                              MemberDecorate 91($Global) 0 Offset 0
+                              MemberDecorate 91($Global) 1 RowMajor
+                              MemberDecorate 91($Global) 1 MatrixStride 16
+                              MemberDecorate 91($Global) 1 Offset 192
+                              MemberDecorate 91($Global) 2 Offset 384
                               Decorate 93 Binding 12
+                              Decorate 93 DescriptorSet 0
                               Decorate 134(ps_output.color) Location 0
-                              Decorate 137(g_tex_explicit[0]) DescriptorSet 0
                               Decorate 137(g_tex_explicit[0]) Binding 1
-                              Decorate 138(g_tex_explicit[1]) DescriptorSet 0
+                              Decorate 137(g_tex_explicit[0]) DescriptorSet 0
                               Decorate 138(g_tex_explicit[1]) Binding 2
-                              Decorate 139(g_tex_explicit[2]) DescriptorSet 0
+                              Decorate 138(g_tex_explicit[1]) DescriptorSet 0
                               Decorate 139(g_tex_explicit[2]) Binding 3
-                              Decorate 140(g_samp_explicit[0]) DescriptorSet 0
+                              Decorate 139(g_tex_explicit[2]) DescriptorSet 0
                               Decorate 140(g_samp_explicit[0]) Binding 5
-                              Decorate 141(g_samp_explicit[1]) DescriptorSet 0
+                              Decorate 140(g_samp_explicit[0]) DescriptorSet 0
                               Decorate 141(g_samp_explicit[1]) Binding 6
-                              Decorate 142(g_samp_explicit[2]) DescriptorSet 0
+                              Decorate 141(g_samp_explicit[1]) DescriptorSet 0
                               Decorate 142(g_samp_explicit[2]) Binding 7
+                              Decorate 142(g_samp_explicit[2]) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.array.frag.out b/Test/baseResults/hlsl.array.frag.out
index eab21a6..45307ea 100644
--- a/Test/baseResults/hlsl.array.frag.out
+++ b/Test/baseResults/hlsl.array.frag.out
@@ -291,12 +291,12 @@
 
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 126
+// Id's are bound by 117
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 112 116 119
+                              EntryPoint Fragment 4  "PixelShaderFunction" 103 107 110
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "PixelShaderFunction"
@@ -306,39 +306,39 @@
                               Name 20  "C"
                               Name 29  "c2"
                               Name 35  "b"
-                              Name 48  "tmp"
-                              Name 54  ""
-                              MemberName 54 0  "m"
-                              Name 60  "$Global"
-                              MemberName 60($Global) 0  "a"
-                              MemberName 60($Global) 1  "s"
-                              MemberName 60($Global) 2  "a1"
-                              MemberName 60($Global) 3  "a2"
-                              Name 62  ""
-                              Name 110  "i"
-                              Name 112  "i"
-                              Name 114  "input"
-                              Name 116  "input"
-                              Name 119  "@entryPointOutput"
-                              Name 120  "param"
-                              Name 122  "param"
-                              Decorate 51 ArrayStride 16
-                              Decorate 53 ArrayStride 16
-                              MemberDecorate 54 0 Offset 0
-                              Decorate 56 ArrayStride 112
-                              Decorate 58 ArrayStride 16
-                              Decorate 59 ArrayStride 16
-                              MemberDecorate 60($Global) 0 Offset 0
-                              MemberDecorate 60($Global) 1 Offset 64
-                              MemberDecorate 60($Global) 2 Offset 1296
-                              MemberDecorate 60($Global) 3 Offset 1312
-                              Decorate 60($Global) Block
-                              Decorate 62 DescriptorSet 0
-                              Decorate 62 Binding 0
-                              Decorate 112(i) Flat
-                              Decorate 112(i) Location 0
-                              Decorate 116(input) Location 1
-                              Decorate 119(@entryPointOutput) Location 0
+                              Name 39  "tmp"
+                              Name 45  ""
+                              MemberName 45 0  "m"
+                              Name 51  "$Global"
+                              MemberName 51($Global) 0  "a"
+                              MemberName 51($Global) 1  "s"
+                              MemberName 51($Global) 2  "a1"
+                              MemberName 51($Global) 3  "a2"
+                              Name 53  ""
+                              Name 101  "i"
+                              Name 103  "i"
+                              Name 105  "input"
+                              Name 107  "input"
+                              Name 110  "@entryPointOutput"
+                              Name 111  "param"
+                              Name 113  "param"
+                              Decorate 42 ArrayStride 16
+                              Decorate 44 ArrayStride 16
+                              MemberDecorate 45 0 Offset 0
+                              Decorate 47 ArrayStride 112
+                              Decorate 49 ArrayStride 16
+                              Decorate 50 ArrayStride 16
+                              Decorate 51($Global) Block
+                              MemberDecorate 51($Global) 0 Offset 0
+                              MemberDecorate 51($Global) 1 Offset 64
+                              MemberDecorate 51($Global) 2 Offset 1296
+                              MemberDecorate 51($Global) 3 Offset 1312
+                              Decorate 53 Binding 0
+                              Decorate 53 DescriptorSet 0
+                              Decorate 103(i) Flat
+                              Decorate 103(i) Location 0
+                              Decorate 107(input) Location 1
+                              Decorate 110(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
@@ -364,53 +364,53 @@
               32:     10(int) Constant 10
               33:             TypeArray 9(fvec4) 32
               34:             TypePointer Function 33
-              47:             TypePointer Function 9(fvec4)
-              50:     10(int) Constant 4
-              51:             TypeArray 9(fvec4) 50
-              52:     10(int) Constant 7
-              53:             TypeArray 9(fvec4) 52
-              54:             TypeStruct 53
-              55:     10(int) Constant 11
-              56:             TypeArray 54(struct) 55
-              57:     10(int) Constant 1
-              58:             TypeArray 9(fvec4) 57
-              59:             TypeArray 9(fvec4) 26
-     60($Global):             TypeStruct 51 56 58 59
-              61:             TypePointer Uniform 60($Global)
-              62:     61(ptr) Variable Uniform
-              63:      6(int) Constant 2
-              64:      6(int) Constant 0
-              65:             TypePointer Uniform 9(fvec4)
-              70:      6(int) Constant 3
-              79:      6(int) Constant 1
-              93:      6(int) Constant 5
-             111:             TypePointer Input 6(int)
-          112(i):    111(ptr) Variable Input
-             115:             TypePointer Input 12
-      116(input):    115(ptr) Variable Input
-             118:             TypePointer Output 9(fvec4)
-119(@entryPointOutput):    118(ptr) Variable Output
-             125:          58 ConstantComposite 25
+              38:             TypePointer Function 9(fvec4)
+              41:     10(int) Constant 4
+              42:             TypeArray 9(fvec4) 41
+              43:     10(int) Constant 7
+              44:             TypeArray 9(fvec4) 43
+              45:             TypeStruct 44
+              46:     10(int) Constant 11
+              47:             TypeArray 45(struct) 46
+              48:     10(int) Constant 1
+              49:             TypeArray 9(fvec4) 48
+              50:             TypeArray 9(fvec4) 26
+     51($Global):             TypeStruct 42 47 49 50
+              52:             TypePointer Uniform 51($Global)
+              53:     52(ptr) Variable Uniform
+              54:      6(int) Constant 2
+              55:      6(int) Constant 0
+              56:             TypePointer Uniform 9(fvec4)
+              61:      6(int) Constant 3
+              70:      6(int) Constant 1
+              84:      6(int) Constant 5
+             102:             TypePointer Input 6(int)
+          103(i):    102(ptr) Variable Input
+             106:             TypePointer Input 12
+      107(input):    106(ptr) Variable Input
+             109:             TypePointer Output 9(fvec4)
+110(@entryPointOutput):    109(ptr) Variable Output
+             116:          49 ConstantComposite 25
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-          110(i):      7(ptr) Variable Function
-      114(input):     13(ptr) Variable Function
-      120(param):      7(ptr) Variable Function
-      122(param):     13(ptr) Variable Function
+          101(i):      7(ptr) Variable Function
+      105(input):     13(ptr) Variable Function
+      111(param):      7(ptr) Variable Function
+      113(param):     13(ptr) Variable Function
                               Store 20(C) 25
               30:    9(fvec4) Load 20(C)
               31:          27 CompositeConstruct 30 25
                               Store 29(c2) 31
-             113:      6(int) Load 112(i)
-                              Store 110(i) 113
-             117:          12 Load 116(input)
-                              Store 114(input) 117
-             121:      6(int) Load 110(i)
-                              Store 120(param) 121
-             123:          12 Load 114(input)
-                              Store 122(param) 123
-             124:    9(fvec4) FunctionCall 17(@PixelShaderFunction(i1;vf4[3];) 120(param) 122(param)
-                              Store 119(@entryPointOutput) 124
+             104:      6(int) Load 103(i)
+                              Store 101(i) 104
+             108:          12 Load 107(input)
+                              Store 105(input) 108
+             112:      6(int) Load 101(i)
+                              Store 111(param) 112
+             114:          12 Load 105(input)
+                              Store 113(param) 114
+             115:    9(fvec4) FunctionCall 17(@PixelShaderFunction(i1;vf4[3];) 111(param) 113(param)
+                              Store 110(@entryPointOutput) 115
                               Return
                               FunctionEnd
 17(@PixelShaderFunction(i1;vf4[3];):    9(fvec4) Function None 14
@@ -418,59 +418,50 @@
        16(input):     13(ptr) FunctionParameter
               18:             Label
            35(b):     34(ptr) Variable Function
-         48(tmp):     47(ptr) Variable Function
+         39(tmp):     38(ptr) Variable Function
               36:    9(fvec4) Load 20(C)
-              37:    9(fvec4) Load 20(C)
-              38:    9(fvec4) Load 20(C)
-              39:    9(fvec4) Load 20(C)
+              37:          33 CompositeConstruct 36 36 36 36 36 36 36 36 36 36
+                              Store 35(b) 37
               40:    9(fvec4) Load 20(C)
-              41:    9(fvec4) Load 20(C)
-              42:    9(fvec4) Load 20(C)
-              43:    9(fvec4) Load 20(C)
-              44:    9(fvec4) Load 20(C)
-              45:    9(fvec4) Load 20(C)
-              46:          33 CompositeConstruct 36 37 38 39 40 41 42 43 44 45
-                              Store 35(b) 46
-              49:    9(fvec4) Load 20(C)
-              66:     65(ptr) AccessChain 62 63 64
-              67:    9(fvec4) Load 66
-              68:    9(fvec4) FAdd 49 67
-              69:    9(fvec4) FAdd 68 25
-              71:      6(int) Load 15(i)
-              72:     65(ptr) AccessChain 62 70 71
-              73:    9(fvec4) Load 72
-              74:    9(fvec4) FAdd 69 73
-              75:      6(int) Load 15(i)
-              76:     19(ptr) AccessChain 29(c2) 75
-              77:    9(fvec4) Load 76
-              78:    9(fvec4) FAdd 74 77
-                              Store 48(tmp) 78
-              80:     65(ptr) AccessChain 62 64 79
-              81:    9(fvec4) Load 80
-              82:      6(int) Load 15(i)
-              83:     65(ptr) AccessChain 62 64 82
-              84:    9(fvec4) Load 83
-              85:    9(fvec4) FAdd 81 84
-              86:     47(ptr) AccessChain 16(input) 63
-              87:    9(fvec4) Load 86
-              88:    9(fvec4) FAdd 85 87
-              89:      6(int) Load 15(i)
-              90:     47(ptr) AccessChain 16(input) 89
-              91:    9(fvec4) Load 90
-              92:    9(fvec4) FAdd 88 91
-              94:     47(ptr) AccessChain 35(b) 93
+              57:     56(ptr) AccessChain 53 54 55
+              58:    9(fvec4) Load 57
+              59:    9(fvec4) FAdd 40 58
+              60:    9(fvec4) FAdd 59 25
+              62:      6(int) Load 15(i)
+              63:     56(ptr) AccessChain 53 61 62
+              64:    9(fvec4) Load 63
+              65:    9(fvec4) FAdd 60 64
+              66:      6(int) Load 15(i)
+              67:     19(ptr) AccessChain 29(c2) 66
+              68:    9(fvec4) Load 67
+              69:    9(fvec4) FAdd 65 68
+                              Store 39(tmp) 69
+              71:     56(ptr) AccessChain 53 55 70
+              72:    9(fvec4) Load 71
+              73:      6(int) Load 15(i)
+              74:     56(ptr) AccessChain 53 55 73
+              75:    9(fvec4) Load 74
+              76:    9(fvec4) FAdd 72 75
+              77:     38(ptr) AccessChain 16(input) 54
+              78:    9(fvec4) Load 77
+              79:    9(fvec4) FAdd 76 78
+              80:      6(int) Load 15(i)
+              81:     38(ptr) AccessChain 16(input) 80
+              82:    9(fvec4) Load 81
+              83:    9(fvec4) FAdd 79 82
+              85:     38(ptr) AccessChain 35(b) 84
+              86:    9(fvec4) Load 85
+              87:    9(fvec4) FAdd 83 86
+              88:      6(int) Load 15(i)
+              89:     38(ptr) AccessChain 35(b) 88
+              90:    9(fvec4) Load 89
+              91:    9(fvec4) FAdd 87 90
+              92:      6(int) Load 15(i)
+              93:      6(int) Load 15(i)
+              94:     56(ptr) AccessChain 53 70 92 55 93
               95:    9(fvec4) Load 94
-              96:    9(fvec4) FAdd 92 95
-              97:      6(int) Load 15(i)
-              98:     47(ptr) AccessChain 35(b) 97
-              99:    9(fvec4) Load 98
-             100:    9(fvec4) FAdd 96 99
-             101:      6(int) Load 15(i)
-             102:      6(int) Load 15(i)
-             103:     65(ptr) AccessChain 62 79 101 64 102
-             104:    9(fvec4) Load 103
-             105:    9(fvec4) FAdd 100 104
-             106:    9(fvec4) Load 48(tmp)
-             107:    9(fvec4) FAdd 105 106
-                              ReturnValue 107
+              96:    9(fvec4) FAdd 91 95
+              97:    9(fvec4) Load 39(tmp)
+              98:    9(fvec4) FAdd 96 97
+                              ReturnValue 98
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.array.multidim.frag.out b/Test/baseResults/hlsl.array.multidim.frag.out
index 7b9d962..50cfeb2 100644
--- a/Test/baseResults/hlsl.array.multidim.frag.out
+++ b/Test/baseResults/hlsl.array.multidim.frag.out
@@ -157,10 +157,10 @@
                               Decorate 22 ArrayStride 16
                               Decorate 24 ArrayStride 48
                               Decorate 26 ArrayStride 192
-                              MemberDecorate 27($Global) 0 Offset 0
                               Decorate 27($Global) Block
-                              Decorate 29 DescriptorSet 0
+                              MemberDecorate 27($Global) 0 Offset 0
                               Decorate 29 Binding 0
+                              Decorate 29 DescriptorSet 0
                               Decorate 54(@entryPointOutput.Color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.attribute.expression.comp.out b/Test/baseResults/hlsl.attribute.expression.comp.out
index ee183c8..910ccfd 100644
--- a/Test/baseResults/hlsl.attribute.expression.comp.out
+++ b/Test/baseResults/hlsl.attribute.expression.comp.out
@@ -79,10 +79,10 @@
                               Name 18  "$Global"
                               MemberName 18($Global) 0  "bound"
                               Name 20  ""
-                              MemberDecorate 18($Global) 0 Offset 0
                               Decorate 18($Global) Block
-                              Decorate 20 DescriptorSet 0
+                              MemberDecorate 18($Global) 0 Offset 0
                               Decorate 20 Binding 0
+                              Decorate 20 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                8:             TypeInt 32 1
diff --git a/Test/baseResults/hlsl.attributeC11.frag.out b/Test/baseResults/hlsl.attributeC11.frag.out
index c97c300..721bfaf 100644
--- a/Test/baseResults/hlsl.attributeC11.frag.out
+++ b/Test/baseResults/hlsl.attributeC11.frag.out
@@ -122,23 +122,25 @@
                               Name 48  "pcBuf"
                               MemberName 48(pcBuf) 0  "a"
                               Name 50  ""
-                              Decorate 16(attach) DescriptorSet 0
                               Decorate 16(attach) Binding 0
+                              Decorate 16(attach) DescriptorSet 0
                               Decorate 16(attach) InputAttachmentIndex 4
                               Decorate 33(input) Location 8
                               Decorate 36(@entryPointOutput) Location 7
                               MemberDecorate 41(S) 0 Offset 0
                               Decorate 42 ArrayStride 8
+                              Decorate 43(buffer1) BufferBlock
                               MemberDecorate 43(buffer1) 0 NonWritable
                               MemberDecorate 43(buffer1) 0 Offset 0
-                              Decorate 43(buffer1) BufferBlock
-                              Decorate 45(buffer1) DescriptorSet 0
+                              Decorate 45(buffer1) NonWritable
                               Decorate 45(buffer1) Binding 1
-                              Decorate 46(buffer3) DescriptorSet 2
+                              Decorate 45(buffer1) DescriptorSet 0
+                              Decorate 46(buffer3) NonWritable
                               Decorate 46(buffer3) Binding 3
+                              Decorate 46(buffer3) DescriptorSet 2
                               Decorate 47(ci) SpecId 13
-                              MemberDecorate 48(pcBuf) 0 Offset 0
                               Decorate 48(pcBuf) Block
+                              MemberDecorate 48(pcBuf) 0 Offset 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.attributeGlobalBuffer.frag.out b/Test/baseResults/hlsl.attributeGlobalBuffer.frag.out
index 4726ddd..ec3be43 100644
--- a/Test/baseResults/hlsl.attributeGlobalBuffer.frag.out
+++ b/Test/baseResults/hlsl.attributeGlobalBuffer.frag.out
@@ -72,11 +72,11 @@
                               MemberName 11($Global) 1  "u2"
                               Name 13  ""
                               Name 26  "@entryPointOutput"
+                              Decorate 11($Global) Block
                               MemberDecorate 11($Global) 0 Offset 0
                               MemberDecorate 11($Global) 1 Offset 16
-                              Decorate 11($Global) Block
-                              Decorate 13 DescriptorSet 2
                               Decorate 13 Binding 5
+                              Decorate 13 DescriptorSet 2
                               Decorate 26(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.autosampledtextures.frag.out b/Test/baseResults/hlsl.autosampledtextures.frag.out
index 070af82..4a54526 100644
--- a/Test/baseResults/hlsl.autosampledtextures.frag.out
+++ b/Test/baseResults/hlsl.autosampledtextures.frag.out
@@ -22,8 +22,8 @@
                               Name 36  "i.vTextureCoords"
                               Name 40  "@entryPointOutput.vColor"
                               Name 41  "param"
-                              Decorate 23(g_tColor) DescriptorSet 0
                               Decorate 23(g_tColor) Binding 0
+                              Decorate 23(g_tColor) DescriptorSet 0
                               Decorate 36(i.vTextureCoords) Location 0
                               Decorate 40(@entryPointOutput.vColor) Location 0
                2:             TypeVoid
diff --git a/Test/baseResults/hlsl.buffer-offsets.comp.out b/Test/baseResults/hlsl.buffer-offsets.comp.out
new file mode 100644
index 0000000..c2204a6
--- /dev/null
+++ b/Test/baseResults/hlsl.buffer-offsets.comp.out
@@ -0,0 +1,82 @@
+hlsl.buffer-offsets.comp
+Shader version: 500
+local_size = (1, 1, 1)
+0:? Sequence
+0:12  Function Definition: @main( ( temp void)
+0:12    Function Parameters: 
+0:12  Function Definition: main( ( temp void)
+0:12    Function Parameters: 
+0:?     Sequence
+0:12      Function Call: @main( ( temp void)
+0:?   Linker Objects
+0:?     'bIterData' (layout( binding=2 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 24-element array of float mIntegrationTrafo,  temp 3-element array of float mWind,  temp uint mIsTurning} @data})
+
+
+Linked compute stage:
+
+
+Shader version: 500
+local_size = (1, 1, 1)
+0:? Sequence
+0:12  Function Definition: @main( ( temp void)
+0:12    Function Parameters: 
+0:12  Function Definition: main( ( temp void)
+0:12    Function Parameters: 
+0:?     Sequence
+0:12      Function Call: @main( ( temp void)
+0:?   Linker Objects
+0:?     'bIterData' (layout( binding=2 row_major std430) readonly buffer block{layout( row_major std430) buffer unsized 1-element array of structure{ temp 24-element array of float mIntegrationTrafo,  temp 3-element array of float mWind,  temp uint mIsTurning} @data})
+
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 20
+
+                              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 15  "GfxIterationData"
+                              MemberName 15(GfxIterationData) 0  "mIntegrationTrafo"
+                              MemberName 15(GfxIterationData) 1  "mWind"
+                              MemberName 15(GfxIterationData) 2  "mIsTurning"
+                              Name 17  "bIterData"
+                              MemberName 17(bIterData) 0  "@data"
+                              Name 19  "bIterData"
+                              Decorate 12 ArrayStride 4
+                              Decorate 14 ArrayStride 4
+                              MemberDecorate 15(GfxIterationData) 0 Offset 0
+                              MemberDecorate 15(GfxIterationData) 1 Offset 96
+                              MemberDecorate 15(GfxIterationData) 2 Offset 108
+                              Decorate 16 ArrayStride 112
+                              Decorate 17(bIterData) BufferBlock
+                              MemberDecorate 17(bIterData) 0 NonWritable
+                              MemberDecorate 17(bIterData) 0 Offset 0
+                              Decorate 19(bIterData) NonWritable
+                              Decorate 19(bIterData) Binding 2
+                              Decorate 19(bIterData) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               9:             TypeFloat 32
+              10:             TypeInt 32 0
+              11:     10(int) Constant 24
+              12:             TypeArray 9(float) 11
+              13:     10(int) Constant 3
+              14:             TypeArray 9(float) 13
+15(GfxIterationData):             TypeStruct 12 14 10(int)
+              16:             TypeRuntimeArray 15(GfxIterationData)
+   17(bIterData):             TypeStruct 16
+              18:             TypePointer Uniform 17(bIterData)
+   19(bIterData):     18(ptr) Variable Uniform
+         4(main):           2 Function None 3
+               5:             Label
+               8:           2 FunctionCall 6(@main()
+                              Return
+                              FunctionEnd
+       6(@main():           2 Function None 3
+               7:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.buffer.frag.out b/Test/baseResults/hlsl.buffer.frag.out
index f95b839..6c746eb 100644
--- a/Test/baseResults/hlsl.buffer.frag.out
+++ b/Test/baseResults/hlsl.buffer.frag.out
@@ -194,24 +194,26 @@
                               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 24(cbufName2) 0 Offset 0
                               Decorate 26 Binding 3
-                              MemberDecorate 31(buf1) 0 Offset 0
+                              Decorate 26 DescriptorSet 0
                               Decorate 31(buf1) Block
-                              Decorate 33 DescriptorSet 0
+                              MemberDecorate 31(buf1) 0 Offset 0
                               Decorate 33 Binding 0
+                              Decorate 33 DescriptorSet 0
+                              Decorate 37(buf2) BufferBlock
                               MemberDecorate 37(buf2) 0 NonWritable
                               MemberDecorate 37(buf2) 0 Offset 0
-                              Decorate 37(buf2) BufferBlock
-                              Decorate 39 DescriptorSet 0
+                              Decorate 39 NonWritable
                               Decorate 39 Binding 1
+                              Decorate 39 DescriptorSet 0
+                              Decorate 43(cbufName) Block
                               MemberDecorate 43(cbufName) 0 Offset 0
                               MemberDecorate 43(cbufName) 1 Offset 20
-                              Decorate 43(cbufName) Block
-                              Decorate 45 DescriptorSet 0
                               Decorate 45 Binding 2
+                              Decorate 45 DescriptorSet 0
+                              Decorate 50(tbufName) BufferBlock
                               MemberDecorate 50(tbufName) 0 NonWritable
                               MemberDecorate 50(tbufName) 0 Offset 16
                               MemberDecorate 50(tbufName) 1 NonWritable
@@ -229,24 +231,24 @@
                               MemberDecorate 50(tbufName) 7 NonWritable
                               MemberDecorate 50(tbufName) 7 Offset 128
                               MemberDecorate 50(tbufName) 8 RowMajor
+                              MemberDecorate 50(tbufName) 8 MatrixStride 16
                               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 MatrixStride 16
                               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 MatrixStride 16
                               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 MatrixStride 16
                               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 NonWritable
                               Decorate 52 Binding 8
+                              Decorate 52 DescriptorSet 0
                               Decorate 65(input) BuiltIn FragCoord
                               Decorate 68(@entryPointOutput.a) Location 0
                2:             TypeVoid
diff --git a/Test/baseResults/hlsl.buffer_ref_parameter.comp.out b/Test/baseResults/hlsl.buffer_ref_parameter.comp.out
index 4ddf6f7..8c8cde0 100644
--- a/Test/baseResults/hlsl.buffer_ref_parameter.comp.out
+++ b/Test/baseResults/hlsl.buffer_ref_parameter.comp.out
@@ -275,17 +275,18 @@
                               Name 85  "gi"
                               Name 87  "param"
                               Decorate 7 ArrayStride 4
+                              Decorate 8 Block
                               MemberDecorate 8 0 NonWritable
                               MemberDecorate 8 0 Offset 0
-                              Decorate 8 Block
                               Decorate 14(buffer_position) NonWritable
-                              Decorate 53(buffer_position_ms) DescriptorSet 0
+                              Decorate 53(buffer_position_ms) NonWritable
                               Decorate 53(buffer_position_ms) Binding 0
+                              Decorate 53(buffer_position_ms) DescriptorSet 0
                               Decorate 59 ArrayStride 4
-                              MemberDecorate 60(r) 0 Offset 0
                               Decorate 60(r) Block
-                              Decorate 62(r) DescriptorSet 0
+                              MemberDecorate 60(r) 0 Offset 0
                               Decorate 62(r) Binding 1
+                              Decorate 62(r) DescriptorSet 0
                               Decorate 85(gi) BuiltIn LocalInvocationIndex
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.calculatelod.dx10.frag.out b/Test/baseResults/hlsl.calculatelod.dx10.frag.out
index 7d896ce..14ed71e 100644
--- a/Test/baseResults/hlsl.calculatelod.dx10.frag.out
+++ b/Test/baseResults/hlsl.calculatelod.dx10.frag.out
@@ -400,30 +400,30 @@
                               Name 140  "@entryPointOutput.Color"
                               Name 144  "@entryPointOutput.Depth"
                               Name 147  "g_tTex1df4"
-                              Decorate 16(g_tTex1df4a) DescriptorSet 0
                               Decorate 16(g_tTex1df4a) Binding 1
-                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_tTex1df4a) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
-                              Decorate 33(g_tTex1di4a) DescriptorSet 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 33(g_tTex1di4a) Binding 2
-                              Decorate 45(g_tTex1du4a) DescriptorSet 0
+                              Decorate 33(g_tTex1di4a) DescriptorSet 0
                               Decorate 45(g_tTex1du4a) Binding 3
-                              Decorate 56(g_tTex2df4a) DescriptorSet 0
+                              Decorate 45(g_tTex1du4a) DescriptorSet 0
                               Decorate 56(g_tTex2df4a) Binding 4
-                              Decorate 67(g_tTex2di4a) DescriptorSet 0
+                              Decorate 56(g_tTex2df4a) DescriptorSet 0
                               Decorate 67(g_tTex2di4a) Binding 5
-                              Decorate 79(g_tTex2du4a) DescriptorSet 0
+                              Decorate 67(g_tTex2di4a) DescriptorSet 0
                               Decorate 79(g_tTex2du4a) Binding 6
-                              Decorate 92(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 79(g_tTex2du4a) DescriptorSet 0
                               Decorate 92(g_tTexcdf4a) Binding 7
-                              Decorate 104(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 92(g_tTexcdf4a) DescriptorSet 0
                               Decorate 104(g_tTexcdi4a) Binding 8
-                              Decorate 115(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 104(g_tTexcdi4a) DescriptorSet 0
                               Decorate 115(g_tTexcdu4a) Binding 9
+                              Decorate 115(g_tTexcdu4a) DescriptorSet 0
                               Decorate 140(@entryPointOutput.Color) Location 0
                               Decorate 144(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 147(g_tTex1df4) DescriptorSet 0
                               Decorate 147(g_tTex1df4) Binding 0
+                              Decorate 147(g_tTex1df4) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out b/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out
index 3ce857d..c052200 100644
--- a/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out
+++ b/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out
@@ -400,30 +400,30 @@
                               Name 140  "@entryPointOutput.Color"
                               Name 144  "@entryPointOutput.Depth"
                               Name 147  "g_tTex1df4"
-                              Decorate 16(g_tTex1df4a) DescriptorSet 0
                               Decorate 16(g_tTex1df4a) Binding 1
-                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_tTex1df4a) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
-                              Decorate 33(g_tTex1di4a) DescriptorSet 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 33(g_tTex1di4a) Binding 2
-                              Decorate 45(g_tTex1du4a) DescriptorSet 0
+                              Decorate 33(g_tTex1di4a) DescriptorSet 0
                               Decorate 45(g_tTex1du4a) Binding 3
-                              Decorate 56(g_tTex2df4a) DescriptorSet 0
+                              Decorate 45(g_tTex1du4a) DescriptorSet 0
                               Decorate 56(g_tTex2df4a) Binding 4
-                              Decorate 67(g_tTex2di4a) DescriptorSet 0
+                              Decorate 56(g_tTex2df4a) DescriptorSet 0
                               Decorate 67(g_tTex2di4a) Binding 5
-                              Decorate 79(g_tTex2du4a) DescriptorSet 0
+                              Decorate 67(g_tTex2di4a) DescriptorSet 0
                               Decorate 79(g_tTex2du4a) Binding 6
-                              Decorate 92(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 79(g_tTex2du4a) DescriptorSet 0
                               Decorate 92(g_tTexcdf4a) Binding 7
-                              Decorate 104(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 92(g_tTexcdf4a) DescriptorSet 0
                               Decorate 104(g_tTexcdi4a) Binding 8
-                              Decorate 115(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 104(g_tTexcdi4a) DescriptorSet 0
                               Decorate 115(g_tTexcdu4a) Binding 9
+                              Decorate 115(g_tTexcdu4a) DescriptorSet 0
                               Decorate 140(@entryPointOutput.Color) Location 0
                               Decorate 144(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 147(g_tTex1df4) DescriptorSet 0
                               Decorate 147(g_tTex1df4) Binding 0
+                              Decorate 147(g_tTex1df4) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.cbuffer-identifier.vert.out b/Test/baseResults/hlsl.cbuffer-identifier.vert.out
index de9deea..3fa3d5d 100644
--- a/Test/baseResults/hlsl.cbuffer-identifier.vert.out
+++ b/Test/baseResults/hlsl.cbuffer-identifier.vert.out
@@ -281,18 +281,18 @@
                               Name 82  "param"
                               Name 86  "@entryPointOutput.Pos"
                               Name 90  "@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
+                              MemberDecorate 28(C) 0 RowMajor
+                              MemberDecorate 28(C) 0 MatrixStride 16
+                              MemberDecorate 28(C) 0 Offset 0
+                              MemberDecorate 28(C) 1 RowMajor
+                              MemberDecorate 28(C) 1 MatrixStride 16
+                              MemberDecorate 28(C) 1 Offset 64
+                              MemberDecorate 28(C) 2 RowMajor
+                              MemberDecorate 28(C) 2 MatrixStride 16
+                              MemberDecorate 28(C) 2 Offset 128
                               Decorate 30 Binding 0
+                              Decorate 30 DescriptorSet 0
                               Decorate 74(input.Pos) Location 0
                               Decorate 78(input.Norm) Location 1
                               Decorate 86(@entryPointOutput.Pos) BuiltIn Position
diff --git a/Test/baseResults/hlsl.cbuffer-offsets.comp.out b/Test/baseResults/hlsl.cbuffer-offsets.comp.out
new file mode 100644
index 0000000..793d5b9
--- /dev/null
+++ b/Test/baseResults/hlsl.cbuffer-offsets.comp.out
@@ -0,0 +1,159 @@
+hlsl.cbuffer-offsets.comp
+Shader version: 500
+local_size = (1, 1, 1)
+0:? Sequence
+0:43  Function Definition: @main( ( temp void)
+0:43    Function Parameters: 
+0:43  Function Definition: main( ( temp void)
+0:43    Function Parameters: 
+0:?     Sequence
+0:43      Function Call: @main( ( temp void)
+0:?   Linker Objects
+0:?     'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform float f1, layout( row_major std140) uniform 3-element array of 3-component vector of float f3a3, layout( row_major std140) uniform float f2, layout( row_major std140) uniform float f3, layout( row_major std140) uniform 1X1 matrix of float m11, layout( row_major std140) uniform 1X2 matrix of float m12, layout( row_major std140) uniform 2X1 matrix of float m21, layout( row_major std140) uniform 2X2 matrix of float m22, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform float f4, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform float f5, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform float f6, layout( column_major std140) uniform 1X1 matrix of float rm11, layout( column_major std140) uniform 1X2 matrix of float rm12, layout( column_major std140) uniform 2X1 matrix of float rm21, layout( column_major std140) uniform 2X2 matrix of float rm22, layout( column_major std140) uniform 3X3 matrix of float rm33, layout( row_major std140) uniform float f7, layout( column_major std140) uniform 3X4 matrix of float rm34, layout( row_major std140) uniform float f8, layout( column_major std140) uniform 4X3 matrix of float rm43, layout( row_major std140) uniform float f9, layout( row_major std140) uniform 3-element array of float f1a3, layout( row_major std140) uniform float f10})
+
+
+Linked compute stage:
+
+
+Shader version: 500
+local_size = (1, 1, 1)
+0:? Sequence
+0:43  Function Definition: @main( ( temp void)
+0:43    Function Parameters: 
+0:43  Function Definition: main( ( temp void)
+0:43    Function Parameters: 
+0:?     Sequence
+0:43      Function Call: @main( ( temp void)
+0:?   Linker Objects
+0:?     'anon@0' (layout( row_major std140) uniform block{layout( row_major std140) uniform float f1, layout( row_major std140) uniform 3-element array of 3-component vector of float f3a3, layout( row_major std140) uniform float f2, layout( row_major std140) uniform float f3, layout( row_major std140) uniform 1X1 matrix of float m11, layout( row_major std140) uniform 1X2 matrix of float m12, layout( row_major std140) uniform 2X1 matrix of float m21, layout( row_major std140) uniform 2X2 matrix of float m22, layout( row_major std140) uniform 3X3 matrix of float m33, layout( row_major std140) uniform float f4, layout( row_major std140) uniform 3X4 matrix of float m34, layout( row_major std140) uniform float f5, layout( row_major std140) uniform 4X3 matrix of float m43, layout( row_major std140) uniform float f6, layout( column_major std140) uniform 1X1 matrix of float rm11, layout( column_major std140) uniform 1X2 matrix of float rm12, layout( column_major std140) uniform 2X1 matrix of float rm21, layout( column_major std140) uniform 2X2 matrix of float rm22, layout( column_major std140) uniform 3X3 matrix of float rm33, layout( row_major std140) uniform float f7, layout( column_major std140) uniform 3X4 matrix of float rm34, layout( row_major std140) uniform float f8, layout( column_major std140) uniform 4X3 matrix of float rm43, layout( row_major std140) uniform float f9, layout( row_major std140) uniform 3-element array of float f1a3, layout( row_major std140) uniform float f10})
+
+Validation failed
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 28
+
+                              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 25  "CB"
+                              MemberName 25(CB) 0  "f1"
+                              MemberName 25(CB) 1  "f3a3"
+                              MemberName 25(CB) 2  "f2"
+                              MemberName 25(CB) 3  "f3"
+                              MemberName 25(CB) 4  "m11"
+                              MemberName 25(CB) 5  "m12"
+                              MemberName 25(CB) 6  "m21"
+                              MemberName 25(CB) 7  "m22"
+                              MemberName 25(CB) 8  "m33"
+                              MemberName 25(CB) 9  "f4"
+                              MemberName 25(CB) 10  "m34"
+                              MemberName 25(CB) 11  "f5"
+                              MemberName 25(CB) 12  "m43"
+                              MemberName 25(CB) 13  "f6"
+                              MemberName 25(CB) 14  "rm11"
+                              MemberName 25(CB) 15  "rm12"
+                              MemberName 25(CB) 16  "rm21"
+                              MemberName 25(CB) 17  "rm22"
+                              MemberName 25(CB) 18  "rm33"
+                              MemberName 25(CB) 19  "f7"
+                              MemberName 25(CB) 20  "rm34"
+                              MemberName 25(CB) 21  "f8"
+                              MemberName 25(CB) 22  "rm43"
+                              MemberName 25(CB) 23  "f9"
+                              MemberName 25(CB) 24  "f1a3"
+                              MemberName 25(CB) 25  "f10"
+                              Name 27  ""
+                              Decorate 13 ArrayStride 16
+                              Decorate 24 ArrayStride 16
+                              Decorate 25(CB) Block
+                              MemberDecorate 25(CB) 0 Offset 0
+                              MemberDecorate 25(CB) 1 Offset 16
+                              MemberDecorate 25(CB) 2 Offset 60
+                              MemberDecorate 25(CB) 3 Offset 64
+                              MemberDecorate 25(CB) 4 RowMajor
+                              MemberDecorate 25(CB) 4 MatrixStride 16
+                              MemberDecorate 25(CB) 4 Offset 68
+                              MemberDecorate 25(CB) 5 RowMajor
+                              MemberDecorate 25(CB) 5 MatrixStride 16
+                              MemberDecorate 25(CB) 5 Offset 80
+                              MemberDecorate 25(CB) 6 RowMajor
+                              MemberDecorate 25(CB) 6 MatrixStride 16
+                              MemberDecorate 25(CB) 6 Offset 100
+                              MemberDecorate 25(CB) 7 RowMajor
+                              MemberDecorate 25(CB) 7 MatrixStride 16
+                              MemberDecorate 25(CB) 7 Offset 112
+                              MemberDecorate 25(CB) 8 RowMajor
+                              MemberDecorate 25(CB) 8 MatrixStride 16
+                              MemberDecorate 25(CB) 8 Offset 144
+                              MemberDecorate 25(CB) 9 Offset 188
+                              MemberDecorate 25(CB) 10 RowMajor
+                              MemberDecorate 25(CB) 10 MatrixStride 16
+                              MemberDecorate 25(CB) 10 Offset 192
+                              MemberDecorate 25(CB) 11 Offset 252
+                              MemberDecorate 25(CB) 12 RowMajor
+                              MemberDecorate 25(CB) 12 MatrixStride 16
+                              MemberDecorate 25(CB) 12 Offset 256
+                              MemberDecorate 25(CB) 13 Offset 304
+                              MemberDecorate 25(CB) 14 ColMajor
+                              MemberDecorate 25(CB) 14 MatrixStride 16
+                              MemberDecorate 25(CB) 14 Offset 308
+                              MemberDecorate 25(CB) 15 ColMajor
+                              MemberDecorate 25(CB) 15 MatrixStride 16
+                              MemberDecorate 25(CB) 15 Offset 312
+                              MemberDecorate 25(CB) 16 ColMajor
+                              MemberDecorate 25(CB) 16 MatrixStride 16
+                              MemberDecorate 25(CB) 16 Offset 320
+                              MemberDecorate 25(CB) 17 ColMajor
+                              MemberDecorate 25(CB) 17 MatrixStride 16
+                              MemberDecorate 25(CB) 17 Offset 352
+                              MemberDecorate 25(CB) 18 ColMajor
+                              MemberDecorate 25(CB) 18 MatrixStride 16
+                              MemberDecorate 25(CB) 18 Offset 384
+                              MemberDecorate 25(CB) 19 Offset 428
+                              MemberDecorate 25(CB) 20 ColMajor
+                              MemberDecorate 25(CB) 20 MatrixStride 16
+                              MemberDecorate 25(CB) 20 Offset 432
+                              MemberDecorate 25(CB) 21 Offset 480
+                              MemberDecorate 25(CB) 22 ColMajor
+                              MemberDecorate 25(CB) 22 MatrixStride 16
+                              MemberDecorate 25(CB) 22 Offset 496
+                              MemberDecorate 25(CB) 23 Offset 556
+                              MemberDecorate 25(CB) 24 Offset 560
+                              MemberDecorate 25(CB) 25 Offset 596
+                              Decorate 27 Binding 0
+                              Decorate 27 DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               9:             TypeFloat 32
+              10:             TypeVector 9(float) 3
+              11:             TypeInt 32 0
+              12:     11(int) Constant 3
+              13:             TypeArray 10(fvec3) 12
+              14:             TypeVector 9(float) 1
+              15:             TypeMatrix 14(fvec) 1
+              16:             TypeVector 9(float) 2
+              17:             TypeMatrix 16(fvec2) 1
+              18:             TypeMatrix 14(fvec) 2
+              19:             TypeMatrix 16(fvec2) 2
+              20:             TypeMatrix 10(fvec3) 3
+              21:             TypeVector 9(float) 4
+              22:             TypeMatrix 21(fvec4) 3
+              23:             TypeMatrix 10(fvec3) 4
+              24:             TypeArray 9(float) 12
+          25(CB):             TypeStruct 9(float) 13 9(float) 9(float) 15 17 18 19 20 9(float) 22 9(float) 23 9(float) 15 17 18 19 20 9(float) 22 9(float) 23 9(float) 24 9(float)
+              26:             TypePointer Uniform 25(CB)
+              27:     26(ptr) Variable Uniform
+         4(main):           2 Function None 3
+               5:             Label
+               8:           2 FunctionCall 6(@main()
+                              Return
+                              FunctionEnd
+       6(@main():           2 Function None 3
+               7:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.color.hull.tesc.out b/Test/baseResults/hlsl.color.hull.tesc.out
index 7a1f830..39a7597 100644
--- a/Test/baseResults/hlsl.color.hull.tesc.out
+++ b/Test/baseResults/hlsl.color.hull.tesc.out
@@ -583,21 +583,21 @@
                               Name 137  "param"
                               Name 142  "@patchConstantOutput.edges"
                               Name 155  "@patchConstantOutput.inside"
+                              Decorate 33(TessellationBuffer) Block
                               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 35 DescriptorSet 0
                               Decorate 73(patch.position) Location 0
                               Decorate 80(patch.color) Location 1
                               Decorate 99(pointId) BuiltIn InvocationId
                               Decorate 102(patchId) BuiltIn PrimitiveId
                               Decorate 113(@entryPointOutput.position) Location 0
                               Decorate 120(@entryPointOutput.color) Location 1
-                              Decorate 142(@patchConstantOutput.edges) Patch
                               Decorate 142(@patchConstantOutput.edges) BuiltIn TessLevelOuter
-                              Decorate 155(@patchConstantOutput.inside) Patch
+                              Decorate 142(@patchConstantOutput.edges) Patch
                               Decorate 155(@patchConstantOutput.inside) BuiltIn TessLevelInner
+                              Decorate 155(@patchConstantOutput.inside) Patch
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.comparison.vec.frag.out b/Test/baseResults/hlsl.comparison.vec.frag.out
index 720aea2..67b82d5 100644
--- a/Test/baseResults/hlsl.comparison.vec.frag.out
+++ b/Test/baseResults/hlsl.comparison.vec.frag.out
@@ -297,10 +297,10 @@
                               MemberName 93($Global) 0  "uf4"
                               Name 95  ""
                               Decorate 90(@entryPointOutput.Color) Location 0
-                              MemberDecorate 93($Global) 0 Offset 0
                               Decorate 93($Global) Block
-                              Decorate 95 DescriptorSet 0
+                              MemberDecorate 93($Global) 0 Offset 0
                               Decorate 95 Binding 0
+                              Decorate 95 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.conditional.frag.out b/Test/baseResults/hlsl.conditional.frag.out
index 47c7877..a56178e 100644
--- a/Test/baseResults/hlsl.conditional.frag.out
+++ b/Test/baseResults/hlsl.conditional.frag.out
@@ -696,14 +696,14 @@
                               Name 226  "input"
                               Name 229  "@entryPointOutput"
                               Name 230  "param"
+                              Decorate 29($Global) Block
                               MemberDecorate 29($Global) 0 Offset 0
                               MemberDecorate 29($Global) 1 Offset 16
                               MemberDecorate 29($Global) 2 Offset 32
                               MemberDecorate 29($Global) 3 Offset 48
                               MemberDecorate 29($Global) 4 Offset 52
-                              Decorate 29($Global) Block
-                              Decorate 31 DescriptorSet 0
                               Decorate 31 Binding 0
+                              Decorate 31 DescriptorSet 0
                               Decorate 226(input) Location 0
                               Decorate 229(@entryPointOutput) Location 0
                2:             TypeVoid
diff --git a/Test/baseResults/hlsl.constantbuffer.frag.out b/Test/baseResults/hlsl.constantbuffer.frag.out
index 78ad577..e321d6d 100644
--- a/Test/baseResults/hlsl.constantbuffer.frag.out
+++ b/Test/baseResults/hlsl.constantbuffer.frag.out
@@ -156,21 +156,21 @@
                               MemberName 46(cbuff) 0  "c1"
                               Name 48  ""
                               Name 64  "@entryPointOutput"
+                              Decorate 12(cb3) Block
                               MemberDecorate 12(cb3) 0 Offset 0
                               MemberDecorate 12(cb3) 1 Offset 4
-                              Decorate 12(cb3) Block
-                              Decorate 18(cb3) DescriptorSet 0
                               Decorate 18(cb3) Binding 1
-                              MemberDecorate 31(cb1) 0 Offset 0
+                              Decorate 18(cb3) DescriptorSet 0
                               Decorate 31(cb1) Block
-                              Decorate 33(cb1) DescriptorSet 0
+                              MemberDecorate 31(cb1) 0 Offset 0
                               Decorate 33(cb1) Binding 12
-                              Decorate 40(cb2) DescriptorSet 0
+                              Decorate 33(cb1) DescriptorSet 0
                               Decorate 40(cb2) Binding 0
-                              MemberDecorate 46(cbuff) 0 Offset 0
+                              Decorate 40(cb2) DescriptorSet 0
                               Decorate 46(cbuff) Block
-                              Decorate 48 DescriptorSet 0
+                              MemberDecorate 46(cbuff) 0 Offset 0
                               Decorate 48 Binding 2
+                              Decorate 48 DescriptorSet 0
                               Decorate 64(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.dashI.vert.out b/Test/baseResults/hlsl.dashI.vert.out
index ccd530a..125b4bd 100644
--- a/Test/baseResults/hlsl.dashI.vert.out
+++ b/Test/baseResults/hlsl.dashI.vert.out
@@ -18,14 +18,14 @@
                               MemberName 11($Global) 4  "i4"
                               Name 13  ""
                               Name 38  "@entryPointOutput"
+                              Decorate 11($Global) Block
                               MemberDecorate 11($Global) 0 Offset 0
                               MemberDecorate 11($Global) 1 Offset 16
                               MemberDecorate 11($Global) 2 Offset 32
                               MemberDecorate 11($Global) 3 Offset 48
                               MemberDecorate 11($Global) 4 Offset 64
-                              Decorate 11($Global) Block
-                              Decorate 13 DescriptorSet 0
                               Decorate 13 Binding 0
+                              Decorate 13 DescriptorSet 0
                               Decorate 38(@entryPointOutput) BuiltIn Position
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.domain.1.tese.out b/Test/baseResults/hlsl.domain.1.tese.out
index 738f7cd..41a5ab0 100644
--- a/Test/baseResults/hlsl.domain.1.tese.out
+++ b/Test/baseResults/hlsl.domain.1.tese.out
@@ -473,12 +473,12 @@
                               Decorate 62(i.norm) Location 1
                               Decorate 82(f) Patch
                               Decorate 82(f) Location 2
-                              Decorate 85(tesscoord) Patch
                               Decorate 85(tesscoord) BuiltIn TessCoord
-                              Decorate 91(pcf_data.flTessFactor) Patch
+                              Decorate 85(tesscoord) Patch
                               Decorate 91(pcf_data.flTessFactor) BuiltIn TessLevelOuter
-                              Decorate 104(pcf_data.flInsideTessFactor) Patch
+                              Decorate 91(pcf_data.flTessFactor) Patch
                               Decorate 104(pcf_data.flInsideTessFactor) BuiltIn TessLevelInner
+                              Decorate 104(pcf_data.flInsideTessFactor) Patch
                               Decorate 118(@entryPointOutput.pos) Location 0
                               Decorate 122(@entryPointOutput.norm) Location 1
                2:             TypeVoid
diff --git a/Test/baseResults/hlsl.domain.2.tese.out b/Test/baseResults/hlsl.domain.2.tese.out
index ddb176a..97590ff 100644
--- a/Test/baseResults/hlsl.domain.2.tese.out
+++ b/Test/baseResults/hlsl.domain.2.tese.out
@@ -465,16 +465,16 @@
                               Name 109  "param"
                               Name 113  "@entryPointOutput.pos"
                               Name 117  "@entryPointOutput.norm"
-                              Decorate 52(pcf_data.flTessFactor) Patch
                               Decorate 52(pcf_data.flTessFactor) BuiltIn TessLevelOuter
-                              Decorate 67(pcf_data.flInsideTessFactor) Patch
+                              Decorate 52(pcf_data.flTessFactor) Patch
                               Decorate 67(pcf_data.flInsideTessFactor) BuiltIn TessLevelInner
+                              Decorate 67(pcf_data.flInsideTessFactor) Patch
                               Decorate 71(pcf_data.foo) Patch
                               Decorate 71(pcf_data.foo) Location 2
                               Decorate 78(i.pos) Location 0
                               Decorate 85(i.norm) Location 1
-                              Decorate 103(tesscoord) Patch
                               Decorate 103(tesscoord) BuiltIn TessCoord
+                              Decorate 103(tesscoord) Patch
                               Decorate 113(@entryPointOutput.pos) Location 0
                               Decorate 117(@entryPointOutput.norm) Location 1
                2:             TypeVoid
diff --git a/Test/baseResults/hlsl.domain.3.tese.out b/Test/baseResults/hlsl.domain.3.tese.out
index 1dc7b2f..552f3fd 100644
--- a/Test/baseResults/hlsl.domain.3.tese.out
+++ b/Test/baseResults/hlsl.domain.3.tese.out
@@ -397,12 +397,12 @@
                               Name 113  "@entryPointOutput.norm"
                               Decorate 55(i.pos) Location 0
                               Decorate 62(i.norm) Location 1
-                              Decorate 74(tesscoord) Patch
                               Decorate 74(tesscoord) BuiltIn TessCoord
-                              Decorate 83(pcf_data.flTessFactor) Patch
+                              Decorate 74(tesscoord) Patch
                               Decorate 83(pcf_data.flTessFactor) BuiltIn TessLevelOuter
-                              Decorate 97(pcf_data.flInsideTessFactor) Patch
+                              Decorate 83(pcf_data.flTessFactor) Patch
                               Decorate 97(pcf_data.flInsideTessFactor) BuiltIn TessLevelInner
+                              Decorate 97(pcf_data.flInsideTessFactor) Patch
                               Decorate 109(@entryPointOutput.pos) Location 0
                               Decorate 113(@entryPointOutput.norm) Location 1
                2:             TypeVoid
diff --git a/Test/baseResults/hlsl.earlydepthstencil.frag.out b/Test/baseResults/hlsl.earlydepthstencil.frag.out
index a629bdc..60d9069 100644
--- a/Test/baseResults/hlsl.earlydepthstencil.frag.out
+++ b/Test/baseResults/hlsl.earlydepthstencil.frag.out
@@ -129,8 +129,8 @@
                               Name 41  "input.Position"
                               Name 46  "@entryPointOutput"
                               Name 47  "param"
-                              Decorate 19(Values) DescriptorSet 0
                               Decorate 19(Values) Binding 0
+                              Decorate 19(Values) DescriptorSet 0
                               Decorate 41(input.Position) BuiltIn FragCoord
                               Decorate 46(@entryPointOutput) Location 0
                2:             TypeVoid
diff --git a/Test/baseResults/hlsl.emptystructreturn.tesc.out b/Test/baseResults/hlsl.emptystructreturn.tesc.out
index ffdbb02..0d82b7b 100644
--- a/Test/baseResults/hlsl.emptystructreturn.tesc.out
+++ b/Test/baseResults/hlsl.emptystructreturn.tesc.out
@@ -439,10 +439,10 @@
                               Decorate 65(patch.position) BuiltIn Position
                               Decorate 79(pointId) BuiltIn InvocationId
                               Decorate 82(patchId) BuiltIn PrimitiveId
-                              Decorate 115(@patchConstantOutput.edges) Patch
                               Decorate 115(@patchConstantOutput.edges) BuiltIn TessLevelOuter
-                              Decorate 128(@patchConstantOutput.inside) Patch
+                              Decorate 115(@patchConstantOutput.edges) Patch
                               Decorate 128(@patchConstantOutput.inside) BuiltIn TessLevelInner
+                              Decorate 128(@patchConstantOutput.inside) Patch
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.entry-inout.vert.out b/Test/baseResults/hlsl.entry-inout.vert.out
new file mode 100644
index 0000000..7b0ebd7
--- /dev/null
+++ b/Test/baseResults/hlsl.entry-inout.vert.out
@@ -0,0 +1,137 @@
+hlsl.entry-inout.vert
+Shader version: 500
+0:? Sequence
+0:1  Function Definition: @main(vf4;vf2; ( temp void)
+0:1    Function Parameters: 
+0:1      'pos' ( inout 4-component vector of float)
+0:1      'uv' ( inout 2-component vector of float)
+0:1  Function Definition: main( ( temp void)
+0:1    Function Parameters: 
+0:?     Sequence
+0:1      move second child to first child ( temp 4-component vector of float)
+0:?         'pos' ( temp 4-component vector of float)
+0:?         'pos' (layout( location=0) in 4-component vector of float)
+0:1      move second child to first child ( temp 2-component vector of float)
+0:?         'uv' ( temp 2-component vector of float)
+0:?         'uv' (layout( location=1) in 2-component vector of float)
+0:1      Function Call: @main(vf4;vf2; ( temp void)
+0:?         'pos' ( temp 4-component vector of float)
+0:?         'uv' ( temp 2-component vector of float)
+0:1      move second child to first child ( temp 4-component vector of float)
+0:?         'pos' ( out 4-component vector of float Position)
+0:?         'pos' ( temp 4-component vector of float)
+0:1      move second child to first child ( temp 2-component vector of float)
+0:?         'uv' (layout( location=0) out 2-component vector of float)
+0:?         'uv' ( temp 2-component vector of float)
+0:?   Linker Objects
+0:?     'pos' (layout( location=0) in 4-component vector of float)
+0:?     'uv' (layout( location=1) in 2-component vector of float)
+0:?     'pos' ( out 4-component vector of float Position)
+0:?     'uv' (layout( location=0) out 2-component vector of float)
+
+
+Linked vertex stage:
+
+
+Shader version: 500
+0:? Sequence
+0:1  Function Definition: @main(vf4;vf2; ( temp void)
+0:1    Function Parameters: 
+0:1      'pos' ( inout 4-component vector of float)
+0:1      'uv' ( inout 2-component vector of float)
+0:1  Function Definition: main( ( temp void)
+0:1    Function Parameters: 
+0:?     Sequence
+0:1      move second child to first child ( temp 4-component vector of float)
+0:?         'pos' ( temp 4-component vector of float)
+0:?         'pos' (layout( location=0) in 4-component vector of float)
+0:1      move second child to first child ( temp 2-component vector of float)
+0:?         'uv' ( temp 2-component vector of float)
+0:?         'uv' (layout( location=1) in 2-component vector of float)
+0:1      Function Call: @main(vf4;vf2; ( temp void)
+0:?         'pos' ( temp 4-component vector of float)
+0:?         'uv' ( temp 2-component vector of float)
+0:1      move second child to first child ( temp 4-component vector of float)
+0:?         'pos' ( out 4-component vector of float Position)
+0:?         'pos' ( temp 4-component vector of float)
+0:1      move second child to first child ( temp 2-component vector of float)
+0:?         'uv' (layout( location=0) out 2-component vector of float)
+0:?         'uv' ( temp 2-component vector of float)
+0:?   Linker Objects
+0:?     'pos' (layout( location=0) in 4-component vector of float)
+0:?     'uv' (layout( location=1) in 2-component vector of float)
+0:?     'pos' ( out 4-component vector of float Position)
+0:?     'uv' (layout( location=0) out 2-component vector of float)
+
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 37
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 18 22 32 35
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 14  "@main(vf4;vf2;"
+                              Name 12  "pos"
+                              Name 13  "uv"
+                              Name 16  "pos"
+                              Name 18  "pos"
+                              Name 20  "uv"
+                              Name 22  "uv"
+                              Name 24  "param"
+                              Name 26  "param"
+                              Name 32  "pos"
+                              Name 35  "uv"
+                              Decorate 18(pos) Location 0
+                              Decorate 22(uv) Location 1
+                              Decorate 32(pos) BuiltIn Position
+                              Decorate 35(uv) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+               9:             TypeVector 6(float) 2
+              10:             TypePointer Function 9(fvec2)
+              11:             TypeFunction 2 8(ptr) 10(ptr)
+              17:             TypePointer Input 7(fvec4)
+         18(pos):     17(ptr) Variable Input
+              21:             TypePointer Input 9(fvec2)
+          22(uv):     21(ptr) Variable Input
+              31:             TypePointer Output 7(fvec4)
+         32(pos):     31(ptr) Variable Output
+              34:             TypePointer Output 9(fvec2)
+          35(uv):     34(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+         16(pos):      8(ptr) Variable Function
+          20(uv):     10(ptr) Variable Function
+       24(param):      8(ptr) Variable Function
+       26(param):     10(ptr) Variable Function
+              19:    7(fvec4) Load 18(pos)
+                              Store 16(pos) 19
+              23:    9(fvec2) Load 22(uv)
+                              Store 20(uv) 23
+              25:    7(fvec4) Load 16(pos)
+                              Store 24(param) 25
+              27:    9(fvec2) Load 20(uv)
+                              Store 26(param) 27
+              28:           2 FunctionCall 14(@main(vf4;vf2;) 24(param) 26(param)
+              29:    7(fvec4) Load 24(param)
+                              Store 16(pos) 29
+              30:    9(fvec2) Load 26(param)
+                              Store 20(uv) 30
+              33:    7(fvec4) Load 16(pos)
+                              Store 32(pos) 33
+              36:    9(fvec2) Load 20(uv)
+                              Store 35(uv) 36
+                              Return
+                              FunctionEnd
+14(@main(vf4;vf2;):           2 Function None 11
+         12(pos):      8(ptr) FunctionParameter
+          13(uv):     10(ptr) FunctionParameter
+              15:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.entry.rename.frag.out b/Test/baseResults/hlsl.entry.rename.frag.out
index d635c67..d175805 100644
--- a/Test/baseResults/hlsl.entry.rename.frag.out
+++ b/Test/baseResults/hlsl.entry.rename.frag.out
@@ -92,10 +92,10 @@
                               MemberName 29($Global) 0  "also_not_the_entry_point"
                               Name 31  ""
                               Decorate 26(@entryPointOutput.Color) Location 0
-                              MemberDecorate 29($Global) 0 Offset 0
                               Decorate 29($Global) Block
-                              Decorate 31 DescriptorSet 0
+                              MemberDecorate 29($Global) 0 Offset 0
                               Decorate 31 Binding 0
+                              Decorate 31 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                8:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.explicitDescriptorSet-2.frag.out b/Test/baseResults/hlsl.explicitDescriptorSet-2.frag.out
index 5c89f7e..ac6364d 100644
--- a/Test/baseResults/hlsl.explicitDescriptorSet-2.frag.out
+++ b/Test/baseResults/hlsl.explicitDescriptorSet-2.frag.out
@@ -21,19 +21,19 @@
                               MemberName 25($Global) 0  "floatval_amb"
                               Name 27  ""
                               Name 30  "floatbuff"
-                              Decorate 13(g_sSamp2_amb) DescriptorSet 3
                               Decorate 13(g_sSamp2_amb) Binding 10
+                              Decorate 13(g_sSamp2_amb) DescriptorSet 3
                               Decorate 19(@entryPointOutput) Location 0
-                              Decorate 21(g_sSamp) DescriptorSet 3
                               Decorate 21(g_sSamp) Binding 11
-                              Decorate 24(g_tTex1df4) DescriptorSet 3
+                              Decorate 21(g_sSamp) DescriptorSet 3
                               Decorate 24(g_tTex1df4) Binding 20
-                              MemberDecorate 25($Global) 0 Offset 0
+                              Decorate 24(g_tTex1df4) DescriptorSet 3
                               Decorate 25($Global) Block
-                              Decorate 27 DescriptorSet 3
+                              MemberDecorate 25($Global) 0 Offset 0
                               Decorate 27 Binding 0
-                              Decorate 30(floatbuff) DescriptorSet 3
+                              Decorate 27 DescriptorSet 3
                               Decorate 30(floatbuff) Binding 0
+                              Decorate 30(floatbuff) DescriptorSet 3
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.explicitDescriptorSet.frag.out b/Test/baseResults/hlsl.explicitDescriptorSet.frag.out
index 1b0e45f..0693f02 100644
--- a/Test/baseResults/hlsl.explicitDescriptorSet.frag.out
+++ b/Test/baseResults/hlsl.explicitDescriptorSet.frag.out
@@ -21,19 +21,19 @@
                               MemberName 25($Global) 0  "floatval_amb"
                               Name 27  ""
                               Name 30  "floatbuff"
-                              Decorate 13(g_sSamp2_amb) DescriptorSet 4
                               Decorate 13(g_sSamp2_amb) Binding 10
+                              Decorate 13(g_sSamp2_amb) DescriptorSet 4
                               Decorate 19(@entryPointOutput) Location 0
-                              Decorate 21(g_sSamp) DescriptorSet 4
                               Decorate 21(g_sSamp) Binding 11
-                              Decorate 24(g_tTex1df4) DescriptorSet 4
+                              Decorate 21(g_sSamp) DescriptorSet 4
                               Decorate 24(g_tTex1df4) Binding 20
-                              MemberDecorate 25($Global) 0 Offset 0
+                              Decorate 24(g_tTex1df4) DescriptorSet 4
                               Decorate 25($Global) Block
-                              Decorate 27 DescriptorSet 4
+                              MemberDecorate 25($Global) 0 Offset 0
                               Decorate 27 Binding 0
-                              Decorate 30(floatbuff) DescriptorSet 4
+                              Decorate 27 DescriptorSet 4
                               Decorate 30(floatbuff) Binding 0
+                              Decorate 30(floatbuff) DescriptorSet 4
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.flattenOpaque.frag.out b/Test/baseResults/hlsl.flattenOpaque.frag.out
index 589b1e1..47ea7d3 100644
--- a/Test/baseResults/hlsl.flattenOpaque.frag.out
+++ b/Test/baseResults/hlsl.flattenOpaque.frag.out
@@ -336,14 +336,14 @@
                               Name 112  "param"
                               Name 114  "param"
                               Name 120  "@entryPointOutput"
-                              Decorate 38(tex) DescriptorSet 0
                               Decorate 38(tex) Binding 0
-                              Decorate 82(s.s2D) DescriptorSet 0
+                              Decorate 38(tex) DescriptorSet 0
                               Decorate 82(s.s2D) Binding 1
-                              Decorate 97(s2.s2D) DescriptorSet 0
+                              Decorate 82(s.s2D) DescriptorSet 0
                               Decorate 97(s2.s2D) Binding 2
-                              Decorate 100(s2.tex) DescriptorSet 0
+                              Decorate 97(s2.s2D) DescriptorSet 0
                               Decorate 100(s2.tex) Binding 3
+                              Decorate 100(s2.tex) DescriptorSet 0
                               Decorate 120(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.flattenOpaqueInit.vert.out b/Test/baseResults/hlsl.flattenOpaqueInit.vert.out
index dbd6446..482f818 100644
--- a/Test/baseResults/hlsl.flattenOpaqueInit.vert.out
+++ b/Test/baseResults/hlsl.flattenOpaqueInit.vert.out
@@ -192,10 +192,10 @@
                               Name 69  "tex3"
                               Name 71  "param"
                               Name 80  "@entryPointOutput"
-                              Decorate 43(g_tInputTexture_sampler) DescriptorSet 0
                               Decorate 43(g_tInputTexture_sampler) Binding 0
-                              Decorate 47(g_tInputTexture) DescriptorSet 0
+                              Decorate 43(g_tInputTexture_sampler) DescriptorSet 0
                               Decorate 47(g_tInputTexture) Binding 1
+                              Decorate 47(g_tInputTexture) DescriptorSet 0
                               Decorate 80(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out b/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out
index 66084f6..7ff5c4a 100644
--- a/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out
+++ b/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out
@@ -128,10 +128,10 @@
                               Name 47  "g_tInputTexture"
                               Name 51  "param"
                               Name 57  "@entryPointOutput"
-                              Decorate 44(g_tInputTexture_sampler) DescriptorSet 0
                               Decorate 44(g_tInputTexture_sampler) Binding 0
-                              Decorate 47(g_tInputTexture) DescriptorSet 0
+                              Decorate 44(g_tInputTexture_sampler) DescriptorSet 0
                               Decorate 47(g_tInputTexture) Binding 1
+                              Decorate 47(g_tInputTexture) DescriptorSet 0
                               Decorate 57(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.flattenSubset.frag.out b/Test/baseResults/hlsl.flattenSubset.frag.out
index 65d3467..b96c141 100644
--- a/Test/baseResults/hlsl.flattenSubset.frag.out
+++ b/Test/baseResults/hlsl.flattenSubset.frag.out
@@ -151,10 +151,10 @@
                               Name 47  "vpos"
                               Name 50  "@entryPointOutput"
                               Name 51  "param"
-                              Decorate 21(samp) DescriptorSet 0
                               Decorate 21(samp) Binding 0
-                              Decorate 33(tex) DescriptorSet 0
+                              Decorate 21(samp) DescriptorSet 0
                               Decorate 33(tex) Binding 1
+                              Decorate 33(tex) DescriptorSet 0
                               Decorate 47(vpos) Location 0
                               Decorate 50(@entryPointOutput) Location 0
                2:             TypeVoid
diff --git a/Test/baseResults/hlsl.flattenSubset2.frag.out b/Test/baseResults/hlsl.flattenSubset2.frag.out
index c8a9193..46cbcd4 100644
--- a/Test/baseResults/hlsl.flattenSubset2.frag.out
+++ b/Test/baseResults/hlsl.flattenSubset2.frag.out
@@ -179,8 +179,8 @@
                               Name 49  "vpos"
                               Name 52  "@entryPointOutput"
                               Name 53  "param"
-                              Decorate 36(someTex) DescriptorSet 0
                               Decorate 36(someTex) Binding 0
+                              Decorate 36(someTex) DescriptorSet 0
                               Decorate 49(vpos) Location 0
                               Decorate 52(@entryPointOutput) Location 0
                2:             TypeVoid
diff --git a/Test/baseResults/hlsl.float4.frag.out b/Test/baseResults/hlsl.float4.frag.out
index 5fcc3c1..8b9fc02 100644
--- a/Test/baseResults/hlsl.float4.frag.out
+++ b/Test/baseResults/hlsl.float4.frag.out
@@ -61,14 +61,14 @@
                               MemberName 15($Global) 3  "ff3"
                               MemberName 15($Global) 4  "ff4"
                               Name 17  ""
+                              Decorate 15($Global) Block
                               MemberDecorate 15($Global) 0 Offset 0
                               MemberDecorate 15($Global) 1 Offset 16
                               MemberDecorate 15($Global) 2 Offset 20
                               MemberDecorate 15($Global) 3 Offset 32
                               MemberDecorate 15($Global) 4 Offset 48
-                              Decorate 15($Global) Block
-                              Decorate 17 DescriptorSet 0
                               Decorate 17 Binding 0
+                              Decorate 17 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.format.rwtexture.frag.out b/Test/baseResults/hlsl.format.rwtexture.frag.out
index 3edbbb6..eb81229 100644
--- a/Test/baseResults/hlsl.format.rwtexture.frag.out
+++ b/Test/baseResults/hlsl.format.rwtexture.frag.out
@@ -248,92 +248,92 @@
                               Name 159  "g_tTex25"
                               Decorate 29(@entryPointOutput.Color) Location 0
                               Decorate 33(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 38(g_sSamp) DescriptorSet 0
                               Decorate 38(g_sSamp) Binding 0
-                              Decorate 41(g_tTex1df4) DescriptorSet 0
+                              Decorate 38(g_sSamp) DescriptorSet 0
                               Decorate 41(g_tTex1df4) Binding 0
-                              Decorate 44(g_tTex1di4) DescriptorSet 0
+                              Decorate 41(g_tTex1df4) DescriptorSet 0
                               Decorate 44(g_tTex1di4) Binding 0
-                              Decorate 48(g_tTex1du4) DescriptorSet 0
+                              Decorate 44(g_tTex1di4) DescriptorSet 0
                               Decorate 48(g_tTex1du4) Binding 0
-                              Decorate 51(g_tTex2df4) DescriptorSet 0
+                              Decorate 48(g_tTex1du4) DescriptorSet 0
                               Decorate 51(g_tTex2df4) Binding 0
-                              Decorate 54(g_tTex2di4) DescriptorSet 0
+                              Decorate 51(g_tTex2df4) DescriptorSet 0
                               Decorate 54(g_tTex2di4) Binding 0
-                              Decorate 57(g_tTex2du4) DescriptorSet 0
+                              Decorate 54(g_tTex2di4) DescriptorSet 0
                               Decorate 57(g_tTex2du4) Binding 0
-                              Decorate 60(g_tTex3df4) DescriptorSet 0
-                              Decorate 60(g_tTex3df4) Binding 0
+                              Decorate 57(g_tTex2du4) DescriptorSet 0
                               Decorate 60(g_tTex3df4) NonWritable
-                              Decorate 63(g_tTex3di4) DescriptorSet 0
-                              Decorate 63(g_tTex3di4) Binding 0
+                              Decorate 60(g_tTex3df4) Binding 0
+                              Decorate 60(g_tTex3df4) DescriptorSet 0
                               Decorate 63(g_tTex3di4) NonReadable
-                              Decorate 66(g_tTex3du4) DescriptorSet 0
-                              Decorate 66(g_tTex3du4) Binding 0
+                              Decorate 63(g_tTex3di4) Binding 0
+                              Decorate 63(g_tTex3di4) DescriptorSet 0
                               Decorate 66(g_tTex3du4) NonWritable
                               Decorate 66(g_tTex3du4) NonReadable
-                              Decorate 69(g_tTex1df4a) DescriptorSet 0
+                              Decorate 66(g_tTex3du4) Binding 0
+                              Decorate 66(g_tTex3du4) DescriptorSet 0
                               Decorate 69(g_tTex1df4a) Binding 0
-                              Decorate 72(g_tTex1di4a) DescriptorSet 0
+                              Decorate 69(g_tTex1df4a) DescriptorSet 0
                               Decorate 72(g_tTex1di4a) Binding 0
-                              Decorate 75(g_tTex1du4a) DescriptorSet 0
+                              Decorate 72(g_tTex1di4a) DescriptorSet 0
                               Decorate 75(g_tTex1du4a) Binding 0
-                              Decorate 78(g_tTex2df4a) DescriptorSet 0
+                              Decorate 75(g_tTex1du4a) DescriptorSet 0
                               Decorate 78(g_tTex2df4a) Binding 0
-                              Decorate 81(g_tTex2di4a) DescriptorSet 0
+                              Decorate 78(g_tTex2df4a) DescriptorSet 0
                               Decorate 81(g_tTex2di4a) Binding 0
-                              Decorate 84(g_tTex2du4a) DescriptorSet 0
+                              Decorate 81(g_tTex2di4a) DescriptorSet 0
                               Decorate 84(g_tTex2du4a) Binding 0
-                              Decorate 87(g_tTex01) DescriptorSet 0
+                              Decorate 84(g_tTex2du4a) DescriptorSet 0
                               Decorate 87(g_tTex01) Binding 0
-                              Decorate 90(g_tTex02) DescriptorSet 0
+                              Decorate 87(g_tTex01) DescriptorSet 0
                               Decorate 90(g_tTex02) Binding 0
-                              Decorate 93(g_tTex03) DescriptorSet 0
+                              Decorate 90(g_tTex02) DescriptorSet 0
                               Decorate 93(g_tTex03) Binding 0
-                              Decorate 96(g_tTex04) DescriptorSet 0
+                              Decorate 93(g_tTex03) DescriptorSet 0
                               Decorate 96(g_tTex04) Binding 0
-                              Decorate 99(g_tTex05) DescriptorSet 0
+                              Decorate 96(g_tTex04) DescriptorSet 0
                               Decorate 99(g_tTex05) Binding 0
-                              Decorate 102(g_tTex06) DescriptorSet 0
+                              Decorate 99(g_tTex05) DescriptorSet 0
                               Decorate 102(g_tTex06) Binding 0
-                              Decorate 105(g_tTex07) DescriptorSet 0
+                              Decorate 102(g_tTex06) DescriptorSet 0
                               Decorate 105(g_tTex07) Binding 0
-                              Decorate 108(g_tTex08) DescriptorSet 0
+                              Decorate 105(g_tTex07) DescriptorSet 0
                               Decorate 108(g_tTex08) Binding 0
-                              Decorate 111(g_tTex09) DescriptorSet 0
+                              Decorate 108(g_tTex08) DescriptorSet 0
                               Decorate 111(g_tTex09) Binding 0
-                              Decorate 114(g_tTex10) DescriptorSet 0
+                              Decorate 111(g_tTex09) DescriptorSet 0
                               Decorate 114(g_tTex10) Binding 0
-                              Decorate 117(g_tTex11) DescriptorSet 0
+                              Decorate 114(g_tTex10) DescriptorSet 0
                               Decorate 117(g_tTex11) Binding 0
-                              Decorate 120(g_tTex12) DescriptorSet 0
+                              Decorate 117(g_tTex11) DescriptorSet 0
                               Decorate 120(g_tTex12) Binding 0
-                              Decorate 123(g_tTex13) DescriptorSet 0
+                              Decorate 120(g_tTex12) DescriptorSet 0
                               Decorate 123(g_tTex13) Binding 0
-                              Decorate 126(g_tTex14) DescriptorSet 0
+                              Decorate 123(g_tTex13) DescriptorSet 0
                               Decorate 126(g_tTex14) Binding 0
-                              Decorate 129(g_tTex15) DescriptorSet 0
+                              Decorate 126(g_tTex14) DescriptorSet 0
                               Decorate 129(g_tTex15) Binding 0
-                              Decorate 132(g_tTex16) DescriptorSet 0
+                              Decorate 129(g_tTex15) DescriptorSet 0
                               Decorate 132(g_tTex16) Binding 0
-                              Decorate 135(g_tTex17) DescriptorSet 0
+                              Decorate 132(g_tTex16) DescriptorSet 0
                               Decorate 135(g_tTex17) Binding 0
-                              Decorate 138(g_tTex18) DescriptorSet 0
+                              Decorate 135(g_tTex17) DescriptorSet 0
                               Decorate 138(g_tTex18) Binding 0
-                              Decorate 141(g_tTex19) DescriptorSet 0
+                              Decorate 138(g_tTex18) DescriptorSet 0
                               Decorate 141(g_tTex19) Binding 0
-                              Decorate 144(g_tTex20) DescriptorSet 0
+                              Decorate 141(g_tTex19) DescriptorSet 0
                               Decorate 144(g_tTex20) Binding 0
-                              Decorate 147(g_tTex21) DescriptorSet 0
+                              Decorate 144(g_tTex20) DescriptorSet 0
                               Decorate 147(g_tTex21) Binding 0
-                              Decorate 150(g_tTex22) DescriptorSet 0
+                              Decorate 147(g_tTex21) DescriptorSet 0
                               Decorate 150(g_tTex22) Binding 0
-                              Decorate 153(g_tTex23) DescriptorSet 0
+                              Decorate 150(g_tTex22) DescriptorSet 0
                               Decorate 153(g_tTex23) Binding 0
-                              Decorate 156(g_tTex24) DescriptorSet 0
+                              Decorate 153(g_tTex23) DescriptorSet 0
                               Decorate 156(g_tTex24) Binding 0
-                              Decorate 159(g_tTex25) DescriptorSet 0
+                              Decorate 156(g_tTex24) DescriptorSet 0
                               Decorate 159(g_tTex25) Binding 0
+                              Decorate 159(g_tTex25) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.gather.array.dx10.frag.out b/Test/baseResults/hlsl.gather.array.dx10.frag.out
index 13b7ebb..e0a1901 100644
--- a/Test/baseResults/hlsl.gather.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.gather.array.dx10.frag.out
@@ -300,30 +300,30 @@
                               Name 117  "g_tTex1df4"
                               Name 120  "g_tTex1di4a"
                               Name 123  "g_tTex1du4a"
-                              Decorate 16(g_tTex2df4a) DescriptorSet 0
                               Decorate 16(g_tTex2df4a) Binding 2
-                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_tTex2df4a) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
-                              Decorate 37(g_tTex2di4a) DescriptorSet 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 37(g_tTex2di4a) Binding 3
-                              Decorate 52(g_tTex2du4a) DescriptorSet 0
+                              Decorate 37(g_tTex2di4a) DescriptorSet 0
                               Decorate 52(g_tTex2du4a) Binding 4
-                              Decorate 64(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 52(g_tTex2du4a) DescriptorSet 0
                               Decorate 64(g_tTexcdf4a) Binding 5
-                              Decorate 74(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 64(g_tTexcdf4a) DescriptorSet 0
                               Decorate 74(g_tTexcdi4a) Binding 6
-                              Decorate 84(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 74(g_tTexcdi4a) DescriptorSet 0
                               Decorate 84(g_tTexcdu4a) Binding 7
+                              Decorate 84(g_tTexcdu4a) DescriptorSet 0
                               Decorate 107(@entryPointOutput.Color) Location 0
                               Decorate 111(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 116(g_tTex1df4a) DescriptorSet 0
                               Decorate 116(g_tTex1df4a) Binding 1
-                              Decorate 117(g_tTex1df4) DescriptorSet 0
+                              Decorate 116(g_tTex1df4a) DescriptorSet 0
                               Decorate 117(g_tTex1df4) Binding 0
-                              Decorate 120(g_tTex1di4a) DescriptorSet 0
+                              Decorate 117(g_tTex1df4) DescriptorSet 0
                               Decorate 120(g_tTex1di4a) Binding 0
-                              Decorate 123(g_tTex1du4a) DescriptorSet 0
+                              Decorate 120(g_tTex1di4a) DescriptorSet 0
                               Decorate 123(g_tTex1du4a) Binding 0
+                              Decorate 123(g_tTex1du4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.gather.basic.dx10.frag.out b/Test/baseResults/hlsl.gather.basic.dx10.frag.out
index 0aa00f7..6a9df41 100644
--- a/Test/baseResults/hlsl.gather.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.gather.basic.dx10.frag.out
@@ -299,38 +299,38 @@
                               Name 128  "g_tTex3df4"
                               Name 131  "g_tTex3di4"
                               Name 134  "g_tTex3du4"
-                              Decorate 16(g_tTex2df4) DescriptorSet 0
                               Decorate 16(g_tTex2df4) Binding 2
-                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_tTex2df4) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
-                              Decorate 36(g_tTex2di4) DescriptorSet 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 36(g_tTex2di4) Binding 3
-                              Decorate 51(g_tTex2du4) DescriptorSet 0
+                              Decorate 36(g_tTex2di4) DescriptorSet 0
                               Decorate 51(g_tTex2du4) Binding 4
-                              Decorate 63(g_tTexcdf4) DescriptorSet 0
+                              Decorate 51(g_tTex2du4) DescriptorSet 0
                               Decorate 63(g_tTexcdf4) Binding 5
-                              Decorate 74(g_tTexcdi4) DescriptorSet 0
+                              Decorate 63(g_tTexcdf4) DescriptorSet 0
                               Decorate 74(g_tTexcdi4) Binding 6
-                              Decorate 84(g_tTexcdu4) DescriptorSet 0
+                              Decorate 74(g_tTexcdi4) DescriptorSet 0
                               Decorate 84(g_tTexcdu4) Binding 7
+                              Decorate 84(g_tTexcdu4) DescriptorSet 0
                               Decorate 108(@entryPointOutput.Color) Location 0
                               Decorate 112(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 115(g_sSamp2d) DescriptorSet 0
                               Decorate 115(g_sSamp2d) Binding 0
-                              Decorate 118(g_tTex1df4a) DescriptorSet 0
+                              Decorate 115(g_sSamp2d) DescriptorSet 0
                               Decorate 118(g_tTex1df4a) Binding 1
-                              Decorate 119(g_tTex1df4) DescriptorSet 0
+                              Decorate 118(g_tTex1df4a) DescriptorSet 0
                               Decorate 119(g_tTex1df4) Binding 0
-                              Decorate 122(g_tTex1di4) DescriptorSet 0
+                              Decorate 119(g_tTex1df4) DescriptorSet 0
                               Decorate 122(g_tTex1di4) Binding 0
-                              Decorate 125(g_tTex1du4) DescriptorSet 0
+                              Decorate 122(g_tTex1di4) DescriptorSet 0
                               Decorate 125(g_tTex1du4) Binding 0
-                              Decorate 128(g_tTex3df4) DescriptorSet 0
+                              Decorate 125(g_tTex1du4) DescriptorSet 0
                               Decorate 128(g_tTex3df4) Binding 0
-                              Decorate 131(g_tTex3di4) DescriptorSet 0
+                              Decorate 128(g_tTex3df4) DescriptorSet 0
                               Decorate 131(g_tTex3di4) Binding 0
-                              Decorate 134(g_tTex3du4) DescriptorSet 0
+                              Decorate 131(g_tTex3di4) DescriptorSet 0
                               Decorate 134(g_tTex3du4) Binding 0
+                              Decorate 134(g_tTex3du4) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.gather.basic.dx10.vert.out b/Test/baseResults/hlsl.gather.basic.dx10.vert.out
index d743074..8bffb13 100644
--- a/Test/baseResults/hlsl.gather.basic.dx10.vert.out
+++ b/Test/baseResults/hlsl.gather.basic.dx10.vert.out
@@ -256,37 +256,37 @@
                               Name 119  "g_tTex3df4"
                               Name 122  "g_tTex3di4"
                               Name 125  "g_tTex3du4"
-                              Decorate 16(g_tTex2df4) DescriptorSet 0
                               Decorate 16(g_tTex2df4) Binding 2
-                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_tTex2df4) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
-                              Decorate 36(g_tTex2di4) DescriptorSet 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 36(g_tTex2di4) Binding 3
-                              Decorate 51(g_tTex2du4) DescriptorSet 0
+                              Decorate 36(g_tTex2di4) DescriptorSet 0
                               Decorate 51(g_tTex2du4) Binding 4
-                              Decorate 63(g_tTexcdf4) DescriptorSet 0
+                              Decorate 51(g_tTex2du4) DescriptorSet 0
                               Decorate 63(g_tTexcdf4) Binding 5
-                              Decorate 74(g_tTexcdi4) DescriptorSet 0
+                              Decorate 63(g_tTexcdf4) DescriptorSet 0
                               Decorate 74(g_tTexcdi4) Binding 6
-                              Decorate 84(g_tTexcdu4) DescriptorSet 0
+                              Decorate 74(g_tTexcdi4) DescriptorSet 0
                               Decorate 84(g_tTexcdu4) Binding 7
+                              Decorate 84(g_tTexcdu4) DescriptorSet 0
                               Decorate 103(@entryPointOutput.Pos) BuiltIn Position
-                              Decorate 106(g_sSamp2d) DescriptorSet 0
                               Decorate 106(g_sSamp2d) Binding 0
-                              Decorate 109(g_tTex1df4a) DescriptorSet 0
+                              Decorate 106(g_sSamp2d) DescriptorSet 0
                               Decorate 109(g_tTex1df4a) Binding 1
-                              Decorate 110(g_tTex1df4) DescriptorSet 0
+                              Decorate 109(g_tTex1df4a) DescriptorSet 0
                               Decorate 110(g_tTex1df4) Binding 0
-                              Decorate 113(g_tTex1di4) DescriptorSet 0
+                              Decorate 110(g_tTex1df4) DescriptorSet 0
                               Decorate 113(g_tTex1di4) Binding 0
-                              Decorate 116(g_tTex1du4) DescriptorSet 0
+                              Decorate 113(g_tTex1di4) DescriptorSet 0
                               Decorate 116(g_tTex1du4) Binding 0
-                              Decorate 119(g_tTex3df4) DescriptorSet 0
+                              Decorate 116(g_tTex1du4) DescriptorSet 0
                               Decorate 119(g_tTex3df4) Binding 0
-                              Decorate 122(g_tTex3di4) DescriptorSet 0
+                              Decorate 119(g_tTex3df4) DescriptorSet 0
                               Decorate 122(g_tTex3di4) Binding 0
-                              Decorate 125(g_tTex3du4) DescriptorSet 0
+                              Decorate 122(g_tTex3di4) DescriptorSet 0
                               Decorate 125(g_tTex3du4) Binding 0
+                              Decorate 125(g_tTex3du4) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.gather.offset.dx10.frag.out b/Test/baseResults/hlsl.gather.offset.dx10.frag.out
index 9656db5..ae409bb 100644
--- a/Test/baseResults/hlsl.gather.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.gather.offset.dx10.frag.out
@@ -245,36 +245,36 @@
                               Name 107  "g_tTexcdf4"
                               Name 110  "g_tTexcdi4"
                               Name 113  "g_tTexcdu4"
-                              Decorate 16(g_tTex2df4) DescriptorSet 0
                               Decorate 16(g_tTex2df4) Binding 2
-                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_tTex2df4) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
-                              Decorate 39(g_tTex2di4) DescriptorSet 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 39(g_tTex2di4) Binding 3
-                              Decorate 55(g_tTex2du4) DescriptorSet 0
+                              Decorate 39(g_tTex2di4) DescriptorSet 0
                               Decorate 55(g_tTex2du4) Binding 4
+                              Decorate 55(g_tTex2du4) DescriptorSet 0
                               Decorate 79(@entryPointOutput.Color) Location 0
                               Decorate 83(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 88(g_tTex1df4a) DescriptorSet 0
                               Decorate 88(g_tTex1df4a) Binding 1
-                              Decorate 89(g_tTex1df4) DescriptorSet 0
+                              Decorate 88(g_tTex1df4a) DescriptorSet 0
                               Decorate 89(g_tTex1df4) Binding 0
-                              Decorate 92(g_tTex1di4) DescriptorSet 0
+                              Decorate 89(g_tTex1df4) DescriptorSet 0
                               Decorate 92(g_tTex1di4) Binding 0
-                              Decorate 95(g_tTex1du4) DescriptorSet 0
+                              Decorate 92(g_tTex1di4) DescriptorSet 0
                               Decorate 95(g_tTex1du4) Binding 0
-                              Decorate 98(g_tTex3df4) DescriptorSet 0
+                              Decorate 95(g_tTex1du4) DescriptorSet 0
                               Decorate 98(g_tTex3df4) Binding 0
-                              Decorate 101(g_tTex3di4) DescriptorSet 0
+                              Decorate 98(g_tTex3df4) DescriptorSet 0
                               Decorate 101(g_tTex3di4) Binding 0
-                              Decorate 104(g_tTex3du4) DescriptorSet 0
+                              Decorate 101(g_tTex3di4) DescriptorSet 0
                               Decorate 104(g_tTex3du4) Binding 0
-                              Decorate 107(g_tTexcdf4) DescriptorSet 0
+                              Decorate 104(g_tTex3du4) DescriptorSet 0
                               Decorate 107(g_tTexcdf4) Binding 0
-                              Decorate 110(g_tTexcdi4) DescriptorSet 0
+                              Decorate 107(g_tTexcdf4) DescriptorSet 0
                               Decorate 110(g_tTexcdi4) Binding 0
-                              Decorate 113(g_tTexcdu4) DescriptorSet 0
+                              Decorate 110(g_tTexcdi4) DescriptorSet 0
                               Decorate 113(g_tTexcdu4) Binding 0
+                              Decorate 113(g_tTexcdu4) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out
index 2e6221a..695428a 100644
--- a/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out
@@ -233,24 +233,24 @@
                               Name 90  "g_tTex1df4"
                               Name 93  "g_tTex1di4"
                               Name 96  "g_tTex1du4"
-                              Decorate 16(g_tTex2df4) DescriptorSet 0
                               Decorate 16(g_tTex2df4) Binding 2
-                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_tTex2df4) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
-                              Decorate 40(g_tTex2di4) DescriptorSet 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 40(g_tTex2di4) Binding 3
-                              Decorate 55(g_tTex2du4) DescriptorSet 0
+                              Decorate 40(g_tTex2di4) DescriptorSet 0
                               Decorate 55(g_tTex2du4) Binding 4
+                              Decorate 55(g_tTex2du4) DescriptorSet 0
                               Decorate 80(@entryPointOutput.Color) Location 0
                               Decorate 84(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 89(g_tTex1df4a) DescriptorSet 0
                               Decorate 89(g_tTex1df4a) Binding 1
-                              Decorate 90(g_tTex1df4) DescriptorSet 0
+                              Decorate 89(g_tTex1df4a) DescriptorSet 0
                               Decorate 90(g_tTex1df4) Binding 0
-                              Decorate 93(g_tTex1di4) DescriptorSet 0
+                              Decorate 90(g_tTex1df4) DescriptorSet 0
                               Decorate 93(g_tTex1di4) Binding 0
-                              Decorate 96(g_tTex1du4) DescriptorSet 0
+                              Decorate 93(g_tTex1di4) DescriptorSet 0
                               Decorate 96(g_tTex1du4) Binding 0
+                              Decorate 96(g_tTex1du4) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out
index 904aaec..3bf68b5 100644
--- a/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.gatherRGBA.array.dx10.frag.out
@@ -812,37 +812,37 @@
                               Name 248  "g_tTex1df4a"
                               Name 251  "g_tTex1di4a"
                               Name 254  "g_tTex1du4a"
-                              Decorate 16(g_tTex2df4a) DescriptorSet 0
                               Decorate 16(g_tTex2df4a) Binding 1
-                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_tTex2df4a) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 26($Global) Block
                               MemberDecorate 26($Global) 0 Offset 0
                               MemberDecorate 26($Global) 1 Offset 8
                               MemberDecorate 26($Global) 2 Offset 16
                               MemberDecorate 26($Global) 3 Offset 32
-                              Decorate 26($Global) Block
-                              Decorate 28 DescriptorSet 0
                               Decorate 28 Binding 7
-                              Decorate 41(g_tTex2di4a) DescriptorSet 0
+                              Decorate 28 DescriptorSet 0
                               Decorate 41(g_tTex2di4a) Binding 2
-                              Decorate 55(g_tTex2du4a) DescriptorSet 0
+                              Decorate 41(g_tTex2di4a) DescriptorSet 0
                               Decorate 55(g_tTex2du4a) Binding 3
-                              Decorate 131(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 55(g_tTex2du4a) DescriptorSet 0
                               Decorate 131(g_tTexcdf4a) Binding 4
-                              Decorate 143(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 131(g_tTexcdf4a) DescriptorSet 0
                               Decorate 143(g_tTexcdi4a) Binding 5
-                              Decorate 154(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 143(g_tTexcdi4a) DescriptorSet 0
                               Decorate 154(g_tTexcdu4a) Binding 6
+                              Decorate 154(g_tTexcdu4a) DescriptorSet 0
                               Decorate 238(@entryPointOutput.Color) Location 0
                               Decorate 242(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 245(g_sSamp2d) DescriptorSet 0
                               Decorate 245(g_sSamp2d) Binding 0
-                              Decorate 248(g_tTex1df4a) DescriptorSet 0
+                              Decorate 245(g_sSamp2d) DescriptorSet 0
                               Decorate 248(g_tTex1df4a) Binding 0
-                              Decorate 251(g_tTex1di4a) DescriptorSet 0
+                              Decorate 248(g_tTex1df4a) DescriptorSet 0
                               Decorate 251(g_tTex1di4a) Binding 0
-                              Decorate 254(g_tTex1du4a) DescriptorSet 0
+                              Decorate 251(g_tTex1di4a) DescriptorSet 0
                               Decorate 254(g_tTex1du4a) Binding 0
+                              Decorate 254(g_tTex1du4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out
index f8fa2f4..e94789a 100644
--- a/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.gatherRGBA.basic.dx10.frag.out
@@ -823,45 +823,45 @@
                               Name 258  "g_tTex3df4"
                               Name 261  "g_tTex3di4"
                               Name 264  "g_tTex3du4"
-                              Decorate 16(g_tTex2df4) DescriptorSet 0
                               Decorate 16(g_tTex2df4) Binding 2
-                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_tTex2df4) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 26($Global) Block
                               MemberDecorate 26($Global) 0 Offset 0
                               MemberDecorate 26($Global) 1 Offset 8
                               MemberDecorate 26($Global) 2 Offset 16
                               MemberDecorate 26($Global) 3 Offset 32
-                              Decorate 26($Global) Block
-                              Decorate 28 DescriptorSet 0
                               Decorate 28 Binding 8
-                              Decorate 41(g_tTex2di4) DescriptorSet 0
+                              Decorate 28 DescriptorSet 0
                               Decorate 41(g_tTex2di4) Binding 3
-                              Decorate 55(g_tTex2du4) DescriptorSet 0
+                              Decorate 41(g_tTex2di4) DescriptorSet 0
                               Decorate 55(g_tTex2du4) Binding 4
-                              Decorate 131(g_tTexcdf4) DescriptorSet 0
+                              Decorate 55(g_tTex2du4) DescriptorSet 0
                               Decorate 131(g_tTexcdf4) Binding 5
-                              Decorate 143(g_tTexcdi4) DescriptorSet 0
+                              Decorate 131(g_tTexcdf4) DescriptorSet 0
                               Decorate 143(g_tTexcdi4) Binding 6
-                              Decorate 154(g_tTexcdu4) DescriptorSet 0
+                              Decorate 143(g_tTexcdi4) DescriptorSet 0
                               Decorate 154(g_tTexcdu4) Binding 7
+                              Decorate 154(g_tTexcdu4) DescriptorSet 0
                               Decorate 238(@entryPointOutput.Color) Location 0
                               Decorate 242(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 245(g_sSamp2d) DescriptorSet 0
                               Decorate 245(g_sSamp2d) Binding 0
-                              Decorate 248(g_tTex1df4a) DescriptorSet 0
+                              Decorate 245(g_sSamp2d) DescriptorSet 0
                               Decorate 248(g_tTex1df4a) Binding 1
-                              Decorate 249(g_tTex1df4) DescriptorSet 0
+                              Decorate 248(g_tTex1df4a) DescriptorSet 0
                               Decorate 249(g_tTex1df4) Binding 0
-                              Decorate 252(g_tTex1di4) DescriptorSet 0
+                              Decorate 249(g_tTex1df4) DescriptorSet 0
                               Decorate 252(g_tTex1di4) Binding 0
-                              Decorate 255(g_tTex1du4) DescriptorSet 0
+                              Decorate 252(g_tTex1di4) DescriptorSet 0
                               Decorate 255(g_tTex1du4) Binding 0
-                              Decorate 258(g_tTex3df4) DescriptorSet 0
+                              Decorate 255(g_tTex1du4) DescriptorSet 0
                               Decorate 258(g_tTex3df4) Binding 0
-                              Decorate 261(g_tTex3di4) DescriptorSet 0
+                              Decorate 258(g_tTex3df4) DescriptorSet 0
                               Decorate 261(g_tTex3di4) Binding 0
-                              Decorate 264(g_tTex3du4) DescriptorSet 0
+                              Decorate 261(g_tTex3di4) DescriptorSet 0
                               Decorate 264(g_tTex3du4) Binding 0
+                              Decorate 264(g_tTex3du4) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out
index 63cb39f..165c10c 100644
--- a/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out
@@ -1333,10 +1333,11 @@
                               Name 392  "g_tTexcdf4"
                               Name 395  "g_tTexcdi4"
                               Name 398  "g_tTexcdu4"
-                              Decorate 16(g_tTex2df4) DescriptorSet 0
                               Decorate 16(g_tTex2df4) Binding 2
-                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_tTex2df4) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 30($Global) Block
                               MemberDecorate 30($Global) 0 Offset 0
                               MemberDecorate 30($Global) 1 Offset 8
                               MemberDecorate 30($Global) 2 Offset 16
@@ -1345,37 +1346,36 @@
                               MemberDecorate 30($Global) 5 Offset 56
                               MemberDecorate 30($Global) 6 Offset 64
                               MemberDecorate 30($Global) 7 Offset 80
-                              Decorate 30($Global) Block
-                              Decorate 32 DescriptorSet 0
                               Decorate 32 Binding 5
-                              Decorate 47(g_tTex2di4) DescriptorSet 0
+                              Decorate 32 DescriptorSet 0
                               Decorate 47(g_tTex2di4) Binding 3
-                              Decorate 63(g_tTex2du4) DescriptorSet 0
+                              Decorate 47(g_tTex2di4) DescriptorSet 0
                               Decorate 63(g_tTex2du4) Binding 4
+                              Decorate 63(g_tTex2du4) DescriptorSet 0
                               Decorate 363(@entryPointOutput.Color) Location 0
                               Decorate 367(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 370(g_sSamp2d) DescriptorSet 0
                               Decorate 370(g_sSamp2d) Binding 0
-                              Decorate 373(g_tTex1df4a) DescriptorSet 0
+                              Decorate 370(g_sSamp2d) DescriptorSet 0
                               Decorate 373(g_tTex1df4a) Binding 1
-                              Decorate 374(g_tTex1df4) DescriptorSet 0
+                              Decorate 373(g_tTex1df4a) DescriptorSet 0
                               Decorate 374(g_tTex1df4) Binding 0
-                              Decorate 377(g_tTex1di4) DescriptorSet 0
+                              Decorate 374(g_tTex1df4) DescriptorSet 0
                               Decorate 377(g_tTex1di4) Binding 0
-                              Decorate 380(g_tTex1du4) DescriptorSet 0
+                              Decorate 377(g_tTex1di4) DescriptorSet 0
                               Decorate 380(g_tTex1du4) Binding 0
-                              Decorate 383(g_tTex3df4) DescriptorSet 0
+                              Decorate 380(g_tTex1du4) DescriptorSet 0
                               Decorate 383(g_tTex3df4) Binding 0
-                              Decorate 386(g_tTex3di4) DescriptorSet 0
+                              Decorate 383(g_tTex3df4) DescriptorSet 0
                               Decorate 386(g_tTex3di4) Binding 0
-                              Decorate 389(g_tTex3du4) DescriptorSet 0
+                              Decorate 386(g_tTex3di4) DescriptorSet 0
                               Decorate 389(g_tTex3du4) Binding 0
-                              Decorate 392(g_tTexcdf4) DescriptorSet 0
+                              Decorate 389(g_tTex3du4) DescriptorSet 0
                               Decorate 392(g_tTexcdf4) Binding 0
-                              Decorate 395(g_tTexcdi4) DescriptorSet 0
+                              Decorate 392(g_tTexcdf4) DescriptorSet 0
                               Decorate 395(g_tTexcdi4) Binding 0
-                              Decorate 398(g_tTexcdu4) DescriptorSet 0
+                              Decorate 395(g_tTexcdi4) DescriptorSet 0
                               Decorate 398(g_tTexcdu4) Binding 0
+                              Decorate 398(g_tTexcdu4) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out
index da83e01..42360c5 100644
--- a/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out
@@ -1322,10 +1322,11 @@
                               Name 382  "g_tTexcdf4a"
                               Name 385  "g_tTexcdi4a"
                               Name 388  "g_tTexcdu4a"
-                              Decorate 16(g_tTex2df4a) DescriptorSet 0
                               Decorate 16(g_tTex2df4a) Binding 1
-                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_tTex2df4a) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 30($Global) Block
                               MemberDecorate 30($Global) 0 Offset 0
                               MemberDecorate 30($Global) 1 Offset 8
                               MemberDecorate 30($Global) 2 Offset 16
@@ -1334,29 +1335,28 @@
                               MemberDecorate 30($Global) 5 Offset 56
                               MemberDecorate 30($Global) 6 Offset 64
                               MemberDecorate 30($Global) 7 Offset 80
-                              Decorate 30($Global) Block
-                              Decorate 32 DescriptorSet 0
                               Decorate 32 Binding 4
-                              Decorate 47(g_tTex2di4a) DescriptorSet 0
+                              Decorate 32 DescriptorSet 0
                               Decorate 47(g_tTex2di4a) Binding 2
-                              Decorate 63(g_tTex2du4a) DescriptorSet 0
+                              Decorate 47(g_tTex2di4a) DescriptorSet 0
                               Decorate 63(g_tTex2du4a) Binding 3
+                              Decorate 63(g_tTex2du4a) DescriptorSet 0
                               Decorate 363(@entryPointOutput.Color) Location 0
                               Decorate 367(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 370(g_sSamp2d) DescriptorSet 0
                               Decorate 370(g_sSamp2d) Binding 0
-                              Decorate 373(g_tTex1df4a) DescriptorSet 0
+                              Decorate 370(g_sSamp2d) DescriptorSet 0
                               Decorate 373(g_tTex1df4a) Binding 0
-                              Decorate 376(g_tTex1di4a) DescriptorSet 0
+                              Decorate 373(g_tTex1df4a) DescriptorSet 0
                               Decorate 376(g_tTex1di4a) Binding 0
-                              Decorate 379(g_tTex1du4a) DescriptorSet 0
+                              Decorate 376(g_tTex1di4a) DescriptorSet 0
                               Decorate 379(g_tTex1du4a) Binding 0
-                              Decorate 382(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 379(g_tTex1du4a) DescriptorSet 0
                               Decorate 382(g_tTexcdf4a) Binding 0
-                              Decorate 385(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 382(g_tTexcdf4a) DescriptorSet 0
                               Decorate 385(g_tTexcdi4a) Binding 0
-                              Decorate 388(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 385(g_tTexcdi4a) DescriptorSet 0
                               Decorate 388(g_tTexcdu4a) Binding 0
+                              Decorate 388(g_tTexcdu4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out b/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out
index ff834ec..b734da5 100644
--- a/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out
@@ -506,43 +506,43 @@
                               Name 157  "g_tTexcdf4"
                               Name 160  "g_tTexcdi4"
                               Name 163  "g_tTexcdu4"
-                              Decorate 16(g_tTex2df4) DescriptorSet 0
                               Decorate 16(g_tTex2df4) Binding 2
-                              Decorate 20(g_sSampCmp) DescriptorSet 0
+                              Decorate 16(g_tTex2df4) DescriptorSet 0
                               Decorate 20(g_sSampCmp) Binding 0
+                              Decorate 20(g_sSampCmp) DescriptorSet 0
+                              Decorate 26($Global) Block
                               MemberDecorate 26($Global) 0 Offset 0
                               MemberDecorate 26($Global) 1 Offset 8
                               MemberDecorate 26($Global) 2 Offset 16
                               MemberDecorate 26($Global) 3 Offset 32
-                              Decorate 26($Global) Block
-                              Decorate 28 DescriptorSet 0
                               Decorate 28 Binding 5
-                              Decorate 44(g_tTex2di4) DescriptorSet 0
+                              Decorate 28 DescriptorSet 0
                               Decorate 44(g_tTex2di4) Binding 3
-                              Decorate 60(g_tTex2du4) DescriptorSet 0
+                              Decorate 44(g_tTex2di4) DescriptorSet 0
                               Decorate 60(g_tTex2du4) Binding 4
+                              Decorate 60(g_tTex2du4) DescriptorSet 0
                               Decorate 129(@entryPointOutput.Color) Location 0
                               Decorate 133(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 138(g_tTex1df4a) DescriptorSet 0
                               Decorate 138(g_tTex1df4a) Binding 1
-                              Decorate 139(g_tTex1df4) DescriptorSet 0
+                              Decorate 138(g_tTex1df4a) DescriptorSet 0
                               Decorate 139(g_tTex1df4) Binding 0
-                              Decorate 142(g_tTex1di4) DescriptorSet 0
+                              Decorate 139(g_tTex1df4) DescriptorSet 0
                               Decorate 142(g_tTex1di4) Binding 0
-                              Decorate 145(g_tTex1du4) DescriptorSet 0
+                              Decorate 142(g_tTex1di4) DescriptorSet 0
                               Decorate 145(g_tTex1du4) Binding 0
-                              Decorate 148(g_tTex3df4) DescriptorSet 0
+                              Decorate 145(g_tTex1du4) DescriptorSet 0
                               Decorate 148(g_tTex3df4) Binding 0
-                              Decorate 151(g_tTex3di4) DescriptorSet 0
+                              Decorate 148(g_tTex3df4) DescriptorSet 0
                               Decorate 151(g_tTex3di4) Binding 0
-                              Decorate 154(g_tTex3du4) DescriptorSet 0
+                              Decorate 151(g_tTex3di4) DescriptorSet 0
                               Decorate 154(g_tTex3du4) Binding 0
-                              Decorate 157(g_tTexcdf4) DescriptorSet 0
+                              Decorate 154(g_tTex3du4) DescriptorSet 0
                               Decorate 157(g_tTexcdf4) Binding 0
-                              Decorate 160(g_tTexcdi4) DescriptorSet 0
+                              Decorate 157(g_tTexcdf4) DescriptorSet 0
                               Decorate 160(g_tTexcdi4) Binding 0
-                              Decorate 163(g_tTexcdu4) DescriptorSet 0
+                              Decorate 160(g_tTexcdi4) DescriptorSet 0
                               Decorate 163(g_tTexcdu4) Binding 0
+                              Decorate 163(g_tTexcdu4) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.getdimensions.dx10.frag.out b/Test/baseResults/hlsl.getdimensions.dx10.frag.out
index 9e1d543..18d5500 100644
--- a/Test/baseResults/hlsl.getdimensions.dx10.frag.out
+++ b/Test/baseResults/hlsl.getdimensions.dx10.frag.out
@@ -2422,64 +2422,64 @@
                               Name 540  "@entryPointOutput.Color"
                               Name 544  "@entryPointOutput.Depth"
                               Name 549  "g_sSamp"
-                              Decorate 17(g_tTex1df4) DescriptorSet 0
                               Decorate 17(g_tTex1df4) Binding 0
-                              Decorate 35(g_tTex1di4) DescriptorSet 0
+                              Decorate 17(g_tTex1df4) DescriptorSet 0
                               Decorate 35(g_tTex1di4) Binding 1
-                              Decorate 48(g_tTex1du4) DescriptorSet 0
+                              Decorate 35(g_tTex1di4) DescriptorSet 0
                               Decorate 48(g_tTex1du4) Binding 2
-                              Decorate 63(g_tTex1df4a) DescriptorSet 0
+                              Decorate 48(g_tTex1du4) DescriptorSet 0
                               Decorate 63(g_tTex1df4a) Binding 12
-                              Decorate 85(g_tTex1di4a) DescriptorSet 0
+                              Decorate 63(g_tTex1df4a) DescriptorSet 0
                               Decorate 85(g_tTex1di4a) Binding 13
-                              Decorate 104(g_tTex1du4a) DescriptorSet 0
+                              Decorate 85(g_tTex1di4a) DescriptorSet 0
                               Decorate 104(g_tTex1du4a) Binding 14
-                              Decorate 123(g_tTex2df4) DescriptorSet 0
+                              Decorate 104(g_tTex1du4a) DescriptorSet 0
                               Decorate 123(g_tTex2df4) Binding 3
-                              Decorate 143(g_tTex2di4) DescriptorSet 0
+                              Decorate 123(g_tTex2df4) DescriptorSet 0
                               Decorate 143(g_tTex2di4) Binding 4
-                              Decorate 162(g_tTex2du4) DescriptorSet 0
+                              Decorate 143(g_tTex2di4) DescriptorSet 0
                               Decorate 162(g_tTex2du4) Binding 5
-                              Decorate 183(g_tTex2df4a) DescriptorSet 0
+                              Decorate 162(g_tTex2du4) DescriptorSet 0
                               Decorate 183(g_tTex2df4a) Binding 15
-                              Decorate 207(g_tTex2di4a) DescriptorSet 0
+                              Decorate 183(g_tTex2df4a) DescriptorSet 0
                               Decorate 207(g_tTex2di4a) Binding 16
-                              Decorate 230(g_tTex2du4a) DescriptorSet 0
+                              Decorate 207(g_tTex2di4a) DescriptorSet 0
                               Decorate 230(g_tTex2du4a) Binding 17
-                              Decorate 253(g_tTex3df4) DescriptorSet 0
+                              Decorate 230(g_tTex2du4a) DescriptorSet 0
                               Decorate 253(g_tTex3df4) Binding 6
-                              Decorate 277(g_tTex3di4) DescriptorSet 0
+                              Decorate 253(g_tTex3df4) DescriptorSet 0
                               Decorate 277(g_tTex3di4) Binding 7
-                              Decorate 300(g_tTex3du4) DescriptorSet 0
+                              Decorate 277(g_tTex3di4) DescriptorSet 0
                               Decorate 300(g_tTex3du4) Binding 8
-                              Decorate 323(g_tTexcdf4) DescriptorSet 0
+                              Decorate 300(g_tTex3du4) DescriptorSet 0
                               Decorate 323(g_tTexcdf4) Binding 9
-                              Decorate 342(g_tTexcdi4) DescriptorSet 0
+                              Decorate 323(g_tTexcdf4) DescriptorSet 0
                               Decorate 342(g_tTexcdi4) Binding 10
-                              Decorate 361(g_tTexcdu4) DescriptorSet 0
+                              Decorate 342(g_tTexcdi4) DescriptorSet 0
                               Decorate 361(g_tTexcdu4) Binding 11
-                              Decorate 380(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 361(g_tTexcdu4) DescriptorSet 0
                               Decorate 380(g_tTexcdf4a) Binding 18
-                              Decorate 403(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 380(g_tTexcdf4a) DescriptorSet 0
                               Decorate 403(g_tTexcdi4a) Binding 19
-                              Decorate 426(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 403(g_tTexcdi4a) DescriptorSet 0
                               Decorate 426(g_tTexcdu4a) Binding 20
-                              Decorate 449(g_tTex2dmsf4) DescriptorSet 0
+                              Decorate 426(g_tTexcdu4a) DescriptorSet 0
                               Decorate 449(g_tTex2dmsf4) Binding 21
-                              Decorate 462(g_tTex2dmsi4) DescriptorSet 0
+                              Decorate 449(g_tTex2dmsf4) DescriptorSet 0
                               Decorate 462(g_tTex2dmsi4) Binding 22
-                              Decorate 474(g_tTex2dmsu4) DescriptorSet 0
+                              Decorate 462(g_tTex2dmsi4) DescriptorSet 0
                               Decorate 474(g_tTex2dmsu4) Binding 23
-                              Decorate 486(g_tTex2dmsf4a) DescriptorSet 0
+                              Decorate 474(g_tTex2dmsu4) DescriptorSet 0
                               Decorate 486(g_tTex2dmsf4a) Binding 24
-                              Decorate 500(g_tTex2dmsi4a) DescriptorSet 0
+                              Decorate 486(g_tTex2dmsf4a) DescriptorSet 0
                               Decorate 500(g_tTex2dmsi4a) Binding 25
-                              Decorate 514(g_tTex2dmsu4a) DescriptorSet 0
+                              Decorate 500(g_tTex2dmsi4a) DescriptorSet 0
                               Decorate 514(g_tTex2dmsu4a) Binding 26
+                              Decorate 514(g_tTex2dmsu4a) DescriptorSet 0
                               Decorate 540(@entryPointOutput.Color) Location 0
                               Decorate 544(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 549(g_sSamp) DescriptorSet 0
                               Decorate 549(g_sSamp) Binding 0
+                              Decorate 549(g_sSamp) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.getdimensions.dx10.vert.out b/Test/baseResults/hlsl.getdimensions.dx10.vert.out
index a7d27a8..925dd7e 100644
--- a/Test/baseResults/hlsl.getdimensions.dx10.vert.out
+++ b/Test/baseResults/hlsl.getdimensions.dx10.vert.out
@@ -138,11 +138,11 @@
                               Name 33  "vsout"
                               Name 42  "@entryPointOutput.Pos"
                               Name 47  "g_sSamp"
-                              Decorate 17(g_tTex1df4) DescriptorSet 0
                               Decorate 17(g_tTex1df4) Binding 0
+                              Decorate 17(g_tTex1df4) DescriptorSet 0
                               Decorate 42(@entryPointOutput.Pos) BuiltIn Position
-                              Decorate 47(g_sSamp) DescriptorSet 0
                               Decorate 47(g_sSamp) Binding 0
+                              Decorate 47(g_sSamp) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out b/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out
index 7af13b2..01e9984 100644
--- a/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out
+++ b/Test/baseResults/hlsl.getdimensions.rw.dx10.frag.out
@@ -791,46 +791,47 @@
                               MemberName 229($Global) 6  "o3"
                               MemberName 229($Global) 7  "o4"
                               Name 231  ""
-                              Decorate 17(g_tTex1df4) DescriptorSet 0
                               Decorate 17(g_tTex1df4) Binding 0
-                              Decorate 26(g_tTex1di4) DescriptorSet 0
+                              Decorate 17(g_tTex1df4) DescriptorSet 0
                               Decorate 26(g_tTex1di4) Binding 1
-                              Decorate 33(g_tTex1du4) DescriptorSet 0
+                              Decorate 26(g_tTex1di4) DescriptorSet 0
                               Decorate 33(g_tTex1du4) Binding 2
-                              Decorate 40(g_tBuffF) DescriptorSet 0
+                              Decorate 33(g_tTex1du4) DescriptorSet 0
                               Decorate 40(g_tBuffF) Binding 15
-                              Decorate 47(g_tBuffI) DescriptorSet 0
+                              Decorate 40(g_tBuffF) DescriptorSet 0
                               Decorate 47(g_tBuffI) Binding 16
-                              Decorate 54(g_tBuffU) DescriptorSet 0
+                              Decorate 47(g_tBuffI) DescriptorSet 0
                               Decorate 54(g_tBuffU) Binding 17
-                              Decorate 63(g_tTex1df4a) DescriptorSet 0
+                              Decorate 54(g_tBuffU) DescriptorSet 0
                               Decorate 63(g_tTex1df4a) Binding 9
-                              Decorate 76(g_tTex1di4a) DescriptorSet 0
+                              Decorate 63(g_tTex1df4a) DescriptorSet 0
                               Decorate 76(g_tTex1di4a) Binding 10
-                              Decorate 86(g_tTex1du4a) DescriptorSet 0
+                              Decorate 76(g_tTex1di4a) DescriptorSet 0
                               Decorate 86(g_tTex1du4a) Binding 11
-                              Decorate 96(g_tTex2df4) DescriptorSet 0
+                              Decorate 86(g_tTex1du4a) DescriptorSet 0
                               Decorate 96(g_tTex2df4) Binding 3
-                              Decorate 107(g_tTex2di4) DescriptorSet 0
+                              Decorate 96(g_tTex2df4) DescriptorSet 0
                               Decorate 107(g_tTex2di4) Binding 4
-                              Decorate 117(g_tTex2du4) DescriptorSet 0
+                              Decorate 107(g_tTex2di4) DescriptorSet 0
                               Decorate 117(g_tTex2du4) Binding 5
-                              Decorate 129(g_tTex2df4a) DescriptorSet 0
+                              Decorate 117(g_tTex2du4) DescriptorSet 0
                               Decorate 129(g_tTex2df4a) Binding 12
-                              Decorate 142(g_tTex2di4a) DescriptorSet 0
+                              Decorate 129(g_tTex2df4a) DescriptorSet 0
                               Decorate 142(g_tTex2di4a) Binding 13
-                              Decorate 154(g_tTex2du4a) DescriptorSet 0
+                              Decorate 142(g_tTex2di4a) DescriptorSet 0
                               Decorate 154(g_tTex2du4a) Binding 14
-                              Decorate 166(g_tTex3df4) DescriptorSet 0
+                              Decorate 154(g_tTex2du4a) DescriptorSet 0
                               Decorate 166(g_tTex3df4) Binding 6
-                              Decorate 179(g_tTex3di4) DescriptorSet 0
+                              Decorate 166(g_tTex3df4) DescriptorSet 0
                               Decorate 179(g_tTex3di4) Binding 7
-                              Decorate 191(g_tTex3du4) DescriptorSet 0
+                              Decorate 179(g_tTex3di4) DescriptorSet 0
                               Decorate 191(g_tTex3du4) Binding 8
+                              Decorate 191(g_tTex3du4) DescriptorSet 0
                               Decorate 216(@entryPointOutput.Color) Location 0
                               Decorate 220(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 225(g_sSamp) DescriptorSet 0
                               Decorate 225(g_sSamp) Binding 0
+                              Decorate 225(g_sSamp) DescriptorSet 0
+                              Decorate 229($Global) Block
                               MemberDecorate 229($Global) 0 Offset 0
                               MemberDecorate 229($Global) 1 Offset 8
                               MemberDecorate 229($Global) 2 Offset 16
@@ -839,9 +840,8 @@
                               MemberDecorate 229($Global) 5 Offset 56
                               MemberDecorate 229($Global) 6 Offset 64
                               MemberDecorate 229($Global) 7 Offset 80
-                              Decorate 229($Global) Block
-                              Decorate 231 DescriptorSet 0
                               Decorate 231 Binding 0
+                              Decorate 231 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.getsampleposition.dx10.frag.out b/Test/baseResults/hlsl.getsampleposition.dx10.frag.out
index f08a91c..c2b9709 100644
--- a/Test/baseResults/hlsl.getsampleposition.dx10.frag.out
+++ b/Test/baseResults/hlsl.getsampleposition.dx10.frag.out
@@ -619,16 +619,16 @@
                               Name 188  "@entryPointOutput.Color"
                               Name 192  "@entryPointOutput.Depth"
                               Name 197  "g_sSamp"
-                              Decorate 23(g_tTex2dmsf4) DescriptorSet 0
                               Decorate 23(g_tTex2dmsf4) Binding 1
-                              Decorate 131(g_tTex2dmsf4a) DescriptorSet 0
+                              Decorate 23(g_tTex2dmsf4) DescriptorSet 0
                               Decorate 131(g_tTex2dmsf4a) Binding 2
+                              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
+                              Decorate 197(g_sSamp) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
diff --git a/Test/baseResults/hlsl.global-const-init.frag.out b/Test/baseResults/hlsl.global-const-init.frag.out
index 0510b3e..4b9d98e 100644
--- a/Test/baseResults/hlsl.global-const-init.frag.out
+++ b/Test/baseResults/hlsl.global-const-init.frag.out
@@ -119,10 +119,10 @@
                               Name 15  ""
                               Name 26  "a1"
                               Name 41  "@entryPointOutput"
-                              MemberDecorate 13(CB) 0 Offset 0
                               Decorate 13(CB) Block
-                              Decorate 15 DescriptorSet 0
+                              MemberDecorate 13(CB) 0 Offset 0
                               Decorate 15 Binding 0
+                              Decorate 15 DescriptorSet 0
                               Decorate 41(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.groupid.comp.out b/Test/baseResults/hlsl.groupid.comp.out
index 39c5fed..ba1eb13 100644
--- a/Test/baseResults/hlsl.groupid.comp.out
+++ b/Test/baseResults/hlsl.groupid.comp.out
@@ -99,8 +99,8 @@
                               Name 26  "vGroupId"
                               Name 29  "vGroupId"
                               Name 34  "param"
-                              Decorate 22(OutputTexture) DescriptorSet 0
                               Decorate 22(OutputTexture) Binding 0
+                              Decorate 22(OutputTexture) DescriptorSet 0
                               Decorate 29(vGroupId) BuiltIn WorkgroupId
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.gs-hs-mix.tesc.out b/Test/baseResults/hlsl.gs-hs-mix.tesc.out
index 5071a47..8dcbe4d 100644
--- a/Test/baseResults/hlsl.gs-hs-mix.tesc.out
+++ b/Test/baseResults/hlsl.gs-hs-mix.tesc.out
@@ -1057,32 +1057,32 @@
                               Name 204  "Q1"
                               Name 213  "Q2"
                               Name 222  "vertex"
+                              Decorate 42(UniformBlock0) Block
                               MemberDecorate 42(UniformBlock0) 0 RowMajor
-                              MemberDecorate 42(UniformBlock0) 0 Offset 0
                               MemberDecorate 42(UniformBlock0) 0 MatrixStride 16
+                              MemberDecorate 42(UniformBlock0) 0 Offset 0
                               MemberDecorate 42(UniformBlock0) 1 RowMajor
-                              MemberDecorate 42(UniformBlock0) 1 Offset 64
                               MemberDecorate 42(UniformBlock0) 1 MatrixStride 16
+                              MemberDecorate 42(UniformBlock0) 1 Offset 64
                               MemberDecorate 42(UniformBlock0) 2 RowMajor
-                              MemberDecorate 42(UniformBlock0) 2 Offset 128
                               MemberDecorate 42(UniformBlock0) 2 MatrixStride 16
+                              MemberDecorate 42(UniformBlock0) 2 Offset 128
                               MemberDecorate 42(UniformBlock0) 3 RowMajor
-                              MemberDecorate 42(UniformBlock0) 3 Offset 192
                               MemberDecorate 42(UniformBlock0) 3 MatrixStride 16
+                              MemberDecorate 42(UniformBlock0) 3 Offset 192
                               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 44 DescriptorSet 0
                               Decorate 97(patch.PositionWS) Location 0
                               Decorate 102(patch.NormalWS) Location 1
                               Decorate 120(id) BuiltIn InvocationId
                               Decorate 123(@entryPointOutput.PositionWS) Location 0
-                              Decorate 145(@patchConstantOutput.EdgeTessFactor) Patch
                               Decorate 145(@patchConstantOutput.EdgeTessFactor) BuiltIn TessLevelOuter
-                              Decorate 158(@patchConstantOutput.InsideTessFactor) Patch
+                              Decorate 145(@patchConstantOutput.EdgeTessFactor) Patch
                               Decorate 158(@patchConstantOutput.InsideTessFactor) BuiltIn TessLevelInner
+                              Decorate 158(@patchConstantOutput.InsideTessFactor) Patch
                               Decorate 162(@patchConstantOutput.NormalWS[0]) Patch
                               Decorate 162(@patchConstantOutput.NormalWS[0]) Location 1
                               Decorate 165(@patchConstantOutput.NormalWS[1]) Patch
diff --git a/Test/baseResults/hlsl.hlslOffset.vert.out b/Test/baseResults/hlsl.hlslOffset.vert.out
index 0f7b09b..d4b90db 100644
--- a/Test/baseResults/hlsl.hlslOffset.vert.out
+++ b/Test/baseResults/hlsl.hlslOffset.vert.out
@@ -50,6 +50,7 @@
                               MemberName 15(b) 10  "m96"
                               Name 17  ""
                               Decorate 14 ArrayStride 16
+                              Decorate 15(b) Block
                               MemberDecorate 15(b) 0 Offset 0
                               MemberDecorate 15(b) 1 Offset 4
                               MemberDecorate 15(b) 2 Offset 16
@@ -61,9 +62,8 @@
                               MemberDecorate 15(b) 8 Offset 76
                               MemberDecorate 15(b) 9 Offset 80
                               MemberDecorate 15(b) 10 Offset 96
-                              Decorate 15(b) Block
-                              Decorate 17 DescriptorSet 0
                               Decorate 17 Binding 0
+                              Decorate 17 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                9:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.hull.1.tesc.out b/Test/baseResults/hlsl.hull.1.tesc.out
index 4188942..6914456 100644
--- a/Test/baseResults/hlsl.hull.1.tesc.out
+++ b/Test/baseResults/hlsl.hull.1.tesc.out
@@ -364,8 +364,8 @@
                               Decorate 60(m_cpid) BuiltIn InvocationId
                               Decorate 63(@entryPointOutput.cpoint) Location 0
                               Decorate 81(pid) BuiltIn PrimitiveId
-                              Decorate 87(@patchConstantOutput.edges) Patch
                               Decorate 87(@patchConstantOutput.edges) BuiltIn TessLevelOuter
+                              Decorate 87(@patchConstantOutput.edges) Patch
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.hull.2.tesc.out b/Test/baseResults/hlsl.hull.2.tesc.out
index 0d08b68..1a11735 100644
--- a/Test/baseResults/hlsl.hull.2.tesc.out
+++ b/Test/baseResults/hlsl.hull.2.tesc.out
@@ -361,8 +361,8 @@
                               Decorate 63(InvocationId) BuiltIn InvocationId
                               Decorate 79(pid) BuiltIn PrimitiveId
                               Decorate 81(pos) BuiltIn Position
-                              Decorate 89(@patchConstantOutput.edges) Patch
                               Decorate 89(@patchConstantOutput.edges) BuiltIn TessLevelOuter
+                              Decorate 89(@patchConstantOutput.edges) Patch
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.hull.3.tesc.out b/Test/baseResults/hlsl.hull.3.tesc.out
index 808edd3..4e0bf67 100644
--- a/Test/baseResults/hlsl.hull.3.tesc.out
+++ b/Test/baseResults/hlsl.hull.3.tesc.out
@@ -362,8 +362,8 @@
                               Decorate 63(InvocationId) BuiltIn InvocationId
                               Decorate 79(pid) BuiltIn PrimitiveId
                               Decorate 81(pos) BuiltIn Position
-                              Decorate 89(@patchConstantOutput.edges) Patch
                               Decorate 89(@patchConstantOutput.edges) BuiltIn TessLevelOuter
+                              Decorate 89(@patchConstantOutput.edges) Patch
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.hull.4.tesc.out b/Test/baseResults/hlsl.hull.4.tesc.out
index bffc464..343844b 100644
--- a/Test/baseResults/hlsl.hull.4.tesc.out
+++ b/Test/baseResults/hlsl.hull.4.tesc.out
@@ -502,10 +502,10 @@
                               Decorate 61(I.m_Normal) Location 0
                               Decorate 80(cpid) BuiltIn InvocationId
                               Decorate 83(@entryPointOutput.m_Position) BuiltIn Position
-                              Decorate 107(@patchConstantOutput.fTessFactor) Patch
                               Decorate 107(@patchConstantOutput.fTessFactor) BuiltIn TessLevelOuter
-                              Decorate 120(@patchConstantOutput.fInsideTessFactor) Patch
+                              Decorate 107(@patchConstantOutput.fTessFactor) Patch
                               Decorate 120(@patchConstantOutput.fInsideTessFactor) BuiltIn TessLevelInner
+                              Decorate 120(@patchConstantOutput.fInsideTessFactor) Patch
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.hull.6.tesc.out b/Test/baseResults/hlsl.hull.6.tesc.out
index b673a8c..8522e94 100644
--- a/Test/baseResults/hlsl.hull.6.tesc.out
+++ b/Test/baseResults/hlsl.hull.6.tesc.out
@@ -503,10 +503,10 @@
                               Decorate 97(@entryPointOutput.Position) Location 0
                               Decorate 104(@entryPointOutput.Color) Location 1
                               Decorate 117(BlockID) BuiltIn PrimitiveId
-                              Decorate 119(Inside) Patch
                               Decorate 119(Inside) BuiltIn TessLevelInner
-                              Decorate 128(@patchConstantOutput.Edges) Patch
+                              Decorate 119(Inside) Patch
                               Decorate 128(@patchConstantOutput.Edges) BuiltIn TessLevelOuter
+                              Decorate 128(@patchConstantOutput.Edges) Patch
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.hull.ctrlpt-1.tesc.out b/Test/baseResults/hlsl.hull.ctrlpt-1.tesc.out
index 4e706c0..3892765 100644
--- a/Test/baseResults/hlsl.hull.ctrlpt-1.tesc.out
+++ b/Test/baseResults/hlsl.hull.ctrlpt-1.tesc.out
@@ -522,10 +522,10 @@
                               Decorate 42(i.val) Location 0
                               Decorate 57(cpid) BuiltIn InvocationId
                               Decorate 60(@entryPointOutput.val) Location 0
-                              Decorate 105(@patchConstantOutput.tfactor) Patch
                               Decorate 105(@patchConstantOutput.tfactor) BuiltIn TessLevelOuter
-                              Decorate 119(@patchConstantOutput.flInFactor) Patch
+                              Decorate 105(@patchConstantOutput.tfactor) Patch
                               Decorate 119(@patchConstantOutput.flInFactor) BuiltIn TessLevelInner
+                              Decorate 119(@patchConstantOutput.flInFactor) Patch
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.hull.ctrlpt-2.tesc.out b/Test/baseResults/hlsl.hull.ctrlpt-2.tesc.out
index fd7cf0b..a189446 100644
--- a/Test/baseResults/hlsl.hull.ctrlpt-2.tesc.out
+++ b/Test/baseResults/hlsl.hull.ctrlpt-2.tesc.out
@@ -541,10 +541,10 @@
                               Decorate 43(i.val) Location 0
                               Decorate 58(cpid) BuiltIn InvocationId
                               Decorate 61(@entryPointOutput.val) Location 0
-                              Decorate 107(@patchConstantOutput.tfactor) Patch
                               Decorate 107(@patchConstantOutput.tfactor) BuiltIn TessLevelOuter
-                              Decorate 121(@patchConstantOutput.flInFactor) Patch
+                              Decorate 107(@patchConstantOutput.tfactor) Patch
                               Decorate 121(@patchConstantOutput.flInFactor) BuiltIn TessLevelInner
+                              Decorate 121(@patchConstantOutput.flInFactor) Patch
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.imagefetch-subvec4.comp.out b/Test/baseResults/hlsl.imagefetch-subvec4.comp.out
index 6573820..83f04cf 100644
--- a/Test/baseResults/hlsl.imagefetch-subvec4.comp.out
+++ b/Test/baseResults/hlsl.imagefetch-subvec4.comp.out
@@ -444,36 +444,36 @@
                               Name 179  "tid"
                               Name 181  "tid"
                               Name 183  "param"
-                              Decorate 19(i1D) DescriptorSet 0
                               Decorate 19(i1D) Binding 0
-                              Decorate 34(i2D) DescriptorSet 0
+                              Decorate 19(i1D) DescriptorSet 0
                               Decorate 34(i2D) Binding 1
-                              Decorate 45(i3D) DescriptorSet 0
+                              Decorate 34(i2D) DescriptorSet 0
                               Decorate 45(i3D) Binding 2
-                              Decorate 54(i1DArray) DescriptorSet 0
+                              Decorate 45(i3D) DescriptorSet 0
                               Decorate 54(i1DArray) Binding 3
-                              Decorate 64(i2DArray) DescriptorSet 0
+                              Decorate 54(i1DArray) DescriptorSet 0
                               Decorate 64(i2DArray) Binding 4
-                              Decorate 73(i2DMS) DescriptorSet 0
+                              Decorate 64(i2DArray) DescriptorSet 0
                               Decorate 73(i2DMS) Binding 5
-                              Decorate 86(i2DMSArray) DescriptorSet 0
+                              Decorate 73(i2DMS) DescriptorSet 0
                               Decorate 86(i2DMSArray) Binding 6
-                              Decorate 100(ii1D) DescriptorSet 0
+                              Decorate 86(i2DMSArray) DescriptorSet 0
                               Decorate 100(ii1D) Binding 7
-                              Decorate 111(ii2D) DescriptorSet 0
+                              Decorate 100(ii1D) DescriptorSet 0
                               Decorate 111(ii2D) Binding 8
-                              Decorate 121(ii3D) DescriptorSet 0
+                              Decorate 111(ii2D) DescriptorSet 0
                               Decorate 121(ii3D) Binding 9
-                              Decorate 130(ii1DArray) DescriptorSet 0
+                              Decorate 121(ii3D) DescriptorSet 0
                               Decorate 130(ii1DArray) Binding 10
-                              Decorate 140(ii2DArray) DescriptorSet 0
+                              Decorate 130(ii1DArray) DescriptorSet 0
                               Decorate 140(ii2DArray) Binding 11
-                              Decorate 149(ii2DMS) DescriptorSet 0
+                              Decorate 140(ii2DArray) DescriptorSet 0
                               Decorate 149(ii2DMS) Binding 12
-                              Decorate 160(ii2DMSArray) DescriptorSet 0
+                              Decorate 149(ii2DMS) DescriptorSet 0
                               Decorate 160(ii2DMSArray) Binding 13
-                              Decorate 175(OUT) DescriptorSet 0
+                              Decorate 160(ii2DMSArray) DescriptorSet 0
                               Decorate 175(OUT) Binding 0
+                              Decorate 175(OUT) DescriptorSet 0
                               Decorate 181(tid) BuiltIn GlobalInvocationId
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.imageload-subvec4.comp.out b/Test/baseResults/hlsl.imageload-subvec4.comp.out
index d54075f..e171417 100644
--- a/Test/baseResults/hlsl.imageload-subvec4.comp.out
+++ b/Test/baseResults/hlsl.imageload-subvec4.comp.out
@@ -296,28 +296,28 @@
                               Name 131  "tid"
                               Name 133  "tid"
                               Name 135  "param"
-                              Decorate 19(i1D) DescriptorSet 0
                               Decorate 19(i1D) Binding 0
-                              Decorate 32(i2D) DescriptorSet 0
+                              Decorate 19(i1D) DescriptorSet 0
                               Decorate 32(i2D) Binding 1
-                              Decorate 43(i3D) DescriptorSet 0
+                              Decorate 32(i2D) DescriptorSet 0
                               Decorate 43(i3D) Binding 2
-                              Decorate 52(i1DArray) DescriptorSet 0
+                              Decorate 43(i3D) DescriptorSet 0
                               Decorate 52(i1DArray) Binding 3
-                              Decorate 62(i2DArray) DescriptorSet 0
+                              Decorate 52(i1DArray) DescriptorSet 0
                               Decorate 62(i2DArray) Binding 4
-                              Decorate 75(ii1D) DescriptorSet 0
+                              Decorate 62(i2DArray) DescriptorSet 0
                               Decorate 75(ii1D) Binding 5
-                              Decorate 86(ii2D) DescriptorSet 0
+                              Decorate 75(ii1D) DescriptorSet 0
                               Decorate 86(ii2D) Binding 6
-                              Decorate 96(ii3D) DescriptorSet 0
+                              Decorate 86(ii2D) DescriptorSet 0
                               Decorate 96(ii3D) Binding 7
-                              Decorate 105(ii1DArray) DescriptorSet 0
+                              Decorate 96(ii3D) DescriptorSet 0
                               Decorate 105(ii1DArray) Binding 8
-                              Decorate 115(ii2DArray) DescriptorSet 0
+                              Decorate 105(ii1DArray) DescriptorSet 0
                               Decorate 115(ii2DArray) Binding 9
-                              Decorate 127(OUT) DescriptorSet 0
+                              Decorate 115(ii2DArray) DescriptorSet 0
                               Decorate 127(OUT) Binding 10
+                              Decorate 127(OUT) DescriptorSet 0
                               Decorate 133(tid) BuiltIn GlobalInvocationId
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.implicitBool.frag.out b/Test/baseResults/hlsl.implicitBool.frag.out
index 381e835..03d0487 100644
--- a/Test/baseResults/hlsl.implicitBool.frag.out
+++ b/Test/baseResults/hlsl.implicitBool.frag.out
@@ -354,13 +354,13 @@
                               Name 100  "i"
                               Name 120  "g"
                               Name 137  "@entryPointOutput"
+                              Decorate 16($Global) Block
                               MemberDecorate 16($Global) 0 Offset 0
                               MemberDecorate 16($Global) 1 Offset 4
                               MemberDecorate 16($Global) 2 Offset 8
                               MemberDecorate 16($Global) 3 Offset 12
-                              Decorate 16($Global) Block
-                              Decorate 18 DescriptorSet 0
                               Decorate 18 Binding 0
+                              Decorate 18 DescriptorSet 0
                               Decorate 137(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.include.vert.out b/Test/baseResults/hlsl.include.vert.out
index 95a5b90..d2e147b 100644
--- a/Test/baseResults/hlsl.include.vert.out
+++ b/Test/baseResults/hlsl.include.vert.out
@@ -19,15 +19,15 @@
                               MemberName 11($Global) 5  "i5"
                               Name 13  ""
                               Name 42  "@entryPointOutput"
+                              Decorate 11($Global) Block
                               MemberDecorate 11($Global) 0 Offset 0
                               MemberDecorate 11($Global) 1 Offset 16
                               MemberDecorate 11($Global) 2 Offset 32
                               MemberDecorate 11($Global) 3 Offset 48
                               MemberDecorate 11($Global) 4 Offset 64
                               MemberDecorate 11($Global) 5 Offset 80
-                              Decorate 11($Global) Block
-                              Decorate 13 DescriptorSet 0
                               Decorate 13 Binding 0
+                              Decorate 13 DescriptorSet 0
                               Decorate 42(@entryPointOutput) BuiltIn Position
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.inf.vert.out b/Test/baseResults/hlsl.inf.vert.out
index 50f6d56..ade551c 100644
--- a/Test/baseResults/hlsl.inf.vert.out
+++ b/Test/baseResults/hlsl.inf.vert.out
@@ -29,21 +29,21 @@
 0:6                +1.#INF
 0:6            Constant:
 0:6              +1.#INF
-0:10      Branch: Return with expression
-0:10        Construct vec4 ( temp 4-component vector of float)
-0:10          add ( temp float)
-0:10            add ( temp float)
-0:10              add ( temp float)
-0:10                add ( temp float)
-0:10                  add ( temp float)
-0:10                    'f1' ( temp float)
-0:10                    'f2' ( temp float)
-0:10                  'f3' ( temp float)
-0:10                'f4' ( temp float)
-0:10              Constant:
-0:10                -1.#INF
-0:10            Constant:
-0:10              1.#IND
+0:15      Branch: Return with expression
+0:15        Construct vec4 ( temp 4-component vector of float)
+0:15          add ( temp float)
+0:15            add ( temp float)
+0:15              add ( temp float)
+0:15                add ( temp float)
+0:15                  add ( temp float)
+0:15                    'f1' ( temp float)
+0:15                    'f2' ( temp float)
+0:15                  'f3' ( temp float)
+0:15                'f4' ( temp float)
+0:15              Constant:
+0:15                -1.#INF
+0:15            Constant:
+0:15              1.#IND
 0:2  Function Definition: main( ( temp void)
 0:2    Function Parameters: 
 0:?     Sequence
@@ -87,21 +87,21 @@
 0:6                +1.#INF
 0:6            Constant:
 0:6              +1.#INF
-0:10      Branch: Return with expression
-0:10        Construct vec4 ( temp 4-component vector of float)
-0:10          add ( temp float)
-0:10            add ( temp float)
-0:10              add ( temp float)
-0:10                add ( temp float)
-0:10                  add ( temp float)
-0:10                    'f1' ( temp float)
-0:10                    'f2' ( temp float)
-0:10                  'f3' ( temp float)
-0:10                'f4' ( temp float)
-0:10              Constant:
-0:10                -1.#INF
-0:10            Constant:
-0:10              1.#IND
+0:15      Branch: Return with expression
+0:15        Construct vec4 ( temp 4-component vector of float)
+0:15          add ( temp float)
+0:15            add ( temp float)
+0:15              add ( temp float)
+0:15                add ( temp float)
+0:15                  add ( temp float)
+0:15                    'f1' ( temp float)
+0:15                    'f2' ( temp float)
+0:15                  'f3' ( temp float)
+0:15                'f4' ( temp float)
+0:15              Constant:
+0:15                -1.#INF
+0:15            Constant:
+0:15              1.#IND
 0:2  Function Definition: main( ( temp void)
 0:2    Function Parameters: 
 0:?     Sequence
@@ -136,7 +136,7 @@
               11:             TypePointer Function 6(float)
               13:    6(float) Constant 4286578688
               15:    6(float) Constant 2139095040
-              29:    6(float) Constant 4290772992
+              29:    6(float) Constant 2143289344
               34:             TypePointer Output 7(fvec4)
 35(@entryPointOutput):     34(ptr) Variable Output
          4(main):           2 Function None 3
diff --git a/Test/baseResults/hlsl.init.frag.out b/Test/baseResults/hlsl.init.frag.out
index 35a89f0..89b1a74 100644
--- a/Test/baseResults/hlsl.init.frag.out
+++ b/Test/baseResults/hlsl.init.frag.out
@@ -392,12 +392,12 @@
                               Name 109  ""
                               Decorate 98(input) Location 0
                               Decorate 101(@entryPointOutput) Location 0
+                              Decorate 107(Constants) Block
                               MemberDecorate 107(Constants) 0 Offset 0
                               MemberDecorate 107(Constants) 1 Offset 4
                               MemberDecorate 107(Constants) 2 Offset 8
-                              Decorate 107(Constants) Block
-                              Decorate 109 DescriptorSet 0
                               Decorate 109 Binding 0
+                              Decorate 109 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.inoutquals.frag.out b/Test/baseResults/hlsl.inoutquals.frag.out
index 931208b..acea80b 100644
--- a/Test/baseResults/hlsl.inoutquals.frag.out
+++ b/Test/baseResults/hlsl.inoutquals.frag.out
@@ -253,8 +253,8 @@
                               Name 78  "@entryPointOutput.Color"
                               Name 82  "@entryPointOutput.Depth"
                               Name 88  "sampleMask"
-                              Decorate 68(inpos) NoPerspective
                               Decorate 68(inpos) BuiltIn FragCoord
+                              Decorate 68(inpos) NoPerspective
                               Decorate 78(@entryPointOutput.Color) Location 0
                               Decorate 82(@entryPointOutput.Depth) BuiltIn FragDepth
                               Decorate 88(sampleMask) BuiltIn SampleMask
diff --git a/Test/baseResults/hlsl.intrinsics.d3dcolortoubyte4.frag.out b/Test/baseResults/hlsl.intrinsics.d3dcolortoubyte4.frag.out
index 75a66d6..69416c3 100644
--- a/Test/baseResults/hlsl.intrinsics.d3dcolortoubyte4.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.d3dcolortoubyte4.frag.out
@@ -89,10 +89,10 @@
                               MemberName 14($Global) 0  "col4"
                               Name 16  ""
                               Name 27  "@entryPointOutput"
-                              MemberDecorate 14($Global) 0 Offset 0
                               Decorate 14($Global) Block
-                              Decorate 16 DescriptorSet 0
+                              MemberDecorate 14($Global) 0 Offset 0
                               Decorate 16 Binding 0
+                              Decorate 16 DescriptorSet 0
                               Decorate 27(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.intrinsics.promote.down.frag.out b/Test/baseResults/hlsl.intrinsics.promote.down.frag.out
index c68fc96..592bb88 100644
--- a/Test/baseResults/hlsl.intrinsics.promote.down.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.promote.down.frag.out
@@ -131,6 +131,7 @@
                               Name 29  "r01"
                               Name 37  "ps_output"
                               Name 47  "@entryPointOutput.color"
+                              Decorate 19($Global) Block
                               MemberDecorate 19($Global) 0 Offset 0
                               MemberDecorate 19($Global) 1 Offset 4
                               MemberDecorate 19($Global) 2 Offset 8
@@ -139,9 +140,8 @@
                               MemberDecorate 19($Global) 5 Offset 24
                               MemberDecorate 19($Global) 6 Offset 32
                               MemberDecorate 19($Global) 7 Offset 40
-                              Decorate 19($Global) Block
-                              Decorate 21 DescriptorSet 0
                               Decorate 21 Binding 0
+                              Decorate 21 DescriptorSet 0
                               Decorate 47(@entryPointOutput.color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.intrinsics.promote.frag.out b/Test/baseResults/hlsl.intrinsics.promote.frag.out
index 99176f1..e0a1c7d 100644
--- a/Test/baseResults/hlsl.intrinsics.promote.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.promote.frag.out
@@ -952,6 +952,7 @@
                               Name 301  "sizeQueryTemp"
                               Name 310  "ps_output"
                               Name 319  "@entryPointOutput.color"
+                              Decorate 19($Global) Block
                               MemberDecorate 19($Global) 0 Offset 0
                               MemberDecorate 19($Global) 1 Offset 4
                               MemberDecorate 19($Global) 2 Offset 8
@@ -962,13 +963,12 @@
                               MemberDecorate 19($Global) 7 Offset 40
                               MemberDecorate 19($Global) 8 Offset 48
                               MemberDecorate 19($Global) 9 Offset 52
-                              Decorate 19($Global) Block
-                              Decorate 21 DescriptorSet 0
                               Decorate 21 Binding 0
-                              Decorate 258(g_tTexbfs) DescriptorSet 0
+                              Decorate 21 DescriptorSet 0
                               Decorate 258(g_tTexbfs) Binding 1
-                              Decorate 277(g_tTex1df4) DescriptorSet 0
+                              Decorate 258(g_tTexbfs) DescriptorSet 0
                               Decorate 277(g_tTex1df4) Binding 2
+                              Decorate 277(g_tTex1df4) DescriptorSet 0
                               Decorate 319(@entryPointOutput.color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out b/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out
index e0fbfe6..48d4cc8 100644
--- a/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out
+++ b/Test/baseResults/hlsl.intrinsics.promote.outputs.frag.out
@@ -244,6 +244,7 @@
                               Name 66  "ps_output"
                               Name 74  "@entryPointOutput.color"
                               Name 79  "g_tTexbfs"
+                              Decorate 17($Global) Block
                               MemberDecorate 17($Global) 0 Offset 0
                               MemberDecorate 17($Global) 1 Offset 4
                               MemberDecorate 17($Global) 2 Offset 8
@@ -254,14 +255,13 @@
                               MemberDecorate 17($Global) 7 Offset 40
                               MemberDecorate 17($Global) 8 Offset 48
                               MemberDecorate 17($Global) 9 Offset 52
-                              Decorate 17($Global) Block
-                              Decorate 19 DescriptorSet 0
                               Decorate 19 Binding 0
-                              Decorate 31(g_tTex1df4) DescriptorSet 0
+                              Decorate 19 DescriptorSet 0
                               Decorate 31(g_tTex1df4) Binding 1
+                              Decorate 31(g_tTex1df4) DescriptorSet 0
                               Decorate 74(@entryPointOutput.color) Location 0
-                              Decorate 79(g_tTexbfs) DescriptorSet 0
                               Decorate 79(g_tTexbfs) Binding 0
+                              Decorate 79(g_tTexbfs) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.isfinite.frag.out b/Test/baseResults/hlsl.isfinite.frag.out
index e46e771..9f562e3 100644
--- a/Test/baseResults/hlsl.isfinite.frag.out
+++ b/Test/baseResults/hlsl.isfinite.frag.out
@@ -195,12 +195,12 @@
                               Name 51  "@finitetmp"
                               Name 65  "@finitetmp"
                               Name 83  "@entryPointOutput"
+                              Decorate 35($Global) Block
                               MemberDecorate 35($Global) 0 Offset 0
                               MemberDecorate 35($Global) 1 Offset 8
                               MemberDecorate 35($Global) 2 Offset 16
-                              Decorate 35($Global) Block
-                              Decorate 37 DescriptorSet 0
                               Decorate 37 Binding 0
+                              Decorate 37 DescriptorSet 0
                               Decorate 83(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.layout.frag.out b/Test/baseResults/hlsl.layout.frag.out
index b2306d0..7979015 100644
--- a/Test/baseResults/hlsl.layout.frag.out
+++ b/Test/baseResults/hlsl.layout.frag.out
@@ -111,19 +111,22 @@
                               MemberName 33(tbufName2) 0  "v1PostLayout"
                               Name 35  ""
                               Name 43  "specConst"
+                              Decorate 17(tbufName) BufferBlock
                               MemberDecorate 17(tbufName) 0 NonWritable
                               MemberDecorate 17(tbufName) 0 Offset 16
-                              Decorate 17(tbufName) BufferBlock
-                              Decorate 19 DescriptorSet 3
+                              Decorate 19 NonWritable
                               Decorate 19 Binding 5
+                              Decorate 19 DescriptorSet 3
+                              Decorate 26(tbufName2) BufferBlock
                               MemberDecorate 26(tbufName2) 0 NonWritable
                               MemberDecorate 26(tbufName2) 0 Offset 0
-                              Decorate 26(tbufName2) BufferBlock
+                              Decorate 28 NonWritable
+                              Decorate 33(tbufName2) BufferBlock
                               MemberDecorate 33(tbufName2) 0 NonWritable
                               MemberDecorate 33(tbufName2) 0 Offset 16
-                              Decorate 33(tbufName2) BufferBlock
-                              Decorate 35 DescriptorSet 4
+                              Decorate 35 NonWritable
                               Decorate 35 Binding 7
+                              Decorate 35 DescriptorSet 4
                               Decorate 43(specConst) SpecId 17
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.layoutOverride.vert.out b/Test/baseResults/hlsl.layoutOverride.vert.out
index 80c3e45..a0d8ad8 100644
--- a/Test/baseResults/hlsl.layoutOverride.vert.out
+++ b/Test/baseResults/hlsl.layoutOverride.vert.out
@@ -65,10 +65,10 @@
                               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 13(tex) DescriptorSet 2
                               Decorate 17(samp) Binding 0
+                              Decorate 17(samp) DescriptorSet 0
                               Decorate 30(@entryPointOutput) BuiltIn Position
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.load.2dms.dx10.frag.out b/Test/baseResults/hlsl.load.2dms.dx10.frag.out
index 09086cb..f8ede04 100644
--- a/Test/baseResults/hlsl.load.2dms.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.2dms.dx10.frag.out
@@ -370,29 +370,29 @@
                               Name 119  "@entryPointOutput.Color"
                               Name 123  "@entryPointOutput.Depth"
                               Name 128  "g_sSamp"
-                              Decorate 23(g_tTex2dmsf4) DescriptorSet 0
                               Decorate 23(g_tTex2dmsf4) Binding 1
+                              Decorate 23(g_tTex2dmsf4) DescriptorSet 0
+                              Decorate 27($Global) Block
                               MemberDecorate 27($Global) 0 Offset 0
                               MemberDecorate 27($Global) 1 Offset 8
                               MemberDecorate 27($Global) 2 Offset 16
                               MemberDecorate 27($Global) 3 Offset 32
-                              Decorate 27($Global) Block
-                              Decorate 29 DescriptorSet 0
                               Decorate 29 Binding 7
-                              Decorate 37(g_tTex2dmsi4) DescriptorSet 0
+                              Decorate 29 DescriptorSet 0
                               Decorate 37(g_tTex2dmsi4) Binding 2
-                              Decorate 45(g_tTex2dmsu4) DescriptorSet 0
+                              Decorate 37(g_tTex2dmsi4) DescriptorSet 0
                               Decorate 45(g_tTex2dmsu4) Binding 3
-                              Decorate 68(g_tTex2dmsf4a) DescriptorSet 0
+                              Decorate 45(g_tTex2dmsu4) DescriptorSet 0
                               Decorate 68(g_tTex2dmsf4a) Binding 4
-                              Decorate 77(g_tTex2dmsi4a) DescriptorSet 0
+                              Decorate 68(g_tTex2dmsf4a) DescriptorSet 0
                               Decorate 77(g_tTex2dmsi4a) Binding 5
-                              Decorate 84(g_tTex2dmsu4a) DescriptorSet 0
+                              Decorate 77(g_tTex2dmsi4a) DescriptorSet 0
                               Decorate 84(g_tTex2dmsu4a) Binding 6
+                              Decorate 84(g_tTex2dmsu4a) DescriptorSet 0
                               Decorate 119(@entryPointOutput.Color) Location 0
                               Decorate 123(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 128(g_sSamp) DescriptorSet 0
                               Decorate 128(g_sSamp) Binding 0
+                              Decorate 128(g_sSamp) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
diff --git a/Test/baseResults/hlsl.load.array.dx10.frag.out b/Test/baseResults/hlsl.load.array.dx10.frag.out
index 96792a9..4bc42a6 100644
--- a/Test/baseResults/hlsl.load.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.array.dx10.frag.out
@@ -441,8 +441,9 @@
                               Name 152  "g_tTexcdf4a"
                               Name 155  "g_tTexcdi4a"
                               Name 158  "g_tTexcdu4a"
-                              Decorate 14(g_tTex1df4a) DescriptorSet 0
                               Decorate 14(g_tTex1df4a) Binding 1
+                              Decorate 14(g_tTex1df4a) DescriptorSet 0
+                              Decorate 20($Global) Block
                               MemberDecorate 20($Global) 0 Offset 0
                               MemberDecorate 20($Global) 1 Offset 8
                               MemberDecorate 20($Global) 2 Offset 16
@@ -451,53 +452,52 @@
                               MemberDecorate 20($Global) 5 Offset 56
                               MemberDecorate 20($Global) 6 Offset 64
                               MemberDecorate 20($Global) 7 Offset 80
-                              Decorate 20($Global) Block
-                              Decorate 22 DescriptorSet 0
                               Decorate 22 Binding 7
-                              Decorate 36(g_tTex1di4a) DescriptorSet 0
+                              Decorate 22 DescriptorSet 0
                               Decorate 36(g_tTex1di4a) Binding 2
-                              Decorate 46(g_tTex1du4a) DescriptorSet 0
+                              Decorate 36(g_tTex1di4a) DescriptorSet 0
                               Decorate 46(g_tTex1du4a) Binding 3
-                              Decorate 57(g_tTex2df4a) DescriptorSet 0
+                              Decorate 46(g_tTex1du4a) DescriptorSet 0
                               Decorate 57(g_tTex2df4a) Binding 4
-                              Decorate 70(g_tTex2di4a) DescriptorSet 0
+                              Decorate 57(g_tTex2df4a) DescriptorSet 0
                               Decorate 70(g_tTex2di4a) Binding 5
-                              Decorate 80(g_tTex2du4a) DescriptorSet 0
+                              Decorate 70(g_tTex2di4a) DescriptorSet 0
                               Decorate 80(g_tTex2du4a) Binding 6
+                              Decorate 80(g_tTex2du4a) DescriptorSet 0
                               Decorate 104(@entryPointOutput.Color) Location 0
                               Decorate 108(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 113(g_sSamp) DescriptorSet 0
                               Decorate 113(g_sSamp) Binding 0
-                              Decorate 116(g_tTex1df4) DescriptorSet 0
+                              Decorate 113(g_sSamp) DescriptorSet 0
                               Decorate 116(g_tTex1df4) Binding 0
-                              Decorate 119(g_tTex1di4) DescriptorSet 0
+                              Decorate 116(g_tTex1df4) DescriptorSet 0
                               Decorate 119(g_tTex1di4) Binding 0
-                              Decorate 122(g_tTex1du4) DescriptorSet 0
+                              Decorate 119(g_tTex1di4) DescriptorSet 0
                               Decorate 122(g_tTex1du4) Binding 0
-                              Decorate 125(g_tTex2df4) DescriptorSet 0
+                              Decorate 122(g_tTex1du4) DescriptorSet 0
                               Decorate 125(g_tTex2df4) Binding 0
-                              Decorate 128(g_tTex2di4) DescriptorSet 0
+                              Decorate 125(g_tTex2df4) DescriptorSet 0
                               Decorate 128(g_tTex2di4) Binding 0
-                              Decorate 131(g_tTex2du4) DescriptorSet 0
+                              Decorate 128(g_tTex2di4) DescriptorSet 0
                               Decorate 131(g_tTex2du4) Binding 0
-                              Decorate 134(g_tTex3df4) DescriptorSet 0
+                              Decorate 131(g_tTex2du4) DescriptorSet 0
                               Decorate 134(g_tTex3df4) Binding 0
-                              Decorate 137(g_tTex3di4) DescriptorSet 0
+                              Decorate 134(g_tTex3df4) DescriptorSet 0
                               Decorate 137(g_tTex3di4) Binding 0
-                              Decorate 140(g_tTex3du4) DescriptorSet 0
+                              Decorate 137(g_tTex3di4) DescriptorSet 0
                               Decorate 140(g_tTex3du4) Binding 0
-                              Decorate 143(g_tTexcdf4) DescriptorSet 0
+                              Decorate 140(g_tTex3du4) DescriptorSet 0
                               Decorate 143(g_tTexcdf4) Binding 0
-                              Decorate 146(g_tTexcdi4) DescriptorSet 0
+                              Decorate 143(g_tTexcdf4) DescriptorSet 0
                               Decorate 146(g_tTexcdi4) Binding 0
-                              Decorate 149(g_tTexcdu4) DescriptorSet 0
+                              Decorate 146(g_tTexcdi4) DescriptorSet 0
                               Decorate 149(g_tTexcdu4) Binding 0
-                              Decorate 152(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 149(g_tTexcdu4) DescriptorSet 0
                               Decorate 152(g_tTexcdf4a) Binding 0
-                              Decorate 155(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 152(g_tTexcdf4a) DescriptorSet 0
                               Decorate 155(g_tTexcdi4a) Binding 0
-                              Decorate 158(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 155(g_tTexcdi4a) DescriptorSet 0
                               Decorate 158(g_tTexcdu4a) Binding 0
+                              Decorate 158(g_tTexcdu4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.load.basic.dx10.frag.out b/Test/baseResults/hlsl.load.basic.dx10.frag.out
index b9730f3..d1be427 100644
--- a/Test/baseResults/hlsl.load.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.basic.dx10.frag.out
@@ -543,8 +543,9 @@
                               Name 172  "g_tTexcdf4a"
                               Name 175  "g_tTexcdi4a"
                               Name 178  "g_tTexcdu4a"
-                              Decorate 14(g_tTex1df4) DescriptorSet 0
                               Decorate 14(g_tTex1df4) Binding 0
+                              Decorate 14(g_tTex1df4) DescriptorSet 0
+                              Decorate 20($Global) Block
                               MemberDecorate 20($Global) 0 Offset 0
                               MemberDecorate 20($Global) 1 Offset 8
                               MemberDecorate 20($Global) 2 Offset 16
@@ -553,53 +554,52 @@
                               MemberDecorate 20($Global) 5 Offset 56
                               MemberDecorate 20($Global) 6 Offset 64
                               MemberDecorate 20($Global) 7 Offset 80
-                              Decorate 20($Global) Block
-                              Decorate 22 DescriptorSet 0
                               Decorate 22 Binding 9
-                              Decorate 35(g_tTex1di4) DescriptorSet 0
+                              Decorate 22 DescriptorSet 0
                               Decorate 35(g_tTex1di4) Binding 1
-                              Decorate 44(g_tTex1du4) DescriptorSet 0
+                              Decorate 35(g_tTex1di4) DescriptorSet 0
                               Decorate 44(g_tTex1du4) Binding 2
-                              Decorate 54(g_tTex2df4) DescriptorSet 0
+                              Decorate 44(g_tTex1du4) DescriptorSet 0
                               Decorate 54(g_tTex2df4) Binding 3
-                              Decorate 67(g_tTex2di4) DescriptorSet 0
+                              Decorate 54(g_tTex2df4) DescriptorSet 0
                               Decorate 67(g_tTex2di4) Binding 4
-                              Decorate 77(g_tTex2du4) DescriptorSet 0
+                              Decorate 67(g_tTex2di4) DescriptorSet 0
                               Decorate 77(g_tTex2du4) Binding 5
-                              Decorate 87(g_tTex3df4) DescriptorSet 0
+                              Decorate 77(g_tTex2du4) DescriptorSet 0
                               Decorate 87(g_tTex3df4) Binding 6
-                              Decorate 100(g_tTex3di4) DescriptorSet 0
+                              Decorate 87(g_tTex3df4) DescriptorSet 0
                               Decorate 100(g_tTex3di4) Binding 7
-                              Decorate 110(g_tTex3du4) DescriptorSet 0
+                              Decorate 100(g_tTex3di4) DescriptorSet 0
                               Decorate 110(g_tTex3du4) Binding 8
+                              Decorate 110(g_tTex3du4) DescriptorSet 0
                               Decorate 133(@entryPointOutput.Color) Location 0
                               Decorate 137(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 142(g_sSamp) DescriptorSet 0
                               Decorate 142(g_sSamp) Binding 0
-                              Decorate 145(g_tTexcdf4) DescriptorSet 0
+                              Decorate 142(g_sSamp) DescriptorSet 0
                               Decorate 145(g_tTexcdf4) Binding 0
-                              Decorate 148(g_tTexcdi4) DescriptorSet 0
+                              Decorate 145(g_tTexcdf4) DescriptorSet 0
                               Decorate 148(g_tTexcdi4) Binding 0
-                              Decorate 151(g_tTexcdu4) DescriptorSet 0
+                              Decorate 148(g_tTexcdi4) DescriptorSet 0
                               Decorate 151(g_tTexcdu4) Binding 0
-                              Decorate 154(g_tTex1df4a) DescriptorSet 0
+                              Decorate 151(g_tTexcdu4) DescriptorSet 0
                               Decorate 154(g_tTex1df4a) Binding 0
-                              Decorate 157(g_tTex1di4a) DescriptorSet 0
+                              Decorate 154(g_tTex1df4a) DescriptorSet 0
                               Decorate 157(g_tTex1di4a) Binding 0
-                              Decorate 160(g_tTex1du4a) DescriptorSet 0
+                              Decorate 157(g_tTex1di4a) DescriptorSet 0
                               Decorate 160(g_tTex1du4a) Binding 0
-                              Decorate 163(g_tTex2df4a) DescriptorSet 0
+                              Decorate 160(g_tTex1du4a) DescriptorSet 0
                               Decorate 163(g_tTex2df4a) Binding 0
-                              Decorate 166(g_tTex2di4a) DescriptorSet 0
+                              Decorate 163(g_tTex2df4a) DescriptorSet 0
                               Decorate 166(g_tTex2di4a) Binding 0
-                              Decorate 169(g_tTex2du4a) DescriptorSet 0
+                              Decorate 166(g_tTex2di4a) DescriptorSet 0
                               Decorate 169(g_tTex2du4a) Binding 0
-                              Decorate 172(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 169(g_tTex2du4a) DescriptorSet 0
                               Decorate 172(g_tTexcdf4a) Binding 0
-                              Decorate 175(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 172(g_tTexcdf4a) DescriptorSet 0
                               Decorate 175(g_tTexcdi4a) Binding 0
-                              Decorate 178(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 175(g_tTexcdi4a) DescriptorSet 0
                               Decorate 178(g_tTexcdu4a) Binding 0
+                              Decorate 178(g_tTexcdu4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.load.basic.dx10.vert.out b/Test/baseResults/hlsl.load.basic.dx10.vert.out
index c387d5f..1dc4464 100644
--- a/Test/baseResults/hlsl.load.basic.dx10.vert.out
+++ b/Test/baseResults/hlsl.load.basic.dx10.vert.out
@@ -500,8 +500,9 @@
                               Name 164  "g_tTexcdf4a"
                               Name 167  "g_tTexcdi4a"
                               Name 170  "g_tTexcdu4a"
-                              Decorate 14(g_tTex1df4) DescriptorSet 0
                               Decorate 14(g_tTex1df4) Binding 0
+                              Decorate 14(g_tTex1df4) DescriptorSet 0
+                              Decorate 20($Global) Block
                               MemberDecorate 20($Global) 0 Offset 0
                               MemberDecorate 20($Global) 1 Offset 8
                               MemberDecorate 20($Global) 2 Offset 16
@@ -510,52 +511,51 @@
                               MemberDecorate 20($Global) 5 Offset 56
                               MemberDecorate 20($Global) 6 Offset 64
                               MemberDecorate 20($Global) 7 Offset 80
-                              Decorate 20($Global) Block
-                              Decorate 22 DescriptorSet 0
                               Decorate 22 Binding 9
-                              Decorate 35(g_tTex1di4) DescriptorSet 0
+                              Decorate 22 DescriptorSet 0
                               Decorate 35(g_tTex1di4) Binding 1
-                              Decorate 44(g_tTex1du4) DescriptorSet 0
+                              Decorate 35(g_tTex1di4) DescriptorSet 0
                               Decorate 44(g_tTex1du4) Binding 2
-                              Decorate 54(g_tTex2df4) DescriptorSet 0
+                              Decorate 44(g_tTex1du4) DescriptorSet 0
                               Decorate 54(g_tTex2df4) Binding 3
-                              Decorate 67(g_tTex2di4) DescriptorSet 0
+                              Decorate 54(g_tTex2df4) DescriptorSet 0
                               Decorate 67(g_tTex2di4) Binding 4
-                              Decorate 77(g_tTex2du4) DescriptorSet 0
+                              Decorate 67(g_tTex2di4) DescriptorSet 0
                               Decorate 77(g_tTex2du4) Binding 5
-                              Decorate 87(g_tTex3df4) DescriptorSet 0
+                              Decorate 77(g_tTex2du4) DescriptorSet 0
                               Decorate 87(g_tTex3df4) Binding 6
-                              Decorate 100(g_tTex3di4) DescriptorSet 0
+                              Decorate 87(g_tTex3df4) DescriptorSet 0
                               Decorate 100(g_tTex3di4) Binding 7
-                              Decorate 110(g_tTex3du4) DescriptorSet 0
+                              Decorate 100(g_tTex3di4) DescriptorSet 0
                               Decorate 110(g_tTex3du4) Binding 8
+                              Decorate 110(g_tTex3du4) DescriptorSet 0
                               Decorate 129(@entryPointOutput.Pos) BuiltIn Position
-                              Decorate 134(g_sSamp) DescriptorSet 0
                               Decorate 134(g_sSamp) Binding 0
-                              Decorate 137(g_tTexcdf4) DescriptorSet 0
+                              Decorate 134(g_sSamp) DescriptorSet 0
                               Decorate 137(g_tTexcdf4) Binding 0
-                              Decorate 140(g_tTexcdi4) DescriptorSet 0
+                              Decorate 137(g_tTexcdf4) DescriptorSet 0
                               Decorate 140(g_tTexcdi4) Binding 0
-                              Decorate 143(g_tTexcdu4) DescriptorSet 0
+                              Decorate 140(g_tTexcdi4) DescriptorSet 0
                               Decorate 143(g_tTexcdu4) Binding 0
-                              Decorate 146(g_tTex1df4a) DescriptorSet 0
+                              Decorate 143(g_tTexcdu4) DescriptorSet 0
                               Decorate 146(g_tTex1df4a) Binding 0
-                              Decorate 149(g_tTex1di4a) DescriptorSet 0
+                              Decorate 146(g_tTex1df4a) DescriptorSet 0
                               Decorate 149(g_tTex1di4a) Binding 0
-                              Decorate 152(g_tTex1du4a) DescriptorSet 0
+                              Decorate 149(g_tTex1di4a) DescriptorSet 0
                               Decorate 152(g_tTex1du4a) Binding 0
-                              Decorate 155(g_tTex2df4a) DescriptorSet 0
+                              Decorate 152(g_tTex1du4a) DescriptorSet 0
                               Decorate 155(g_tTex2df4a) Binding 0
-                              Decorate 158(g_tTex2di4a) DescriptorSet 0
+                              Decorate 155(g_tTex2df4a) DescriptorSet 0
                               Decorate 158(g_tTex2di4a) Binding 0
-                              Decorate 161(g_tTex2du4a) DescriptorSet 0
+                              Decorate 158(g_tTex2di4a) DescriptorSet 0
                               Decorate 161(g_tTex2du4a) Binding 0
-                              Decorate 164(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 161(g_tTex2du4a) DescriptorSet 0
                               Decorate 164(g_tTexcdf4a) Binding 0
-                              Decorate 167(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 164(g_tTexcdf4a) DescriptorSet 0
                               Decorate 167(g_tTexcdi4a) Binding 0
-                              Decorate 170(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 167(g_tTexcdi4a) DescriptorSet 0
                               Decorate 170(g_tTexcdu4a) Binding 0
+                              Decorate 170(g_tTexcdu4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.load.buffer.dx10.frag.out b/Test/baseResults/hlsl.load.buffer.dx10.frag.out
index b37e3c9..900c118 100644
--- a/Test/baseResults/hlsl.load.buffer.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.buffer.dx10.frag.out
@@ -203,8 +203,9 @@
                               Name 64  "@entryPointOutput.Color"
                               Name 68  "@entryPointOutput.Depth"
                               Name 71  "g_tTexbf4_test"
-                              Decorate 16(g_tTexbf4) DescriptorSet 0
                               Decorate 16(g_tTexbf4) Binding 1
+                              Decorate 16(g_tTexbf4) DescriptorSet 0
+                              Decorate 22($Global) Block
                               MemberDecorate 22($Global) 0 Offset 0
                               MemberDecorate 22($Global) 1 Offset 8
                               MemberDecorate 22($Global) 2 Offset 16
@@ -213,17 +214,16 @@
                               MemberDecorate 22($Global) 5 Offset 56
                               MemberDecorate 22($Global) 6 Offset 64
                               MemberDecorate 22($Global) 7 Offset 80
-                              Decorate 22($Global) Block
-                              Decorate 24 DescriptorSet 0
                               Decorate 24 Binding 4
-                              Decorate 34(g_tTexbi4) DescriptorSet 0
+                              Decorate 24 DescriptorSet 0
                               Decorate 34(g_tTexbi4) Binding 2
-                              Decorate 45(g_tTexbu4) DescriptorSet 0
+                              Decorate 34(g_tTexbi4) DescriptorSet 0
                               Decorate 45(g_tTexbu4) Binding 3
+                              Decorate 45(g_tTexbu4) DescriptorSet 0
                               Decorate 64(@entryPointOutput.Color) Location 0
                               Decorate 68(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 71(g_tTexbf4_test) DescriptorSet 0
                               Decorate 71(g_tTexbf4_test) Binding 0
+                              Decorate 71(g_tTexbf4_test) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out b/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out
index b248ed6..c88fd6a 100644
--- a/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.buffer.float.dx10.frag.out
@@ -209,8 +209,9 @@
                               Name 67  "@entryPointOutput.Color"
                               Name 71  "@entryPointOutput.Depth"
                               Name 74  "g_tTexbfs_test"
-                              Decorate 16(g_tTexbfs) DescriptorSet 0
                               Decorate 16(g_tTexbfs) Binding 1
+                              Decorate 16(g_tTexbfs) DescriptorSet 0
+                              Decorate 22($Global) Block
                               MemberDecorate 22($Global) 0 Offset 0
                               MemberDecorate 22($Global) 1 Offset 8
                               MemberDecorate 22($Global) 2 Offset 16
@@ -219,17 +220,16 @@
                               MemberDecorate 22($Global) 5 Offset 56
                               MemberDecorate 22($Global) 6 Offset 64
                               MemberDecorate 22($Global) 7 Offset 80
-                              Decorate 22($Global) Block
-                              Decorate 24 DescriptorSet 0
                               Decorate 24 Binding 4
-                              Decorate 35(g_tTexbis) DescriptorSet 0
+                              Decorate 24 DescriptorSet 0
                               Decorate 35(g_tTexbis) Binding 2
-                              Decorate 46(g_tTexbus) DescriptorSet 0
+                              Decorate 35(g_tTexbis) DescriptorSet 0
                               Decorate 46(g_tTexbus) Binding 3
+                              Decorate 46(g_tTexbus) DescriptorSet 0
                               Decorate 67(@entryPointOutput.Color) Location 0
                               Decorate 71(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 74(g_tTexbfs_test) DescriptorSet 0
                               Decorate 74(g_tTexbfs_test) Binding 0
+                              Decorate 74(g_tTexbfs_test) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.load.offset.dx10.frag.out b/Test/baseResults/hlsl.load.offset.dx10.frag.out
index f8d4383..0d07130 100644
--- a/Test/baseResults/hlsl.load.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.offset.dx10.frag.out
@@ -603,59 +603,59 @@
                               Name 198  "g_tTexcdf4a"
                               Name 201  "g_tTexcdi4a"
                               Name 204  "g_tTexcdu4a"
-                              Decorate 35(g_tTex1df4) DescriptorSet 0
                               Decorate 35(g_tTex1df4) Binding 0
+                              Decorate 35(g_tTex1df4) DescriptorSet 0
+                              Decorate 38($Global) Block
                               MemberDecorate 38($Global) 0 Offset 0
                               MemberDecorate 38($Global) 1 Offset 8
                               MemberDecorate 38($Global) 2 Offset 16
                               MemberDecorate 38($Global) 3 Offset 32
-                              Decorate 38($Global) Block
-                              Decorate 40 DescriptorSet 0
                               Decorate 40 Binding 9
-                              Decorate 53(g_tTex1di4) DescriptorSet 0
+                              Decorate 40 DescriptorSet 0
                               Decorate 53(g_tTex1di4) Binding 1
-                              Decorate 63(g_tTex1du4) DescriptorSet 0
+                              Decorate 53(g_tTex1di4) DescriptorSet 0
                               Decorate 63(g_tTex1du4) Binding 2
-                              Decorate 74(g_tTex2df4) DescriptorSet 0
+                              Decorate 63(g_tTex1du4) DescriptorSet 0
                               Decorate 74(g_tTex2df4) Binding 3
-                              Decorate 88(g_tTex2di4) DescriptorSet 0
+                              Decorate 74(g_tTex2df4) DescriptorSet 0
                               Decorate 88(g_tTex2di4) Binding 4
-                              Decorate 99(g_tTex2du4) DescriptorSet 0
+                              Decorate 88(g_tTex2di4) DescriptorSet 0
                               Decorate 99(g_tTex2du4) Binding 5
-                              Decorate 110(g_tTex3df4) DescriptorSet 0
+                              Decorate 99(g_tTex2du4) DescriptorSet 0
                               Decorate 110(g_tTex3df4) Binding 6
-                              Decorate 124(g_tTex3di4) DescriptorSet 0
+                              Decorate 110(g_tTex3df4) DescriptorSet 0
                               Decorate 124(g_tTex3di4) Binding 7
-                              Decorate 135(g_tTex3du4) DescriptorSet 0
+                              Decorate 124(g_tTex3di4) DescriptorSet 0
                               Decorate 135(g_tTex3du4) Binding 8
+                              Decorate 135(g_tTex3du4) DescriptorSet 0
                               Decorate 159(@entryPointOutput.Color) Location 0
                               Decorate 163(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 168(g_sSamp) DescriptorSet 0
                               Decorate 168(g_sSamp) Binding 0
-                              Decorate 171(g_tTexcdf4) DescriptorSet 0
+                              Decorate 168(g_sSamp) DescriptorSet 0
                               Decorate 171(g_tTexcdf4) Binding 0
-                              Decorate 174(g_tTexcdi4) DescriptorSet 0
+                              Decorate 171(g_tTexcdf4) DescriptorSet 0
                               Decorate 174(g_tTexcdi4) Binding 0
-                              Decorate 177(g_tTexcdu4) DescriptorSet 0
+                              Decorate 174(g_tTexcdi4) DescriptorSet 0
                               Decorate 177(g_tTexcdu4) Binding 0
-                              Decorate 180(g_tTex1df4a) DescriptorSet 0
+                              Decorate 177(g_tTexcdu4) DescriptorSet 0
                               Decorate 180(g_tTex1df4a) Binding 0
-                              Decorate 183(g_tTex1di4a) DescriptorSet 0
+                              Decorate 180(g_tTex1df4a) DescriptorSet 0
                               Decorate 183(g_tTex1di4a) Binding 0
-                              Decorate 186(g_tTex1du4a) DescriptorSet 0
+                              Decorate 183(g_tTex1di4a) DescriptorSet 0
                               Decorate 186(g_tTex1du4a) Binding 0
-                              Decorate 189(g_tTex2df4a) DescriptorSet 0
+                              Decorate 186(g_tTex1du4a) DescriptorSet 0
                               Decorate 189(g_tTex2df4a) Binding 0
-                              Decorate 192(g_tTex2di4a) DescriptorSet 0
+                              Decorate 189(g_tTex2df4a) DescriptorSet 0
                               Decorate 192(g_tTex2di4a) Binding 0
-                              Decorate 195(g_tTex2du4a) DescriptorSet 0
+                              Decorate 192(g_tTex2di4a) DescriptorSet 0
                               Decorate 195(g_tTex2du4a) Binding 0
-                              Decorate 198(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 195(g_tTex2du4a) DescriptorSet 0
                               Decorate 198(g_tTexcdf4a) Binding 0
-                              Decorate 201(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 198(g_tTexcdf4a) DescriptorSet 0
                               Decorate 201(g_tTexcdi4a) Binding 0
-                              Decorate 204(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 201(g_tTexcdi4a) DescriptorSet 0
                               Decorate 204(g_tTexcdu4a) Binding 0
+                              Decorate 204(g_tTexcdu4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
diff --git a/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out
index bc5f632..0cfd2a8 100644
--- a/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out
@@ -478,59 +478,59 @@
                               Name 169  "g_tTexcdf4a"
                               Name 172  "g_tTexcdi4a"
                               Name 175  "g_tTexcdu4a"
-                              Decorate 28(g_tTex1df4a) DescriptorSet 0
                               Decorate 28(g_tTex1df4a) Binding 1
+                              Decorate 28(g_tTex1df4a) DescriptorSet 0
+                              Decorate 32($Global) Block
                               MemberDecorate 32($Global) 0 Offset 0
                               MemberDecorate 32($Global) 1 Offset 8
                               MemberDecorate 32($Global) 2 Offset 16
                               MemberDecorate 32($Global) 3 Offset 32
-                              Decorate 32($Global) Block
-                              Decorate 34 DescriptorSet 0
                               Decorate 34 Binding 7
-                              Decorate 49(g_tTex1di4a) DescriptorSet 0
+                              Decorate 34 DescriptorSet 0
                               Decorate 49(g_tTex1di4a) Binding 2
-                              Decorate 60(g_tTex1du4a) DescriptorSet 0
+                              Decorate 49(g_tTex1di4a) DescriptorSet 0
                               Decorate 60(g_tTex1du4a) Binding 3
-                              Decorate 72(g_tTex2df4a) DescriptorSet 0
+                              Decorate 60(g_tTex1du4a) DescriptorSet 0
                               Decorate 72(g_tTex2df4a) Binding 4
-                              Decorate 86(g_tTex2di4a) DescriptorSet 0
+                              Decorate 72(g_tTex2df4a) DescriptorSet 0
                               Decorate 86(g_tTex2di4a) Binding 5
-                              Decorate 97(g_tTex2du4a) DescriptorSet 0
+                              Decorate 86(g_tTex2di4a) DescriptorSet 0
                               Decorate 97(g_tTex2du4a) Binding 6
+                              Decorate 97(g_tTex2du4a) DescriptorSet 0
                               Decorate 121(@entryPointOutput.Color) Location 0
                               Decorate 125(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 130(g_sSamp) DescriptorSet 0
                               Decorate 130(g_sSamp) Binding 0
-                              Decorate 133(g_tTex1df4) DescriptorSet 0
+                              Decorate 130(g_sSamp) DescriptorSet 0
                               Decorate 133(g_tTex1df4) Binding 0
-                              Decorate 136(g_tTex1di4) DescriptorSet 0
+                              Decorate 133(g_tTex1df4) DescriptorSet 0
                               Decorate 136(g_tTex1di4) Binding 0
-                              Decorate 139(g_tTex1du4) DescriptorSet 0
+                              Decorate 136(g_tTex1di4) DescriptorSet 0
                               Decorate 139(g_tTex1du4) Binding 0
-                              Decorate 142(g_tTex2df4) DescriptorSet 0
+                              Decorate 139(g_tTex1du4) DescriptorSet 0
                               Decorate 142(g_tTex2df4) Binding 0
-                              Decorate 145(g_tTex2di4) DescriptorSet 0
+                              Decorate 142(g_tTex2df4) DescriptorSet 0
                               Decorate 145(g_tTex2di4) Binding 0
-                              Decorate 148(g_tTex2du4) DescriptorSet 0
+                              Decorate 145(g_tTex2di4) DescriptorSet 0
                               Decorate 148(g_tTex2du4) Binding 0
-                              Decorate 151(g_tTex3df4) DescriptorSet 0
+                              Decorate 148(g_tTex2du4) DescriptorSet 0
                               Decorate 151(g_tTex3df4) Binding 0
-                              Decorate 154(g_tTex3di4) DescriptorSet 0
+                              Decorate 151(g_tTex3df4) DescriptorSet 0
                               Decorate 154(g_tTex3di4) Binding 0
-                              Decorate 157(g_tTex3du4) DescriptorSet 0
+                              Decorate 154(g_tTex3di4) DescriptorSet 0
                               Decorate 157(g_tTex3du4) Binding 0
-                              Decorate 160(g_tTexcdf4) DescriptorSet 0
+                              Decorate 157(g_tTex3du4) DescriptorSet 0
                               Decorate 160(g_tTexcdf4) Binding 0
-                              Decorate 163(g_tTexcdi4) DescriptorSet 0
+                              Decorate 160(g_tTexcdf4) DescriptorSet 0
                               Decorate 163(g_tTexcdi4) Binding 0
-                              Decorate 166(g_tTexcdu4) DescriptorSet 0
+                              Decorate 163(g_tTexcdi4) DescriptorSet 0
                               Decorate 166(g_tTexcdu4) Binding 0
-                              Decorate 169(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 166(g_tTexcdu4) DescriptorSet 0
                               Decorate 169(g_tTexcdf4a) Binding 0
-                              Decorate 172(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 169(g_tTexcdf4a) DescriptorSet 0
                               Decorate 172(g_tTexcdi4a) Binding 0
-                              Decorate 175(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 172(g_tTexcdi4a) DescriptorSet 0
                               Decorate 175(g_tTexcdu4a) Binding 0
+                              Decorate 175(g_tTexcdu4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
diff --git a/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out b/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out
index ed6f528..78fbf41 100644
--- a/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.rwbuffer.dx10.frag.out
@@ -139,8 +139,9 @@
                               Name 39  "g_tBuffI"
                               Name 45  "psout"
                               Name 54  "@entryPointOutput.Color"
-                              Decorate 14(g_tBuffF) DescriptorSet 0
                               Decorate 14(g_tBuffF) Binding 0
+                              Decorate 14(g_tBuffF) DescriptorSet 0
+                              Decorate 20($Global) Block
                               MemberDecorate 20($Global) 0 Offset 0
                               MemberDecorate 20($Global) 1 Offset 8
                               MemberDecorate 20($Global) 2 Offset 16
@@ -149,13 +150,12 @@
                               MemberDecorate 20($Global) 5 Offset 56
                               MemberDecorate 20($Global) 6 Offset 64
                               MemberDecorate 20($Global) 7 Offset 80
-                              Decorate 20($Global) Block
-                              Decorate 22 DescriptorSet 0
                               Decorate 22 Binding 3
-                              Decorate 31(g_tBuffU) DescriptorSet 0
+                              Decorate 22 DescriptorSet 0
                               Decorate 31(g_tBuffU) Binding 2
-                              Decorate 39(g_tBuffI) DescriptorSet 0
+                              Decorate 31(g_tBuffU) DescriptorSet 0
                               Decorate 39(g_tBuffI) Binding 1
+                              Decorate 39(g_tBuffI) DescriptorSet 0
                               Decorate 54(@entryPointOutput.Color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out b/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out
index a94da2f..e8bf290 100644
--- a/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.rwtexture.array.dx10.frag.out
@@ -254,8 +254,9 @@
                               Name 112  "g_tTex3df4"
                               Name 115  "g_tTex3di4"
                               Name 118  "g_tTex3du4"
-                              Decorate 14(g_tTex1df4a) DescriptorSet 0
                               Decorate 14(g_tTex1df4a) Binding 1
+                              Decorate 14(g_tTex1df4a) DescriptorSet 0
+                              Decorate 20($Global) Block
                               MemberDecorate 20($Global) 0 Offset 0
                               MemberDecorate 20($Global) 1 Offset 8
                               MemberDecorate 20($Global) 2 Offset 16
@@ -264,41 +265,40 @@
                               MemberDecorate 20($Global) 5 Offset 56
                               MemberDecorate 20($Global) 6 Offset 64
                               MemberDecorate 20($Global) 7 Offset 80
-                              Decorate 20($Global) Block
-                              Decorate 22 DescriptorSet 0
                               Decorate 22 Binding 7
-                              Decorate 30(g_tTex1di4a) DescriptorSet 0
+                              Decorate 22 DescriptorSet 0
                               Decorate 30(g_tTex1di4a) Binding 2
-                              Decorate 38(g_tTex1du4a) DescriptorSet 0
+                              Decorate 30(g_tTex1di4a) DescriptorSet 0
                               Decorate 38(g_tTex1du4a) Binding 3
-                              Decorate 46(g_tTex2df4a) DescriptorSet 0
+                              Decorate 38(g_tTex1du4a) DescriptorSet 0
                               Decorate 46(g_tTex2df4a) Binding 4
-                              Decorate 55(g_tTex2di4a) DescriptorSet 0
+                              Decorate 46(g_tTex2df4a) DescriptorSet 0
                               Decorate 55(g_tTex2di4a) Binding 5
-                              Decorate 62(g_tTex2du4a) DescriptorSet 0
+                              Decorate 55(g_tTex2di4a) DescriptorSet 0
                               Decorate 62(g_tTex2du4a) Binding 6
+                              Decorate 62(g_tTex2du4a) DescriptorSet 0
                               Decorate 82(@entryPointOutput.Color) Location 0
                               Decorate 86(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 91(g_sSamp) DescriptorSet 0
                               Decorate 91(g_sSamp) Binding 0
-                              Decorate 94(g_tTex1df4) DescriptorSet 0
+                              Decorate 91(g_sSamp) DescriptorSet 0
                               Decorate 94(g_tTex1df4) Binding 0
-                              Decorate 97(g_tTex1di4) DescriptorSet 0
+                              Decorate 94(g_tTex1df4) DescriptorSet 0
                               Decorate 97(g_tTex1di4) Binding 0
-                              Decorate 100(g_tTex1du4) DescriptorSet 0
+                              Decorate 97(g_tTex1di4) DescriptorSet 0
                               Decorate 100(g_tTex1du4) Binding 0
-                              Decorate 103(g_tTex2df4) DescriptorSet 0
+                              Decorate 100(g_tTex1du4) DescriptorSet 0
                               Decorate 103(g_tTex2df4) Binding 0
-                              Decorate 106(g_tTex2di4) DescriptorSet 0
+                              Decorate 103(g_tTex2df4) DescriptorSet 0
                               Decorate 106(g_tTex2di4) Binding 0
-                              Decorate 109(g_tTex2du4) DescriptorSet 0
+                              Decorate 106(g_tTex2di4) DescriptorSet 0
                               Decorate 109(g_tTex2du4) Binding 0
-                              Decorate 112(g_tTex3df4) DescriptorSet 0
+                              Decorate 109(g_tTex2du4) DescriptorSet 0
                               Decorate 112(g_tTex3df4) Binding 0
-                              Decorate 115(g_tTex3di4) DescriptorSet 0
+                              Decorate 112(g_tTex3df4) DescriptorSet 0
                               Decorate 115(g_tTex3di4) Binding 0
-                              Decorate 118(g_tTex3du4) DescriptorSet 0
+                              Decorate 115(g_tTex3di4) DescriptorSet 0
                               Decorate 118(g_tTex3du4) Binding 0
+                              Decorate 118(g_tTex3du4) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out b/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out
index b00da80..d829dda 100644
--- a/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out
+++ b/Test/baseResults/hlsl.load.rwtexture.dx10.frag.out
@@ -290,8 +290,9 @@
                               Name 125  "g_tTex2df4a"
                               Name 128  "g_tTex2di4a"
                               Name 131  "g_tTex2du4a"
-                              Decorate 14(g_tTex1df4) DescriptorSet 0
                               Decorate 14(g_tTex1df4) Binding 0
+                              Decorate 14(g_tTex1df4) DescriptorSet 0
+                              Decorate 20($Global) Block
                               MemberDecorate 20($Global) 0 Offset 0
                               MemberDecorate 20($Global) 1 Offset 8
                               MemberDecorate 20($Global) 2 Offset 16
@@ -300,41 +301,40 @@
                               MemberDecorate 20($Global) 5 Offset 56
                               MemberDecorate 20($Global) 6 Offset 64
                               MemberDecorate 20($Global) 7 Offset 80
-                              Decorate 20($Global) Block
-                              Decorate 22 DescriptorSet 0
                               Decorate 22 Binding 9
-                              Decorate 30(g_tTex1di4) DescriptorSet 0
+                              Decorate 22 DescriptorSet 0
                               Decorate 30(g_tTex1di4) Binding 1
-                              Decorate 38(g_tTex1du4) DescriptorSet 0
+                              Decorate 30(g_tTex1di4) DescriptorSet 0
                               Decorate 38(g_tTex1du4) Binding 2
-                              Decorate 46(g_tTex2df4) DescriptorSet 0
+                              Decorate 38(g_tTex1du4) DescriptorSet 0
                               Decorate 46(g_tTex2df4) Binding 3
-                              Decorate 55(g_tTex2di4) DescriptorSet 0
+                              Decorate 46(g_tTex2df4) DescriptorSet 0
                               Decorate 55(g_tTex2di4) Binding 4
-                              Decorate 62(g_tTex2du4) DescriptorSet 0
+                              Decorate 55(g_tTex2di4) DescriptorSet 0
                               Decorate 62(g_tTex2du4) Binding 5
-                              Decorate 69(g_tTex3df4) DescriptorSet 0
+                              Decorate 62(g_tTex2du4) DescriptorSet 0
                               Decorate 69(g_tTex3df4) Binding 6
-                              Decorate 78(g_tTex3di4) DescriptorSet 0
+                              Decorate 69(g_tTex3df4) DescriptorSet 0
                               Decorate 78(g_tTex3di4) Binding 7
-                              Decorate 85(g_tTex3du4) DescriptorSet 0
+                              Decorate 78(g_tTex3di4) DescriptorSet 0
                               Decorate 85(g_tTex3du4) Binding 8
+                              Decorate 85(g_tTex3du4) DescriptorSet 0
                               Decorate 104(@entryPointOutput.Color) Location 0
                               Decorate 108(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 113(g_sSamp) DescriptorSet 0
                               Decorate 113(g_sSamp) Binding 0
-                              Decorate 116(g_tTex1df4a) DescriptorSet 0
+                              Decorate 113(g_sSamp) DescriptorSet 0
                               Decorate 116(g_tTex1df4a) Binding 0
-                              Decorate 119(g_tTex1di4a) DescriptorSet 0
+                              Decorate 116(g_tTex1df4a) DescriptorSet 0
                               Decorate 119(g_tTex1di4a) Binding 0
-                              Decorate 122(g_tTex1du4a) DescriptorSet 0
+                              Decorate 119(g_tTex1di4a) DescriptorSet 0
                               Decorate 122(g_tTex1du4a) Binding 0
-                              Decorate 125(g_tTex2df4a) DescriptorSet 0
+                              Decorate 122(g_tTex1du4a) DescriptorSet 0
                               Decorate 125(g_tTex2df4a) Binding 0
-                              Decorate 128(g_tTex2di4a) DescriptorSet 0
+                              Decorate 125(g_tTex2df4a) DescriptorSet 0
                               Decorate 128(g_tTex2di4a) Binding 0
-                              Decorate 131(g_tTex2du4a) DescriptorSet 0
+                              Decorate 128(g_tTex2di4a) DescriptorSet 0
                               Decorate 131(g_tTex2du4a) Binding 0
+                              Decorate 131(g_tTex2du4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.logical.binary.frag.out b/Test/baseResults/hlsl.logical.binary.frag.out
index e6f484e..97d1de1 100644
--- a/Test/baseResults/hlsl.logical.binary.frag.out
+++ b/Test/baseResults/hlsl.logical.binary.frag.out
@@ -145,13 +145,13 @@
                               Name 16  ""
                               Name 44  "psout"
                               Name 53  "@entryPointOutput.Color"
+                              Decorate 14($Global) Block
                               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 16 Binding 0
+                              Decorate 16 DescriptorSet 0
                               Decorate 53(@entryPointOutput.Color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.logical.binary.vec.frag.out b/Test/baseResults/hlsl.logical.binary.vec.frag.out
index 986d83f..04b02d4 100644
--- a/Test/baseResults/hlsl.logical.binary.vec.frag.out
+++ b/Test/baseResults/hlsl.logical.binary.vec.frag.out
@@ -282,13 +282,13 @@
                               Name 77  "r21"
                               Name 87  "psout"
                               Name 112  "@entryPointOutput.Color"
+                              Decorate 18($Global) Block
                               MemberDecorate 18($Global) 0 Offset 0
                               MemberDecorate 18($Global) 1 Offset 16
                               MemberDecorate 18($Global) 2 Offset 32
                               MemberDecorate 18($Global) 3 Offset 36
-                              Decorate 18($Global) Block
-                              Decorate 20 DescriptorSet 0
                               Decorate 20 Binding 0
+                              Decorate 20 DescriptorSet 0
                               Decorate 112(@entryPointOutput.Color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.logical.unary.frag.out b/Test/baseResults/hlsl.logical.unary.frag.out
index cc933bb..23655d8 100644
--- a/Test/baseResults/hlsl.logical.unary.frag.out
+++ b/Test/baseResults/hlsl.logical.unary.frag.out
@@ -205,13 +205,13 @@
                               Name 16  ""
                               Name 72  "psout"
                               Name 81  "@entryPointOutput.Color"
+                              Decorate 14($Global) Block
                               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 16 Binding 0
+                              Decorate 16 DescriptorSet 0
                               Decorate 81(@entryPointOutput.Color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.matType.frag.out b/Test/baseResults/hlsl.matType.frag.out
index 92d44a4..47fb02a 100644
--- a/Test/baseResults/hlsl.matType.frag.out
+++ b/Test/baseResults/hlsl.matType.frag.out
@@ -54,25 +54,25 @@
                               MemberName 27($Global) 4  "dmat23"
                               MemberName 27($Global) 5  "int44"
                               Name 29  ""
+                              Decorate 27($Global) Block
                               MemberDecorate 27($Global) 0 Offset 0
                               MemberDecorate 27($Global) 1 RowMajor
-                              MemberDecorate 27($Global) 1 Offset 16
                               MemberDecorate 27($Global) 1 MatrixStride 16
+                              MemberDecorate 27($Global) 1 Offset 16
                               MemberDecorate 27($Global) 2 RowMajor
-                              MemberDecorate 27($Global) 2 Offset 32
                               MemberDecorate 27($Global) 2 MatrixStride 16
+                              MemberDecorate 27($Global) 2 Offset 32
                               MemberDecorate 27($Global) 3 RowMajor
-                              MemberDecorate 27($Global) 3 Offset 48
                               MemberDecorate 27($Global) 3 MatrixStride 16
+                              MemberDecorate 27($Global) 3 Offset 48
                               MemberDecorate 27($Global) 4 RowMajor
-                              MemberDecorate 27($Global) 4 Offset 80
                               MemberDecorate 27($Global) 4 MatrixStride 16
+                              MemberDecorate 27($Global) 4 Offset 80
                               MemberDecorate 27($Global) 5 RowMajor
-                              MemberDecorate 27($Global) 5 Offset 128
                               MemberDecorate 27($Global) 5 MatrixStride 16
-                              Decorate 27($Global) Block
-                              Decorate 29 DescriptorSet 0
+                              MemberDecorate 27($Global) 5 Offset 128
                               Decorate 29 Binding 0
+                              Decorate 29 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.matpack-1.frag.out b/Test/baseResults/hlsl.matpack-1.frag.out
index 5af6c2b..844b085 100644
--- a/Test/baseResults/hlsl.matpack-1.frag.out
+++ b/Test/baseResults/hlsl.matpack-1.frag.out
@@ -126,25 +126,25 @@
                               Name 16  ""
                               Name 37  "@entryPointOutput"
                               MemberDecorate 12(MyBuffer1) 0 RowMajor
-                              MemberDecorate 12(MyBuffer1) 0 Offset 0
                               MemberDecorate 12(MyBuffer1) 0 MatrixStride 16
+                              MemberDecorate 12(MyBuffer1) 0 Offset 0
                               MemberDecorate 12(MyBuffer1) 1 ColMajor
-                              MemberDecorate 12(MyBuffer1) 1 Offset 64
                               MemberDecorate 12(MyBuffer1) 1 MatrixStride 16
+                              MemberDecorate 12(MyBuffer1) 1 Offset 64
                               MemberDecorate 12(MyBuffer1) 2 Offset 128
                               MemberDecorate 12(MyBuffer1) 3 Offset 144
                               MemberDecorate 13(MyBuffer2) 0 ColMajor
-                              MemberDecorate 13(MyBuffer2) 0 Offset 0
                               MemberDecorate 13(MyBuffer2) 0 MatrixStride 16
+                              MemberDecorate 13(MyBuffer2) 0 Offset 0
                               MemberDecorate 13(MyBuffer2) 1 Offset 64
+                              Decorate 14(Example) Block
                               MemberDecorate 14(Example) 0 Offset 0
                               MemberDecorate 14(Example) 1 Offset 160
                               MemberDecorate 14(Example) 2 RowMajor
-                              MemberDecorate 14(Example) 2 Offset 240
                               MemberDecorate 14(Example) 2 MatrixStride 16
-                              Decorate 14(Example) Block
-                              Decorate 16 DescriptorSet 0
+                              MemberDecorate 14(Example) 2 Offset 240
                               Decorate 16 Binding 0
+                              Decorate 16 DescriptorSet 0
                               Decorate 37(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.matpack-pragma-global.frag.out b/Test/baseResults/hlsl.matpack-pragma-global.frag.out
index d6afb4e..c64fcb0 100644
--- a/Test/baseResults/hlsl.matpack-pragma-global.frag.out
+++ b/Test/baseResults/hlsl.matpack-pragma-global.frag.out
@@ -67,12 +67,12 @@
                               MemberName 12($Global) 0  "g_GlobalMat1"
                               Name 14  ""
                               Name 23  "@entryPointOutput"
-                              MemberDecorate 12($Global) 0 ColMajor
-                              MemberDecorate 12($Global) 0 Offset 0
-                              MemberDecorate 12($Global) 0 MatrixStride 16
                               Decorate 12($Global) Block
-                              Decorate 14 DescriptorSet 0
+                              MemberDecorate 12($Global) 0 ColMajor
+                              MemberDecorate 12($Global) 0 MatrixStride 16
+                              MemberDecorate 12($Global) 0 Offset 0
                               Decorate 14 Binding 0
+                              Decorate 14 DescriptorSet 0
                               Decorate 23(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.matpack-pragma.frag.out b/Test/baseResults/hlsl.matpack-pragma.frag.out
index aac5af5..5938a03 100644
--- a/Test/baseResults/hlsl.matpack-pragma.frag.out
+++ b/Test/baseResults/hlsl.matpack-pragma.frag.out
@@ -196,31 +196,31 @@
                               Name 16  ""
                               Name 42  "@entryPointOutput"
                               MemberDecorate 12(MyBuffer1) 0 RowMajor
-                              MemberDecorate 12(MyBuffer1) 0 Offset 0
                               MemberDecorate 12(MyBuffer1) 0 MatrixStride 16
+                              MemberDecorate 12(MyBuffer1) 0 Offset 0
                               MemberDecorate 12(MyBuffer1) 1 ColMajor
-                              MemberDecorate 12(MyBuffer1) 1 Offset 64
                               MemberDecorate 12(MyBuffer1) 1 MatrixStride 16
+                              MemberDecorate 12(MyBuffer1) 1 Offset 64
                               MemberDecorate 12(MyBuffer1) 2 ColMajor
-                              MemberDecorate 12(MyBuffer1) 2 Offset 128
                               MemberDecorate 12(MyBuffer1) 2 MatrixStride 16
+                              MemberDecorate 12(MyBuffer1) 2 Offset 128
                               MemberDecorate 13(MyBuffer2) 0 RowMajor
-                              MemberDecorate 13(MyBuffer2) 0 Offset 0
                               MemberDecorate 13(MyBuffer2) 0 MatrixStride 16
+                              MemberDecorate 13(MyBuffer2) 0 Offset 0
                               MemberDecorate 13(MyBuffer2) 1 ColMajor
-                              MemberDecorate 13(MyBuffer2) 1 Offset 64
                               MemberDecorate 13(MyBuffer2) 1 MatrixStride 16
+                              MemberDecorate 13(MyBuffer2) 1 Offset 64
                               MemberDecorate 13(MyBuffer2) 2 RowMajor
-                              MemberDecorate 13(MyBuffer2) 2 Offset 128
                               MemberDecorate 13(MyBuffer2) 2 MatrixStride 16
+                              MemberDecorate 13(MyBuffer2) 2 Offset 128
+                              Decorate 14(Example) Block
                               MemberDecorate 14(Example) 0 Offset 0
                               MemberDecorate 14(Example) 1 Offset 192
                               MemberDecorate 14(Example) 2 RowMajor
-                              MemberDecorate 14(Example) 2 Offset 384
                               MemberDecorate 14(Example) 2 MatrixStride 16
-                              Decorate 14(Example) Block
-                              Decorate 16 DescriptorSet 0
+                              MemberDecorate 14(Example) 2 Offset 384
                               Decorate 16 Binding 0
+                              Decorate 16 DescriptorSet 0
                               Decorate 42(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.matrixindex.frag.out b/Test/baseResults/hlsl.matrixindex.frag.out
index cf75c05..418bc2f 100644
--- a/Test/baseResults/hlsl.matrixindex.frag.out
+++ b/Test/baseResults/hlsl.matrixindex.frag.out
@@ -309,13 +309,13 @@
                               Name 63  "r0c"
                               Name 71  "psout"
                               Name 80  "@entryPointOutput.Color"
+                              Decorate 52($Global) Block
                               MemberDecorate 52($Global) 0 Offset 0
                               MemberDecorate 52($Global) 1 RowMajor
-                              MemberDecorate 52($Global) 1 Offset 16
                               MemberDecorate 52($Global) 1 MatrixStride 16
-                              Decorate 52($Global) Block
-                              Decorate 54 DescriptorSet 0
+                              MemberDecorate 52($Global) 1 Offset 16
                               Decorate 54 Binding 0
+                              Decorate 54 DescriptorSet 0
                               Decorate 80(@entryPointOutput.Color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.mintypes.frag.out b/Test/baseResults/hlsl.mintypes.frag.out
index 2b51d12..9d0b3c9 100644
--- a/Test/baseResults/hlsl.mintypes.frag.out
+++ b/Test/baseResults/hlsl.mintypes.frag.out
@@ -294,13 +294,13 @@
                               Decorate 114 RelaxedPrecision
                               Decorate 115 RelaxedPrecision
                               Decorate 126(@entryPointOutput.Color) Location 0
+                              Decorate 129($Global) Block
                               MemberDecorate 129($Global) 0 RelaxedPrecision
                               MemberDecorate 129($Global) 0 Offset 0
                               MemberDecorate 129($Global) 1 RelaxedPrecision
                               MemberDecorate 129($Global) 1 Offset 4
-                              Decorate 129($Global) Block
-                              Decorate 131 DescriptorSet 0
                               Decorate 131 Binding 0
+                              Decorate 131 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.mip.operator.frag.out b/Test/baseResults/hlsl.mip.operator.frag.out
index 2c03a26..c69cf8d 100644
--- a/Test/baseResults/hlsl.mip.operator.frag.out
+++ b/Test/baseResults/hlsl.mip.operator.frag.out
@@ -142,10 +142,10 @@
                               Name 13  "g_tTex2df4"
                               Name 25  "g_tTex2df4a"
                               Name 59  "@entryPointOutput"
-                              Decorate 13(g_tTex2df4) DescriptorSet 0
                               Decorate 13(g_tTex2df4) Binding 1
-                              Decorate 25(g_tTex2df4a) DescriptorSet 0
+                              Decorate 13(g_tTex2df4) DescriptorSet 0
                               Decorate 25(g_tTex2df4a) Binding 0
+                              Decorate 25(g_tTex2df4a) DescriptorSet 0
                               Decorate 59(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.mul-truncate.frag.out b/Test/baseResults/hlsl.mul-truncate.frag.out
index 806d241..c736d25 100644
--- a/Test/baseResults/hlsl.mul-truncate.frag.out
+++ b/Test/baseResults/hlsl.mul-truncate.frag.out
@@ -416,30 +416,30 @@
                               Name 133  "r32"
                               Name 146  "r33"
                               Name 188  "@entryPointOutput"
+                              Decorate 21(Matrix) Block
                               MemberDecorate 21(Matrix) 0 RowMajor
-                              MemberDecorate 21(Matrix) 0 Offset 0
                               MemberDecorate 21(Matrix) 0 MatrixStride 16
+                              MemberDecorate 21(Matrix) 0 Offset 0
                               MemberDecorate 21(Matrix) 1 RowMajor
-                              MemberDecorate 21(Matrix) 1 Offset 64
                               MemberDecorate 21(Matrix) 1 MatrixStride 16
+                              MemberDecorate 21(Matrix) 1 Offset 64
                               MemberDecorate 21(Matrix) 2 RowMajor
-                              MemberDecorate 21(Matrix) 2 Offset 112
                               MemberDecorate 21(Matrix) 2 MatrixStride 16
+                              MemberDecorate 21(Matrix) 2 Offset 112
                               MemberDecorate 21(Matrix) 3 RowMajor
-                              MemberDecorate 21(Matrix) 3 Offset 176
                               MemberDecorate 21(Matrix) 3 MatrixStride 16
+                              MemberDecorate 21(Matrix) 3 Offset 176
                               MemberDecorate 21(Matrix) 4 RowMajor
-                              MemberDecorate 21(Matrix) 4 Offset 224
                               MemberDecorate 21(Matrix) 4 MatrixStride 16
+                              MemberDecorate 21(Matrix) 4 Offset 224
                               MemberDecorate 21(Matrix) 5 RowMajor
-                              MemberDecorate 21(Matrix) 5 Offset 288
                               MemberDecorate 21(Matrix) 5 MatrixStride 16
+                              MemberDecorate 21(Matrix) 5 Offset 288
                               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 23 Binding 0
+                              Decorate 23 DescriptorSet 0
                               Decorate 188(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.multiDescriptorSet.frag.out b/Test/baseResults/hlsl.multiDescriptorSet.frag.out
index d79b121..bf0b7b1 100644
--- a/Test/baseResults/hlsl.multiDescriptorSet.frag.out
+++ b/Test/baseResults/hlsl.multiDescriptorSet.frag.out
@@ -35,36 +35,36 @@
                               Name 87  "param"
                               Name 90  "txDiffuseB"
                               Name 91  "samLinearB"
-                              MemberDecorate 23(cbChangesEveryFrame) 0 RowMajor
-                              MemberDecorate 23(cbChangesEveryFrame) 0 Offset 0
-                              MemberDecorate 23(cbChangesEveryFrame) 0 MatrixStride 16
-                              MemberDecorate 23(cbChangesEveryFrame) 1 Offset 64
                               Decorate 23(cbChangesEveryFrame) Block
-                              Decorate 25 DescriptorSet 2
+                              MemberDecorate 23(cbChangesEveryFrame) 0 RowMajor
+                              MemberDecorate 23(cbChangesEveryFrame) 0 MatrixStride 16
+                              MemberDecorate 23(cbChangesEveryFrame) 0 Offset 0
+                              MemberDecorate 23(cbChangesEveryFrame) 1 Offset 64
                               Decorate 25 Binding 2
-                              MemberDecorate 34(cbNeverChanges) 0 RowMajor
-                              MemberDecorate 34(cbNeverChanges) 0 Offset 0
-                              MemberDecorate 34(cbNeverChanges) 0 MatrixStride 16
+                              Decorate 25 DescriptorSet 2
                               Decorate 34(cbNeverChanges) Block
-                              Decorate 36 DescriptorSet 2
+                              MemberDecorate 34(cbNeverChanges) 0 RowMajor
+                              MemberDecorate 34(cbNeverChanges) 0 MatrixStride 16
+                              MemberDecorate 34(cbNeverChanges) 0 Offset 0
                               Decorate 36 Binding 0
-                              MemberDecorate 43(cbChangeOnResize) 0 RowMajor
-                              MemberDecorate 43(cbChangeOnResize) 0 Offset 0
-                              MemberDecorate 43(cbChangeOnResize) 0 MatrixStride 16
+                              Decorate 36 DescriptorSet 2
                               Decorate 43(cbChangeOnResize) Block
-                              Decorate 45 DescriptorSet 2
+                              MemberDecorate 43(cbChangeOnResize) 0 RowMajor
+                              MemberDecorate 43(cbChangeOnResize) 0 MatrixStride 16
+                              MemberDecorate 43(cbChangeOnResize) 0 Offset 0
                               Decorate 45 Binding 1
-                              Decorate 59(txDiffuseA) DescriptorSet 0
+                              Decorate 45 DescriptorSet 2
                               Decorate 59(txDiffuseA) Binding 0
-                              Decorate 63(samLinearA) DescriptorSet 0
+                              Decorate 59(txDiffuseA) DescriptorSet 0
                               Decorate 63(samLinearA) Binding 1
+                              Decorate 63(samLinearA) DescriptorSet 0
                               Decorate 78(input.Pos) BuiltIn FragCoord
                               Decorate 82(input.Tex) Location 0
                               Decorate 86(@entryPointOutput) Location 0
-                              Decorate 90(txDiffuseB) DescriptorSet 1
                               Decorate 90(txDiffuseB) Binding 0
-                              Decorate 91(samLinearB) DescriptorSet 1
+                              Decorate 90(txDiffuseB) DescriptorSet 1
                               Decorate 91(samLinearB) Binding 1
+                              Decorate 91(samLinearB) DescriptorSet 1
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.multiEntry.vert.out b/Test/baseResults/hlsl.multiEntry.vert.out
index 0e31ed6..3bf8d79 100644
--- a/Test/baseResults/hlsl.multiEntry.vert.out
+++ b/Test/baseResults/hlsl.multiEntry.vert.out
@@ -90,8 +90,8 @@
                               Name 34  "Index"
                               Name 37  "@entryPointOutput"
                               Name 38  "param"
-                              Decorate 19(Position) DescriptorSet 0
                               Decorate 19(Position) Binding 0
+                              Decorate 19(Position) DescriptorSet 0
                               Decorate 34(Index) BuiltIn VertexIndex
                               Decorate 37(@entryPointOutput) BuiltIn Position
                2:             TypeVoid
diff --git a/Test/baseResults/hlsl.multiReturn.frag.out b/Test/baseResults/hlsl.multiReturn.frag.out
index fbe7fbf..38df9f0 100644
--- a/Test/baseResults/hlsl.multiReturn.frag.out
+++ b/Test/baseResults/hlsl.multiReturn.frag.out
@@ -74,12 +74,12 @@
                               MemberDecorate 15(S) 0 Offset 0
                               MemberDecorate 15(S) 1 Offset 4
                               MemberDecorate 15(S) 2 RowMajor
-                              MemberDecorate 15(S) 2 Offset 16
                               MemberDecorate 15(S) 2 MatrixStride 16
-                              MemberDecorate 16(bufName) 0 Offset 0
+                              MemberDecorate 15(S) 2 Offset 16
                               Decorate 16(bufName) Block
-                              Decorate 18 DescriptorSet 0
+                              MemberDecorate 16(bufName) 0 Offset 0
                               Decorate 18 Binding 0
+                              Decorate 18 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.multiView.frag.out b/Test/baseResults/hlsl.multiView.frag.out
new file mode 100644
index 0000000..95c9344
--- /dev/null
+++ b/Test/baseResults/hlsl.multiView.frag.out
@@ -0,0 +1,121 @@
+hlsl.multiView.frag
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:3  Function Definition: @main(u1; ( temp 4-component vector of float)
+0:3    Function Parameters: 
+0:3      'ViewIndex' ( in uint)
+0:?     Sequence
+0:4      Branch: Return with expression
+0:4        Construct vec4 ( temp 4-component vector of float)
+0:4          Convert uint to float ( temp float)
+0:4            'ViewIndex' ( in uint)
+0:4          Constant:
+0:4            0.000000
+0:4          Constant:
+0:4            0.000000
+0:4          Constant:
+0:4            0.000000
+0:3  Function Definition: main( ( temp void)
+0:3    Function Parameters: 
+0:?     Sequence
+0:3      move second child to first child ( temp uint)
+0:?         'ViewIndex' ( temp uint)
+0:?         'ViewIndex' ( flat in uint ViewIndex)
+0:3      move second child to first child ( temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:3        Function Call: @main(u1; ( temp 4-component vector of float)
+0:?           'ViewIndex' ( temp uint)
+0:?   Linker Objects
+0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:?     'ViewIndex' ( flat in uint ViewIndex)
+
+
+Linked fragment stage:
+
+
+Shader version: 500
+gl_FragCoord origin is upper left
+0:? Sequence
+0:3  Function Definition: @main(u1; ( temp 4-component vector of float)
+0:3    Function Parameters: 
+0:3      'ViewIndex' ( in uint)
+0:?     Sequence
+0:4      Branch: Return with expression
+0:4        Construct vec4 ( temp 4-component vector of float)
+0:4          Convert uint to float ( temp float)
+0:4            'ViewIndex' ( in uint)
+0:4          Constant:
+0:4            0.000000
+0:4          Constant:
+0:4            0.000000
+0:4          Constant:
+0:4            0.000000
+0:3  Function Definition: main( ( temp void)
+0:3    Function Parameters: 
+0:?     Sequence
+0:3      move second child to first child ( temp uint)
+0:?         'ViewIndex' ( temp uint)
+0:?         'ViewIndex' ( flat in uint ViewIndex)
+0:3      move second child to first child ( temp 4-component vector of float)
+0:?         '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:3        Function Call: @main(u1; ( temp 4-component vector of float)
+0:?           'ViewIndex' ( temp uint)
+0:?   Linker Objects
+0:?     '@entryPointOutput' (layout( location=0) out 4-component vector of float)
+0:?     'ViewIndex' ( flat in uint ViewIndex)
+
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 29
+
+                              Capability Shader
+                              Capability MultiView
+                              Extension  "SPV_KHR_multiview"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 22 25
+                              ExecutionMode 4 OriginUpperLeft
+                              Source HLSL 500
+                              Name 4  "main"
+                              Name 12  "@main(u1;"
+                              Name 11  "ViewIndex"
+                              Name 20  "ViewIndex"
+                              Name 22  "ViewIndex"
+                              Name 25  "@entryPointOutput"
+                              Name 26  "param"
+                              Decorate 22(ViewIndex) BuiltIn ViewIndex
+                              Decorate 22(ViewIndex) Flat
+                              Decorate 25(@entryPointOutput) Location 0
+               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)
+              16:    8(float) Constant 0
+              21:             TypePointer Input 6(int)
+   22(ViewIndex):     21(ptr) Variable Input
+              24:             TypePointer Output 9(fvec4)
+25(@entryPointOutput):     24(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+   20(ViewIndex):      7(ptr) Variable Function
+       26(param):      7(ptr) Variable Function
+              23:      6(int) Load 22(ViewIndex)
+                              Store 20(ViewIndex) 23
+              27:      6(int) Load 20(ViewIndex)
+                              Store 26(param) 27
+              28:    9(fvec4) FunctionCall 12(@main(u1;) 26(param)
+                              Store 25(@entryPointOutput) 28
+                              Return
+                              FunctionEnd
+   12(@main(u1;):    9(fvec4) Function None 10
+   11(ViewIndex):      7(ptr) FunctionParameter
+              13:             Label
+              14:      6(int) Load 11(ViewIndex)
+              15:    8(float) ConvertUToF 14
+              17:    9(fvec4) CompositeConstruct 15 16 16 16
+                              ReturnValue 17
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.nested-runtimeArray.frag.out b/Test/baseResults/hlsl.nested-runtimeArray.frag.out
index f019290..c80ea85 100644
--- a/Test/baseResults/hlsl.nested-runtimeArray.frag.out
+++ b/Test/baseResults/hlsl.nested-runtimeArray.frag.out
@@ -82,13 +82,13 @@
                               Name 15  "B"
                               Name 24  "@entryPointOutput"
                               Decorate 10 ArrayStride 4
-                              MemberDecorate 11(A) 0 Offset 0
                               Decorate 11(A) BufferBlock
+                              MemberDecorate 11(A) 0 Offset 0
                               Decorate 12 ArrayStride 4
-                              MemberDecorate 13(B) 0 Offset 0
                               Decorate 13(B) BufferBlock
-                              Decorate 15(B) DescriptorSet 0
+                              MemberDecorate 13(B) 0 Offset 0
                               Decorate 15(B) Binding 0
+                              Decorate 15(B) DescriptorSet 0
                               Decorate 24(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.noSemantic.functionality1.comp.out b/Test/baseResults/hlsl.noSemantic.functionality1.comp.out
index 1121e0b..ab02db0 100644
--- a/Test/baseResults/hlsl.noSemantic.functionality1.comp.out
+++ b/Test/baseResults/hlsl.noSemantic.functionality1.comp.out
@@ -19,15 +19,15 @@
                               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
+                              MemberDecorate 11(Buf) 0 Offset 0
                               Decorate 13(Buf) Binding 0
-                              MemberDecorate 17(Buf@count) 0 Offset 0
-                              Decorate 17(Buf@count) BufferBlock
-                              Decorate 19(Buf@count) DescriptorSet 0
-                              Decorate 19(Buf@count) Binding 0
+                              Decorate 13(Buf) DescriptorSet 0
                               DecorateId 13(Buf) DecorationHlslCounterBufferGOOGLE 19(Buf@count)
+                              Decorate 17(Buf@count) BufferBlock
+                              MemberDecorate 17(Buf@count) 0 Offset 0
+                              Decorate 19(Buf@count) Binding 0
+                              Decorate 19(Buf@count) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                8:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.opaque-type-bug.frag.out b/Test/baseResults/hlsl.opaque-type-bug.frag.out
index d82509d..2c8a554 100644
--- a/Test/baseResults/hlsl.opaque-type-bug.frag.out
+++ b/Test/baseResults/hlsl.opaque-type-bug.frag.out
@@ -75,8 +75,8 @@
                               Name 20  "MyTexture"
                               Name 22  "final_RGB"
                               Name 23  "param"
-                              Decorate 20(MyTexture) DescriptorSet 0
                               Decorate 20(MyTexture) Binding 0
+                              Decorate 20(MyTexture) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.overload.frag.out b/Test/baseResults/hlsl.overload.frag.out
index 460262e..e196dec 100644
--- a/Test/baseResults/hlsl.overload.frag.out
+++ b/Test/baseResults/hlsl.overload.frag.out
@@ -735,13 +735,13 @@
 
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 520
+// Id's are bound by 519
 
                               Capability Shader
                               Capability Float64
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "PixelShaderFunction" 513 516
+                              EntryPoint Fragment 4  "PixelShaderFunction" 512 515
                               ExecutionMode 4 OriginUpperLeft
                               Source HLSL 500
                               Name 4  "PixelShaderFunction"
@@ -923,17 +923,17 @@
                               Name 471  "param"
                               Name 475  "param"
                               Name 480  "param"
-                              Name 487  "param"
-                              Name 491  "param"
-                              Name 497  "param"
-                              Name 500  "param"
-                              Name 506  "param"
-                              Name 511  "input"
-                              Name 513  "input"
-                              Name 516  "@entryPointOutput"
-                              Name 517  "param"
-                              Decorate 513(input) Location 0
-                              Decorate 516(@entryPointOutput) Location 0
+                              Name 486  "param"
+                              Name 490  "param"
+                              Name 496  "param"
+                              Name 499  "param"
+                              Name 505  "param"
+                              Name 510  "input"
+                              Name 512  "input"
+                              Name 515  "@entryPointOutput"
+                              Name 516  "param"
+                              Decorate 512(input) Location 0
+                              Decorate 515(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 64
@@ -984,23 +984,23 @@
              374:     22(int) Constant 1
              394:   29(float) Constant 1065353216
              414:6(float64_t) Constant 0 1072693248
-             484:             TypeVector 22(int) 2
-             494:             TypeVector 22(int) 4
-             503:             TypeVector 8(bool) 3
-             512:             TypePointer Input 149(fvec4)
-      513(input):    512(ptr) Variable Input
-             515:             TypePointer Output 149(fvec4)
-516(@entryPointOutput):    515(ptr) Variable Output
+             483:             TypeVector 22(int) 2
+             493:             TypeVector 22(int) 4
+             502:             TypeVector 8(bool) 3
+             511:             TypePointer Input 149(fvec4)
+      512(input):    511(ptr) Variable Input
+             514:             TypePointer Output 149(fvec4)
+515(@entryPointOutput):    514(ptr) Variable Output
 4(PixelShaderFunction):           2 Function None 3
                5:             Label
-      511(input):    150(ptr) Variable Function
-      517(param):    150(ptr) Variable Function
-             514:  149(fvec4) Load 513(input)
-                              Store 511(input) 514
-             518:  149(fvec4) Load 511(input)
-                              Store 517(param) 518
-             519:  149(fvec4) FunctionCall 153(@PixelShaderFunction(vf4;) 517(param)
-                              Store 516(@entryPointOutput) 519
+      510(input):    150(ptr) Variable Function
+      516(param):    150(ptr) Variable Function
+             513:  149(fvec4) Load 512(input)
+                              Store 510(input) 513
+             517:  149(fvec4) Load 510(input)
+                              Store 516(param) 517
+             518:  149(fvec4) FunctionCall 153(@PixelShaderFunction(vf4;) 516(param)
+                              Store 515(@entryPointOutput) 518
                               Return
                               FunctionEnd
  13(foo1(d1;b1;):           2 Function None 10
@@ -1278,11 +1278,11 @@
       471(param):     16(ptr) Variable Function
       475(param):      7(ptr) Variable Function
       480(param):    126(ptr) Variable Function
-      487(param):    135(ptr) Variable Function
-      491(param):    105(ptr) Variable Function
-      497(param):     23(ptr) Variable Function
-      500(param):      9(ptr) Variable Function
-      506(param):      9(ptr) Variable Function
+      486(param):    135(ptr) Variable Function
+      490(param):    105(ptr) Variable Function
+      496(param):     23(ptr) Variable Function
+      499(param):      9(ptr) Variable Function
+      505(param):      9(ptr) Variable Function
              158:6(float64_t) Load 155(d)
                               Store 157(param) 158
              160:     8(bool) Load 156(b)
@@ -1598,28 +1598,27 @@
                               Store 480(param) 479
              481:           2 FunctionCall 129(foo12(vd3;) 480(param)
              482:     22(int) Load 173(i)
-             483:     22(int) Load 173(i)
-             485:  484(ivec2) CompositeConstruct 482 483
-             486:  134(ivec2) Bitcast 485
-                              Store 487(param) 486
-             488:           2 FunctionCall 138(foo16(vu2;) 487(param)
-             489:   29(float) Load 179(f)
-             490:  104(fvec3) CompositeConstruct 489 489 489
-                              Store 491(param) 490
-             492:           2 FunctionCall 141(foo13(vf3;) 491(param)
-             493:     22(int) Load 173(i)
-             495:  494(ivec4) CompositeConstruct 493 493 493 493
-             496:     22(int) CompositeExtract 495 0
-                              Store 497(param) 496
-             498:           2 FunctionCall 144(foo14(vi1;) 497(param)
-             499:     8(bool) Load 156(b)
-                              Store 500(param) 499
-             501:           2 FunctionCall 147(foo15(vb1;) 500(param)
-             502:     8(bool) Load 156(b)
-             504:  503(bvec3) CompositeConstruct 502 502 502
-             505:     8(bool) CompositeExtract 504 0
-                              Store 506(param) 505
-             507:           2 FunctionCall 147(foo15(vb1;) 506(param)
-             508:  149(fvec4) Load 152(input)
-                              ReturnValue 508
+             484:  483(ivec2) CompositeConstruct 482 482
+             485:  134(ivec2) Bitcast 484
+                              Store 486(param) 485
+             487:           2 FunctionCall 138(foo16(vu2;) 486(param)
+             488:   29(float) Load 179(f)
+             489:  104(fvec3) CompositeConstruct 488 488 488
+                              Store 490(param) 489
+             491:           2 FunctionCall 141(foo13(vf3;) 490(param)
+             492:     22(int) Load 173(i)
+             494:  493(ivec4) CompositeConstruct 492 492 492 492
+             495:     22(int) CompositeExtract 494 0
+                              Store 496(param) 495
+             497:           2 FunctionCall 144(foo14(vi1;) 496(param)
+             498:     8(bool) Load 156(b)
+                              Store 499(param) 498
+             500:           2 FunctionCall 147(foo15(vb1;) 499(param)
+             501:     8(bool) Load 156(b)
+             503:  502(bvec3) CompositeConstruct 501 501 501
+             504:     8(bool) CompositeExtract 503 0
+                              Store 505(param) 504
+             506:           2 FunctionCall 147(foo15(vb1;) 505(param)
+             507:  149(fvec4) Load 152(input)
+                              ReturnValue 507
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.params.default.frag.out b/Test/baseResults/hlsl.params.default.frag.out
index be1f641..81fc98c 100644
--- a/Test/baseResults/hlsl.params.default.frag.out
+++ b/Test/baseResults/hlsl.params.default.frag.out
@@ -437,10 +437,10 @@
                               Name 168  "param"
                               Name 169  "param"
                               Name 175  "@entryPointOutput"
-                              MemberDecorate 108($Global) 0 Offset 0
                               Decorate 108($Global) Block
-                              Decorate 110 DescriptorSet 0
+                              MemberDecorate 108($Global) 0 Offset 0
                               Decorate 110 Binding 0
+                              Decorate 110 DescriptorSet 0
                               Decorate 175(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.partialFlattenLocal.vert.out b/Test/baseResults/hlsl.partialFlattenLocal.vert.out
index 6a1b1de..c18f10d 100644
--- a/Test/baseResults/hlsl.partialFlattenLocal.vert.out
+++ b/Test/baseResults/hlsl.partialFlattenLocal.vert.out
@@ -262,8 +262,8 @@
                               Name 86  "pos"
                               Name 89  "@entryPointOutput"
                               Name 90  "param"
-                              Decorate 27(tex) DescriptorSet 0
                               Decorate 27(tex) Binding 0
+                              Decorate 27(tex) DescriptorSet 0
                               Decorate 86(pos) Location 0
                               Decorate 89(@entryPointOutput) BuiltIn Position
                2:             TypeVoid
diff --git a/Test/baseResults/hlsl.partialFlattenMixed.vert.out b/Test/baseResults/hlsl.partialFlattenMixed.vert.out
index eae3c98..a34caad 100644
--- a/Test/baseResults/hlsl.partialFlattenMixed.vert.out
+++ b/Test/baseResults/hlsl.partialFlattenMixed.vert.out
@@ -113,10 +113,10 @@
                               Name 36  "pos"
                               Name 39  "@entryPointOutput"
                               Name 40  "param"
-                              Decorate 24(tex[0]) DescriptorSet 0
                               Decorate 24(tex[0]) Binding 0
-                              Decorate 28(tex[1]) DescriptorSet 0
+                              Decorate 24(tex[0]) DescriptorSet 0
                               Decorate 28(tex[1]) Binding 1
+                              Decorate 28(tex[1]) DescriptorSet 0
                               Decorate 36(pos) Location 0
                               Decorate 39(@entryPointOutput) BuiltIn Position
                2:             TypeVoid
diff --git a/Test/baseResults/hlsl.pp.line2.frag.out b/Test/baseResults/hlsl.pp.line2.frag.out
index 1c73bce..81b8d47 100644
--- a/Test/baseResults/hlsl.pp.line2.frag.out
+++ b/Test/baseResults/hlsl.pp.line2.frag.out
@@ -9,9 +9,9 @@
                               EntryPoint Fragment 5  "MainPs" 71 75
                               ExecutionMode 5 OriginUpperLeft
                1:             String  "hlsl.pp.line2.frag"
-              17:             String  "foo.frag"
-              32:             String  "foo.h"
-              42:             String  "foo2.h"
+               7:             String  "foo.frag"
+              36:             String  "foo.h"
+              44:             String  "foo2.h"
                               Source HLSL 500 1  "// OpModuleProcessed auto-map-locations
 // OpModuleProcessed auto-map-bindings
 // OpModuleProcessed entry-point MainPs
@@ -62,59 +62,59 @@
 
 "
                               Name 5  "MainPs"
-                              Name 9  "PS_INPUT"
-                              MemberName 9(PS_INPUT) 0  "vTextureCoords"
-                              Name 12  "PS_OUTPUT"
-                              MemberName 12(PS_OUTPUT) 0  "vColor"
-                              Name 15  "@MainPs(struct-PS_INPUT-vf21;"
-                              Name 14  "i"
-                              Name 19  "PerViewConstantBuffer_t"
-                              MemberName 19(PerViewConstantBuffer_t) 0  "g_nDataIdx"
-                              MemberName 19(PerViewConstantBuffer_t) 1  "g_nDataIdx2"
-                              MemberName 19(PerViewConstantBuffer_t) 2  "g_B"
-                              Name 21  ""
-                              Name 34  "u"
-                              Name 44  "ps_output"
+                              Name 10  "PS_INPUT"
+                              MemberName 10(PS_INPUT) 0  "vTextureCoords"
+                              Name 13  "PS_OUTPUT"
+                              MemberName 13(PS_OUTPUT) 0  "vColor"
+                              Name 16  "@MainPs(struct-PS_INPUT-vf21;"
+                              Name 15  "i"
+                              Name 19  "ps_output"
+                              Name 22  "u"
+                              Name 23  "PerViewConstantBuffer_t"
+                              MemberName 23(PerViewConstantBuffer_t) 0  "g_nDataIdx"
+                              MemberName 23(PerViewConstantBuffer_t) 1  "g_nDataIdx2"
+                              MemberName 23(PerViewConstantBuffer_t) 2  "g_B"
+                              Name 25  ""
                               Name 49  "g_tColor"
                               Name 56  "g_sAniso"
                               Name 69  "i"
                               Name 71  "i.vTextureCoords"
                               Name 75  "@entryPointOutput.vColor"
                               Name 76  "param"
-                              MemberDecorate 19(PerViewConstantBuffer_t) 0 Offset 0
-                              MemberDecorate 19(PerViewConstantBuffer_t) 1 Offset 4
-                              MemberDecorate 19(PerViewConstantBuffer_t) 2 Offset 8
-                              Decorate 19(PerViewConstantBuffer_t) Block
-                              Decorate 49(g_tColor) DescriptorSet 0
+                              Decorate 23(PerViewConstantBuffer_t) Block
+                              MemberDecorate 23(PerViewConstantBuffer_t) 0 Offset 0
+                              MemberDecorate 23(PerViewConstantBuffer_t) 1 Offset 4
+                              MemberDecorate 23(PerViewConstantBuffer_t) 2 Offset 8
                               Decorate 49(g_tColor) Binding 0
-                              Decorate 56(g_sAniso) DescriptorSet 0
+                              Decorate 49(g_tColor) DescriptorSet 0
                               Decorate 56(g_sAniso) Binding 1
+                              Decorate 56(g_sAniso) DescriptorSet 0
                               Decorate 71(i.vTextureCoords) Location 0
                               Decorate 75(@entryPointOutput.vColor) Location 0
                3:             TypeVoid
                4:             TypeFunction 3
-               7:             TypeFloat 32
-               8:             TypeVector 7(float) 2
-     9(PS_INPUT):             TypeStruct 8(fvec2)
-              10:             TypePointer Function 9(PS_INPUT)
-              11:             TypeVector 7(float) 4
-   12(PS_OUTPUT):             TypeStruct 11(fvec4)
-              13:             TypeFunction 12(PS_OUTPUT) 10(ptr)
-              18:             TypeInt 32 0
-19(PerViewConstantBuffer_t):             TypeStruct 18(int) 18(int) 18(int)
-              20:             TypePointer PushConstant 19(PerViewConstantBuffer_t)
-              21:     20(ptr) Variable PushConstant
-              22:             TypeInt 32 1
-              23:     22(int) Constant 2
-              24:             TypePointer PushConstant 18(int)
-              27:             TypeBool
-              28:     18(int) Constant 0
-              33:             TypePointer Function 18(int)
-              35:     22(int) Constant 0
-              39:     22(int) Constant 1
-              43:             TypePointer Function 12(PS_OUTPUT)
-              45:             TypeImage 7(float) 2D sampled format:Unknown
-              46:     18(int) Constant 128
+               8:             TypeFloat 32
+               9:             TypeVector 8(float) 2
+    10(PS_INPUT):             TypeStruct 9(fvec2)
+              11:             TypePointer Function 10(PS_INPUT)
+              12:             TypeVector 8(float) 4
+   13(PS_OUTPUT):             TypeStruct 12(fvec4)
+              14:             TypeFunction 13(PS_OUTPUT) 11(ptr)
+              18:             TypePointer Function 13(PS_OUTPUT)
+              20:             TypeInt 32 0
+              21:             TypePointer Function 20(int)
+23(PerViewConstantBuffer_t):             TypeStruct 20(int) 20(int) 20(int)
+              24:             TypePointer PushConstant 23(PerViewConstantBuffer_t)
+              25:     24(ptr) Variable PushConstant
+              26:             TypeInt 32 1
+              27:     26(int) Constant 2
+              28:             TypePointer PushConstant 20(int)
+              31:             TypeBool
+              32:     20(int) Constant 0
+              37:     26(int) Constant 0
+              41:     26(int) Constant 1
+              45:             TypeImage 8(float) 2D sampled format:Unknown
+              46:     20(int) Constant 128
               47:             TypeArray 45 46
               48:             TypePointer UniformConstant 47
     49(g_tColor):     48(ptr) Variable UniformConstant
@@ -123,65 +123,65 @@
               55:             TypePointer UniformConstant 54
     56(g_sAniso):     55(ptr) Variable UniformConstant
               58:             TypeSampledImage 45
-              60:             TypePointer Function 8(fvec2)
-              64:             TypePointer Function 11(fvec4)
-              70:             TypePointer Input 8(fvec2)
+              60:             TypePointer Function 9(fvec2)
+              64:             TypePointer Function 12(fvec4)
+              70:             TypePointer Input 9(fvec2)
 71(i.vTextureCoords):     70(ptr) Variable Input
-              74:             TypePointer Output 11(fvec4)
+              74:             TypePointer Output 12(fvec4)
 75(@entryPointOutput.vColor):     74(ptr) Variable Output
-                              Line 17 23 1
+                              Line 7 23 1
        5(MainPs):           3 Function None 4
                6:             Label
-           69(i):     10(ptr) Variable Function
-       76(param):     10(ptr) Variable Function
-                              Line 17 23 0
-              72:    8(fvec2) Load 71(i.vTextureCoords)
-              73:     60(ptr) AccessChain 69(i) 35
+           69(i):     11(ptr) Variable Function
+       76(param):     11(ptr) Variable Function
+                              Line 7 23 0
+              72:    9(fvec2) Load 71(i.vTextureCoords)
+              73:     60(ptr) AccessChain 69(i) 37
                               Store 73 72
-              77: 9(PS_INPUT) Load 69(i)
+              77:10(PS_INPUT) Load 69(i)
                               Store 76(param) 77
-              78:12(PS_OUTPUT) FunctionCall 15(@MainPs(struct-PS_INPUT-vf21;) 76(param)
-              79:   11(fvec4) CompositeExtract 78 0
+              78:13(PS_OUTPUT) FunctionCall 16(@MainPs(struct-PS_INPUT-vf21;) 76(param)
+              79:   12(fvec4) CompositeExtract 78 0
                               Store 75(@entryPointOutput.vColor) 79
                               Return
                               FunctionEnd
-                              Line 17 23 1
-15(@MainPs(struct-PS_INPUT-vf21;):12(PS_OUTPUT) Function None 13
-           14(i):     10(ptr) FunctionParameter
-              16:             Label
-           34(u):     33(ptr) Variable Function
-   44(ps_output):     43(ptr) Variable Function
-                              Line 17 47 0
-              25:     24(ptr) AccessChain 21 23
-              26:     18(int) Load 25
-              29:    27(bool) INotEqual 26 28
-                              SelectionMerge 31 None
-                              BranchConditional 29 30 38
-              30:               Label
-                                Line 32 3 0
-              36:     24(ptr)   AccessChain 21 35
-              37:     18(int)   Load 36
-                                Store 34(u) 37
-                                Branch 31
-              38:               Label
-                                Line 32 67 0
-              40:     24(ptr)   AccessChain 21 39
-              41:     18(int)   Load 40
-                                Store 34(u) 41
-                                Branch 31
-              31:             Label
-                              Line 42 7 0
-              50:     18(int) Load 34(u)
+                              Line 7 23 1
+16(@MainPs(struct-PS_INPUT-vf21;):13(PS_OUTPUT) Function None 14
+           15(i):     11(ptr) FunctionParameter
+              17:             Label
+   19(ps_output):     18(ptr) Variable Function
+           22(u):     21(ptr) Variable Function
+                              Line 7 47 0
+              29:     28(ptr) AccessChain 25 27
+              30:     20(int) Load 29
+              33:    31(bool) INotEqual 30 32
+                              SelectionMerge 35 None
+                              BranchConditional 33 34 40
+              34:               Label
+                                Line 36 3 0
+              38:     28(ptr)   AccessChain 25 37
+              39:     20(int)   Load 38
+                                Store 22(u) 39
+                                Branch 35
+              40:               Label
+                                Line 36 67 0
+              42:     28(ptr)   AccessChain 25 41
+              43:     20(int)   Load 42
+                                Store 22(u) 43
+                                Branch 35
+              35:             Label
+                              Line 44 7 0
+              50:     20(int) Load 22(u)
               52:     51(ptr) AccessChain 49(g_tColor) 50
               53:          45 Load 52
               57:          54 Load 56(g_sAniso)
               59:          58 SampledImage 53 57
-              61:     60(ptr) AccessChain 14(i) 35
-              62:    8(fvec2) Load 61
-              63:   11(fvec4) ImageSampleImplicitLod 59 62
-              65:     64(ptr) AccessChain 44(ps_output) 35
+              61:     60(ptr) AccessChain 15(i) 37
+              62:    9(fvec2) Load 61
+              63:   12(fvec4) ImageSampleImplicitLod 59 62
+              65:     64(ptr) AccessChain 19(ps_output) 37
                               Store 65 63
-                              Line 42 105 0
-              66:12(PS_OUTPUT) Load 44(ps_output)
+                              Line 44 105 0
+              66:13(PS_OUTPUT) Load 19(ps_output)
                               ReturnValue 66
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.pp.line3.frag.out b/Test/baseResults/hlsl.pp.line3.frag.out
index 717a21b..a2c43de 100644
--- a/Test/baseResults/hlsl.pp.line3.frag.out
+++ b/Test/baseResults/hlsl.pp.line3.frag.out
@@ -72,14 +72,14 @@
                               Name 69  "i.vTextureCoords"
                               Name 73  "@entryPointOutput.vColor"
                               Name 74  "param"
+                              Decorate 19(PerViewConstantBuffer_t) Block
                               MemberDecorate 19(PerViewConstantBuffer_t) 0 Offset 0
                               MemberDecorate 19(PerViewConstantBuffer_t) 1 Offset 4
                               MemberDecorate 19(PerViewConstantBuffer_t) 2 Offset 8
-                              Decorate 19(PerViewConstantBuffer_t) Block
-                              Decorate 47(g_tColor) DescriptorSet 0
                               Decorate 47(g_tColor) Binding 0
-                              Decorate 54(g_sAniso) DescriptorSet 0
+                              Decorate 47(g_tColor) DescriptorSet 0
                               Decorate 54(g_sAniso) Binding 0
+                              Decorate 54(g_sAniso) DescriptorSet 0
                               Decorate 69(i.vTextureCoords) Location 0
                               Decorate 73(@entryPointOutput.vColor) Location 0
                4:             TypeVoid
diff --git a/Test/baseResults/hlsl.pp.line4.frag.out b/Test/baseResults/hlsl.pp.line4.frag.out
index da968b2..a7dfd50 100644
--- a/Test/baseResults/hlsl.pp.line4.frag.out
+++ b/Test/baseResults/hlsl.pp.line4.frag.out
@@ -9,8 +9,8 @@
                               EntryPoint Fragment 5  "MainPs" 70 74
                               ExecutionMode 5 OriginUpperLeft
                1:             String  "hlsl.pp.line4.frag"
-              17:             String  "C:\\Users\\Greg\\shaders\\line\\foo4.frag"
-              32:             String  "C:\\Users\\Greg\\shaders\\line\\u1.h"
+               7:             String  "C:\\Users\\Greg\\shaders\\line\\foo4.frag"
+              36:             String  "C:\\Users\\Greg\\shaders\\line\\u1.h"
                               Source HLSL 500 1  "// OpModuleProcessed auto-map-locations
 // OpModuleProcessed auto-map-bindings
 // OpModuleProcessed entry-point MainPs
@@ -63,43 +63,43 @@
 
 "
                               Name 5  "MainPs"
-                              Name 19  "PerViewConstantBuffer_t"
-                              MemberName 19(PerViewConstantBuffer_t) 0  "g_nDataIdx"
-                              MemberName 19(PerViewConstantBuffer_t) 1  "g_nDataIdx2"
-                              MemberName 19(PerViewConstantBuffer_t) 2  "g_B"
-                              Name 21  ""
+                              Name 23  "PerViewConstantBuffer_t"
+                              MemberName 23(PerViewConstantBuffer_t) 0  "g_nDataIdx"
+                              MemberName 23(PerViewConstantBuffer_t) 1  "g_nDataIdx2"
+                              MemberName 23(PerViewConstantBuffer_t) 2  "g_B"
+                              Name 25  ""
                               Name 48  "g_tColor"
                               Name 55  "g_sAniso"
                               Name 70  "i.vTextureCoords"
                               Name 74  "@entryPointOutput.vColor"
-                              MemberDecorate 19(PerViewConstantBuffer_t) 0 Offset 0
-                              MemberDecorate 19(PerViewConstantBuffer_t) 1 Offset 4
-                              MemberDecorate 19(PerViewConstantBuffer_t) 2 Offset 8
-                              Decorate 19(PerViewConstantBuffer_t) Block
-                              Decorate 48(g_tColor) DescriptorSet 0
+                              Decorate 23(PerViewConstantBuffer_t) Block
+                              MemberDecorate 23(PerViewConstantBuffer_t) 0 Offset 0
+                              MemberDecorate 23(PerViewConstantBuffer_t) 1 Offset 4
+                              MemberDecorate 23(PerViewConstantBuffer_t) 2 Offset 8
                               Decorate 48(g_tColor) Binding 0
-                              Decorate 55(g_sAniso) DescriptorSet 0
+                              Decorate 48(g_tColor) DescriptorSet 0
                               Decorate 55(g_sAniso) Binding 1
+                              Decorate 55(g_sAniso) DescriptorSet 0
                               Decorate 70(i.vTextureCoords) Location 0
                               Decorate 74(@entryPointOutput.vColor) Location 0
                3:             TypeVoid
                4:             TypeFunction 3
-               7:             TypeFloat 32
-               8:             TypeVector 7(float) 2
-              11:             TypeVector 7(float) 4
-              18:             TypeInt 32 0
-19(PerViewConstantBuffer_t):             TypeStruct 18(int) 18(int) 18(int)
-              20:             TypePointer PushConstant 19(PerViewConstantBuffer_t)
-              21:     20(ptr) Variable PushConstant
-              22:             TypeInt 32 1
-              23:     22(int) Constant 2
-              24:             TypePointer PushConstant 18(int)
-              27:             TypeBool
-              28:     18(int) Constant 0
-              35:     22(int) Constant 0
-              39:     22(int) Constant 1
-              44:             TypeImage 7(float) 2D sampled format:Unknown
-              45:     18(int) Constant 128
+               8:             TypeFloat 32
+               9:             TypeVector 8(float) 2
+              12:             TypeVector 8(float) 4
+              20:             TypeInt 32 0
+23(PerViewConstantBuffer_t):             TypeStruct 20(int) 20(int) 20(int)
+              24:             TypePointer PushConstant 23(PerViewConstantBuffer_t)
+              25:     24(ptr) Variable PushConstant
+              26:             TypeInt 32 1
+              27:     26(int) Constant 2
+              28:             TypePointer PushConstant 20(int)
+              31:             TypeBool
+              32:     20(int) Constant 0
+              37:     26(int) Constant 0
+              41:     26(int) Constant 1
+              44:             TypeImage 8(float) 2D sampled format:Unknown
+              45:     20(int) Constant 128
               46:             TypeArray 44 45
               47:             TypePointer UniformConstant 46
     48(g_tColor):     47(ptr) Variable UniformConstant
@@ -108,41 +108,41 @@
               54:             TypePointer UniformConstant 53
     55(g_sAniso):     54(ptr) Variable UniformConstant
               57:             TypeSampledImage 44
-              69:             TypePointer Input 8(fvec2)
+              69:             TypePointer Input 9(fvec2)
 70(i.vTextureCoords):     69(ptr) Variable Input
-              73:             TypePointer Output 11(fvec4)
+              73:             TypePointer Output 12(fvec4)
 74(@entryPointOutput.vColor):     73(ptr) Variable Output
-                              Line 17 25 1
+                              Line 7 25 1
        5(MainPs):           3 Function None 4
                               NoLine
                6:             Label
-                              Line 17 25 0
-              71:    8(fvec2) Load 70(i.vTextureCoords)
-                              Line 17 29 0
-              83:     24(ptr) AccessChain 21 23
-              84:     18(int) Load 83
-              85:    27(bool) INotEqual 84 28
+                              Line 7 25 0
+              71:    9(fvec2) Load 70(i.vTextureCoords)
+                              Line 7 29 0
+              83:     28(ptr) AccessChain 25 27
+              84:     20(int) Load 83
+              85:    31(bool) INotEqual 84 32
                               SelectionMerge 92 None
                               BranchConditional 85 86 89
               86:               Label
-                                Line 32 1 0
-              87:     24(ptr)   AccessChain 21 35
-              88:     18(int)   Load 87
+                                Line 36 1 0
+              87:     28(ptr)   AccessChain 25 37
+              88:     20(int)   Load 87
                                 Branch 92
               89:               Label
-                                Line 17 32 0
-              90:     24(ptr)   AccessChain 21 39
-              91:     18(int)   Load 90
+                                Line 7 32 0
+              90:     28(ptr)   AccessChain 25 41
+              91:     20(int)   Load 90
                                 Branch 92
               92:             Label
-             115:     18(int) Phi 88 86 91 89
-                              Line 17 33 0
+             115:     20(int) Phi 88 86 91 89
+                              Line 7 33 0
               94:     50(ptr) AccessChain 48(g_tColor) 115
               95:          44 Load 94
               96:          53 Load 55(g_sAniso)
               97:          57 SampledImage 95 96
-             100:   11(fvec4) ImageSampleImplicitLod 97 71
-                              Line 17 25 0
+             100:   12(fvec4) ImageSampleImplicitLod 97 71
+                              Line 7 25 0
                               Store 74(@entryPointOutput.vColor) 100
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.pp.vert.out b/Test/baseResults/hlsl.pp.vert.out
index 652cf17..c085041 100644
--- a/Test/baseResults/hlsl.pp.vert.out
+++ b/Test/baseResults/hlsl.pp.vert.out
@@ -40,11 +40,11 @@
                               MemberName 10($Global) 0  "goodGlobal1"
                               MemberName 10($Global) 1  "goodGlobal2"
                               Name 12  ""
+                              Decorate 10($Global) Block
                               MemberDecorate 10($Global) 0 Offset 0
                               MemberDecorate 10($Global) 1 Offset 4
-                              Decorate 10($Global) Block
-                              Decorate 12 DescriptorSet 0
                               Decorate 12 Binding 0
+                              Decorate 12 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                9:             TypeInt 32 1
diff --git a/Test/baseResults/hlsl.preprocessor.frag.out b/Test/baseResults/hlsl.preprocessor.frag.out
index 106762b..d0795d8 100644
--- a/Test/baseResults/hlsl.preprocessor.frag.out
+++ b/Test/baseResults/hlsl.preprocessor.frag.out
@@ -113,10 +113,10 @@
                               Name 33  "input"
                               Name 36  "@entryPointOutput"
                               Name 37  "param"
-                              Decorate 16(test_texture) DescriptorSet 0
                               Decorate 16(test_texture) Binding 0
-                              Decorate 20(test_texture_ss) DescriptorSet 0
+                              Decorate 16(test_texture) DescriptorSet 0
                               Decorate 20(test_texture_ss) Binding 1
+                              Decorate 20(test_texture_ss) DescriptorSet 0
                               Decorate 33(input) Location 0
                               Decorate 36(@entryPointOutput) Location 0
                2:             TypeVoid
diff --git a/Test/baseResults/hlsl.promote.atomic.frag.out b/Test/baseResults/hlsl.promote.atomic.frag.out
index 91b1d58..22d578e 100644
--- a/Test/baseResults/hlsl.promote.atomic.frag.out
+++ b/Test/baseResults/hlsl.promote.atomic.frag.out
@@ -81,8 +81,8 @@
                               Name 18  "Loc"
                               Name 20  "Inc"
                               Name 34  "@entryPointOutput"
-                              Decorate 17(s_uintbuff) DescriptorSet 0
                               Decorate 17(s_uintbuff) Binding 0
+                              Decorate 17(s_uintbuff) DescriptorSet 0
                               Decorate 34(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.promote.binary.frag.out b/Test/baseResults/hlsl.promote.binary.frag.out
index f9f57a4..d2dee88 100644
--- a/Test/baseResults/hlsl.promote.binary.frag.out
+++ b/Test/baseResults/hlsl.promote.binary.frag.out
@@ -196,15 +196,15 @@
                               Name 66  "l_int"
                               Name 73  "psout"
                               Name 80  "@entryPointOutput.Color"
+                              Decorate 16($Global) Block
                               MemberDecorate 16($Global) 0 Offset 0
                               MemberDecorate 16($Global) 1 Offset 16
                               MemberDecorate 16($Global) 2 Offset 32
                               MemberDecorate 16($Global) 3 Offset 48
                               MemberDecorate 16($Global) 4 Offset 64
                               MemberDecorate 16($Global) 5 Offset 80
-                              Decorate 16($Global) Block
-                              Decorate 18 DescriptorSet 0
                               Decorate 18 Binding 0
+                              Decorate 18 DescriptorSet 0
                               Decorate 80(@entryPointOutput.Color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.promotions.frag.out b/Test/baseResults/hlsl.promotions.frag.out
index 6d73cc7..7bc2bb6 100644
--- a/Test/baseResults/hlsl.promotions.frag.out
+++ b/Test/baseResults/hlsl.promotions.frag.out
@@ -1683,6 +1683,7 @@
                               Name 578  "outval"
                               Name 586  "psout"
                               Name 593  "@entryPointOutput.Color"
+                              Decorate 111($Global) Block
                               MemberDecorate 111($Global) 0 Offset 0
                               MemberDecorate 111($Global) 1 Offset 16
                               MemberDecorate 111($Global) 2 Offset 32
@@ -1693,9 +1694,8 @@
                               MemberDecorate 111($Global) 7 Offset 96
                               MemberDecorate 111($Global) 8 Offset 100
                               MemberDecorate 111($Global) 9 Offset 104
-                              Decorate 111($Global) Block
-                              Decorate 113 DescriptorSet 0
                               Decorate 113 Binding 0
+                              Decorate 113 DescriptorSet 0
                               Decorate 593(@entryPointOutput.Color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.round.dx9.frag.out b/Test/baseResults/hlsl.round.dx9.frag.out
index d4ff02a..4e0a791 100644
--- a/Test/baseResults/hlsl.round.dx9.frag.out
+++ b/Test/baseResults/hlsl.round.dx9.frag.out
@@ -5,7 +5,7 @@
 0:2  Function Definition: PixelShaderFunction(vf4; ( temp 4-component vector of float)
 0:2    Function Parameters: 
 0:2      'input' ( in 4-component vector of float)
-0:?     Sequence
+0:?     Scope
 0:3      Branch: Return with expression
 0:3        round ( temp 4-component vector of float)
 0:3          'input' ( in 4-component vector of float)
@@ -22,7 +22,7 @@
 0:2  Function Definition: PixelShaderFunction(vf4; ( temp 4-component vector of float)
 0:2    Function Parameters: 
 0:2      'input' ( in 4-component vector of float)
-0:?     Sequence
+0:?     Scope
 0:3      Branch: Return with expression
 0:3        round ( temp 4-component vector of float)
 0:3          'input' ( in 4-component vector of float)
@@ -58,6 +58,7 @@
               10:             TypeFunction 8(fvec4) 9(ptr)
          5(main):           3 Function None 4
                6:             Label
+                              Line 1 3 0
                               Return
                               FunctionEnd
                               Line 1 2 1
diff --git a/Test/baseResults/hlsl.rw.atomics.frag.out b/Test/baseResults/hlsl.rw.atomics.frag.out
index 83169f1..8075419 100644
--- a/Test/baseResults/hlsl.rw.atomics.frag.out
+++ b/Test/baseResults/hlsl.rw.atomics.frag.out
@@ -3996,8 +3996,9 @@
                               Name 1140  "g_tTex2di1a"
                               Name 1143  "g_tTex2du1a"
                               Name 1146  "g_tBuffF"
-                              Decorate 15(g_tTex1di1) DescriptorSet 0
                               Decorate 15(g_tTex1di1) Binding 0
+                              Decorate 15(g_tTex1di1) DescriptorSet 0
+                              Decorate 21($Global) Block
                               MemberDecorate 21($Global) 0 Offset 0
                               MemberDecorate 21($Global) 1 Offset 8
                               MemberDecorate 21($Global) 2 Offset 16
@@ -4008,46 +4009,45 @@
                               MemberDecorate 21($Global) 7 Offset 48
                               MemberDecorate 21($Global) 8 Offset 60
                               MemberDecorate 21($Global) 9 Offset 64
-                              Decorate 21($Global) Block
-                              Decorate 23 DescriptorSet 0
                               Decorate 23 Binding 10
-                              Decorate 121(g_tTex1du1) DescriptorSet 0
+                              Decorate 23 DescriptorSet 0
                               Decorate 121(g_tTex1du1) Binding 1
-                              Decorate 217(g_tTex2di1) DescriptorSet 0
+                              Decorate 121(g_tTex1du1) DescriptorSet 0
                               Decorate 217(g_tTex2di1) Binding 2
-                              Decorate 308(g_tTex2du1) DescriptorSet 0
+                              Decorate 217(g_tTex2di1) DescriptorSet 0
                               Decorate 308(g_tTex2du1) Binding 3
-                              Decorate 399(g_tTex3di1) DescriptorSet 0
+                              Decorate 308(g_tTex2du1) DescriptorSet 0
                               Decorate 399(g_tTex3di1) Binding 4
-                              Decorate 490(g_tTex3du1) DescriptorSet 0
+                              Decorate 399(g_tTex3di1) DescriptorSet 0
                               Decorate 490(g_tTex3du1) Binding 5
-                              Decorate 581(g_tTex1di1a) DescriptorSet 0
+                              Decorate 490(g_tTex3du1) DescriptorSet 0
                               Decorate 581(g_tTex1di1a) Binding 6
-                              Decorate 670(g_tTex1du1a) DescriptorSet 0
+                              Decorate 581(g_tTex1di1a) DescriptorSet 0
                               Decorate 670(g_tTex1du1a) Binding 7
-                              Decorate 931(g_tBuffI) DescriptorSet 0
+                              Decorate 670(g_tTex1du1a) DescriptorSet 0
                               Decorate 931(g_tBuffI) Binding 8
-                              Decorate 1020(g_tBuffU) DescriptorSet 0
+                              Decorate 931(g_tBuffI) DescriptorSet 0
                               Decorate 1020(g_tBuffU) Binding 9
+                              Decorate 1020(g_tBuffU) DescriptorSet 0
                               Decorate 1117(@entryPointOutput.Color) Location 0
-                              Decorate 1122(g_sSamp) DescriptorSet 0
                               Decorate 1122(g_sSamp) Binding 0
-                              Decorate 1125(g_tTex1df1) DescriptorSet 0
+                              Decorate 1122(g_sSamp) DescriptorSet 0
                               Decorate 1125(g_tTex1df1) Binding 0
-                              Decorate 1128(g_tTex2df1) DescriptorSet 0
+                              Decorate 1125(g_tTex1df1) DescriptorSet 0
                               Decorate 1128(g_tTex2df1) Binding 0
-                              Decorate 1131(g_tTex3df1) DescriptorSet 0
+                              Decorate 1128(g_tTex2df1) DescriptorSet 0
                               Decorate 1131(g_tTex3df1) Binding 0
-                              Decorate 1134(g_tTex1df1a) DescriptorSet 0
+                              Decorate 1131(g_tTex3df1) DescriptorSet 0
                               Decorate 1134(g_tTex1df1a) Binding 0
-                              Decorate 1137(g_tTex2df1a) DescriptorSet 0
+                              Decorate 1134(g_tTex1df1a) DescriptorSet 0
                               Decorate 1137(g_tTex2df1a) Binding 0
-                              Decorate 1140(g_tTex2di1a) DescriptorSet 0
+                              Decorate 1137(g_tTex2df1a) DescriptorSet 0
                               Decorate 1140(g_tTex2di1a) Binding 0
-                              Decorate 1143(g_tTex2du1a) DescriptorSet 0
+                              Decorate 1140(g_tTex2di1a) DescriptorSet 0
                               Decorate 1143(g_tTex2du1a) Binding 0
-                              Decorate 1146(g_tBuffF) DescriptorSet 0
+                              Decorate 1143(g_tTex2du1a) DescriptorSet 0
                               Decorate 1146(g_tBuffF) Binding 0
+                              Decorate 1146(g_tBuffF) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.rw.bracket.frag.out b/Test/baseResults/hlsl.rw.bracket.frag.out
index 02ed379..f199c62 100644
--- a/Test/baseResults/hlsl.rw.bracket.frag.out
+++ b/Test/baseResults/hlsl.rw.bracket.frag.out
@@ -1880,6 +1880,7 @@
                               Name 600  "g_tTex2df4a"
                               Name 603  "g_tTex2di4a"
                               Name 606  "g_tTex2du4a"
+                              Decorate 63($Global) Block
                               MemberDecorate 63($Global) 0 Offset 0
                               MemberDecorate 63($Global) 1 Offset 8
                               MemberDecorate 63($Global) 2 Offset 16
@@ -1891,42 +1892,41 @@
                               MemberDecorate 63($Global) 8 Offset 96
                               MemberDecorate 63($Global) 9 Offset 112
                               MemberDecorate 63($Global) 10 Offset 128
-                              Decorate 63($Global) Block
-                              Decorate 65 DescriptorSet 0
                               Decorate 65 Binding 9
-                              Decorate 75(g_tTex1df4) DescriptorSet 0
+                              Decorate 65 DescriptorSet 0
                               Decorate 75(g_tTex1df4) Binding 0
-                              Decorate 89(g_tTex1di4) DescriptorSet 0
+                              Decorate 75(g_tTex1df4) DescriptorSet 0
                               Decorate 89(g_tTex1di4) Binding 1
-                              Decorate 97(g_tTex1du4) DescriptorSet 0
+                              Decorate 89(g_tTex1di4) DescriptorSet 0
                               Decorate 97(g_tTex1du4) Binding 2
-                              Decorate 105(g_tTex2df4) DescriptorSet 0
+                              Decorate 97(g_tTex1du4) DescriptorSet 0
                               Decorate 105(g_tTex2df4) Binding 3
-                              Decorate 115(g_tTex2di4) DescriptorSet 0
+                              Decorate 105(g_tTex2df4) DescriptorSet 0
                               Decorate 115(g_tTex2di4) Binding 4
-                              Decorate 123(g_tTex2du4) DescriptorSet 0
+                              Decorate 115(g_tTex2di4) DescriptorSet 0
                               Decorate 123(g_tTex2du4) Binding 5
-                              Decorate 131(g_tTex3df4) DescriptorSet 0
+                              Decorate 123(g_tTex2du4) DescriptorSet 0
                               Decorate 131(g_tTex3df4) Binding 6
-                              Decorate 141(g_tTex3di4) DescriptorSet 0
+                              Decorate 131(g_tTex3df4) DescriptorSet 0
                               Decorate 141(g_tTex3di4) Binding 7
-                              Decorate 149(g_tTex3du4) DescriptorSet 0
+                              Decorate 141(g_tTex3di4) DescriptorSet 0
                               Decorate 149(g_tTex3du4) Binding 8
+                              Decorate 149(g_tTex3du4) DescriptorSet 0
                               Decorate 583(@entryPointOutput.Color) Location 0
-                              Decorate 588(g_sSamp) DescriptorSet 0
                               Decorate 588(g_sSamp) Binding 0
-                              Decorate 591(g_tTex1df4a) DescriptorSet 0
+                              Decorate 588(g_sSamp) DescriptorSet 0
                               Decorate 591(g_tTex1df4a) Binding 0
-                              Decorate 594(g_tTex1di4a) DescriptorSet 0
+                              Decorate 591(g_tTex1df4a) DescriptorSet 0
                               Decorate 594(g_tTex1di4a) Binding 0
-                              Decorate 597(g_tTex1du4a) DescriptorSet 0
+                              Decorate 594(g_tTex1di4a) DescriptorSet 0
                               Decorate 597(g_tTex1du4a) Binding 0
-                              Decorate 600(g_tTex2df4a) DescriptorSet 0
+                              Decorate 597(g_tTex1du4a) DescriptorSet 0
                               Decorate 600(g_tTex2df4a) Binding 0
-                              Decorate 603(g_tTex2di4a) DescriptorSet 0
+                              Decorate 600(g_tTex2df4a) DescriptorSet 0
                               Decorate 603(g_tTex2di4a) Binding 0
-                              Decorate 606(g_tTex2du4a) DescriptorSet 0
+                              Decorate 603(g_tTex2di4a) DescriptorSet 0
                               Decorate 606(g_tTex2du4a) Binding 0
+                              Decorate 606(g_tTex2du4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
diff --git a/Test/baseResults/hlsl.rw.register.frag.out b/Test/baseResults/hlsl.rw.register.frag.out
index 558bf42..a4f3773 100644
--- a/Test/baseResults/hlsl.rw.register.frag.out
+++ b/Test/baseResults/hlsl.rw.register.frag.out
@@ -119,10 +119,10 @@
                               Name 27  "g_tBuf1du1"
                               Name 33  "psout"
                               Name 42  "@entryPointOutput.Color"
-                              Decorate 16(g_tTex1df1) DescriptorSet 0
                               Decorate 16(g_tTex1df1) Binding 2
-                              Decorate 27(g_tBuf1du1) DescriptorSet 0
+                              Decorate 16(g_tTex1df1) DescriptorSet 0
                               Decorate 27(g_tBuf1du1) Binding 3
+                              Decorate 27(g_tBuf1du1) DescriptorSet 0
                               Decorate 42(@entryPointOutput.Color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.rw.scalar.bracket.frag.out b/Test/baseResults/hlsl.rw.scalar.bracket.frag.out
index f2bef19..20c7600 100644
--- a/Test/baseResults/hlsl.rw.scalar.bracket.frag.out
+++ b/Test/baseResults/hlsl.rw.scalar.bracket.frag.out
@@ -1826,6 +1826,7 @@
                               Name 600  "g_tTex2df1a"
                               Name 603  "g_tTex2di1a"
                               Name 606  "g_tTex2du1a"
+                              Decorate 59($Global) Block
                               MemberDecorate 59($Global) 0 Offset 0
                               MemberDecorate 59($Global) 1 Offset 8
                               MemberDecorate 59($Global) 2 Offset 16
@@ -1837,42 +1838,41 @@
                               MemberDecorate 59($Global) 8 Offset 96
                               MemberDecorate 59($Global) 9 Offset 100
                               MemberDecorate 59($Global) 10 Offset 104
-                              Decorate 59($Global) Block
-                              Decorate 61 DescriptorSet 0
                               Decorate 61 Binding 10
-                              Decorate 70(g_tTex1df1) DescriptorSet 0
+                              Decorate 61 DescriptorSet 0
                               Decorate 70(g_tTex1df1) Binding 1
-                              Decorate 85(g_tTex1di1) DescriptorSet 0
+                              Decorate 70(g_tTex1df1) DescriptorSet 0
                               Decorate 85(g_tTex1di1) Binding 2
-                              Decorate 94(g_tTex1du1) DescriptorSet 0
+                              Decorate 85(g_tTex1di1) DescriptorSet 0
                               Decorate 94(g_tTex1du1) Binding 3
-                              Decorate 104(g_tTex2df1) DescriptorSet 0
+                              Decorate 94(g_tTex1du1) DescriptorSet 0
                               Decorate 104(g_tTex2df1) Binding 4
-                              Decorate 115(g_tTex2di1) DescriptorSet 0
+                              Decorate 104(g_tTex2df1) DescriptorSet 0
                               Decorate 115(g_tTex2di1) Binding 5
-                              Decorate 124(g_tTex2du1) DescriptorSet 0
+                              Decorate 115(g_tTex2di1) DescriptorSet 0
                               Decorate 124(g_tTex2du1) Binding 6
-                              Decorate 133(g_tTex3df1) DescriptorSet 0
+                              Decorate 124(g_tTex2du1) DescriptorSet 0
                               Decorate 133(g_tTex3df1) Binding 7
-                              Decorate 144(g_tTex3di1) DescriptorSet 0
+                              Decorate 133(g_tTex3df1) DescriptorSet 0
                               Decorate 144(g_tTex3di1) Binding 8
-                              Decorate 153(g_tTex3du1) DescriptorSet 0
+                              Decorate 144(g_tTex3di1) DescriptorSet 0
                               Decorate 153(g_tTex3du1) Binding 9
+                              Decorate 153(g_tTex3du1) DescriptorSet 0
                               Decorate 583(@entryPointOutput.Color) Location 0
-                              Decorate 588(g_sSamp) DescriptorSet 0
                               Decorate 588(g_sSamp) Binding 0
-                              Decorate 591(g_tTex1df1a) DescriptorSet 0
+                              Decorate 588(g_sSamp) DescriptorSet 0
                               Decorate 591(g_tTex1df1a) Binding 0
-                              Decorate 594(g_tTex1di1a) DescriptorSet 0
+                              Decorate 591(g_tTex1df1a) DescriptorSet 0
                               Decorate 594(g_tTex1di1a) Binding 0
-                              Decorate 597(g_tTex1du1a) DescriptorSet 0
+                              Decorate 594(g_tTex1di1a) DescriptorSet 0
                               Decorate 597(g_tTex1du1a) Binding 0
-                              Decorate 600(g_tTex2df1a) DescriptorSet 0
+                              Decorate 597(g_tTex1du1a) DescriptorSet 0
                               Decorate 600(g_tTex2df1a) Binding 0
-                              Decorate 603(g_tTex2di1a) DescriptorSet 0
+                              Decorate 600(g_tTex2df1a) DescriptorSet 0
                               Decorate 603(g_tTex2di1a) Binding 0
-                              Decorate 606(g_tTex2du1a) DescriptorSet 0
+                              Decorate 603(g_tTex2di1a) DescriptorSet 0
                               Decorate 606(g_tTex2du1a) Binding 0
+                              Decorate 606(g_tTex2du1a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
diff --git a/Test/baseResults/hlsl.rw.swizzle.frag.out b/Test/baseResults/hlsl.rw.swizzle.frag.out
index 5121ceb..28788f9 100644
--- a/Test/baseResults/hlsl.rw.swizzle.frag.out
+++ b/Test/baseResults/hlsl.rw.swizzle.frag.out
@@ -223,11 +223,11 @@
                               Name 46  "storeTemp"
                               Name 58  "@entryPointOutput"
                               Name 62  "buf"
-                              Decorate 35(rwtx) DescriptorSet 0
                               Decorate 35(rwtx) Binding 0
+                              Decorate 35(rwtx) DescriptorSet 0
                               Decorate 58(@entryPointOutput) Location 0
-                              Decorate 62(buf) DescriptorSet 0
                               Decorate 62(buf) Binding 0
+                              Decorate 62(buf) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.rw.vec2.bracket.frag.out b/Test/baseResults/hlsl.rw.vec2.bracket.frag.out
index a0c639b..304ff9c 100644
--- a/Test/baseResults/hlsl.rw.vec2.bracket.frag.out
+++ b/Test/baseResults/hlsl.rw.vec2.bracket.frag.out
@@ -1845,6 +1845,7 @@
                               Name 704  "g_tTex2df2a"
                               Name 707  "g_tTex2di2a"
                               Name 710  "g_tTex2du2a"
+                              Decorate 64($Global) Block
                               MemberDecorate 64($Global) 0 Offset 0
                               MemberDecorate 64($Global) 1 Offset 8
                               MemberDecorate 64($Global) 2 Offset 16
@@ -1856,42 +1857,41 @@
                               MemberDecorate 64($Global) 8 Offset 96
                               MemberDecorate 64($Global) 9 Offset 104
                               MemberDecorate 64($Global) 10 Offset 112
-                              Decorate 64($Global) Block
-                              Decorate 66 DescriptorSet 0
                               Decorate 66 Binding 10
-                              Decorate 76(g_tTex1df2) DescriptorSet 0
+                              Decorate 66 DescriptorSet 0
                               Decorate 76(g_tTex1df2) Binding 1
-                              Decorate 96(g_tTex1di2) DescriptorSet 0
+                              Decorate 76(g_tTex1df2) DescriptorSet 0
                               Decorate 96(g_tTex1di2) Binding 2
-                              Decorate 107(g_tTex1du2) DescriptorSet 0
+                              Decorate 96(g_tTex1di2) DescriptorSet 0
                               Decorate 107(g_tTex1du2) Binding 3
-                              Decorate 119(g_tTex2df2) DescriptorSet 0
+                              Decorate 107(g_tTex1du2) DescriptorSet 0
                               Decorate 119(g_tTex2df2) Binding 4
-                              Decorate 130(g_tTex2di2) DescriptorSet 0
+                              Decorate 119(g_tTex2df2) DescriptorSet 0
                               Decorate 130(g_tTex2di2) Binding 5
-                              Decorate 141(g_tTex2du2) DescriptorSet 0
+                              Decorate 130(g_tTex2di2) DescriptorSet 0
                               Decorate 141(g_tTex2du2) Binding 6
-                              Decorate 152(g_tTex3df2) DescriptorSet 0
+                              Decorate 141(g_tTex2du2) DescriptorSet 0
                               Decorate 152(g_tTex3df2) Binding 7
-                              Decorate 165(g_tTex3di2) DescriptorSet 0
+                              Decorate 152(g_tTex3df2) DescriptorSet 0
                               Decorate 165(g_tTex3di2) Binding 8
-                              Decorate 176(g_tTex3du2) DescriptorSet 0
+                              Decorate 165(g_tTex3di2) DescriptorSet 0
                               Decorate 176(g_tTex3du2) Binding 9
+                              Decorate 176(g_tTex3du2) DescriptorSet 0
                               Decorate 687(@entryPointOutput.Color) Location 0
-                              Decorate 692(g_sSamp) DescriptorSet 0
                               Decorate 692(g_sSamp) Binding 0
-                              Decorate 695(g_tTex1df2a) DescriptorSet 0
+                              Decorate 692(g_sSamp) DescriptorSet 0
                               Decorate 695(g_tTex1df2a) Binding 0
-                              Decorate 698(g_tTex1di2a) DescriptorSet 0
+                              Decorate 695(g_tTex1df2a) DescriptorSet 0
                               Decorate 698(g_tTex1di2a) Binding 0
-                              Decorate 701(g_tTex1du2a) DescriptorSet 0
+                              Decorate 698(g_tTex1di2a) DescriptorSet 0
                               Decorate 701(g_tTex1du2a) Binding 0
-                              Decorate 704(g_tTex2df2a) DescriptorSet 0
+                              Decorate 701(g_tTex1du2a) DescriptorSet 0
                               Decorate 704(g_tTex2df2a) Binding 0
-                              Decorate 707(g_tTex2di2a) DescriptorSet 0
+                              Decorate 704(g_tTex2df2a) DescriptorSet 0
                               Decorate 707(g_tTex2di2a) Binding 0
-                              Decorate 710(g_tTex2du2a) DescriptorSet 0
+                              Decorate 707(g_tTex2di2a) DescriptorSet 0
                               Decorate 710(g_tTex2du2a) Binding 0
+                              Decorate 710(g_tTex2du2a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
diff --git a/Test/baseResults/hlsl.sample.array.dx10.frag.out b/Test/baseResults/hlsl.sample.array.dx10.frag.out
index 1acca18..eb5ed7b 100644
--- a/Test/baseResults/hlsl.sample.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.sample.array.dx10.frag.out
@@ -363,30 +363,30 @@
                               Name 138  "@entryPointOutput.Color"
                               Name 142  "@entryPointOutput.Depth"
                               Name 145  "g_tTex1df4a"
-                              Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 16(g_tTex1df4) Binding 0
-                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
-                              Decorate 35(g_tTex1di4) DescriptorSet 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 35(g_tTex1di4) Binding 2
-                              Decorate 49(g_tTex1du4) DescriptorSet 0
+                              Decorate 35(g_tTex1di4) DescriptorSet 0
                               Decorate 49(g_tTex1du4) Binding 3
-                              Decorate 60(g_tTex2df4) DescriptorSet 0
+                              Decorate 49(g_tTex1du4) DescriptorSet 0
                               Decorate 60(g_tTex2df4) Binding 4
-                              Decorate 71(g_tTex2di4) DescriptorSet 0
+                              Decorate 60(g_tTex2df4) DescriptorSet 0
                               Decorate 71(g_tTex2di4) Binding 5
-                              Decorate 82(g_tTex2du4) DescriptorSet 0
+                              Decorate 71(g_tTex2di4) DescriptorSet 0
                               Decorate 82(g_tTex2du4) Binding 6
-                              Decorate 94(g_tTexcdf4) DescriptorSet 0
+                              Decorate 82(g_tTex2du4) DescriptorSet 0
                               Decorate 94(g_tTexcdf4) Binding 7
-                              Decorate 104(g_tTexcdi4) DescriptorSet 0
+                              Decorate 94(g_tTexcdf4) DescriptorSet 0
                               Decorate 104(g_tTexcdi4) Binding 8
-                              Decorate 114(g_tTexcdu4) DescriptorSet 0
+                              Decorate 104(g_tTexcdi4) DescriptorSet 0
                               Decorate 114(g_tTexcdu4) Binding 9
+                              Decorate 114(g_tTexcdu4) DescriptorSet 0
                               Decorate 138(@entryPointOutput.Color) Location 0
                               Decorate 142(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 145(g_tTex1df4a) DescriptorSet 0
                               Decorate 145(g_tTex1df4a) Binding 1
+                              Decorate 145(g_tTex1df4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.sample.basic.dx10.frag.out b/Test/baseResults/hlsl.sample.basic.dx10.frag.out
index e306317..8e2739d 100644
--- a/Test/baseResults/hlsl.sample.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.sample.basic.dx10.frag.out
@@ -612,40 +612,40 @@
                               Name 195  "g_sSamp2d"
                               Name 196  "g_sSamp2D_b"
                               Name 197  "g_tTex1df4a"
-                              Decorate 45(g_tTex1df4) DescriptorSet 0
                               Decorate 45(g_tTex1df4) Binding 0
-                              Decorate 49(g_sSamp) DescriptorSet 0
+                              Decorate 45(g_tTex1df4) DescriptorSet 0
                               Decorate 49(g_sSamp) Binding 0
-                              Decorate 60(g_tTex1di4) DescriptorSet 0
+                              Decorate 49(g_sSamp) DescriptorSet 0
                               Decorate 60(g_tTex1di4) Binding 2
-                              Decorate 73(g_tTex1du4) DescriptorSet 0
+                              Decorate 60(g_tTex1di4) DescriptorSet 0
                               Decorate 73(g_tTex1du4) Binding 3
-                              Decorate 83(g_tTex2df4) DescriptorSet 0
+                              Decorate 73(g_tTex1du4) DescriptorSet 0
                               Decorate 83(g_tTex2df4) Binding 4
-                              Decorate 94(g_tTex2di4) DescriptorSet 0
+                              Decorate 83(g_tTex2df4) DescriptorSet 0
                               Decorate 94(g_tTex2di4) Binding 5
-                              Decorate 105(g_tTex2du4) DescriptorSet 0
+                              Decorate 94(g_tTex2di4) DescriptorSet 0
                               Decorate 105(g_tTex2du4) Binding 6
-                              Decorate 117(g_tTex3df4) DescriptorSet 0
+                              Decorate 105(g_tTex2du4) DescriptorSet 0
                               Decorate 117(g_tTex3df4) Binding 7
-                              Decorate 128(g_tTex3di4) DescriptorSet 0
+                              Decorate 117(g_tTex3df4) DescriptorSet 0
                               Decorate 128(g_tTex3di4) Binding 8
-                              Decorate 138(g_tTex3du4) DescriptorSet 0
+                              Decorate 128(g_tTex3di4) DescriptorSet 0
                               Decorate 138(g_tTex3du4) Binding 9
-                              Decorate 151(g_tTexcdf4) DescriptorSet 0
+                              Decorate 138(g_tTex3du4) DescriptorSet 0
                               Decorate 151(g_tTexcdf4) Binding 10
-                              Decorate 160(g_tTexcdi4) DescriptorSet 0
+                              Decorate 151(g_tTexcdf4) DescriptorSet 0
                               Decorate 160(g_tTexcdi4) Binding 11
-                              Decorate 169(g_tTexcdu4) DescriptorSet 0
+                              Decorate 160(g_tTexcdi4) DescriptorSet 0
                               Decorate 169(g_tTexcdu4) Binding 12
+                              Decorate 169(g_tTexcdu4) DescriptorSet 0
                               Decorate 188(@entryPointOutput.Color) Location 0
                               Decorate 192(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 195(g_sSamp2d) DescriptorSet 0
                               Decorate 195(g_sSamp2d) Binding 0
-                              Decorate 196(g_sSamp2D_b) DescriptorSet 0
+                              Decorate 195(g_sSamp2d) DescriptorSet 0
                               Decorate 196(g_sSamp2D_b) Binding 0
-                              Decorate 197(g_tTex1df4a) DescriptorSet 0
+                              Decorate 196(g_sSamp2D_b) DescriptorSet 0
                               Decorate 197(g_tTex1df4a) Binding 1
+                              Decorate 197(g_tTex1df4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.sample.dx9.frag.out b/Test/baseResults/hlsl.sample.dx9.frag.out
index 04eb9d3..1d1924c 100644
--- a/Test/baseResults/hlsl.sample.dx9.frag.out
+++ b/Test/baseResults/hlsl.sample.dx9.frag.out
@@ -5,7 +5,10 @@
 0:? Sequence
 0:15  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:15    Function Parameters: 
-0:?     Sequence
+0:?     Scope
+0:16      Sequence
+0:16        Declare ( temp void)
+0:16          'psout' ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:18      Sequence
 0:18        move second child to first child ( temp 4-component vector of float)
 0:18          'ColorOut' ( temp 4-component vector of float)
@@ -196,7 +199,10 @@
 0:? Sequence
 0:15  Function Definition: @main( ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:15    Function Parameters: 
-0:?     Sequence
+0:?     Scope
+0:16      Sequence
+0:16        Declare ( temp void)
+0:16          'psout' ( temp structure{ temp 4-component vector of float Color,  temp float Depth})
 0:18      Sequence
 0:18        move second child to first child ( temp 4-component vector of float)
 0:18          'ColorOut' ( temp 4-component vector of float)
@@ -403,26 +409,26 @@
                               MemberName 9(PS_OUTPUT) 0  "Color"
                               MemberName 9(PS_OUTPUT) 1  "Depth"
                               Name 11  "@main("
-                              Name 14  "ColorOut"
-                              Name 20  "g_sam"
-                              Name 32  "g_sam1D"
-                              Name 38  "g_sam2D"
-                              Name 48  "g_sam3D"
-                              Name 58  "g_samCube"
-                              Name 110  "psout"
+                              Name 14  "psout"
+                              Name 16  "ColorOut"
+                              Name 22  "g_sam"
+                              Name 34  "g_sam1D"
+                              Name 40  "g_sam2D"
+                              Name 50  "g_sam3D"
+                              Name 60  "g_samCube"
                               Name 125  "flattenTemp"
                               Name 128  "@entryPointOutput.Color"
                               Name 132  "@entryPointOutput.Depth"
-                              Decorate 20(g_sam) DescriptorSet 0
-                              Decorate 20(g_sam) Binding 0
-                              Decorate 32(g_sam1D) DescriptorSet 0
-                              Decorate 32(g_sam1D) Binding 1
-                              Decorate 38(g_sam2D) DescriptorSet 0
-                              Decorate 38(g_sam2D) Binding 2
-                              Decorate 48(g_sam3D) DescriptorSet 0
-                              Decorate 48(g_sam3D) Binding 3
-                              Decorate 58(g_samCube) DescriptorSet 0
-                              Decorate 58(g_samCube) Binding 4
+                              Decorate 22(g_sam) Binding 0
+                              Decorate 22(g_sam) DescriptorSet 0
+                              Decorate 34(g_sam1D) Binding 1
+                              Decorate 34(g_sam1D) DescriptorSet 0
+                              Decorate 40(g_sam2D) Binding 2
+                              Decorate 40(g_sam2D) DescriptorSet 0
+                              Decorate 50(g_sam3D) Binding 3
+                              Decorate 50(g_sam3D) DescriptorSet 0
+                              Decorate 60(g_samCube) Binding 4
+                              Decorate 60(g_samCube) DescriptorSet 0
                               Decorate 128(@entryPointOutput.Color) Location 0
                               Decorate 132(@entryPointOutput.Depth) BuiltIn FragDepth
                3:             TypeVoid
@@ -431,42 +437,42 @@
                8:             TypeVector 7(float) 4
     9(PS_OUTPUT):             TypeStruct 8(fvec4) 7(float)
               10:             TypeFunction 9(PS_OUTPUT)
-              13:             TypePointer Function 8(fvec4)
-              15:    7(float) Constant 0
-              16:    8(fvec4) ConstantComposite 15 15 15 15
-              17:             TypeImage 7(float) 2D sampled format:Unknown
-              18:             TypeSampledImage 17
-              19:             TypePointer UniformConstant 18
-       20(g_sam):     19(ptr) Variable UniformConstant
-              22:             TypeVector 7(float) 2
-              23:    7(float) Constant 1053609165
-              24:    7(float) Constant 1050253722
-              25:   22(fvec2) ConstantComposite 23 24
-              29:             TypeImage 7(float) 1D sampled format:Unknown
-              30:             TypeSampledImage 29
-              31:             TypePointer UniformConstant 30
-     32(g_sam1D):     31(ptr) Variable UniformConstant
-              34:    7(float) Constant 1056964608
-     38(g_sam2D):     19(ptr) Variable UniformConstant
-              40:    7(float) Constant 1058642330
-              41:   22(fvec2) ConstantComposite 34 40
-              45:             TypeImage 7(float) 3D sampled format:Unknown
-              46:             TypeSampledImage 45
-              47:             TypePointer UniformConstant 46
-     48(g_sam3D):     47(ptr) Variable UniformConstant
-              50:             TypeVector 7(float) 3
-              51:   50(fvec3) ConstantComposite 34 40 23
-              55:             TypeImage 7(float) Cube sampled format:Unknown
-              56:             TypeSampledImage 55
-              57:             TypePointer UniformConstant 56
-   58(g_samCube):     57(ptr) Variable UniformConstant
-              64:    8(fvec4) ConstantComposite 23 24 15 15
-              68:             TypeInt 32 0
-              69:     68(int) Constant 3
-              75:    8(fvec4) ConstantComposite 34 15 15 15
-              82:    8(fvec4) ConstantComposite 34 40 15 15
-              91:    8(fvec4) ConstantComposite 34 40 23 15
-             109:             TypePointer Function 9(PS_OUTPUT)
+              13:             TypePointer Function 9(PS_OUTPUT)
+              15:             TypePointer Function 8(fvec4)
+              17:    7(float) Constant 0
+              18:    8(fvec4) ConstantComposite 17 17 17 17
+              19:             TypeImage 7(float) 2D sampled format:Unknown
+              20:             TypeSampledImage 19
+              21:             TypePointer UniformConstant 20
+       22(g_sam):     21(ptr) Variable UniformConstant
+              24:             TypeVector 7(float) 2
+              25:    7(float) Constant 1053609165
+              26:    7(float) Constant 1050253722
+              27:   24(fvec2) ConstantComposite 25 26
+              31:             TypeImage 7(float) 1D sampled format:Unknown
+              32:             TypeSampledImage 31
+              33:             TypePointer UniformConstant 32
+     34(g_sam1D):     33(ptr) Variable UniformConstant
+              36:    7(float) Constant 1056964608
+     40(g_sam2D):     21(ptr) Variable UniformConstant
+              42:    7(float) Constant 1058642330
+              43:   24(fvec2) ConstantComposite 36 42
+              47:             TypeImage 7(float) 3D sampled format:Unknown
+              48:             TypeSampledImage 47
+              49:             TypePointer UniformConstant 48
+     50(g_sam3D):     49(ptr) Variable UniformConstant
+              52:             TypeVector 7(float) 3
+              53:   52(fvec3) ConstantComposite 36 42 25
+              57:             TypeImage 7(float) Cube sampled format:Unknown
+              58:             TypeSampledImage 57
+              59:             TypePointer UniformConstant 58
+   60(g_samCube):     59(ptr) Variable UniformConstant
+              66:    8(fvec4) ConstantComposite 25 26 17 17
+              70:             TypeInt 32 0
+              71:     70(int) Constant 3
+              77:    8(fvec4) ConstantComposite 36 17 17 17
+              84:    8(fvec4) ConstantComposite 36 42 17 17
+              93:    8(fvec4) ConstantComposite 36 42 25 17
              111:             TypeInt 32 1
              112:    111(int) Constant 0
              114:    7(float) Constant 1092616192
@@ -480,11 +486,11 @@
                               Line 1 15 1
          5(main):           3 Function None 4
                6:             Label
-125(flattenTemp):    109(ptr) Variable Function
+125(flattenTemp):     13(ptr) Variable Function
                               Line 1 15 0
              126:9(PS_OUTPUT) FunctionCall 11(@main()
                               Store 125(flattenTemp) 126
-             129:     13(ptr) AccessChain 125(flattenTemp) 112
+             129:     15(ptr) AccessChain 125(flattenTemp) 112
              130:    8(fvec4) Load 129
                               Store 128(@entryPointOutput.Color) 130
              133:    120(ptr) AccessChain 125(flattenTemp) 118
@@ -495,100 +501,100 @@
                               Line 1 15 1
       11(@main():9(PS_OUTPUT) Function None 10
               12:             Label
-    14(ColorOut):     13(ptr) Variable Function
-      110(psout):    109(ptr) Variable Function
+       14(psout):     13(ptr) Variable Function
+    16(ColorOut):     15(ptr) Variable Function
                               Line 1 18 0
-                              Store 14(ColorOut) 16
+                              Store 16(ColorOut) 18
                               Line 1 20 0
-              21:          18 Load 20(g_sam)
-              26:    8(fvec4) ImageSampleImplicitLod 21 25
-              27:    8(fvec4) Load 14(ColorOut)
-              28:    8(fvec4) FAdd 27 26
-                              Store 14(ColorOut) 28
+              23:          20 Load 22(g_sam)
+              28:    8(fvec4) ImageSampleImplicitLod 23 27
+              29:    8(fvec4) Load 16(ColorOut)
+              30:    8(fvec4) FAdd 29 28
+                              Store 16(ColorOut) 30
                               Line 1 21 0
-              33:          30 Load 32(g_sam1D)
-              35:    8(fvec4) ImageSampleImplicitLod 33 34
-              36:    8(fvec4) Load 14(ColorOut)
-              37:    8(fvec4) FAdd 36 35
-                              Store 14(ColorOut) 37
+              35:          32 Load 34(g_sam1D)
+              37:    8(fvec4) ImageSampleImplicitLod 35 36
+              38:    8(fvec4) Load 16(ColorOut)
+              39:    8(fvec4) FAdd 38 37
+                              Store 16(ColorOut) 39
                               Line 1 22 0
-              39:          18 Load 38(g_sam2D)
-              42:    8(fvec4) ImageSampleImplicitLod 39 41
-              43:    8(fvec4) Load 14(ColorOut)
-              44:    8(fvec4) FAdd 43 42
-                              Store 14(ColorOut) 44
+              41:          20 Load 40(g_sam2D)
+              44:    8(fvec4) ImageSampleImplicitLod 41 43
+              45:    8(fvec4) Load 16(ColorOut)
+              46:    8(fvec4) FAdd 45 44
+                              Store 16(ColorOut) 46
                               Line 1 23 0
-              49:          46 Load 48(g_sam3D)
-              52:    8(fvec4) ImageSampleImplicitLod 49 51
-              53:    8(fvec4) Load 14(ColorOut)
-              54:    8(fvec4) FAdd 53 52
-                              Store 14(ColorOut) 54
+              51:          48 Load 50(g_sam3D)
+              54:    8(fvec4) ImageSampleImplicitLod 51 53
+              55:    8(fvec4) Load 16(ColorOut)
+              56:    8(fvec4) FAdd 55 54
+                              Store 16(ColorOut) 56
                               Line 1 24 0
-              59:          56 Load 58(g_samCube)
-              60:    8(fvec4) ImageSampleImplicitLod 59 51
-              61:    8(fvec4) Load 14(ColorOut)
-              62:    8(fvec4) FAdd 61 60
-                              Store 14(ColorOut) 62
+              61:          58 Load 60(g_samCube)
+              62:    8(fvec4) ImageSampleImplicitLod 61 53
+              63:    8(fvec4) Load 16(ColorOut)
+              64:    8(fvec4) FAdd 63 62
+                              Store 16(ColorOut) 64
                               Line 1 26 0
-              63:          18 Load 20(g_sam)
-              65:    7(float) CompositeExtract 64 0
-              66:    7(float) CompositeExtract 64 1
-              67:   22(fvec2) CompositeConstruct 65 66
-              70:    7(float) CompositeExtract 64 3
-              71:    8(fvec4) ImageSampleExplicitLod 63 67 Lod 70
-              72:    8(fvec4) Load 14(ColorOut)
-              73:    8(fvec4) FAdd 72 71
-                              Store 14(ColorOut) 73
+              65:          20 Load 22(g_sam)
+              67:    7(float) CompositeExtract 66 0
+              68:    7(float) CompositeExtract 66 1
+              69:   24(fvec2) CompositeConstruct 67 68
+              72:    7(float) CompositeExtract 66 3
+              73:    8(fvec4) ImageSampleExplicitLod 65 69 Lod 72
+              74:    8(fvec4) Load 16(ColorOut)
+              75:    8(fvec4) FAdd 74 73
+                              Store 16(ColorOut) 75
                               Line 1 27 0
-              74:          30 Load 32(g_sam1D)
-              76:    7(float) CompositeExtract 75 0
-              77:    7(float) CompositeExtract 75 3
-              78:    8(fvec4) ImageSampleExplicitLod 74 76 Lod 77
-              79:    8(fvec4) Load 14(ColorOut)
-              80:    8(fvec4) FAdd 79 78
-                              Store 14(ColorOut) 80
+              76:          32 Load 34(g_sam1D)
+              78:    7(float) CompositeExtract 77 0
+              79:    7(float) CompositeExtract 77 3
+              80:    8(fvec4) ImageSampleExplicitLod 76 78 Lod 79
+              81:    8(fvec4) Load 16(ColorOut)
+              82:    8(fvec4) FAdd 81 80
+                              Store 16(ColorOut) 82
                               Line 1 28 0
-              81:          18 Load 38(g_sam2D)
-              83:    7(float) CompositeExtract 82 0
-              84:    7(float) CompositeExtract 82 1
-              85:   22(fvec2) CompositeConstruct 83 84
-              86:    7(float) CompositeExtract 82 3
-              87:    8(fvec4) ImageSampleExplicitLod 81 85 Lod 86
-              88:    8(fvec4) Load 14(ColorOut)
-              89:    8(fvec4) FAdd 88 87
-                              Store 14(ColorOut) 89
+              83:          20 Load 40(g_sam2D)
+              85:    7(float) CompositeExtract 84 0
+              86:    7(float) CompositeExtract 84 1
+              87:   24(fvec2) CompositeConstruct 85 86
+              88:    7(float) CompositeExtract 84 3
+              89:    8(fvec4) ImageSampleExplicitLod 83 87 Lod 88
+              90:    8(fvec4) Load 16(ColorOut)
+              91:    8(fvec4) FAdd 90 89
+                              Store 16(ColorOut) 91
                               Line 1 29 0
-              90:          46 Load 48(g_sam3D)
-              92:    7(float) CompositeExtract 91 0
-              93:    7(float) CompositeExtract 91 1
-              94:    7(float) CompositeExtract 91 2
-              95:   50(fvec3) CompositeConstruct 92 93 94
-              96:    7(float) CompositeExtract 91 3
-              97:    8(fvec4) ImageSampleExplicitLod 90 95 Lod 96
-              98:    8(fvec4) Load 14(ColorOut)
-              99:    8(fvec4) FAdd 98 97
-                              Store 14(ColorOut) 99
+              92:          48 Load 50(g_sam3D)
+              94:    7(float) CompositeExtract 93 0
+              95:    7(float) CompositeExtract 93 1
+              96:    7(float) CompositeExtract 93 2
+              97:   52(fvec3) CompositeConstruct 94 95 96
+              98:    7(float) CompositeExtract 93 3
+              99:    8(fvec4) ImageSampleExplicitLod 92 97 Lod 98
+             100:    8(fvec4) Load 16(ColorOut)
+             101:    8(fvec4) FAdd 100 99
+                              Store 16(ColorOut) 101
                               Line 1 30 0
-             100:          56 Load 58(g_samCube)
-             101:    7(float) CompositeExtract 91 0
-             102:    7(float) CompositeExtract 91 1
-             103:    7(float) CompositeExtract 91 2
-             104:   50(fvec3) CompositeConstruct 101 102 103
-             105:    7(float) CompositeExtract 91 3
-             106:    8(fvec4) ImageSampleExplicitLod 100 104 Lod 105
-             107:    8(fvec4) Load 14(ColorOut)
-             108:    8(fvec4) FAdd 107 106
-                              Store 14(ColorOut) 108
+             102:          58 Load 60(g_samCube)
+             103:    7(float) CompositeExtract 93 0
+             104:    7(float) CompositeExtract 93 1
+             105:    7(float) CompositeExtract 93 2
+             106:   52(fvec3) CompositeConstruct 103 104 105
+             107:    7(float) CompositeExtract 93 3
+             108:    8(fvec4) ImageSampleExplicitLod 102 106 Lod 107
+             109:    8(fvec4) Load 16(ColorOut)
+             110:    8(fvec4) FAdd 109 108
+                              Store 16(ColorOut) 110
                               Line 1 32 0
-             113:    8(fvec4) Load 14(ColorOut)
+             113:    8(fvec4) Load 16(ColorOut)
              115:    8(fvec4) CompositeConstruct 114 114 114 114
              116:    8(fvec4) FDiv 113 115
-             117:     13(ptr) AccessChain 110(psout) 112
+             117:     15(ptr) AccessChain 14(psout) 112
                               Store 117 116
                               Line 1 33 0
-             121:    120(ptr) AccessChain 110(psout) 118
+             121:    120(ptr) AccessChain 14(psout) 118
                               Store 121 119
                               Line 1 35 0
-             122:9(PS_OUTPUT) Load 110(psout)
+             122:9(PS_OUTPUT) Load 14(psout)
                               ReturnValue 122
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.sample.dx9.vert.out b/Test/baseResults/hlsl.sample.dx9.vert.out
index 59878a9..96e7143 100644
--- a/Test/baseResults/hlsl.sample.dx9.vert.out
+++ b/Test/baseResults/hlsl.sample.dx9.vert.out
@@ -3,7 +3,10 @@
 0:? Sequence
 0:11  Function Definition: @main( ( temp structure{ temp 4-component vector of float Pos})
 0:11    Function Parameters: 
-0:?     Sequence
+0:?     Scope
+0:12      Sequence
+0:12        Declare ( temp void)
+0:12          'vsout' ( temp structure{ temp 4-component vector of float Pos})
 0:14      Sequence
 0:14        move second child to first child ( temp 4-component vector of float)
 0:14          'PosOut' ( temp 4-component vector of float)
@@ -82,7 +85,10 @@
 0:? Sequence
 0:11  Function Definition: @main( ( temp structure{ temp 4-component vector of float Pos})
 0:11    Function Parameters: 
-0:?     Sequence
+0:?     Scope
+0:12      Sequence
+0:12        Declare ( temp void)
+0:12          'vsout' ( temp structure{ temp 4-component vector of float Pos})
 0:14      Sequence
 0:14        move second child to first child ( temp 4-component vector of float)
 0:14          'PosOut' ( temp 4-component vector of float)
@@ -175,15 +181,15 @@
                               Name 9  "VS_OUTPUT"
                               MemberName 9(VS_OUTPUT) 0  "Pos"
                               Name 11  "@main("
-                              Name 14  "PosOut"
-                              Name 20  "g_sam"
-                              Name 36  "g_sam2D"
-                              Name 49  "vsout"
+                              Name 14  "vsout"
+                              Name 16  "PosOut"
+                              Name 22  "g_sam"
+                              Name 38  "g_sam2D"
                               Name 61  "@entryPointOutput.Pos"
-                              Decorate 20(g_sam) DescriptorSet 0
-                              Decorate 20(g_sam) Binding 0
-                              Decorate 36(g_sam2D) DescriptorSet 0
-                              Decorate 36(g_sam2D) Binding 1
+                              Decorate 22(g_sam) Binding 0
+                              Decorate 22(g_sam) DescriptorSet 0
+                              Decorate 38(g_sam2D) Binding 1
+                              Decorate 38(g_sam2D) DescriptorSet 0
                               Decorate 61(@entryPointOutput.Pos) BuiltIn Position
                3:             TypeVoid
                4:             TypeFunction 3
@@ -191,25 +197,25 @@
                8:             TypeVector 7(float) 4
     9(VS_OUTPUT):             TypeStruct 8(fvec4)
               10:             TypeFunction 9(VS_OUTPUT)
-              13:             TypePointer Function 8(fvec4)
-              15:    7(float) Constant 0
-              16:    8(fvec4) ConstantComposite 15 15 15 15
-              17:             TypeImage 7(float) 2D sampled format:Unknown
-              18:             TypeSampledImage 17
-              19:             TypePointer UniformConstant 18
-       20(g_sam):     19(ptr) Variable UniformConstant
-              22:    7(float) Constant 1050253722
-              23:    7(float) Constant 1053609165
-              24:    7(float) Constant 1065353216
-              25:    8(fvec4) ConstantComposite 22 23 15 24
-              26:             TypeVector 7(float) 2
-              30:             TypeInt 32 0
-              31:     30(int) Constant 3
-     36(g_sam2D):     19(ptr) Variable UniformConstant
-              38:    7(float) Constant 1056964608
-              39:    7(float) Constant 1058642330
-              40:    8(fvec4) ConstantComposite 38 39 15 24
-              48:             TypePointer Function 9(VS_OUTPUT)
+              13:             TypePointer Function 9(VS_OUTPUT)
+              15:             TypePointer Function 8(fvec4)
+              17:    7(float) Constant 0
+              18:    8(fvec4) ConstantComposite 17 17 17 17
+              19:             TypeImage 7(float) 2D sampled format:Unknown
+              20:             TypeSampledImage 19
+              21:             TypePointer UniformConstant 20
+       22(g_sam):     21(ptr) Variable UniformConstant
+              24:    7(float) Constant 1050253722
+              25:    7(float) Constant 1053609165
+              26:    7(float) Constant 1065353216
+              27:    8(fvec4) ConstantComposite 24 25 17 26
+              28:             TypeVector 7(float) 2
+              32:             TypeInt 32 0
+              33:     32(int) Constant 3
+     38(g_sam2D):     21(ptr) Variable UniformConstant
+              40:    7(float) Constant 1056964608
+              41:    7(float) Constant 1058642330
+              42:    8(fvec4) ConstantComposite 40 41 17 26
               50:             TypeInt 32 1
               51:     50(int) Constant 0
               53:    7(float) Constant 1073741824
@@ -227,37 +233,37 @@
                               Line 1 11 1
       11(@main():9(VS_OUTPUT) Function None 10
               12:             Label
-      14(PosOut):     13(ptr) Variable Function
-       49(vsout):     48(ptr) Variable Function
+       14(vsout):     13(ptr) Variable Function
+      16(PosOut):     15(ptr) Variable Function
                               Line 1 14 0
-                              Store 14(PosOut) 16
+                              Store 16(PosOut) 18
                               Line 1 16 0
-              21:          18 Load 20(g_sam)
-              27:    7(float) CompositeExtract 25 0
-              28:    7(float) CompositeExtract 25 1
-              29:   26(fvec2) CompositeConstruct 27 28
-              32:    7(float) CompositeExtract 25 3
-              33:    8(fvec4) ImageSampleExplicitLod 21 29 Lod 32
-              34:    8(fvec4) Load 14(PosOut)
-              35:    8(fvec4) FAdd 34 33
-                              Store 14(PosOut) 35
+              23:          20 Load 22(g_sam)
+              29:    7(float) CompositeExtract 27 0
+              30:    7(float) CompositeExtract 27 1
+              31:   28(fvec2) CompositeConstruct 29 30
+              34:    7(float) CompositeExtract 27 3
+              35:    8(fvec4) ImageSampleExplicitLod 23 31 Lod 34
+              36:    8(fvec4) Load 16(PosOut)
+              37:    8(fvec4) FAdd 36 35
+                              Store 16(PosOut) 37
                               Line 1 17 0
-              37:          18 Load 36(g_sam2D)
-              41:    7(float) CompositeExtract 40 0
-              42:    7(float) CompositeExtract 40 1
-              43:   26(fvec2) CompositeConstruct 41 42
-              44:    7(float) CompositeExtract 40 3
-              45:    8(fvec4) ImageSampleExplicitLod 37 43 Lod 44
-              46:    8(fvec4) Load 14(PosOut)
-              47:    8(fvec4) FAdd 46 45
-                              Store 14(PosOut) 47
+              39:          20 Load 38(g_sam2D)
+              43:    7(float) CompositeExtract 42 0
+              44:    7(float) CompositeExtract 42 1
+              45:   28(fvec2) CompositeConstruct 43 44
+              46:    7(float) CompositeExtract 42 3
+              47:    8(fvec4) ImageSampleExplicitLod 39 45 Lod 46
+              48:    8(fvec4) Load 16(PosOut)
+              49:    8(fvec4) FAdd 48 47
+                              Store 16(PosOut) 49
                               Line 1 19 0
-              52:    8(fvec4) Load 14(PosOut)
+              52:    8(fvec4) Load 16(PosOut)
               54:    8(fvec4) CompositeConstruct 53 53 53 53
               55:    8(fvec4) FDiv 52 54
-              56:     13(ptr) AccessChain 49(vsout) 51
+              56:     15(ptr) AccessChain 14(vsout) 51
                               Store 56 55
                               Line 1 21 0
-              57:9(VS_OUTPUT) Load 49(vsout)
+              57:9(VS_OUTPUT) Load 14(vsout)
                               ReturnValue 57
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.sample.offset.dx10.frag.out b/Test/baseResults/hlsl.sample.offset.dx10.frag.out
index 0a351b4..f2be35a 100644
--- a/Test/baseResults/hlsl.sample.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.sample.offset.dx10.frag.out
@@ -407,36 +407,36 @@
                               Name 154  "g_tTexcdf4"
                               Name 157  "g_tTexcdi4"
                               Name 160  "g_tTexcdu4"
-                              Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 16(g_tTex1df4) Binding 0
-                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
-                              Decorate 33(g_tTex1di4) DescriptorSet 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 33(g_tTex1di4) Binding 2
-                              Decorate 46(g_tTex1du4) DescriptorSet 0
+                              Decorate 33(g_tTex1di4) DescriptorSet 0
                               Decorate 46(g_tTex1du4) Binding 3
-                              Decorate 56(g_tTex2df4) DescriptorSet 0
+                              Decorate 46(g_tTex1du4) DescriptorSet 0
                               Decorate 56(g_tTex2df4) Binding 4
-                              Decorate 70(g_tTex2di4) DescriptorSet 0
+                              Decorate 56(g_tTex2df4) DescriptorSet 0
                               Decorate 70(g_tTex2di4) Binding 5
-                              Decorate 82(g_tTex2du4) DescriptorSet 0
+                              Decorate 70(g_tTex2di4) DescriptorSet 0
                               Decorate 82(g_tTex2du4) Binding 6
-                              Decorate 96(g_tTex3df4) DescriptorSet 0
+                              Decorate 82(g_tTex2du4) DescriptorSet 0
                               Decorate 96(g_tTex3df4) Binding 7
-                              Decorate 109(g_tTex3di4) DescriptorSet 0
+                              Decorate 96(g_tTex3df4) DescriptorSet 0
                               Decorate 109(g_tTex3di4) Binding 8
-                              Decorate 120(g_tTex3du4) DescriptorSet 0
+                              Decorate 109(g_tTex3di4) DescriptorSet 0
                               Decorate 120(g_tTex3du4) Binding 9
+                              Decorate 120(g_tTex3du4) DescriptorSet 0
                               Decorate 144(@entryPointOutput.Color) Location 0
                               Decorate 148(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 151(g_tTex1df4a) DescriptorSet 0
                               Decorate 151(g_tTex1df4a) Binding 1
-                              Decorate 154(g_tTexcdf4) DescriptorSet 0
+                              Decorate 151(g_tTex1df4a) DescriptorSet 0
                               Decorate 154(g_tTexcdf4) Binding 0
-                              Decorate 157(g_tTexcdi4) DescriptorSet 0
+                              Decorate 154(g_tTexcdf4) DescriptorSet 0
                               Decorate 157(g_tTexcdi4) Binding 0
-                              Decorate 160(g_tTexcdu4) DescriptorSet 0
+                              Decorate 157(g_tTexcdi4) DescriptorSet 0
                               Decorate 160(g_tTexcdu4) Binding 0
+                              Decorate 160(g_tTexcdu4) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out
index 0770e0b..08da183 100644
--- a/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out
@@ -308,24 +308,24 @@
                               Name 110  "@entryPointOutput.Color"
                               Name 114  "@entryPointOutput.Depth"
                               Name 117  "g_tTex1df4a"
-                              Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 16(g_tTex1df4) Binding 0
-                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
-                              Decorate 36(g_tTex1di4) DescriptorSet 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 36(g_tTex1di4) Binding 2
-                              Decorate 51(g_tTex1du4) DescriptorSet 0
+                              Decorate 36(g_tTex1di4) DescriptorSet 0
                               Decorate 51(g_tTex1du4) Binding 3
-                              Decorate 63(g_tTex2df4) DescriptorSet 0
+                              Decorate 51(g_tTex1du4) DescriptorSet 0
                               Decorate 63(g_tTex2df4) Binding 4
-                              Decorate 76(g_tTex2di4) DescriptorSet 0
+                              Decorate 63(g_tTex2df4) DescriptorSet 0
                               Decorate 76(g_tTex2di4) Binding 5
-                              Decorate 87(g_tTex2du4) DescriptorSet 0
+                              Decorate 76(g_tTex2di4) DescriptorSet 0
                               Decorate 87(g_tTex2du4) Binding 6
+                              Decorate 87(g_tTex2du4) DescriptorSet 0
                               Decorate 110(@entryPointOutput.Color) Location 0
                               Decorate 114(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 117(g_tTex1df4a) DescriptorSet 0
                               Decorate 117(g_tTex1df4a) Binding 1
+                              Decorate 117(g_tTex1df4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out b/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out
index ea0e4e2..71c0162 100644
--- a/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out
+++ b/Test/baseResults/hlsl.sample.sub-vec4.dx10.frag.out
@@ -179,16 +179,16 @@
                               Name 53  "g_tTex1df4"
                               Name 59  "psout"
                               Name 69  "@entryPointOutput.Color"
-                              Decorate 16(g_tTex1df1) DescriptorSet 0
                               Decorate 16(g_tTex1df1) Binding 1
-                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_tTex1df1) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
-                              Decorate 30(g_tTex1df2) DescriptorSet 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 30(g_tTex1df2) Binding 2
-                              Decorate 42(g_tTex1df3) DescriptorSet 0
+                              Decorate 30(g_tTex1df2) DescriptorSet 0
                               Decorate 42(g_tTex1df3) Binding 3
-                              Decorate 53(g_tTex1df4) DescriptorSet 0
+                              Decorate 42(g_tTex1df3) DescriptorSet 0
                               Decorate 53(g_tTex1df4) Binding 4
+                              Decorate 53(g_tTex1df4) DescriptorSet 0
                               Decorate 69(@entryPointOutput.Color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.samplebias.array.dx10.frag.out b/Test/baseResults/hlsl.samplebias.array.dx10.frag.out
index f59fc81..dd18bbe 100644
--- a/Test/baseResults/hlsl.samplebias.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplebias.array.dx10.frag.out
@@ -399,30 +399,30 @@
                               Name 138  "@entryPointOutput.Color"
                               Name 142  "@entryPointOutput.Depth"
                               Name 145  "g_tTex1df4a"
-                              Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 16(g_tTex1df4) Binding 0
-                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
-                              Decorate 36(g_tTex1di4) DescriptorSet 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 36(g_tTex1di4) Binding 2
-                              Decorate 50(g_tTex1du4) DescriptorSet 0
+                              Decorate 36(g_tTex1di4) DescriptorSet 0
                               Decorate 50(g_tTex1du4) Binding 3
-                              Decorate 61(g_tTex2df4) DescriptorSet 0
+                              Decorate 50(g_tTex1du4) DescriptorSet 0
                               Decorate 61(g_tTex2df4) Binding 4
-                              Decorate 72(g_tTex2di4) DescriptorSet 0
+                              Decorate 61(g_tTex2df4) DescriptorSet 0
                               Decorate 72(g_tTex2di4) Binding 5
-                              Decorate 82(g_tTex2du4) DescriptorSet 0
+                              Decorate 72(g_tTex2di4) DescriptorSet 0
                               Decorate 82(g_tTex2du4) Binding 6
-                              Decorate 94(g_tTexcdf4) DescriptorSet 0
+                              Decorate 82(g_tTex2du4) DescriptorSet 0
                               Decorate 94(g_tTexcdf4) Binding 7
-                              Decorate 104(g_tTexcdi4) DescriptorSet 0
+                              Decorate 94(g_tTexcdf4) DescriptorSet 0
                               Decorate 104(g_tTexcdi4) Binding 8
-                              Decorate 114(g_tTexcdu4) DescriptorSet 0
+                              Decorate 104(g_tTexcdi4) DescriptorSet 0
                               Decorate 114(g_tTexcdu4) Binding 9
+                              Decorate 114(g_tTexcdu4) DescriptorSet 0
                               Decorate 138(@entryPointOutput.Color) Location 0
                               Decorate 142(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 145(g_tTex1df4a) DescriptorSet 0
                               Decorate 145(g_tTex1df4a) Binding 1
+                              Decorate 145(g_tTex1df4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out b/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out
index 919be71..4b95ca2 100644
--- a/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out
@@ -470,36 +470,36 @@
                               Name 162  "@entryPointOutput.Color"
                               Name 166  "@entryPointOutput.Depth"
                               Name 169  "g_tTex1df4a"
-                              Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 16(g_tTex1df4) Binding 0
-                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
-                              Decorate 33(g_tTex1di4) DescriptorSet 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 33(g_tTex1di4) Binding 2
-                              Decorate 46(g_tTex1du4) DescriptorSet 0
+                              Decorate 33(g_tTex1di4) DescriptorSet 0
                               Decorate 46(g_tTex1du4) Binding 3
-                              Decorate 56(g_tTex2df4) DescriptorSet 0
+                              Decorate 46(g_tTex1du4) DescriptorSet 0
                               Decorate 56(g_tTex2df4) Binding 4
-                              Decorate 67(g_tTex2di4) DescriptorSet 0
+                              Decorate 56(g_tTex2df4) DescriptorSet 0
                               Decorate 67(g_tTex2di4) Binding 5
-                              Decorate 78(g_tTex2du4) DescriptorSet 0
+                              Decorate 67(g_tTex2di4) DescriptorSet 0
                               Decorate 78(g_tTex2du4) Binding 6
-                              Decorate 89(g_tTex3df4) DescriptorSet 0
+                              Decorate 78(g_tTex2du4) DescriptorSet 0
                               Decorate 89(g_tTex3df4) Binding 7
-                              Decorate 100(g_tTex3di4) DescriptorSet 0
+                              Decorate 89(g_tTex3df4) DescriptorSet 0
                               Decorate 100(g_tTex3di4) Binding 8
-                              Decorate 110(g_tTex3du4) DescriptorSet 0
+                              Decorate 100(g_tTex3di4) DescriptorSet 0
                               Decorate 110(g_tTex3du4) Binding 9
-                              Decorate 123(g_tTexcdf4) DescriptorSet 0
+                              Decorate 110(g_tTex3du4) DescriptorSet 0
                               Decorate 123(g_tTexcdf4) Binding 10
-                              Decorate 132(g_tTexcdi4) DescriptorSet 0
+                              Decorate 123(g_tTexcdf4) DescriptorSet 0
                               Decorate 132(g_tTexcdi4) Binding 11
-                              Decorate 141(g_tTexcdu4) DescriptorSet 0
+                              Decorate 132(g_tTexcdi4) DescriptorSet 0
                               Decorate 141(g_tTexcdu4) Binding 12
+                              Decorate 141(g_tTexcdu4) DescriptorSet 0
                               Decorate 162(@entryPointOutput.Color) Location 0
                               Decorate 166(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 169(g_tTex1df4a) DescriptorSet 0
                               Decorate 169(g_tTex1df4a) Binding 1
+                              Decorate 169(g_tTex1df4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out b/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out
index 5b29757..f6403a0 100644
--- a/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out
@@ -443,36 +443,36 @@
                               Name 154  "g_tTexcdf4"
                               Name 157  "g_tTexcdi4"
                               Name 160  "g_tTexcdu4"
-                              Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 16(g_tTex1df4) Binding 0
-                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
-                              Decorate 34(g_tTex1di4) DescriptorSet 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 34(g_tTex1di4) Binding 2
-                              Decorate 47(g_tTex1du4) DescriptorSet 0
+                              Decorate 34(g_tTex1di4) DescriptorSet 0
                               Decorate 47(g_tTex1du4) Binding 3
-                              Decorate 57(g_tTex2df4) DescriptorSet 0
+                              Decorate 47(g_tTex1du4) DescriptorSet 0
                               Decorate 57(g_tTex2df4) Binding 4
-                              Decorate 71(g_tTex2di4) DescriptorSet 0
+                              Decorate 57(g_tTex2df4) DescriptorSet 0
                               Decorate 71(g_tTex2di4) Binding 5
-                              Decorate 83(g_tTex2du4) DescriptorSet 0
+                              Decorate 71(g_tTex2di4) DescriptorSet 0
                               Decorate 83(g_tTex2du4) Binding 6
-                              Decorate 96(g_tTex3df4) DescriptorSet 0
+                              Decorate 83(g_tTex2du4) DescriptorSet 0
                               Decorate 96(g_tTex3df4) Binding 7
-                              Decorate 109(g_tTex3di4) DescriptorSet 0
+                              Decorate 96(g_tTex3df4) DescriptorSet 0
                               Decorate 109(g_tTex3di4) Binding 8
-                              Decorate 120(g_tTex3du4) DescriptorSet 0
+                              Decorate 109(g_tTex3di4) DescriptorSet 0
                               Decorate 120(g_tTex3du4) Binding 9
+                              Decorate 120(g_tTex3du4) DescriptorSet 0
                               Decorate 144(@entryPointOutput.Color) Location 0
                               Decorate 148(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 151(g_tTex1df4a) DescriptorSet 0
                               Decorate 151(g_tTex1df4a) Binding 1
-                              Decorate 154(g_tTexcdf4) DescriptorSet 0
+                              Decorate 151(g_tTex1df4a) DescriptorSet 0
                               Decorate 154(g_tTexcdf4) Binding 0
-                              Decorate 157(g_tTexcdi4) DescriptorSet 0
+                              Decorate 154(g_tTexcdf4) DescriptorSet 0
                               Decorate 157(g_tTexcdi4) Binding 0
-                              Decorate 160(g_tTexcdu4) DescriptorSet 0
+                              Decorate 157(g_tTexcdi4) DescriptorSet 0
                               Decorate 160(g_tTexcdu4) Binding 0
+                              Decorate 160(g_tTexcdu4) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out
index c3114a1..ba31124 100644
--- a/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out
@@ -332,24 +332,24 @@
                               Name 110  "@entryPointOutput.Color"
                               Name 114  "@entryPointOutput.Depth"
                               Name 117  "g_tTex1df4a"
-                              Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 16(g_tTex1df4) Binding 0
-                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
-                              Decorate 37(g_tTex1di4) DescriptorSet 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 37(g_tTex1di4) Binding 2
-                              Decorate 52(g_tTex1du4) DescriptorSet 0
+                              Decorate 37(g_tTex1di4) DescriptorSet 0
                               Decorate 52(g_tTex1du4) Binding 3
-                              Decorate 64(g_tTex2df4) DescriptorSet 0
+                              Decorate 52(g_tTex1du4) DescriptorSet 0
                               Decorate 64(g_tTex2df4) Binding 4
-                              Decorate 77(g_tTex2di4) DescriptorSet 0
+                              Decorate 64(g_tTex2df4) DescriptorSet 0
                               Decorate 77(g_tTex2di4) Binding 5
-                              Decorate 87(g_tTex2du4) DescriptorSet 0
+                              Decorate 77(g_tTex2di4) DescriptorSet 0
                               Decorate 87(g_tTex2du4) Binding 6
+                              Decorate 87(g_tTex2du4) DescriptorSet 0
                               Decorate 110(@entryPointOutput.Color) Location 0
                               Decorate 114(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 117(g_tTex1df4a) DescriptorSet 0
                               Decorate 117(g_tTex1df4a) Binding 1
+                              Decorate 117(g_tTex1df4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out
index caddcee..7ecb39f 100644
--- a/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out
@@ -400,14 +400,14 @@
 Validation failed
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 209
+// Id's are bound by 194
 
                               Capability Shader
                               Capability Sampled1D
                               Capability SampledCubeArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 166 170
+                              EntryPoint Fragment 4  "main" 151 155
                               ExecutionMode 4 OriginUpperLeft
                               ExecutionMode 4 DepthReplacing
                               Source HLSL 500
@@ -431,72 +431,72 @@
                               Name 96  "g_tTex2du4a"
                               Name 107  "r60"
                               Name 110  "g_tTexcdf4a"
-                              Name 123  "r62"
-                              Name 126  "g_tTexcdi4a"
-                              Name 137  "r64"
-                              Name 140  "g_tTexcdu4a"
-                              Name 152  "psout"
-                              Name 163  "flattenTemp"
-                              Name 166  "@entryPointOutput.Color"
-                              Name 170  "@entryPointOutput.Depth"
-                              Name 175  "g_tTex1df4"
-                              Name 178  "g_tTex1di4"
-                              Name 181  "g_tTex1du4"
-                              Name 184  "g_tTex2df4"
-                              Name 187  "g_tTex2di4"
-                              Name 190  "g_tTex2du4"
-                              Name 193  "g_tTex3df4"
-                              Name 196  "g_tTex3di4"
-                              Name 199  "g_tTex3du4"
-                              Name 202  "g_tTexcdf4"
-                              Name 205  "g_tTexcdi4"
-                              Name 208  "g_tTexcdu4"
-                              Decorate 16(g_tTex1df4a) DescriptorSet 0
+                              Name 118  "r62"
+                              Name 121  "g_tTexcdi4a"
+                              Name 127  "r64"
+                              Name 130  "g_tTexcdu4a"
+                              Name 137  "psout"
+                              Name 148  "flattenTemp"
+                              Name 151  "@entryPointOutput.Color"
+                              Name 155  "@entryPointOutput.Depth"
+                              Name 160  "g_tTex1df4"
+                              Name 163  "g_tTex1di4"
+                              Name 166  "g_tTex1du4"
+                              Name 169  "g_tTex2df4"
+                              Name 172  "g_tTex2di4"
+                              Name 175  "g_tTex2du4"
+                              Name 178  "g_tTex3df4"
+                              Name 181  "g_tTex3di4"
+                              Name 184  "g_tTex3du4"
+                              Name 187  "g_tTexcdf4"
+                              Name 190  "g_tTexcdi4"
+                              Name 193  "g_tTexcdu4"
                               Decorate 16(g_tTex1df4a) Binding 1
-                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_tTex1df4a) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
-                              Decorate 39(g_tTex1di4a) DescriptorSet 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 39(g_tTex1di4a) Binding 2
-                              Decorate 53(g_tTex1du4a) DescriptorSet 0
+                              Decorate 39(g_tTex1di4a) DescriptorSet 0
                               Decorate 53(g_tTex1du4a) Binding 3
-                              Decorate 66(g_tTex2df4a) DescriptorSet 0
+                              Decorate 53(g_tTex1du4a) DescriptorSet 0
                               Decorate 66(g_tTex2df4a) Binding 4
-                              Decorate 82(g_tTex2di4a) DescriptorSet 0
+                              Decorate 66(g_tTex2df4a) DescriptorSet 0
                               Decorate 82(g_tTex2di4a) Binding 5
-                              Decorate 96(g_tTex2du4a) DescriptorSet 0
+                              Decorate 82(g_tTex2di4a) DescriptorSet 0
                               Decorate 96(g_tTex2du4a) Binding 6
-                              Decorate 110(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 96(g_tTex2du4a) DescriptorSet 0
                               Decorate 110(g_tTexcdf4a) Binding 7
-                              Decorate 126(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 126(g_tTexcdi4a) Binding 8
-                              Decorate 140(g_tTexcdu4a) DescriptorSet 0
-                              Decorate 140(g_tTexcdu4a) Binding 9
-                              Decorate 166(@entryPointOutput.Color) Location 0
-                              Decorate 170(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 175(g_tTex1df4) DescriptorSet 0
-                              Decorate 175(g_tTex1df4) Binding 0
-                              Decorate 178(g_tTex1di4) DescriptorSet 0
-                              Decorate 178(g_tTex1di4) Binding 0
-                              Decorate 181(g_tTex1du4) DescriptorSet 0
-                              Decorate 181(g_tTex1du4) Binding 0
-                              Decorate 184(g_tTex2df4) DescriptorSet 0
-                              Decorate 184(g_tTex2df4) Binding 0
-                              Decorate 187(g_tTex2di4) DescriptorSet 0
-                              Decorate 187(g_tTex2di4) Binding 0
-                              Decorate 190(g_tTex2du4) DescriptorSet 0
-                              Decorate 190(g_tTex2du4) Binding 0
-                              Decorate 193(g_tTex3df4) DescriptorSet 0
-                              Decorate 193(g_tTex3df4) Binding 0
-                              Decorate 196(g_tTex3di4) DescriptorSet 0
-                              Decorate 196(g_tTex3di4) Binding 0
-                              Decorate 199(g_tTex3du4) DescriptorSet 0
-                              Decorate 199(g_tTex3du4) Binding 0
-                              Decorate 202(g_tTexcdf4) DescriptorSet 0
-                              Decorate 202(g_tTexcdf4) Binding 0
-                              Decorate 205(g_tTexcdi4) DescriptorSet 0
-                              Decorate 205(g_tTexcdi4) Binding 0
-                              Decorate 208(g_tTexcdu4) DescriptorSet 0
-                              Decorate 208(g_tTexcdu4) Binding 0
+                              Decorate 110(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 121(g_tTexcdi4a) Binding 8
+                              Decorate 121(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 130(g_tTexcdu4a) Binding 9
+                              Decorate 130(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 151(@entryPointOutput.Color) Location 0
+                              Decorate 155(@entryPointOutput.Depth) BuiltIn FragDepth
+                              Decorate 160(g_tTex1df4) Binding 0
+                              Decorate 160(g_tTex1df4) DescriptorSet 0
+                              Decorate 163(g_tTex1di4) Binding 0
+                              Decorate 163(g_tTex1di4) DescriptorSet 0
+                              Decorate 166(g_tTex1du4) Binding 0
+                              Decorate 166(g_tTex1du4) DescriptorSet 0
+                              Decorate 169(g_tTex2df4) Binding 0
+                              Decorate 169(g_tTex2df4) DescriptorSet 0
+                              Decorate 172(g_tTex2di4) Binding 0
+                              Decorate 172(g_tTex2di4) DescriptorSet 0
+                              Decorate 175(g_tTex2du4) Binding 0
+                              Decorate 175(g_tTex2du4) DescriptorSet 0
+                              Decorate 178(g_tTex3df4) Binding 0
+                              Decorate 178(g_tTex3df4) DescriptorSet 0
+                              Decorate 181(g_tTex3di4) Binding 0
+                              Decorate 181(g_tTex3di4) DescriptorSet 0
+                              Decorate 184(g_tTex3du4) Binding 0
+                              Decorate 184(g_tTex3du4) DescriptorSet 0
+                              Decorate 187(g_tTexcdf4) Binding 0
+                              Decorate 187(g_tTexcdf4) DescriptorSet 0
+                              Decorate 190(g_tTexcdi4) Binding 0
+                              Decorate 190(g_tTexcdi4) DescriptorSet 0
+                              Decorate 193(g_tTexcdu4) Binding 0
+                              Decorate 193(g_tTexcdu4) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -547,71 +547,71 @@
              113:             TypeSampledImage 108
              115:    6(float) Constant 1053609165
              116:    7(fvec4) ConstantComposite 25 26 71 115
-             124:             TypeImage 36(int) Cube depth array sampled format:Unknown
-             125:             TypePointer UniformConstant 124
-126(g_tTexcdi4a):    125(ptr) Variable UniformConstant
-             129:             TypeSampledImage 124
-             138:             TypeImage 50(int) Cube depth array sampled format:Unknown
-             139:             TypePointer UniformConstant 138
-140(g_tTexcdu4a):    139(ptr) Variable UniformConstant
-             143:             TypeSampledImage 138
-             151:             TypePointer Function 8(PS_OUTPUT)
-             153:     36(int) Constant 0
-             154:    6(float) Constant 1065353216
-             155:    7(fvec4) ConstantComposite 154 154 154 154
-             156:             TypePointer Function 7(fvec4)
-             158:     36(int) Constant 1
-             165:             TypePointer Output 7(fvec4)
-166(@entryPointOutput.Color):    165(ptr) Variable Output
-             169:             TypePointer Output 6(float)
-170(@entryPointOutput.Depth):    169(ptr) Variable Output
-             173:             TypeImage 6(float) 1D sampled format:Unknown
+             119:             TypeImage 36(int) Cube depth array sampled format:Unknown
+             120:             TypePointer UniformConstant 119
+121(g_tTexcdi4a):    120(ptr) Variable UniformConstant
+             124:             TypeSampledImage 119
+             128:             TypeImage 50(int) Cube depth array sampled format:Unknown
+             129:             TypePointer UniformConstant 128
+130(g_tTexcdu4a):    129(ptr) Variable UniformConstant
+             133:             TypeSampledImage 128
+             136:             TypePointer Function 8(PS_OUTPUT)
+             138:     36(int) Constant 0
+             139:    6(float) Constant 1065353216
+             140:    7(fvec4) ConstantComposite 139 139 139 139
+             141:             TypePointer Function 7(fvec4)
+             143:     36(int) Constant 1
+             150:             TypePointer Output 7(fvec4)
+151(@entryPointOutput.Color):    150(ptr) Variable Output
+             154:             TypePointer Output 6(float)
+155(@entryPointOutput.Depth):    154(ptr) Variable Output
+             158:             TypeImage 6(float) 1D sampled format:Unknown
+             159:             TypePointer UniformConstant 158
+ 160(g_tTex1df4):    159(ptr) Variable UniformConstant
+             161:             TypeImage 36(int) 1D sampled format:Unknown
+             162:             TypePointer UniformConstant 161
+ 163(g_tTex1di4):    162(ptr) Variable UniformConstant
+             164:             TypeImage 50(int) 1D sampled format:Unknown
+             165:             TypePointer UniformConstant 164
+ 166(g_tTex1du4):    165(ptr) Variable UniformConstant
+             167:             TypeImage 6(float) 2D sampled format:Unknown
+             168:             TypePointer UniformConstant 167
+ 169(g_tTex2df4):    168(ptr) Variable UniformConstant
+             170:             TypeImage 36(int) 2D sampled format:Unknown
+             171:             TypePointer UniformConstant 170
+ 172(g_tTex2di4):    171(ptr) Variable UniformConstant
+             173:             TypeImage 50(int) 2D sampled format:Unknown
              174:             TypePointer UniformConstant 173
- 175(g_tTex1df4):    174(ptr) Variable UniformConstant
-             176:             TypeImage 36(int) 1D sampled format:Unknown
+ 175(g_tTex2du4):    174(ptr) Variable UniformConstant
+             176:             TypeImage 6(float) 3D sampled format:Unknown
              177:             TypePointer UniformConstant 176
- 178(g_tTex1di4):    177(ptr) Variable UniformConstant
-             179:             TypeImage 50(int) 1D sampled format:Unknown
+ 178(g_tTex3df4):    177(ptr) Variable UniformConstant
+             179:             TypeImage 36(int) 3D sampled format:Unknown
              180:             TypePointer UniformConstant 179
- 181(g_tTex1du4):    180(ptr) Variable UniformConstant
-             182:             TypeImage 6(float) 2D sampled format:Unknown
+ 181(g_tTex3di4):    180(ptr) Variable UniformConstant
+             182:             TypeImage 50(int) 3D sampled format:Unknown
              183:             TypePointer UniformConstant 182
- 184(g_tTex2df4):    183(ptr) Variable UniformConstant
-             185:             TypeImage 36(int) 2D sampled format:Unknown
+ 184(g_tTex3du4):    183(ptr) Variable UniformConstant
+             185:             TypeImage 6(float) Cube sampled format:Unknown
              186:             TypePointer UniformConstant 185
- 187(g_tTex2di4):    186(ptr) Variable UniformConstant
-             188:             TypeImage 50(int) 2D sampled format:Unknown
+ 187(g_tTexcdf4):    186(ptr) Variable UniformConstant
+             188:             TypeImage 36(int) Cube sampled format:Unknown
              189:             TypePointer UniformConstant 188
- 190(g_tTex2du4):    189(ptr) Variable UniformConstant
-             191:             TypeImage 6(float) 3D sampled format:Unknown
+ 190(g_tTexcdi4):    189(ptr) Variable UniformConstant
+             191:             TypeImage 50(int) Cube sampled format:Unknown
              192:             TypePointer UniformConstant 191
- 193(g_tTex3df4):    192(ptr) Variable UniformConstant
-             194:             TypeImage 36(int) 3D sampled format:Unknown
-             195:             TypePointer UniformConstant 194
- 196(g_tTex3di4):    195(ptr) Variable UniformConstant
-             197:             TypeImage 50(int) 3D sampled format:Unknown
-             198:             TypePointer UniformConstant 197
- 199(g_tTex3du4):    198(ptr) Variable UniformConstant
-             200:             TypeImage 6(float) Cube sampled format:Unknown
-             201:             TypePointer UniformConstant 200
- 202(g_tTexcdf4):    201(ptr) Variable UniformConstant
-             203:             TypeImage 36(int) Cube sampled format:Unknown
-             204:             TypePointer UniformConstant 203
- 205(g_tTexcdi4):    204(ptr) Variable UniformConstant
-             206:             TypeImage 50(int) Cube sampled format:Unknown
-             207:             TypePointer UniformConstant 206
- 208(g_tTexcdu4):    207(ptr) Variable UniformConstant
+ 193(g_tTexcdu4):    192(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
-163(flattenTemp):    151(ptr) Variable Function
-             164:8(PS_OUTPUT) FunctionCall 10(@main()
-                              Store 163(flattenTemp) 164
-             167:    156(ptr) AccessChain 163(flattenTemp) 153
-             168:    7(fvec4) Load 167
-                              Store 166(@entryPointOutput.Color) 168
-             171:     12(ptr) AccessChain 163(flattenTemp) 158
-             172:    6(float) Load 171
-                              Store 170(@entryPointOutput.Depth) 172
+148(flattenTemp):    136(ptr) Variable Function
+             149:8(PS_OUTPUT) FunctionCall 10(@main()
+                              Store 148(flattenTemp) 149
+             152:    141(ptr) AccessChain 148(flattenTemp) 138
+             153:    7(fvec4) Load 152
+                              Store 151(@entryPointOutput.Color) 153
+             156:     12(ptr) AccessChain 148(flattenTemp) 143
+             157:    6(float) Load 156
+                              Store 155(@entryPointOutput.Depth) 157
                               Return
                               FunctionEnd
       10(@main():8(PS_OUTPUT) Function None 9
@@ -623,9 +623,9 @@
          79(r32):     12(ptr) Variable Function
          93(r34):     12(ptr) Variable Function
         107(r60):     12(ptr) Variable Function
-        123(r62):     12(ptr) Variable Function
-        137(r64):     12(ptr) Variable Function
-      152(psout):    151(ptr) Variable Function
+        118(r62):     12(ptr) Variable Function
+        127(r64):     12(ptr) Variable Function
+      137(psout):    136(ptr) Variable Function
               17:          14 Load 16(g_tTex1df4a)
               21:          18 Load 20(g_sSamp)
               23:          22 SampledImage 17 21
@@ -686,37 +686,22 @@
              111:         108 Load 110(g_tTexcdf4a)
              112:          18 Load 20(g_sSamp)
              114:         113 SampledImage 111 112
-             117:    6(float) CompositeExtract 116 0
-             118:    6(float) CompositeExtract 116 1
-             119:    6(float) CompositeExtract 116 2
-             120:    6(float) CompositeExtract 116 3
-             121:    7(fvec4) CompositeConstruct 117 118 119 120
-             122:    6(float) ImageSampleDrefImplicitLod 114 121 28
-                              Store 107(r60) 122
-             127:         124 Load 126(g_tTexcdi4a)
-             128:          18 Load 20(g_sSamp)
-             130:         129 SampledImage 127 128
-             131:    6(float) CompositeExtract 116 0
-             132:    6(float) CompositeExtract 116 1
-             133:    6(float) CompositeExtract 116 2
-             134:    6(float) CompositeExtract 116 3
-             135:    7(fvec4) CompositeConstruct 131 132 133 134
-             136:    6(float) ImageSampleDrefImplicitLod 130 135 28
-                              Store 123(r62) 136
-             141:         138 Load 140(g_tTexcdu4a)
-             142:          18 Load 20(g_sSamp)
-             144:         143 SampledImage 141 142
-             145:    6(float) CompositeExtract 116 0
-             146:    6(float) CompositeExtract 116 1
-             147:    6(float) CompositeExtract 116 2
-             148:    6(float) CompositeExtract 116 3
-             149:    7(fvec4) CompositeConstruct 145 146 147 148
-             150:    6(float) ImageSampleDrefImplicitLod 144 149 28
-                              Store 137(r64) 150
-             157:    156(ptr) AccessChain 152(psout) 153
-                              Store 157 155
-             159:     12(ptr) AccessChain 152(psout) 158
-                              Store 159 154
-             160:8(PS_OUTPUT) Load 152(psout)
-                              ReturnValue 160
+             117:    6(float) ImageSampleDrefImplicitLod 114 116 28
+                              Store 107(r60) 117
+             122:         119 Load 121(g_tTexcdi4a)
+             123:          18 Load 20(g_sSamp)
+             125:         124 SampledImage 122 123
+             126:    6(float) ImageSampleDrefImplicitLod 125 116 28
+                              Store 118(r62) 126
+             131:         128 Load 130(g_tTexcdu4a)
+             132:          18 Load 20(g_sSamp)
+             134:         133 SampledImage 131 132
+             135:    6(float) ImageSampleDrefImplicitLod 134 116 28
+                              Store 127(r64) 135
+             142:    141(ptr) AccessChain 137(psout) 138
+                              Store 142 140
+             144:     12(ptr) AccessChain 137(psout) 143
+                              Store 144 139
+             145:8(PS_OUTPUT) Load 137(psout)
+                              ReturnValue 145
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out
index fde1b58..a355f88 100644
--- a/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out
@@ -433,52 +433,52 @@
                               Name 191  "g_tTexcdf4a"
                               Name 194  "g_tTexcdi4a"
                               Name 197  "g_tTexcdu4a"
-                              Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 16(g_tTex1df4) Binding 0
-                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
-                              Decorate 34(g_tTex1di4) DescriptorSet 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 34(g_tTex1di4) Binding 1
-                              Decorate 46(g_tTex1du4) DescriptorSet 0
+                              Decorate 34(g_tTex1di4) DescriptorSet 0
                               Decorate 46(g_tTex1du4) Binding 2
-                              Decorate 57(g_tTex2df4) DescriptorSet 0
+                              Decorate 46(g_tTex1du4) DescriptorSet 0
                               Decorate 57(g_tTex2df4) Binding 3
-                              Decorate 73(g_tTex2di4) DescriptorSet 0
+                              Decorate 57(g_tTex2df4) DescriptorSet 0
                               Decorate 73(g_tTex2di4) Binding 4
-                              Decorate 86(g_tTex2du4) DescriptorSet 0
+                              Decorate 73(g_tTex2di4) DescriptorSet 0
                               Decorate 86(g_tTex2du4) Binding 5
-                              Decorate 99(g_tTexcdf4) DescriptorSet 0
+                              Decorate 86(g_tTex2du4) DescriptorSet 0
                               Decorate 99(g_tTexcdf4) Binding 6
-                              Decorate 115(g_tTexcdi4) DescriptorSet 0
+                              Decorate 99(g_tTexcdf4) DescriptorSet 0
                               Decorate 115(g_tTexcdi4) Binding 7
-                              Decorate 129(g_tTexcdu4) DescriptorSet 0
+                              Decorate 115(g_tTexcdi4) DescriptorSet 0
                               Decorate 129(g_tTexcdu4) Binding 8
+                              Decorate 129(g_tTexcdu4) DescriptorSet 0
                               Decorate 155(@entryPointOutput.Color) Location 0
                               Decorate 159(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 164(g_tTex3df4) DescriptorSet 0
                               Decorate 164(g_tTex3df4) Binding 0
-                              Decorate 167(g_tTex3di4) DescriptorSet 0
+                              Decorate 164(g_tTex3df4) DescriptorSet 0
                               Decorate 167(g_tTex3di4) Binding 0
-                              Decorate 170(g_tTex3du4) DescriptorSet 0
+                              Decorate 167(g_tTex3di4) DescriptorSet 0
                               Decorate 170(g_tTex3du4) Binding 0
-                              Decorate 173(g_tTex1df4a) DescriptorSet 0
+                              Decorate 170(g_tTex3du4) DescriptorSet 0
                               Decorate 173(g_tTex1df4a) Binding 0
-                              Decorate 176(g_tTex1di4a) DescriptorSet 0
+                              Decorate 173(g_tTex1df4a) DescriptorSet 0
                               Decorate 176(g_tTex1di4a) Binding 0
-                              Decorate 179(g_tTex1du4a) DescriptorSet 0
+                              Decorate 176(g_tTex1di4a) DescriptorSet 0
                               Decorate 179(g_tTex1du4a) Binding 0
-                              Decorate 182(g_tTex2df4a) DescriptorSet 0
+                              Decorate 179(g_tTex1du4a) DescriptorSet 0
                               Decorate 182(g_tTex2df4a) Binding 0
-                              Decorate 185(g_tTex2di4a) DescriptorSet 0
+                              Decorate 182(g_tTex2df4a) DescriptorSet 0
                               Decorate 185(g_tTex2di4a) Binding 0
-                              Decorate 188(g_tTex2du4a) DescriptorSet 0
+                              Decorate 185(g_tTex2di4a) DescriptorSet 0
                               Decorate 188(g_tTex2du4a) Binding 0
-                              Decorate 191(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 188(g_tTex2du4a) DescriptorSet 0
                               Decorate 191(g_tTexcdf4a) Binding 0
-                              Decorate 194(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 191(g_tTexcdf4a) DescriptorSet 0
                               Decorate 194(g_tTexcdi4a) Binding 0
-                              Decorate 197(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 194(g_tTexcdi4a) DescriptorSet 0
                               Decorate 197(g_tTexcdu4a) Binding 0
+                              Decorate 197(g_tTexcdu4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.samplecmp.dualmode.frag.out b/Test/baseResults/hlsl.samplecmp.dualmode.frag.out
index 7f17e90..da2b024 100644
--- a/Test/baseResults/hlsl.samplecmp.dualmode.frag.out
+++ b/Test/baseResults/hlsl.samplecmp.dualmode.frag.out
@@ -102,14 +102,14 @@
                               Name 29  "g_tTex"
                               Name 31  "g_sSamp"
                               Name 41  "@entryPointOutput"
-                              Decorate 13(g_tTex) DescriptorSet 0
                               Decorate 13(g_tTex) Binding 3
-                              Decorate 17(g_sSampCmp) DescriptorSet 0
+                              Decorate 13(g_tTex) DescriptorSet 0
                               Decorate 17(g_sSampCmp) Binding 1
-                              Decorate 29(g_tTex) DescriptorSet 0
+                              Decorate 17(g_sSampCmp) DescriptorSet 0
                               Decorate 29(g_tTex) Binding 3
-                              Decorate 31(g_sSamp) DescriptorSet 0
+                              Decorate 29(g_tTex) DescriptorSet 0
                               Decorate 31(g_sSamp) Binding 0
+                              Decorate 31(g_sSamp) DescriptorSet 0
                               Decorate 41(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out
index cc1b858..f528637 100644
--- a/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out
@@ -376,52 +376,52 @@
                               Name 160  "g_tTexcdf4a"
                               Name 163  "g_tTexcdi4a"
                               Name 166  "g_tTexcdu4a"
-                              Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 16(g_tTex1df4) Binding 0
-                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
-                              Decorate 35(g_tTex1di4) DescriptorSet 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 35(g_tTex1di4) Binding 1
-                              Decorate 47(g_tTex1du4) DescriptorSet 0
+                              Decorate 35(g_tTex1di4) DescriptorSet 0
                               Decorate 47(g_tTex1du4) Binding 2
-                              Decorate 58(g_tTex2df4) DescriptorSet 0
+                              Decorate 47(g_tTex1du4) DescriptorSet 0
                               Decorate 58(g_tTex2df4) Binding 3
-                              Decorate 77(g_tTex2di4) DescriptorSet 0
+                              Decorate 58(g_tTex2df4) DescriptorSet 0
                               Decorate 77(g_tTex2di4) Binding 4
-                              Decorate 90(g_tTex2du4) DescriptorSet 0
+                              Decorate 77(g_tTex2di4) DescriptorSet 0
                               Decorate 90(g_tTex2du4) Binding 5
+                              Decorate 90(g_tTex2du4) DescriptorSet 0
                               Decorate 115(@entryPointOutput.Color) Location 0
                               Decorate 119(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 124(g_tTex3df4) DescriptorSet 0
                               Decorate 124(g_tTex3df4) Binding 0
-                              Decorate 127(g_tTex3di4) DescriptorSet 0
+                              Decorate 124(g_tTex3df4) DescriptorSet 0
                               Decorate 127(g_tTex3di4) Binding 0
-                              Decorate 130(g_tTex3du4) DescriptorSet 0
+                              Decorate 127(g_tTex3di4) DescriptorSet 0
                               Decorate 130(g_tTex3du4) Binding 0
-                              Decorate 133(g_tTexcdf4) DescriptorSet 0
+                              Decorate 130(g_tTex3du4) DescriptorSet 0
                               Decorate 133(g_tTexcdf4) Binding 0
-                              Decorate 136(g_tTexcdi4) DescriptorSet 0
+                              Decorate 133(g_tTexcdf4) DescriptorSet 0
                               Decorate 136(g_tTexcdi4) Binding 0
-                              Decorate 139(g_tTexcdu4) DescriptorSet 0
+                              Decorate 136(g_tTexcdi4) DescriptorSet 0
                               Decorate 139(g_tTexcdu4) Binding 0
-                              Decorate 142(g_tTex1df4a) DescriptorSet 0
+                              Decorate 139(g_tTexcdu4) DescriptorSet 0
                               Decorate 142(g_tTex1df4a) Binding 0
-                              Decorate 145(g_tTex1di4a) DescriptorSet 0
+                              Decorate 142(g_tTex1df4a) DescriptorSet 0
                               Decorate 145(g_tTex1di4a) Binding 0
-                              Decorate 148(g_tTex1du4a) DescriptorSet 0
+                              Decorate 145(g_tTex1di4a) DescriptorSet 0
                               Decorate 148(g_tTex1du4a) Binding 0
-                              Decorate 151(g_tTex2df4a) DescriptorSet 0
+                              Decorate 148(g_tTex1du4a) DescriptorSet 0
                               Decorate 151(g_tTex2df4a) Binding 0
-                              Decorate 154(g_tTex2di4a) DescriptorSet 0
+                              Decorate 151(g_tTex2df4a) DescriptorSet 0
                               Decorate 154(g_tTex2di4a) Binding 0
-                              Decorate 157(g_tTex2du4a) DescriptorSet 0
+                              Decorate 154(g_tTex2di4a) DescriptorSet 0
                               Decorate 157(g_tTex2du4a) Binding 0
-                              Decorate 160(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 157(g_tTex2du4a) DescriptorSet 0
                               Decorate 160(g_tTexcdf4a) Binding 0
-                              Decorate 163(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 160(g_tTexcdf4a) DescriptorSet 0
                               Decorate 163(g_tTexcdi4a) Binding 0
-                              Decorate 166(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 163(g_tTexcdi4a) DescriptorSet 0
                               Decorate 166(g_tTexcdu4a) Binding 0
+                              Decorate 166(g_tTexcdu4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out
index 9d8413c..0500534 100644
--- a/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out
@@ -388,52 +388,52 @@
                               Name 171  "g_tTexcdf4a"
                               Name 174  "g_tTexcdi4a"
                               Name 177  "g_tTexcdu4a"
-                              Decorate 16(g_tTex1df4a) DescriptorSet 0
                               Decorate 16(g_tTex1df4a) Binding 1
-                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_tTex1df4a) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
-                              Decorate 40(g_tTex1di4a) DescriptorSet 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 40(g_tTex1di4a) Binding 2
-                              Decorate 54(g_tTex1du4a) DescriptorSet 0
+                              Decorate 40(g_tTex1di4a) DescriptorSet 0
                               Decorate 54(g_tTex1du4a) Binding 3
-                              Decorate 67(g_tTex2df4a) DescriptorSet 0
+                              Decorate 54(g_tTex1du4a) DescriptorSet 0
                               Decorate 67(g_tTex2df4a) Binding 4
-                              Decorate 86(g_tTex2di4a) DescriptorSet 0
+                              Decorate 67(g_tTex2df4a) DescriptorSet 0
                               Decorate 86(g_tTex2di4a) Binding 5
-                              Decorate 100(g_tTex2du4a) DescriptorSet 0
+                              Decorate 86(g_tTex2di4a) DescriptorSet 0
                               Decorate 100(g_tTex2du4a) Binding 6
+                              Decorate 100(g_tTex2du4a) DescriptorSet 0
                               Decorate 126(@entryPointOutput.Color) Location 0
                               Decorate 130(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 135(g_tTex1df4) DescriptorSet 0
                               Decorate 135(g_tTex1df4) Binding 0
-                              Decorate 138(g_tTex1di4) DescriptorSet 0
+                              Decorate 135(g_tTex1df4) DescriptorSet 0
                               Decorate 138(g_tTex1di4) Binding 0
-                              Decorate 141(g_tTex1du4) DescriptorSet 0
+                              Decorate 138(g_tTex1di4) DescriptorSet 0
                               Decorate 141(g_tTex1du4) Binding 0
-                              Decorate 144(g_tTex2df4) DescriptorSet 0
+                              Decorate 141(g_tTex1du4) DescriptorSet 0
                               Decorate 144(g_tTex2df4) Binding 0
-                              Decorate 147(g_tTex2di4) DescriptorSet 0
+                              Decorate 144(g_tTex2df4) DescriptorSet 0
                               Decorate 147(g_tTex2di4) Binding 0
-                              Decorate 150(g_tTex2du4) DescriptorSet 0
+                              Decorate 147(g_tTex2di4) DescriptorSet 0
                               Decorate 150(g_tTex2du4) Binding 0
-                              Decorate 153(g_tTex3df4) DescriptorSet 0
+                              Decorate 150(g_tTex2du4) DescriptorSet 0
                               Decorate 153(g_tTex3df4) Binding 0
-                              Decorate 156(g_tTex3di4) DescriptorSet 0
+                              Decorate 153(g_tTex3df4) DescriptorSet 0
                               Decorate 156(g_tTex3di4) Binding 0
-                              Decorate 159(g_tTex3du4) DescriptorSet 0
+                              Decorate 156(g_tTex3di4) DescriptorSet 0
                               Decorate 159(g_tTex3du4) Binding 0
-                              Decorate 162(g_tTexcdf4) DescriptorSet 0
+                              Decorate 159(g_tTex3du4) DescriptorSet 0
                               Decorate 162(g_tTexcdf4) Binding 0
-                              Decorate 165(g_tTexcdi4) DescriptorSet 0
+                              Decorate 162(g_tTexcdf4) DescriptorSet 0
                               Decorate 165(g_tTexcdi4) Binding 0
-                              Decorate 168(g_tTexcdu4) DescriptorSet 0
+                              Decorate 165(g_tTexcdi4) DescriptorSet 0
                               Decorate 168(g_tTexcdu4) Binding 0
-                              Decorate 171(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 168(g_tTexcdu4) DescriptorSet 0
                               Decorate 171(g_tTexcdf4a) Binding 0
-                              Decorate 174(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 171(g_tTexcdf4a) DescriptorSet 0
                               Decorate 174(g_tTexcdi4a) Binding 0
-                              Decorate 177(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 174(g_tTexcdi4a) DescriptorSet 0
                               Decorate 177(g_tTexcdu4a) Binding 0
+                              Decorate 177(g_tTexcdu4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out
index 45e33ff..66b5092 100644
--- a/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out
@@ -436,14 +436,14 @@
 Validation failed
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 210
+// Id's are bound by 195
 
                               Capability Shader
                               Capability Sampled1D
                               Capability SampledCubeArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 167 171
+                              EntryPoint Fragment 4  "main" 152 156
                               ExecutionMode 4 OriginUpperLeft
                               ExecutionMode 4 DepthReplacing
                               Source HLSL 500
@@ -467,72 +467,72 @@
                               Name 97  "g_tTex2du4a"
                               Name 108  "r60"
                               Name 111  "g_tTexcdf4a"
-                              Name 124  "r62"
-                              Name 127  "g_tTexcdi4a"
-                              Name 138  "r64"
-                              Name 141  "g_tTexcdu4a"
-                              Name 153  "psout"
-                              Name 164  "flattenTemp"
-                              Name 167  "@entryPointOutput.Color"
-                              Name 171  "@entryPointOutput.Depth"
-                              Name 176  "g_tTex1df4"
-                              Name 179  "g_tTex1di4"
-                              Name 182  "g_tTex1du4"
-                              Name 185  "g_tTex2df4"
-                              Name 188  "g_tTex2di4"
-                              Name 191  "g_tTex2du4"
-                              Name 194  "g_tTex3df4"
-                              Name 197  "g_tTex3di4"
-                              Name 200  "g_tTex3du4"
-                              Name 203  "g_tTexcdf4"
-                              Name 206  "g_tTexcdi4"
-                              Name 209  "g_tTexcdu4"
-                              Decorate 16(g_tTex1df4a) DescriptorSet 0
+                              Name 119  "r62"
+                              Name 122  "g_tTexcdi4a"
+                              Name 128  "r64"
+                              Name 131  "g_tTexcdu4a"
+                              Name 138  "psout"
+                              Name 149  "flattenTemp"
+                              Name 152  "@entryPointOutput.Color"
+                              Name 156  "@entryPointOutput.Depth"
+                              Name 161  "g_tTex1df4"
+                              Name 164  "g_tTex1di4"
+                              Name 167  "g_tTex1du4"
+                              Name 170  "g_tTex2df4"
+                              Name 173  "g_tTex2di4"
+                              Name 176  "g_tTex2du4"
+                              Name 179  "g_tTex3df4"
+                              Name 182  "g_tTex3di4"
+                              Name 185  "g_tTex3du4"
+                              Name 188  "g_tTexcdf4"
+                              Name 191  "g_tTexcdi4"
+                              Name 194  "g_tTexcdu4"
                               Decorate 16(g_tTex1df4a) Binding 1
-                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_tTex1df4a) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
-                              Decorate 40(g_tTex1di4a) DescriptorSet 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 40(g_tTex1di4a) Binding 2
-                              Decorate 54(g_tTex1du4a) DescriptorSet 0
+                              Decorate 40(g_tTex1di4a) DescriptorSet 0
                               Decorate 54(g_tTex1du4a) Binding 3
-                              Decorate 67(g_tTex2df4a) DescriptorSet 0
+                              Decorate 54(g_tTex1du4a) DescriptorSet 0
                               Decorate 67(g_tTex2df4a) Binding 4
-                              Decorate 83(g_tTex2di4a) DescriptorSet 0
+                              Decorate 67(g_tTex2df4a) DescriptorSet 0
                               Decorate 83(g_tTex2di4a) Binding 5
-                              Decorate 97(g_tTex2du4a) DescriptorSet 0
+                              Decorate 83(g_tTex2di4a) DescriptorSet 0
                               Decorate 97(g_tTex2du4a) Binding 6
-                              Decorate 111(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 97(g_tTex2du4a) DescriptorSet 0
                               Decorate 111(g_tTexcdf4a) Binding 7
-                              Decorate 127(g_tTexcdi4a) DescriptorSet 0
-                              Decorate 127(g_tTexcdi4a) Binding 8
-                              Decorate 141(g_tTexcdu4a) DescriptorSet 0
-                              Decorate 141(g_tTexcdu4a) Binding 9
-                              Decorate 167(@entryPointOutput.Color) Location 0
-                              Decorate 171(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 176(g_tTex1df4) DescriptorSet 0
-                              Decorate 176(g_tTex1df4) Binding 0
-                              Decorate 179(g_tTex1di4) DescriptorSet 0
-                              Decorate 179(g_tTex1di4) Binding 0
-                              Decorate 182(g_tTex1du4) DescriptorSet 0
-                              Decorate 182(g_tTex1du4) Binding 0
-                              Decorate 185(g_tTex2df4) DescriptorSet 0
-                              Decorate 185(g_tTex2df4) Binding 0
-                              Decorate 188(g_tTex2di4) DescriptorSet 0
-                              Decorate 188(g_tTex2di4) Binding 0
-                              Decorate 191(g_tTex2du4) DescriptorSet 0
-                              Decorate 191(g_tTex2du4) Binding 0
-                              Decorate 194(g_tTex3df4) DescriptorSet 0
-                              Decorate 194(g_tTex3df4) Binding 0
-                              Decorate 197(g_tTex3di4) DescriptorSet 0
-                              Decorate 197(g_tTex3di4) Binding 0
-                              Decorate 200(g_tTex3du4) DescriptorSet 0
-                              Decorate 200(g_tTex3du4) Binding 0
-                              Decorate 203(g_tTexcdf4) DescriptorSet 0
-                              Decorate 203(g_tTexcdf4) Binding 0
-                              Decorate 206(g_tTexcdi4) DescriptorSet 0
-                              Decorate 206(g_tTexcdi4) Binding 0
-                              Decorate 209(g_tTexcdu4) DescriptorSet 0
-                              Decorate 209(g_tTexcdu4) Binding 0
+                              Decorate 111(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 122(g_tTexcdi4a) Binding 8
+                              Decorate 122(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 131(g_tTexcdu4a) Binding 9
+                              Decorate 131(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 152(@entryPointOutput.Color) Location 0
+                              Decorate 156(@entryPointOutput.Depth) BuiltIn FragDepth
+                              Decorate 161(g_tTex1df4) Binding 0
+                              Decorate 161(g_tTex1df4) DescriptorSet 0
+                              Decorate 164(g_tTex1di4) Binding 0
+                              Decorate 164(g_tTex1di4) DescriptorSet 0
+                              Decorate 167(g_tTex1du4) Binding 0
+                              Decorate 167(g_tTex1du4) DescriptorSet 0
+                              Decorate 170(g_tTex2df4) Binding 0
+                              Decorate 170(g_tTex2df4) DescriptorSet 0
+                              Decorate 173(g_tTex2di4) Binding 0
+                              Decorate 173(g_tTex2di4) DescriptorSet 0
+                              Decorate 176(g_tTex2du4) Binding 0
+                              Decorate 176(g_tTex2du4) DescriptorSet 0
+                              Decorate 179(g_tTex3df4) Binding 0
+                              Decorate 179(g_tTex3df4) DescriptorSet 0
+                              Decorate 182(g_tTex3di4) Binding 0
+                              Decorate 182(g_tTex3di4) DescriptorSet 0
+                              Decorate 185(g_tTex3du4) Binding 0
+                              Decorate 185(g_tTex3du4) DescriptorSet 0
+                              Decorate 188(g_tTexcdf4) Binding 0
+                              Decorate 188(g_tTexcdf4) DescriptorSet 0
+                              Decorate 191(g_tTexcdi4) Binding 0
+                              Decorate 191(g_tTexcdi4) DescriptorSet 0
+                              Decorate 194(g_tTexcdu4) Binding 0
+                              Decorate 194(g_tTexcdu4) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -584,71 +584,71 @@
              114:             TypeSampledImage 109
              116:    6(float) Constant 1053609165
              117:    7(fvec4) ConstantComposite 25 26 72 116
-             125:             TypeImage 37(int) Cube depth array sampled format:Unknown
-             126:             TypePointer UniformConstant 125
-127(g_tTexcdi4a):    126(ptr) Variable UniformConstant
-             130:             TypeSampledImage 125
-             139:             TypeImage 51(int) Cube depth array sampled format:Unknown
-             140:             TypePointer UniformConstant 139
-141(g_tTexcdu4a):    140(ptr) Variable UniformConstant
-             144:             TypeSampledImage 139
-             152:             TypePointer Function 8(PS_OUTPUT)
-             154:     37(int) Constant 0
-             155:    6(float) Constant 1065353216
-             156:    7(fvec4) ConstantComposite 155 155 155 155
-             157:             TypePointer Function 7(fvec4)
-             159:     37(int) Constant 1
-             166:             TypePointer Output 7(fvec4)
-167(@entryPointOutput.Color):    166(ptr) Variable Output
-             170:             TypePointer Output 6(float)
-171(@entryPointOutput.Depth):    170(ptr) Variable Output
-             174:             TypeImage 6(float) 1D sampled format:Unknown
+             120:             TypeImage 37(int) Cube depth array sampled format:Unknown
+             121:             TypePointer UniformConstant 120
+122(g_tTexcdi4a):    121(ptr) Variable UniformConstant
+             125:             TypeSampledImage 120
+             129:             TypeImage 51(int) Cube depth array sampled format:Unknown
+             130:             TypePointer UniformConstant 129
+131(g_tTexcdu4a):    130(ptr) Variable UniformConstant
+             134:             TypeSampledImage 129
+             137:             TypePointer Function 8(PS_OUTPUT)
+             139:     37(int) Constant 0
+             140:    6(float) Constant 1065353216
+             141:    7(fvec4) ConstantComposite 140 140 140 140
+             142:             TypePointer Function 7(fvec4)
+             144:     37(int) Constant 1
+             151:             TypePointer Output 7(fvec4)
+152(@entryPointOutput.Color):    151(ptr) Variable Output
+             155:             TypePointer Output 6(float)
+156(@entryPointOutput.Depth):    155(ptr) Variable Output
+             159:             TypeImage 6(float) 1D sampled format:Unknown
+             160:             TypePointer UniformConstant 159
+ 161(g_tTex1df4):    160(ptr) Variable UniformConstant
+             162:             TypeImage 37(int) 1D sampled format:Unknown
+             163:             TypePointer UniformConstant 162
+ 164(g_tTex1di4):    163(ptr) Variable UniformConstant
+             165:             TypeImage 51(int) 1D sampled format:Unknown
+             166:             TypePointer UniformConstant 165
+ 167(g_tTex1du4):    166(ptr) Variable UniformConstant
+             168:             TypeImage 6(float) 2D sampled format:Unknown
+             169:             TypePointer UniformConstant 168
+ 170(g_tTex2df4):    169(ptr) Variable UniformConstant
+             171:             TypeImage 37(int) 2D sampled format:Unknown
+             172:             TypePointer UniformConstant 171
+ 173(g_tTex2di4):    172(ptr) Variable UniformConstant
+             174:             TypeImage 51(int) 2D sampled format:Unknown
              175:             TypePointer UniformConstant 174
- 176(g_tTex1df4):    175(ptr) Variable UniformConstant
-             177:             TypeImage 37(int) 1D sampled format:Unknown
+ 176(g_tTex2du4):    175(ptr) Variable UniformConstant
+             177:             TypeImage 6(float) 3D sampled format:Unknown
              178:             TypePointer UniformConstant 177
- 179(g_tTex1di4):    178(ptr) Variable UniformConstant
-             180:             TypeImage 51(int) 1D sampled format:Unknown
+ 179(g_tTex3df4):    178(ptr) Variable UniformConstant
+             180:             TypeImage 37(int) 3D sampled format:Unknown
              181:             TypePointer UniformConstant 180
- 182(g_tTex1du4):    181(ptr) Variable UniformConstant
-             183:             TypeImage 6(float) 2D sampled format:Unknown
+ 182(g_tTex3di4):    181(ptr) Variable UniformConstant
+             183:             TypeImage 51(int) 3D sampled format:Unknown
              184:             TypePointer UniformConstant 183
- 185(g_tTex2df4):    184(ptr) Variable UniformConstant
-             186:             TypeImage 37(int) 2D sampled format:Unknown
+ 185(g_tTex3du4):    184(ptr) Variable UniformConstant
+             186:             TypeImage 6(float) Cube sampled format:Unknown
              187:             TypePointer UniformConstant 186
- 188(g_tTex2di4):    187(ptr) Variable UniformConstant
-             189:             TypeImage 51(int) 2D sampled format:Unknown
+ 188(g_tTexcdf4):    187(ptr) Variable UniformConstant
+             189:             TypeImage 37(int) Cube sampled format:Unknown
              190:             TypePointer UniformConstant 189
- 191(g_tTex2du4):    190(ptr) Variable UniformConstant
-             192:             TypeImage 6(float) 3D sampled format:Unknown
+ 191(g_tTexcdi4):    190(ptr) Variable UniformConstant
+             192:             TypeImage 51(int) Cube sampled format:Unknown
              193:             TypePointer UniformConstant 192
- 194(g_tTex3df4):    193(ptr) Variable UniformConstant
-             195:             TypeImage 37(int) 3D sampled format:Unknown
-             196:             TypePointer UniformConstant 195
- 197(g_tTex3di4):    196(ptr) Variable UniformConstant
-             198:             TypeImage 51(int) 3D sampled format:Unknown
-             199:             TypePointer UniformConstant 198
- 200(g_tTex3du4):    199(ptr) Variable UniformConstant
-             201:             TypeImage 6(float) Cube sampled format:Unknown
-             202:             TypePointer UniformConstant 201
- 203(g_tTexcdf4):    202(ptr) Variable UniformConstant
-             204:             TypeImage 37(int) Cube sampled format:Unknown
-             205:             TypePointer UniformConstant 204
- 206(g_tTexcdi4):    205(ptr) Variable UniformConstant
-             207:             TypeImage 51(int) Cube sampled format:Unknown
-             208:             TypePointer UniformConstant 207
- 209(g_tTexcdu4):    208(ptr) Variable UniformConstant
+ 194(g_tTexcdu4):    193(ptr) Variable UniformConstant
          4(main):           2 Function None 3
                5:             Label
-164(flattenTemp):    152(ptr) Variable Function
-             165:8(PS_OUTPUT) FunctionCall 10(@main()
-                              Store 164(flattenTemp) 165
-             168:    157(ptr) AccessChain 164(flattenTemp) 154
-             169:    7(fvec4) Load 168
-                              Store 167(@entryPointOutput.Color) 169
-             172:     12(ptr) AccessChain 164(flattenTemp) 159
-             173:    6(float) Load 172
-                              Store 171(@entryPointOutput.Depth) 173
+149(flattenTemp):    137(ptr) Variable Function
+             150:8(PS_OUTPUT) FunctionCall 10(@main()
+                              Store 149(flattenTemp) 150
+             153:    142(ptr) AccessChain 149(flattenTemp) 139
+             154:    7(fvec4) Load 153
+                              Store 152(@entryPointOutput.Color) 154
+             157:     12(ptr) AccessChain 149(flattenTemp) 144
+             158:    6(float) Load 157
+                              Store 156(@entryPointOutput.Depth) 158
                               Return
                               FunctionEnd
       10(@main():8(PS_OUTPUT) Function None 9
@@ -660,9 +660,9 @@
          80(r32):     12(ptr) Variable Function
          94(r34):     12(ptr) Variable Function
         108(r60):     12(ptr) Variable Function
-        124(r62):     12(ptr) Variable Function
-        138(r64):     12(ptr) Variable Function
-      153(psout):    152(ptr) Variable Function
+        119(r62):     12(ptr) Variable Function
+        128(r64):     12(ptr) Variable Function
+      138(psout):    137(ptr) Variable Function
               17:          14 Load 16(g_tTex1df4a)
               21:          18 Load 20(g_sSamp)
               23:          22 SampledImage 17 21
@@ -723,37 +723,22 @@
              112:         109 Load 111(g_tTexcdf4a)
              113:          18 Load 20(g_sSamp)
              115:         114 SampledImage 112 113
-             118:    6(float) CompositeExtract 117 0
-             119:    6(float) CompositeExtract 117 1
-             120:    6(float) CompositeExtract 117 2
-             121:    6(float) CompositeExtract 117 3
-             122:    7(fvec4) CompositeConstruct 118 119 120 121
-             123:    6(float) ImageSampleDrefExplicitLod 115 122 28 Lod 33
-                              Store 108(r60) 123
-             128:         125 Load 127(g_tTexcdi4a)
-             129:          18 Load 20(g_sSamp)
-             131:         130 SampledImage 128 129
-             132:    6(float) CompositeExtract 117 0
-             133:    6(float) CompositeExtract 117 1
-             134:    6(float) CompositeExtract 117 2
-             135:    6(float) CompositeExtract 117 3
-             136:    7(fvec4) CompositeConstruct 132 133 134 135
-             137:    6(float) ImageSampleDrefExplicitLod 131 136 28 Lod 33
-                              Store 124(r62) 137
-             142:         139 Load 141(g_tTexcdu4a)
-             143:          18 Load 20(g_sSamp)
-             145:         144 SampledImage 142 143
-             146:    6(float) CompositeExtract 117 0
-             147:    6(float) CompositeExtract 117 1
-             148:    6(float) CompositeExtract 117 2
-             149:    6(float) CompositeExtract 117 3
-             150:    7(fvec4) CompositeConstruct 146 147 148 149
-             151:    6(float) ImageSampleDrefExplicitLod 145 150 28 Lod 33
-                              Store 138(r64) 151
-             158:    157(ptr) AccessChain 153(psout) 154
-                              Store 158 156
-             160:     12(ptr) AccessChain 153(psout) 159
-                              Store 160 155
-             161:8(PS_OUTPUT) Load 153(psout)
-                              ReturnValue 161
+             118:    6(float) ImageSampleDrefExplicitLod 115 117 28 Lod 33
+                              Store 108(r60) 118
+             123:         120 Load 122(g_tTexcdi4a)
+             124:          18 Load 20(g_sSamp)
+             126:         125 SampledImage 123 124
+             127:    6(float) ImageSampleDrefExplicitLod 126 117 28 Lod 33
+                              Store 119(r62) 127
+             132:         129 Load 131(g_tTexcdu4a)
+             133:          18 Load 20(g_sSamp)
+             135:         134 SampledImage 132 133
+             136:    6(float) ImageSampleDrefExplicitLod 135 117 28 Lod 33
+                              Store 128(r64) 136
+             143:    142(ptr) AccessChain 138(psout) 139
+                              Store 143 141
+             145:     12(ptr) AccessChain 138(psout) 144
+                              Store 145 140
+             146:8(PS_OUTPUT) Load 138(psout)
+                              ReturnValue 146
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out
index 6807d99..c833b51 100644
--- a/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out
@@ -469,52 +469,52 @@
                               Name 192  "g_tTexcdf4a"
                               Name 195  "g_tTexcdi4a"
                               Name 198  "g_tTexcdu4a"
-                              Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 16(g_tTex1df4) Binding 0
-                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
-                              Decorate 35(g_tTex1di4) DescriptorSet 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 35(g_tTex1di4) Binding 1
-                              Decorate 47(g_tTex1du4) DescriptorSet 0
+                              Decorate 35(g_tTex1di4) DescriptorSet 0
                               Decorate 47(g_tTex1du4) Binding 2
-                              Decorate 58(g_tTex2df4) DescriptorSet 0
+                              Decorate 47(g_tTex1du4) DescriptorSet 0
                               Decorate 58(g_tTex2df4) Binding 3
-                              Decorate 74(g_tTex2di4) DescriptorSet 0
+                              Decorate 58(g_tTex2df4) DescriptorSet 0
                               Decorate 74(g_tTex2di4) Binding 4
-                              Decorate 87(g_tTex2du4) DescriptorSet 0
+                              Decorate 74(g_tTex2di4) DescriptorSet 0
                               Decorate 87(g_tTex2du4) Binding 5
-                              Decorate 100(g_tTexcdf4) DescriptorSet 0
+                              Decorate 87(g_tTex2du4) DescriptorSet 0
                               Decorate 100(g_tTexcdf4) Binding 6
-                              Decorate 116(g_tTexcdi4) DescriptorSet 0
+                              Decorate 100(g_tTexcdf4) DescriptorSet 0
                               Decorate 116(g_tTexcdi4) Binding 7
-                              Decorate 130(g_tTexcdu4) DescriptorSet 0
+                              Decorate 116(g_tTexcdi4) DescriptorSet 0
                               Decorate 130(g_tTexcdu4) Binding 8
+                              Decorate 130(g_tTexcdu4) DescriptorSet 0
                               Decorate 156(@entryPointOutput.Color) Location 0
                               Decorate 160(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 165(g_tTex3df4) DescriptorSet 0
                               Decorate 165(g_tTex3df4) Binding 0
-                              Decorate 168(g_tTex3di4) DescriptorSet 0
+                              Decorate 165(g_tTex3df4) DescriptorSet 0
                               Decorate 168(g_tTex3di4) Binding 0
-                              Decorate 171(g_tTex3du4) DescriptorSet 0
+                              Decorate 168(g_tTex3di4) DescriptorSet 0
                               Decorate 171(g_tTex3du4) Binding 0
-                              Decorate 174(g_tTex1df4a) DescriptorSet 0
+                              Decorate 171(g_tTex3du4) DescriptorSet 0
                               Decorate 174(g_tTex1df4a) Binding 0
-                              Decorate 177(g_tTex1di4a) DescriptorSet 0
+                              Decorate 174(g_tTex1df4a) DescriptorSet 0
                               Decorate 177(g_tTex1di4a) Binding 0
-                              Decorate 180(g_tTex1du4a) DescriptorSet 0
+                              Decorate 177(g_tTex1di4a) DescriptorSet 0
                               Decorate 180(g_tTex1du4a) Binding 0
-                              Decorate 183(g_tTex2df4a) DescriptorSet 0
+                              Decorate 180(g_tTex1du4a) DescriptorSet 0
                               Decorate 183(g_tTex2df4a) Binding 0
-                              Decorate 186(g_tTex2di4a) DescriptorSet 0
+                              Decorate 183(g_tTex2df4a) DescriptorSet 0
                               Decorate 186(g_tTex2di4a) Binding 0
-                              Decorate 189(g_tTex2du4a) DescriptorSet 0
+                              Decorate 186(g_tTex2di4a) DescriptorSet 0
                               Decorate 189(g_tTex2du4a) Binding 0
-                              Decorate 192(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 189(g_tTex2du4a) DescriptorSet 0
                               Decorate 192(g_tTexcdf4a) Binding 0
-                              Decorate 195(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 192(g_tTexcdf4a) DescriptorSet 0
                               Decorate 195(g_tTexcdi4a) Binding 0
-                              Decorate 198(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 195(g_tTexcdi4a) DescriptorSet 0
                               Decorate 198(g_tTexcdu4a) Binding 0
+                              Decorate 198(g_tTexcdu4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out
index 338a5e7..70d2bd7 100644
--- a/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out
@@ -400,52 +400,52 @@
                               Name 161  "g_tTexcdf4a"
                               Name 164  "g_tTexcdi4a"
                               Name 167  "g_tTexcdu4a"
-                              Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 16(g_tTex1df4) Binding 0
-                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
-                              Decorate 36(g_tTex1di4) DescriptorSet 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 36(g_tTex1di4) Binding 1
-                              Decorate 48(g_tTex1du4) DescriptorSet 0
+                              Decorate 36(g_tTex1di4) DescriptorSet 0
                               Decorate 48(g_tTex1du4) Binding 2
-                              Decorate 59(g_tTex2df4) DescriptorSet 0
+                              Decorate 48(g_tTex1du4) DescriptorSet 0
                               Decorate 59(g_tTex2df4) Binding 3
-                              Decorate 78(g_tTex2di4) DescriptorSet 0
+                              Decorate 59(g_tTex2df4) DescriptorSet 0
                               Decorate 78(g_tTex2di4) Binding 4
-                              Decorate 91(g_tTex2du4) DescriptorSet 0
+                              Decorate 78(g_tTex2di4) DescriptorSet 0
                               Decorate 91(g_tTex2du4) Binding 5
+                              Decorate 91(g_tTex2du4) DescriptorSet 0
                               Decorate 116(@entryPointOutput.Color) Location 0
                               Decorate 120(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 125(g_tTex3df4) DescriptorSet 0
                               Decorate 125(g_tTex3df4) Binding 0
-                              Decorate 128(g_tTex3di4) DescriptorSet 0
+                              Decorate 125(g_tTex3df4) DescriptorSet 0
                               Decorate 128(g_tTex3di4) Binding 0
-                              Decorate 131(g_tTex3du4) DescriptorSet 0
+                              Decorate 128(g_tTex3di4) DescriptorSet 0
                               Decorate 131(g_tTex3du4) Binding 0
-                              Decorate 134(g_tTexcdf4) DescriptorSet 0
+                              Decorate 131(g_tTex3du4) DescriptorSet 0
                               Decorate 134(g_tTexcdf4) Binding 0
-                              Decorate 137(g_tTexcdi4) DescriptorSet 0
+                              Decorate 134(g_tTexcdf4) DescriptorSet 0
                               Decorate 137(g_tTexcdi4) Binding 0
-                              Decorate 140(g_tTexcdu4) DescriptorSet 0
+                              Decorate 137(g_tTexcdi4) DescriptorSet 0
                               Decorate 140(g_tTexcdu4) Binding 0
-                              Decorate 143(g_tTex1df4a) DescriptorSet 0
+                              Decorate 140(g_tTexcdu4) DescriptorSet 0
                               Decorate 143(g_tTex1df4a) Binding 0
-                              Decorate 146(g_tTex1di4a) DescriptorSet 0
+                              Decorate 143(g_tTex1df4a) DescriptorSet 0
                               Decorate 146(g_tTex1di4a) Binding 0
-                              Decorate 149(g_tTex1du4a) DescriptorSet 0
+                              Decorate 146(g_tTex1di4a) DescriptorSet 0
                               Decorate 149(g_tTex1du4a) Binding 0
-                              Decorate 152(g_tTex2df4a) DescriptorSet 0
+                              Decorate 149(g_tTex1du4a) DescriptorSet 0
                               Decorate 152(g_tTex2df4a) Binding 0
-                              Decorate 155(g_tTex2di4a) DescriptorSet 0
+                              Decorate 152(g_tTex2df4a) DescriptorSet 0
                               Decorate 155(g_tTex2di4a) Binding 0
-                              Decorate 158(g_tTex2du4a) DescriptorSet 0
+                              Decorate 155(g_tTex2di4a) DescriptorSet 0
                               Decorate 158(g_tTex2du4a) Binding 0
-                              Decorate 161(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 158(g_tTex2du4a) DescriptorSet 0
                               Decorate 161(g_tTexcdf4a) Binding 0
-                              Decorate 164(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 161(g_tTexcdf4a) DescriptorSet 0
                               Decorate 164(g_tTexcdi4a) Binding 0
-                              Decorate 167(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 164(g_tTexcdi4a) DescriptorSet 0
                               Decorate 167(g_tTexcdu4a) Binding 0
+                              Decorate 167(g_tTexcdu4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out
index 4b68c90..c3fbf0d 100644
--- a/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out
@@ -412,52 +412,52 @@
                               Name 172  "g_tTexcdf4a"
                               Name 175  "g_tTexcdi4a"
                               Name 178  "g_tTexcdu4a"
-                              Decorate 16(g_tTex1df4a) DescriptorSet 0
                               Decorate 16(g_tTex1df4a) Binding 1
-                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_tTex1df4a) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
-                              Decorate 41(g_tTex1di4a) DescriptorSet 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 41(g_tTex1di4a) Binding 2
-                              Decorate 55(g_tTex1du4a) DescriptorSet 0
+                              Decorate 41(g_tTex1di4a) DescriptorSet 0
                               Decorate 55(g_tTex1du4a) Binding 3
-                              Decorate 68(g_tTex2df4a) DescriptorSet 0
+                              Decorate 55(g_tTex1du4a) DescriptorSet 0
                               Decorate 68(g_tTex2df4a) Binding 4
-                              Decorate 87(g_tTex2di4a) DescriptorSet 0
+                              Decorate 68(g_tTex2df4a) DescriptorSet 0
                               Decorate 87(g_tTex2di4a) Binding 5
-                              Decorate 101(g_tTex2du4a) DescriptorSet 0
+                              Decorate 87(g_tTex2di4a) DescriptorSet 0
                               Decorate 101(g_tTex2du4a) Binding 6
+                              Decorate 101(g_tTex2du4a) DescriptorSet 0
                               Decorate 127(@entryPointOutput.Color) Location 0
                               Decorate 131(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 136(g_tTex1df4) DescriptorSet 0
                               Decorate 136(g_tTex1df4) Binding 0
-                              Decorate 139(g_tTex1di4) DescriptorSet 0
+                              Decorate 136(g_tTex1df4) DescriptorSet 0
                               Decorate 139(g_tTex1di4) Binding 0
-                              Decorate 142(g_tTex1du4) DescriptorSet 0
+                              Decorate 139(g_tTex1di4) DescriptorSet 0
                               Decorate 142(g_tTex1du4) Binding 0
-                              Decorate 145(g_tTex2df4) DescriptorSet 0
+                              Decorate 142(g_tTex1du4) DescriptorSet 0
                               Decorate 145(g_tTex2df4) Binding 0
-                              Decorate 148(g_tTex2di4) DescriptorSet 0
+                              Decorate 145(g_tTex2df4) DescriptorSet 0
                               Decorate 148(g_tTex2di4) Binding 0
-                              Decorate 151(g_tTex2du4) DescriptorSet 0
+                              Decorate 148(g_tTex2di4) DescriptorSet 0
                               Decorate 151(g_tTex2du4) Binding 0
-                              Decorate 154(g_tTex3df4) DescriptorSet 0
+                              Decorate 151(g_tTex2du4) DescriptorSet 0
                               Decorate 154(g_tTex3df4) Binding 0
-                              Decorate 157(g_tTex3di4) DescriptorSet 0
+                              Decorate 154(g_tTex3df4) DescriptorSet 0
                               Decorate 157(g_tTex3di4) Binding 0
-                              Decorate 160(g_tTex3du4) DescriptorSet 0
+                              Decorate 157(g_tTex3di4) DescriptorSet 0
                               Decorate 160(g_tTex3du4) Binding 0
-                              Decorate 163(g_tTexcdf4) DescriptorSet 0
+                              Decorate 160(g_tTex3du4) DescriptorSet 0
                               Decorate 163(g_tTexcdf4) Binding 0
-                              Decorate 166(g_tTexcdi4) DescriptorSet 0
+                              Decorate 163(g_tTexcdf4) DescriptorSet 0
                               Decorate 166(g_tTexcdi4) Binding 0
-                              Decorate 169(g_tTexcdu4) DescriptorSet 0
+                              Decorate 166(g_tTexcdi4) DescriptorSet 0
                               Decorate 169(g_tTexcdu4) Binding 0
-                              Decorate 172(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 169(g_tTexcdu4) DescriptorSet 0
                               Decorate 172(g_tTexcdf4a) Binding 0
-                              Decorate 175(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 172(g_tTexcdf4a) DescriptorSet 0
                               Decorate 175(g_tTexcdi4a) Binding 0
-                              Decorate 178(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 175(g_tTexcdi4a) DescriptorSet 0
                               Decorate 178(g_tTexcdu4a) Binding 0
+                              Decorate 178(g_tTexcdu4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out
index a2e58bd..b70b0bf 100644
--- a/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out
@@ -471,30 +471,30 @@
                               Name 132  "@entryPointOutput.Color"
                               Name 136  "@entryPointOutput.Depth"
                               Name 139  "g_tTex1df4a"
-                              Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 16(g_tTex1df4) Binding 0
-                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
-                              Decorate 37(g_tTex1di4) DescriptorSet 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 37(g_tTex1di4) Binding 2
-                              Decorate 49(g_tTex1du4) DescriptorSet 0
+                              Decorate 37(g_tTex1di4) DescriptorSet 0
                               Decorate 49(g_tTex1du4) Binding 3
-                              Decorate 58(g_tTex2df4) DescriptorSet 0
+                              Decorate 49(g_tTex1du4) DescriptorSet 0
                               Decorate 58(g_tTex2df4) Binding 4
-                              Decorate 71(g_tTex2di4) DescriptorSet 0
+                              Decorate 58(g_tTex2df4) DescriptorSet 0
                               Decorate 71(g_tTex2di4) Binding 5
-                              Decorate 80(g_tTex2du4) DescriptorSet 0
+                              Decorate 71(g_tTex2di4) DescriptorSet 0
                               Decorate 80(g_tTex2du4) Binding 6
-                              Decorate 89(g_tTexcdf4) DescriptorSet 0
+                              Decorate 80(g_tTex2du4) DescriptorSet 0
                               Decorate 89(g_tTexcdf4) Binding 7
-                              Decorate 102(g_tTexcdi4) DescriptorSet 0
+                              Decorate 89(g_tTexcdf4) DescriptorSet 0
                               Decorate 102(g_tTexcdi4) Binding 8
-                              Decorate 111(g_tTexcdu4) DescriptorSet 0
+                              Decorate 102(g_tTexcdi4) DescriptorSet 0
                               Decorate 111(g_tTexcdu4) Binding 9
+                              Decorate 111(g_tTexcdu4) DescriptorSet 0
                               Decorate 132(@entryPointOutput.Color) Location 0
                               Decorate 136(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 139(g_tTex1df4a) DescriptorSet 0
                               Decorate 139(g_tTex1df4a) Binding 1
+                              Decorate 139(g_tTex1df4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out
index 09bfbdf..b17306d 100644
--- a/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out
@@ -578,36 +578,36 @@
                               Name 167  "@entryPointOutput.Color"
                               Name 171  "@entryPointOutput.Depth"
                               Name 174  "g_tTex1df4a"
-                              Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 16(g_tTex1df4) Binding 0
-                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
-                              Decorate 34(g_tTex1di4) DescriptorSet 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 34(g_tTex1di4) Binding 2
-                              Decorate 47(g_tTex1du4) DescriptorSet 0
+                              Decorate 34(g_tTex1di4) DescriptorSet 0
                               Decorate 47(g_tTex1du4) Binding 3
-                              Decorate 57(g_tTex2df4) DescriptorSet 0
+                              Decorate 47(g_tTex1du4) DescriptorSet 0
                               Decorate 57(g_tTex2df4) Binding 4
-                              Decorate 69(g_tTex2di4) DescriptorSet 0
+                              Decorate 57(g_tTex2df4) DescriptorSet 0
                               Decorate 69(g_tTex2di4) Binding 5
-                              Decorate 80(g_tTex2du4) DescriptorSet 0
+                              Decorate 69(g_tTex2di4) DescriptorSet 0
                               Decorate 80(g_tTex2du4) Binding 6
-                              Decorate 92(g_tTex3df4) DescriptorSet 0
+                              Decorate 80(g_tTex2du4) DescriptorSet 0
                               Decorate 92(g_tTex3df4) Binding 7
-                              Decorate 105(g_tTex3di4) DescriptorSet 0
+                              Decorate 92(g_tTex3df4) DescriptorSet 0
                               Decorate 105(g_tTex3di4) Binding 8
-                              Decorate 115(g_tTex3du4) DescriptorSet 0
+                              Decorate 105(g_tTex3di4) DescriptorSet 0
                               Decorate 115(g_tTex3du4) Binding 9
-                              Decorate 128(g_tTexcdf4) DescriptorSet 0
+                              Decorate 115(g_tTex3du4) DescriptorSet 0
                               Decorate 128(g_tTexcdf4) Binding 10
-                              Decorate 137(g_tTexcdi4) DescriptorSet 0
+                              Decorate 128(g_tTexcdf4) DescriptorSet 0
                               Decorate 137(g_tTexcdi4) Binding 11
-                              Decorate 146(g_tTexcdu4) DescriptorSet 0
+                              Decorate 137(g_tTexcdi4) DescriptorSet 0
                               Decorate 146(g_tTexcdu4) Binding 12
+                              Decorate 146(g_tTexcdu4) DescriptorSet 0
                               Decorate 167(@entryPointOutput.Color) Location 0
                               Decorate 171(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 174(g_tTex1df4a) DescriptorSet 0
                               Decorate 174(g_tTex1df4a) Binding 1
+                              Decorate 174(g_tTex1df4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out b/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out
index f63d9e8..902500c 100644
--- a/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out
+++ b/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out
@@ -535,35 +535,35 @@
                               Name 153  "vsout"
                               Name 162  "@entryPointOutput.Pos"
                               Name 165  "g_tTex1df4a"
-                              Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 16(g_tTex1df4) Binding 0
-                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
-                              Decorate 34(g_tTex1di4) DescriptorSet 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 34(g_tTex1di4) Binding 2
-                              Decorate 47(g_tTex1du4) DescriptorSet 0
+                              Decorate 34(g_tTex1di4) DescriptorSet 0
                               Decorate 47(g_tTex1du4) Binding 3
-                              Decorate 57(g_tTex2df4) DescriptorSet 0
+                              Decorate 47(g_tTex1du4) DescriptorSet 0
                               Decorate 57(g_tTex2df4) Binding 4
-                              Decorate 69(g_tTex2di4) DescriptorSet 0
+                              Decorate 57(g_tTex2df4) DescriptorSet 0
                               Decorate 69(g_tTex2di4) Binding 5
-                              Decorate 80(g_tTex2du4) DescriptorSet 0
+                              Decorate 69(g_tTex2di4) DescriptorSet 0
                               Decorate 80(g_tTex2du4) Binding 6
-                              Decorate 92(g_tTex3df4) DescriptorSet 0
+                              Decorate 80(g_tTex2du4) DescriptorSet 0
                               Decorate 92(g_tTex3df4) Binding 7
-                              Decorate 105(g_tTex3di4) DescriptorSet 0
+                              Decorate 92(g_tTex3df4) DescriptorSet 0
                               Decorate 105(g_tTex3di4) Binding 8
-                              Decorate 115(g_tTex3du4) DescriptorSet 0
+                              Decorate 105(g_tTex3di4) DescriptorSet 0
                               Decorate 115(g_tTex3du4) Binding 9
-                              Decorate 128(g_tTexcdf4) DescriptorSet 0
+                              Decorate 115(g_tTex3du4) DescriptorSet 0
                               Decorate 128(g_tTexcdf4) Binding 10
-                              Decorate 137(g_tTexcdi4) DescriptorSet 0
+                              Decorate 128(g_tTexcdf4) DescriptorSet 0
                               Decorate 137(g_tTexcdi4) Binding 11
-                              Decorate 146(g_tTexcdu4) DescriptorSet 0
+                              Decorate 137(g_tTexcdi4) DescriptorSet 0
                               Decorate 146(g_tTexcdu4) Binding 12
+                              Decorate 146(g_tTexcdu4) DescriptorSet 0
                               Decorate 162(@entryPointOutput.Pos) BuiltIn Position
-                              Decorate 165(g_tTex1df4a) DescriptorSet 0
                               Decorate 165(g_tTex1df4a) Binding 1
+                              Decorate 165(g_tTex1df4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out
index 3180e7a..63c9421 100644
--- a/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out
@@ -515,36 +515,36 @@
                               Name 159  "g_tTexcdf4"
                               Name 162  "g_tTexcdi4"
                               Name 165  "g_tTexcdu4"
-                              Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 16(g_tTex1df4) Binding 0
-                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
-                              Decorate 35(g_tTex1di4) DescriptorSet 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 35(g_tTex1di4) Binding 2
-                              Decorate 48(g_tTex1du4) DescriptorSet 0
+                              Decorate 35(g_tTex1di4) DescriptorSet 0
                               Decorate 48(g_tTex1du4) Binding 3
-                              Decorate 58(g_tTex2df4) DescriptorSet 0
+                              Decorate 48(g_tTex1du4) DescriptorSet 0
                               Decorate 58(g_tTex2df4) Binding 4
-                              Decorate 73(g_tTex2di4) DescriptorSet 0
+                              Decorate 58(g_tTex2df4) DescriptorSet 0
                               Decorate 73(g_tTex2di4) Binding 5
-                              Decorate 85(g_tTex2du4) DescriptorSet 0
+                              Decorate 73(g_tTex2di4) DescriptorSet 0
                               Decorate 85(g_tTex2du4) Binding 6
-                              Decorate 99(g_tTex3df4) DescriptorSet 0
+                              Decorate 85(g_tTex2du4) DescriptorSet 0
                               Decorate 99(g_tTex3df4) Binding 7
-                              Decorate 114(g_tTex3di4) DescriptorSet 0
+                              Decorate 99(g_tTex3df4) DescriptorSet 0
                               Decorate 114(g_tTex3di4) Binding 8
-                              Decorate 125(g_tTex3du4) DescriptorSet 0
+                              Decorate 114(g_tTex3di4) DescriptorSet 0
                               Decorate 125(g_tTex3du4) Binding 9
+                              Decorate 125(g_tTex3du4) DescriptorSet 0
                               Decorate 149(@entryPointOutput.Color) Location 0
                               Decorate 153(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 156(g_tTex1df4a) DescriptorSet 0
                               Decorate 156(g_tTex1df4a) Binding 1
-                              Decorate 159(g_tTexcdf4) DescriptorSet 0
+                              Decorate 156(g_tTex1df4a) DescriptorSet 0
                               Decorate 159(g_tTexcdf4) Binding 0
-                              Decorate 162(g_tTexcdi4) DescriptorSet 0
+                              Decorate 159(g_tTexcdf4) DescriptorSet 0
                               Decorate 162(g_tTexcdi4) Binding 0
-                              Decorate 165(g_tTexcdu4) DescriptorSet 0
+                              Decorate 162(g_tTexcdi4) DescriptorSet 0
                               Decorate 165(g_tTexcdu4) Binding 0
+                              Decorate 165(g_tTexcdu4) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out
index ce79969..2f24516 100644
--- a/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out
@@ -378,30 +378,30 @@
                               Name 113  "g_tTexcdf4"
                               Name 116  "g_tTexcdi4"
                               Name 119  "g_tTexcdu4"
-                              Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 16(g_tTex1df4) Binding 0
-                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
-                              Decorate 38(g_tTex1di4) DescriptorSet 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 38(g_tTex1di4) Binding 2
-                              Decorate 50(g_tTex1du4) DescriptorSet 0
+                              Decorate 38(g_tTex1di4) DescriptorSet 0
                               Decorate 50(g_tTex1du4) Binding 3
-                              Decorate 59(g_tTex2df4) DescriptorSet 0
+                              Decorate 50(g_tTex1du4) DescriptorSet 0
                               Decorate 59(g_tTex2df4) Binding 4
-                              Decorate 75(g_tTex2di4) DescriptorSet 0
+                              Decorate 59(g_tTex2df4) DescriptorSet 0
                               Decorate 75(g_tTex2di4) Binding 5
-                              Decorate 84(g_tTex2du4) DescriptorSet 0
+                              Decorate 75(g_tTex2di4) DescriptorSet 0
                               Decorate 84(g_tTex2du4) Binding 6
+                              Decorate 84(g_tTex2du4) DescriptorSet 0
                               Decorate 103(@entryPointOutput.Color) Location 0
                               Decorate 107(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 110(g_tTex1df4a) DescriptorSet 0
                               Decorate 110(g_tTex1df4a) Binding 1
-                              Decorate 113(g_tTexcdf4) DescriptorSet 0
+                              Decorate 110(g_tTex1df4a) DescriptorSet 0
                               Decorate 113(g_tTexcdf4) Binding 0
-                              Decorate 116(g_tTexcdi4) DescriptorSet 0
+                              Decorate 113(g_tTexcdf4) DescriptorSet 0
                               Decorate 116(g_tTexcdi4) Binding 0
-                              Decorate 119(g_tTexcdu4) DescriptorSet 0
+                              Decorate 116(g_tTexcdi4) DescriptorSet 0
                               Decorate 119(g_tTexcdu4) Binding 0
+                              Decorate 119(g_tTexcdu4) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out
index 7f3af78..5057df6 100644
--- a/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out
@@ -399,30 +399,30 @@
                               Name 139  "@entryPointOutput.Color"
                               Name 143  "@entryPointOutput.Depth"
                               Name 146  "g_tTex1df4"
-                              Decorate 16(g_tTex1df4a) DescriptorSet 0
                               Decorate 16(g_tTex1df4a) Binding 1
-                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_tTex1df4a) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
-                              Decorate 36(g_tTex1di4a) DescriptorSet 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 36(g_tTex1di4a) Binding 2
-                              Decorate 50(g_tTex1du4a) DescriptorSet 0
+                              Decorate 36(g_tTex1di4a) DescriptorSet 0
                               Decorate 50(g_tTex1du4a) Binding 3
-                              Decorate 61(g_tTex2df4a) DescriptorSet 0
+                              Decorate 50(g_tTex1du4a) DescriptorSet 0
                               Decorate 61(g_tTex2df4a) Binding 4
-                              Decorate 72(g_tTex2di4a) DescriptorSet 0
+                              Decorate 61(g_tTex2df4a) DescriptorSet 0
                               Decorate 72(g_tTex2di4a) Binding 5
-                              Decorate 83(g_tTex2du4a) DescriptorSet 0
+                              Decorate 72(g_tTex2di4a) DescriptorSet 0
                               Decorate 83(g_tTex2du4a) Binding 6
-                              Decorate 95(g_tTexcdf4a) DescriptorSet 0
+                              Decorate 83(g_tTex2du4a) DescriptorSet 0
                               Decorate 95(g_tTexcdf4a) Binding 7
-                              Decorate 105(g_tTexcdi4a) DescriptorSet 0
+                              Decorate 95(g_tTexcdf4a) DescriptorSet 0
                               Decorate 105(g_tTexcdi4a) Binding 8
-                              Decorate 115(g_tTexcdu4a) DescriptorSet 0
+                              Decorate 105(g_tTexcdi4a) DescriptorSet 0
                               Decorate 115(g_tTexcdu4a) Binding 9
+                              Decorate 115(g_tTexcdu4a) DescriptorSet 0
                               Decorate 139(@entryPointOutput.Color) Location 0
                               Decorate 143(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 146(g_tTex1df4) DescriptorSet 0
                               Decorate 146(g_tTex1df4) Binding 0
+                              Decorate 146(g_tTex1df4) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out
index e1d449f..7055dfa 100644
--- a/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out
@@ -473,38 +473,38 @@
                               Name 167  "@entryPointOutput.Depth"
                               Name 170  "g_sSamp2d"
                               Name 171  "g_tTex1df4a"
-                              Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 16(g_tTex1df4) Binding 0
-                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
-                              Decorate 33(g_tTex1di4) DescriptorSet 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 33(g_tTex1di4) Binding 2
-                              Decorate 46(g_tTex1du4) DescriptorSet 0
+                              Decorate 33(g_tTex1di4) DescriptorSet 0
                               Decorate 46(g_tTex1du4) Binding 3
-                              Decorate 56(g_tTex2df4) DescriptorSet 0
+                              Decorate 46(g_tTex1du4) DescriptorSet 0
                               Decorate 56(g_tTex2df4) Binding 4
-                              Decorate 67(g_tTex2di4) DescriptorSet 0
+                              Decorate 56(g_tTex2df4) DescriptorSet 0
                               Decorate 67(g_tTex2di4) Binding 5
-                              Decorate 78(g_tTex2du4) DescriptorSet 0
+                              Decorate 67(g_tTex2di4) DescriptorSet 0
                               Decorate 78(g_tTex2du4) Binding 6
-                              Decorate 90(g_tTex3df4) DescriptorSet 0
+                              Decorate 78(g_tTex2du4) DescriptorSet 0
                               Decorate 90(g_tTex3df4) Binding 7
-                              Decorate 101(g_tTex3di4) DescriptorSet 0
+                              Decorate 90(g_tTex3df4) DescriptorSet 0
                               Decorate 101(g_tTex3di4) Binding 8
-                              Decorate 111(g_tTex3du4) DescriptorSet 0
+                              Decorate 101(g_tTex3di4) DescriptorSet 0
                               Decorate 111(g_tTex3du4) Binding 9
-                              Decorate 124(g_tTexcdf4) DescriptorSet 0
+                              Decorate 111(g_tTex3du4) DescriptorSet 0
                               Decorate 124(g_tTexcdf4) Binding 10
-                              Decorate 133(g_tTexcdi4) DescriptorSet 0
+                              Decorate 124(g_tTexcdf4) DescriptorSet 0
                               Decorate 133(g_tTexcdi4) Binding 11
-                              Decorate 142(g_tTexcdu4) DescriptorSet 0
+                              Decorate 133(g_tTexcdi4) DescriptorSet 0
                               Decorate 142(g_tTexcdu4) Binding 12
+                              Decorate 142(g_tTexcdu4) DescriptorSet 0
                               Decorate 163(@entryPointOutput.Color) Location 0
                               Decorate 167(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 170(g_sSamp2d) DescriptorSet 0
                               Decorate 170(g_sSamp2d) Binding 0
-                              Decorate 171(g_tTex1df4a) DescriptorSet 0
+                              Decorate 170(g_sSamp2d) DescriptorSet 0
                               Decorate 171(g_tTex1df4a) Binding 1
+                              Decorate 171(g_tTex1df4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out b/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out
index bbb51f3..f590133 100644
--- a/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out
+++ b/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out
@@ -427,35 +427,35 @@
                               Name 149  "vsout"
                               Name 158  "@entryPointOutput.Pos"
                               Name 161  "g_tTex1df4a"
-                              Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 16(g_tTex1df4) Binding 0
-                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
-                              Decorate 33(g_tTex1di4) DescriptorSet 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 33(g_tTex1di4) Binding 2
-                              Decorate 46(g_tTex1du4) DescriptorSet 0
+                              Decorate 33(g_tTex1di4) DescriptorSet 0
                               Decorate 46(g_tTex1du4) Binding 3
-                              Decorate 56(g_tTex2df4) DescriptorSet 0
+                              Decorate 46(g_tTex1du4) DescriptorSet 0
                               Decorate 56(g_tTex2df4) Binding 4
-                              Decorate 67(g_tTex2di4) DescriptorSet 0
+                              Decorate 56(g_tTex2df4) DescriptorSet 0
                               Decorate 67(g_tTex2di4) Binding 5
-                              Decorate 78(g_tTex2du4) DescriptorSet 0
+                              Decorate 67(g_tTex2di4) DescriptorSet 0
                               Decorate 78(g_tTex2du4) Binding 6
-                              Decorate 90(g_tTex3df4) DescriptorSet 0
+                              Decorate 78(g_tTex2du4) DescriptorSet 0
                               Decorate 90(g_tTex3df4) Binding 7
-                              Decorate 101(g_tTex3di4) DescriptorSet 0
+                              Decorate 90(g_tTex3df4) DescriptorSet 0
                               Decorate 101(g_tTex3di4) Binding 8
-                              Decorate 111(g_tTex3du4) DescriptorSet 0
+                              Decorate 101(g_tTex3di4) DescriptorSet 0
                               Decorate 111(g_tTex3du4) Binding 9
-                              Decorate 124(g_tTexcdf4) DescriptorSet 0
+                              Decorate 111(g_tTex3du4) DescriptorSet 0
                               Decorate 124(g_tTexcdf4) Binding 10
-                              Decorate 133(g_tTexcdi4) DescriptorSet 0
+                              Decorate 124(g_tTexcdf4) DescriptorSet 0
                               Decorate 133(g_tTexcdi4) Binding 11
-                              Decorate 142(g_tTexcdu4) DescriptorSet 0
+                              Decorate 133(g_tTexcdi4) DescriptorSet 0
                               Decorate 142(g_tTexcdu4) Binding 12
+                              Decorate 142(g_tTexcdu4) DescriptorSet 0
                               Decorate 158(@entryPointOutput.Pos) BuiltIn Position
-                              Decorate 161(g_tTex1df4a) DescriptorSet 0
                               Decorate 161(g_tTex1df4a) Binding 1
+                              Decorate 161(g_tTex1df4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out
index 1b06c57..e1ec0fa 100644
--- a/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out
@@ -443,36 +443,36 @@
                               Name 155  "g_tTexcdf4"
                               Name 158  "g_tTexcdi4"
                               Name 161  "g_tTexcdu4"
-                              Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 16(g_tTex1df4) Binding 0
-                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
-                              Decorate 34(g_tTex1di4) DescriptorSet 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 34(g_tTex1di4) Binding 2
-                              Decorate 47(g_tTex1du4) DescriptorSet 0
+                              Decorate 34(g_tTex1di4) DescriptorSet 0
                               Decorate 47(g_tTex1du4) Binding 3
-                              Decorate 57(g_tTex2df4) DescriptorSet 0
+                              Decorate 47(g_tTex1du4) DescriptorSet 0
                               Decorate 57(g_tTex2df4) Binding 4
-                              Decorate 71(g_tTex2di4) DescriptorSet 0
+                              Decorate 57(g_tTex2df4) DescriptorSet 0
                               Decorate 71(g_tTex2di4) Binding 5
-                              Decorate 83(g_tTex2du4) DescriptorSet 0
+                              Decorate 71(g_tTex2di4) DescriptorSet 0
                               Decorate 83(g_tTex2du4) Binding 6
-                              Decorate 97(g_tTex3df4) DescriptorSet 0
+                              Decorate 83(g_tTex2du4) DescriptorSet 0
                               Decorate 97(g_tTex3df4) Binding 7
-                              Decorate 110(g_tTex3di4) DescriptorSet 0
+                              Decorate 97(g_tTex3df4) DescriptorSet 0
                               Decorate 110(g_tTex3di4) Binding 8
-                              Decorate 121(g_tTex3du4) DescriptorSet 0
+                              Decorate 110(g_tTex3di4) DescriptorSet 0
                               Decorate 121(g_tTex3du4) Binding 9
+                              Decorate 121(g_tTex3du4) DescriptorSet 0
                               Decorate 145(@entryPointOutput.Color) Location 0
                               Decorate 149(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 152(g_tTex1df4a) DescriptorSet 0
                               Decorate 152(g_tTex1df4a) Binding 1
-                              Decorate 155(g_tTexcdf4) DescriptorSet 0
+                              Decorate 152(g_tTex1df4a) DescriptorSet 0
                               Decorate 155(g_tTexcdf4) Binding 0
-                              Decorate 158(g_tTexcdi4) DescriptorSet 0
+                              Decorate 155(g_tTexcdf4) DescriptorSet 0
                               Decorate 158(g_tTexcdi4) Binding 0
-                              Decorate 161(g_tTexcdu4) DescriptorSet 0
+                              Decorate 158(g_tTexcdi4) DescriptorSet 0
                               Decorate 161(g_tTexcdu4) Binding 0
+                              Decorate 161(g_tTexcdu4) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out
index e256054..7c057df 100644
--- a/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out
+++ b/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out
@@ -332,24 +332,24 @@
                               Name 111  "@entryPointOutput.Color"
                               Name 115  "@entryPointOutput.Depth"
                               Name 118  "g_tTex1df4a"
-                              Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 16(g_tTex1df4) Binding 0
-                              Decorate 20(g_sSamp) DescriptorSet 0
+                              Decorate 16(g_tTex1df4) DescriptorSet 0
                               Decorate 20(g_sSamp) Binding 0
-                              Decorate 37(g_tTex1di4) DescriptorSet 0
+                              Decorate 20(g_sSamp) DescriptorSet 0
                               Decorate 37(g_tTex1di4) Binding 2
-                              Decorate 52(g_tTex1du4) DescriptorSet 0
+                              Decorate 37(g_tTex1di4) DescriptorSet 0
                               Decorate 52(g_tTex1du4) Binding 3
-                              Decorate 64(g_tTex2df4) DescriptorSet 0
+                              Decorate 52(g_tTex1du4) DescriptorSet 0
                               Decorate 64(g_tTex2df4) Binding 4
-                              Decorate 77(g_tTex2di4) DescriptorSet 0
+                              Decorate 64(g_tTex2df4) DescriptorSet 0
                               Decorate 77(g_tTex2di4) Binding 5
-                              Decorate 88(g_tTex2du4) DescriptorSet 0
+                              Decorate 77(g_tTex2di4) DescriptorSet 0
                               Decorate 88(g_tTex2du4) Binding 6
+                              Decorate 88(g_tTex2du4) DescriptorSet 0
                               Decorate 111(@entryPointOutput.Color) Location 0
                               Decorate 115(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 118(g_tTex1df4a) DescriptorSet 0
                               Decorate 118(g_tTex1df4a) Binding 1
+                              Decorate 118(g_tTex1df4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.scalarCast.vert.out b/Test/baseResults/hlsl.scalarCast.vert.out
index f10f86c..b6e87bf 100644
--- a/Test/baseResults/hlsl.scalarCast.vert.out
+++ b/Test/baseResults/hlsl.scalarCast.vert.out
@@ -323,12 +323,12 @@
 
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 120
+// Id's are bound by 108
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Vertex 4  "main" 108 115
+                              EntryPoint Vertex 4  "main" 96 103
                               Source HLSL 500
                               Name 4  "main"
                               Name 9  "VertexOut"
@@ -342,21 +342,21 @@
                               Name 21  "r5("
                               Name 23  "@main("
                               Name 44  "f"
-                              Name 56  "f"
-                              Name 57  "scalarCopy"
-                              Name 72  "f"
-                              Name 73  "scalarCopy"
-                              Name 88  "v0"
-                              Name 90  "v1"
-                              Name 92  "v2"
-                              Name 94  "v3"
-                              Name 96  "v4"
-                              Name 98  "v5"
-                              Name 105  "flattenTemp"
-                              Name 108  "@entryPointOutput.position"
-                              Name 115  "@entryPointOutput.texCoord"
-                              Decorate 108(@entryPointOutput.position) BuiltIn Position
-                              Decorate 115(@entryPointOutput.texCoord) Location 0
+                              Name 52  "f"
+                              Name 53  "scalarCopy"
+                              Name 64  "f"
+                              Name 65  "scalarCopy"
+                              Name 76  "v0"
+                              Name 78  "v1"
+                              Name 80  "v2"
+                              Name 82  "v3"
+                              Name 84  "v4"
+                              Name 86  "v5"
+                              Name 93  "flattenTemp"
+                              Name 96  "@entryPointOutput.position"
+                              Name 103  "@entryPointOutput.texCoord"
+                              Decorate 96(@entryPointOutput.position) BuiltIn Position
+                              Decorate 103(@entryPointOutput.texCoord) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -377,31 +377,31 @@
               39:    8(fvec2) ConstantComposite 37 37
               40:9(VertexOut) ConstantComposite 38 39
               43:             TypePointer Function 6(float)
-              59:    6(float) Constant 1065353216
-              87:             TypePointer Function 9(VertexOut)
-             100:    7(fvec4) ConstantComposite 59 59 59 59
-             101:    8(fvec2) ConstantComposite 59 59
-             102:9(VertexOut) ConstantComposite 100 101
-             107:             TypePointer Output 7(fvec4)
-108(@entryPointOutput.position):    107(ptr) Variable Output
-             109:             TypeInt 32 1
-             110:    109(int) Constant 0
-             111:             TypePointer Function 7(fvec4)
-             114:             TypePointer Output 8(fvec2)
-115(@entryPointOutput.texCoord):    114(ptr) Variable Output
-             116:    109(int) Constant 1
-             117:             TypePointer Function 8(fvec2)
+              55:    6(float) Constant 1065353216
+              75:             TypePointer Function 9(VertexOut)
+              88:    7(fvec4) ConstantComposite 55 55 55 55
+              89:    8(fvec2) ConstantComposite 55 55
+              90:9(VertexOut) ConstantComposite 88 89
+              95:             TypePointer Output 7(fvec4)
+96(@entryPointOutput.position):     95(ptr) Variable Output
+              97:             TypeInt 32 1
+              98:     97(int) Constant 0
+              99:             TypePointer Function 7(fvec4)
+             102:             TypePointer Output 8(fvec2)
+103(@entryPointOutput.texCoord):    102(ptr) Variable Output
+             104:     97(int) Constant 1
+             105:             TypePointer Function 8(fvec2)
          4(main):           2 Function None 3
                5:             Label
-105(flattenTemp):     87(ptr) Variable Function
-             106:9(VertexOut) FunctionCall 23(@main()
-                              Store 105(flattenTemp) 106
-             112:    111(ptr) AccessChain 105(flattenTemp) 110
-             113:    7(fvec4) Load 112
-                              Store 108(@entryPointOutput.position) 113
-             118:    117(ptr) AccessChain 105(flattenTemp) 116
-             119:    8(fvec2) Load 118
-                              Store 115(@entryPointOutput.texCoord) 119
+ 93(flattenTemp):     75(ptr) Variable Function
+              94:9(VertexOut) FunctionCall 23(@main()
+                              Store 93(flattenTemp) 94
+             100:     99(ptr) AccessChain 93(flattenTemp) 98
+             101:    7(fvec4) Load 100
+                              Store 96(@entryPointOutput.position) 101
+             106:    105(ptr) AccessChain 93(flattenTemp) 104
+             107:    8(fvec2) Load 106
+                              Store 103(@entryPointOutput.texCoord) 107
                               Return
                               FunctionEnd
          11(r0():9(VertexOut) Function None 10
@@ -421,73 +421,61 @@
            44(f):     43(ptr) Variable Function
                               Store 44(f) 25
               45:    6(float) Load 44(f)
-              46:    6(float) Load 44(f)
+              46:    7(fvec4) CompositeConstruct 45 45 45 45
               47:    6(float) Load 44(f)
-              48:    6(float) Load 44(f)
-              49:    7(fvec4) CompositeConstruct 45 46 47 48
-              50:    6(float) Load 44(f)
-              51:    6(float) Load 44(f)
-              52:    8(fvec2) CompositeConstruct 50 51
-              53:9(VertexOut) CompositeConstruct 49 52
-                              ReturnValue 53
+              48:    8(fvec2) CompositeConstruct 47 47
+              49:9(VertexOut) CompositeConstruct 46 48
+                              ReturnValue 49
                               FunctionEnd
          19(r4():9(VertexOut) Function None 10
               20:             Label
-           56(f):     43(ptr) Variable Function
-  57(scalarCopy):     43(ptr) Variable Function
-                              Store 56(f) 25
-              58:    6(float) Load 56(f)
-              60:    6(float) FAdd 58 59
-                              Store 57(scalarCopy) 60
-              61:    6(float) Load 57(scalarCopy)
-              62:    6(float) Load 57(scalarCopy)
-              63:    6(float) Load 57(scalarCopy)
-              64:    6(float) Load 57(scalarCopy)
-              65:    7(fvec4) CompositeConstruct 61 62 63 64
-              66:    6(float) Load 57(scalarCopy)
-              67:    6(float) Load 57(scalarCopy)
-              68:    8(fvec2) CompositeConstruct 66 67
-              69:9(VertexOut) CompositeConstruct 65 68
-                              ReturnValue 69
+           52(f):     43(ptr) Variable Function
+  53(scalarCopy):     43(ptr) Variable Function
+                              Store 52(f) 25
+              54:    6(float) Load 52(f)
+              56:    6(float) FAdd 54 55
+                              Store 53(scalarCopy) 56
+              57:    6(float) Load 53(scalarCopy)
+              58:    7(fvec4) CompositeConstruct 57 57 57 57
+              59:    6(float) Load 53(scalarCopy)
+              60:    8(fvec2) CompositeConstruct 59 59
+              61:9(VertexOut) CompositeConstruct 58 60
+                              ReturnValue 61
                               FunctionEnd
          21(r5():9(VertexOut) Function None 10
               22:             Label
-           72(f):     43(ptr) Variable Function
-  73(scalarCopy):     43(ptr) Variable Function
-                              Store 72(f) 25
-              74:    6(float) Load 72(f)
-              75:    6(float) ExtInst 1(GLSL.std.450) 13(Sin) 74
-                              Store 73(scalarCopy) 75
-              76:    6(float) Load 73(scalarCopy)
-              77:    6(float) Load 73(scalarCopy)
-              78:    6(float) Load 73(scalarCopy)
-              79:    6(float) Load 73(scalarCopy)
-              80:    7(fvec4) CompositeConstruct 76 77 78 79
-              81:    6(float) Load 73(scalarCopy)
-              82:    6(float) Load 73(scalarCopy)
-              83:    8(fvec2) CompositeConstruct 81 82
-              84:9(VertexOut) CompositeConstruct 80 83
-                              ReturnValue 84
+           64(f):     43(ptr) Variable Function
+  65(scalarCopy):     43(ptr) Variable Function
+                              Store 64(f) 25
+              66:    6(float) Load 64(f)
+              67:    6(float) ExtInst 1(GLSL.std.450) 13(Sin) 66
+                              Store 65(scalarCopy) 67
+              68:    6(float) Load 65(scalarCopy)
+              69:    7(fvec4) CompositeConstruct 68 68 68 68
+              70:    6(float) Load 65(scalarCopy)
+              71:    8(fvec2) CompositeConstruct 70 70
+              72:9(VertexOut) CompositeConstruct 69 71
+                              ReturnValue 72
                               FunctionEnd
       23(@main():9(VertexOut) Function None 10
               24:             Label
-          88(v0):     87(ptr) Variable Function
-          90(v1):     87(ptr) Variable Function
-          92(v2):     87(ptr) Variable Function
-          94(v3):     87(ptr) Variable Function
-          96(v4):     87(ptr) Variable Function
-          98(v5):     87(ptr) Variable Function
-              89:9(VertexOut) FunctionCall 11(r0()
-                              Store 88(v0) 89
-              91:9(VertexOut) FunctionCall 13(r1()
-                              Store 90(v1) 91
-              93:9(VertexOut) FunctionCall 15(r2()
-                              Store 92(v2) 93
-              95:9(VertexOut) FunctionCall 17(r3()
-                              Store 94(v3) 95
-              97:9(VertexOut) FunctionCall 19(r4()
-                              Store 96(v4) 97
-              99:9(VertexOut) FunctionCall 21(r5()
-                              Store 98(v5) 99
-                              ReturnValue 102
+          76(v0):     75(ptr) Variable Function
+          78(v1):     75(ptr) Variable Function
+          80(v2):     75(ptr) Variable Function
+          82(v3):     75(ptr) Variable Function
+          84(v4):     75(ptr) Variable Function
+          86(v5):     75(ptr) Variable Function
+              77:9(VertexOut) FunctionCall 11(r0()
+                              Store 76(v0) 77
+              79:9(VertexOut) FunctionCall 13(r1()
+                              Store 78(v1) 79
+              81:9(VertexOut) FunctionCall 15(r2()
+                              Store 80(v2) 81
+              83:9(VertexOut) FunctionCall 17(r3()
+                              Store 82(v3) 83
+              85:9(VertexOut) FunctionCall 19(r4()
+                              Store 84(v4) 85
+              87:9(VertexOut) FunctionCall 21(r5()
+                              Store 86(v5) 87
+                              ReturnValue 90
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.shapeConv.frag.out b/Test/baseResults/hlsl.shapeConv.frag.out
index 05bfa6a..0fd379b 100644
--- a/Test/baseResults/hlsl.shapeConv.frag.out
+++ b/Test/baseResults/hlsl.shapeConv.frag.out
@@ -102,8 +102,10 @@
 0:27        'v' ( temp 4-component vector of float)
 0:27        Construct vec4 ( temp 4-component vector of float)
 0:27          'f1' ( temp 1-component vector of float)
-0:28      Construct float ( temp float)
+0:28      direct index ( temp float)
 0:28        'f1' ( temp 1-component vector of float)
+0:28        Constant:
+0:28          0 (const int)
 0:29      Construct vec3 ( temp 3-component vector of float)
 0:29        Construct float ( temp float)
 0:29          'f1' ( temp 1-component vector of float)
@@ -264,8 +266,10 @@
 0:27        'v' ( temp 4-component vector of float)
 0:27        Construct vec4 ( temp 4-component vector of float)
 0:27          'f1' ( temp 1-component vector of float)
-0:28      Construct float ( temp float)
+0:28      direct index ( temp float)
 0:28        'f1' ( temp 1-component vector of float)
+0:28        Constant:
+0:28          0 (const int)
 0:29      Construct vec3 ( temp 3-component vector of float)
 0:29        Construct float ( temp float)
 0:29          'f1' ( temp 1-component vector of float)
@@ -320,7 +324,7 @@
 
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 127
+// Id's are bound by 126
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
@@ -339,11 +343,11 @@
                               Name 34  "MyVal"
                               Name 37  "foo"
                               Name 70  "f1"
-                              Name 83  "ui"
-                              Name 88  "ui3"
-                              Name 103  "mixed"
-                              Name 115  "sf"
-                              Name 118  "sf1"
+                              Name 82  "ui"
+                              Name 87  "ui3"
+                              Name 102  "mixed"
+                              Name 114  "sf"
+                              Name 117  "sf1"
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -375,11 +379,11 @@
               56:             TypeInt 32 0
               57:     56(int) Constant 0
               62:             TypeVector 41(bool) 4
-              82:             TypePointer Function 56(int)
-              85:             TypeVector 56(int) 3
-              87:             TypePointer Function 85(ivec3)
-             122:    6(float) Constant 1077936128
-             123:    7(fvec4) ConstantComposite 122 122 122 122
+              81:             TypePointer Function 56(int)
+              84:             TypeVector 56(int) 3
+              86:             TypePointer Function 84(ivec3)
+             121:    6(float) Constant 1077936128
+             122:    7(fvec4) ConstantComposite 121 121 121 121
          4(main):           2 Function None 3
                5:             Label
                               Return
@@ -395,11 +399,11 @@
        34(MyVal):     23(ptr) Variable Function
          37(foo):     23(ptr) Variable Function
           70(f1):      9(ptr) Variable Function
-          83(ui):     82(ptr) Variable Function
-         88(ui3):     87(ptr) Variable Function
-      103(mixed):     23(ptr) Variable Function
-         115(sf):      9(ptr) Variable Function
-        118(sf1):      9(ptr) Variable Function
+          82(ui):     81(ptr) Variable Function
+         87(ui3):     86(ptr) Variable Function
+      102(mixed):     23(ptr) Variable Function
+         114(sf):      9(ptr) Variable Function
+        117(sf1):      9(ptr) Variable Function
                               Store 15(v) 17
                               Store 15(v) 19
               20:    6(float) Load 12(f)
@@ -443,47 +447,46 @@
               77:    7(fvec4) CompositeConstruct 76 76 76 76
               78:   62(bvec4) FOrdLessThan 75 77
               79:    6(float) Load 70(f1)
-              80:    6(float) Load 70(f1)
-              81:   22(fvec3) CompositeConstruct 80 80 80
-              84:     56(int) Load 83(ui)
-              86:   85(ivec3) CompositeConstruct 84 84 84
-              89:   85(ivec3) Load 88(ui3)
-              90:   85(ivec3) ShiftRightLogical 86 89
-              91:   85(ivec3) Load 88(ui3)
-              92:     56(int) Load 83(ui)
-              93:   85(ivec3) CompositeConstruct 92 92 92
-              94:   85(ivec3) ShiftRightLogical 91 93
-              95:    6(float) Load 70(f1)
-              96:    7(fvec4) Load 15(v)
-              97:    7(fvec4) CompositeConstruct 95 95 95 95
-              98:    7(fvec4) FMul 96 97
-                              Store 15(v) 98
-              99:    7(fvec4) Load 15(v)
-             100:    6(float) CompositeExtract 99 0
-             101:    6(float) Load 70(f1)
-             102:    6(float) FMul 101 100
-                              Store 70(f1) 102
-             104:   22(fvec3) Load 24(u)
-             105:    7(fvec4) Load 15(v)
-             106:    6(float) CompositeExtract 105 0
-             107:    6(float) CompositeExtract 105 1
-             108:    6(float) CompositeExtract 105 2
-             109:   22(fvec3) CompositeConstruct 106 107 108
-             110:   22(fvec3) FMul 104 109
-                              Store 103(mixed) 110
-             111:   22(fvec3) Load 24(u)
-             112:    6(float) CompositeExtract 111 0
-                              Store 12(f) 112
-             113:   22(fvec3) Load 24(u)
-             114:    6(float) CompositeExtract 113 0
-                              Store 70(f1) 114
-             116:    7(fvec4) Load 15(v)
-             117:    6(float) CompositeExtract 116 0
-                              Store 115(sf) 117
-             119:    7(fvec4) Load 15(v)
-             120:    6(float) CompositeExtract 119 0
-                              Store 118(sf1) 120
-             121:    7(fvec4) Load 11(input)
-             124:    7(fvec4) FMul 121 123
-                              ReturnValue 124
+              80:   22(fvec3) CompositeConstruct 79 79 79
+              83:     56(int) Load 82(ui)
+              85:   84(ivec3) CompositeConstruct 83 83 83
+              88:   84(ivec3) Load 87(ui3)
+              89:   84(ivec3) ShiftRightLogical 85 88
+              90:   84(ivec3) Load 87(ui3)
+              91:     56(int) Load 82(ui)
+              92:   84(ivec3) CompositeConstruct 91 91 91
+              93:   84(ivec3) ShiftRightLogical 90 92
+              94:    6(float) Load 70(f1)
+              95:    7(fvec4) Load 15(v)
+              96:    7(fvec4) CompositeConstruct 94 94 94 94
+              97:    7(fvec4) FMul 95 96
+                              Store 15(v) 97
+              98:    7(fvec4) Load 15(v)
+              99:    6(float) CompositeExtract 98 0
+             100:    6(float) Load 70(f1)
+             101:    6(float) FMul 100 99
+                              Store 70(f1) 101
+             103:   22(fvec3) Load 24(u)
+             104:    7(fvec4) Load 15(v)
+             105:    6(float) CompositeExtract 104 0
+             106:    6(float) CompositeExtract 104 1
+             107:    6(float) CompositeExtract 104 2
+             108:   22(fvec3) CompositeConstruct 105 106 107
+             109:   22(fvec3) FMul 103 108
+                              Store 102(mixed) 109
+             110:   22(fvec3) Load 24(u)
+             111:    6(float) CompositeExtract 110 0
+                              Store 12(f) 111
+             112:   22(fvec3) Load 24(u)
+             113:    6(float) CompositeExtract 112 0
+                              Store 70(f1) 113
+             115:    7(fvec4) Load 15(v)
+             116:    6(float) CompositeExtract 115 0
+                              Store 114(sf) 116
+             118:    7(fvec4) Load 15(v)
+             119:    6(float) CompositeExtract 118 0
+                              Store 117(sf1) 119
+             120:    7(fvec4) Load 11(input)
+             123:    7(fvec4) FMul 120 122
+                              ReturnValue 123
                               FunctionEnd
diff --git a/Test/baseResults/hlsl.snorm.uav.comp.out b/Test/baseResults/hlsl.snorm.uav.comp.out
index 40ab6cf..de82aa4 100644
--- a/Test/baseResults/hlsl.snorm.uav.comp.out
+++ b/Test/baseResults/hlsl.snorm.uav.comp.out
@@ -136,18 +136,18 @@
                               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 19(ResultInS) DescriptorSet 0
                               Decorate 25($Global) Block
-                              Decorate 27 DescriptorSet 0
+                              MemberDecorate 25($Global) 0 Offset 0
                               Decorate 27 Binding 2
-                              Decorate 34(ResultOutS) DescriptorSet 0
+                              Decorate 27 DescriptorSet 0
                               Decorate 34(ResultOutS) Binding 1
-                              Decorate 39(ResultInU) DescriptorSet 0
+                              Decorate 34(ResultOutS) DescriptorSet 0
                               Decorate 39(ResultInU) Binding 0
-                              Decorate 43(ResultOutU) DescriptorSet 0
+                              Decorate 39(ResultInU) DescriptorSet 0
                               Decorate 43(ResultOutU) Binding 0
+                              Decorate 43(ResultOutU) DescriptorSet 0
                               Decorate 49(tid) BuiltIn GlobalInvocationId
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.store.rwbyteaddressbuffer.type.comp.out b/Test/baseResults/hlsl.store.rwbyteaddressbuffer.type.comp.out
index 2198aff..3524cf9 100644
--- a/Test/baseResults/hlsl.store.rwbyteaddressbuffer.type.comp.out
+++ b/Test/baseResults/hlsl.store.rwbyteaddressbuffer.type.comp.out
@@ -116,10 +116,10 @@
                               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
+                              MemberDecorate 28(buffer) 0 Offset 0
                               Decorate 30(buffer) Binding 0
+                              Decorate 30(buffer) DescriptorSet 0
                               Decorate 37(dispatchThreadID) BuiltIn GlobalInvocationId
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.stringtoken.frag.out b/Test/baseResults/hlsl.stringtoken.frag.out
index 144bebc..b656ae8 100644
--- a/Test/baseResults/hlsl.stringtoken.frag.out
+++ b/Test/baseResults/hlsl.stringtoken.frag.out
@@ -90,12 +90,12 @@
                               MemberName 31($Global) 0  "TestUF"
                               Name 33  ""
                               Decorate 25(@entryPointOutput.Color) Location 0
-                              Decorate 30(TestTexture) DescriptorSet 0
                               Decorate 30(TestTexture) Binding 0
-                              MemberDecorate 31($Global) 0 Offset 0
+                              Decorate 30(TestTexture) DescriptorSet 0
                               Decorate 31($Global) Block
-                              Decorate 33 DescriptorSet 0
+                              MemberDecorate 31($Global) 0 Offset 0
                               Decorate 33 Binding 0
+                              Decorate 33 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.struct.frag.out b/Test/baseResults/hlsl.struct.frag.out
index a36bba4..24671d4 100644
--- a/Test/baseResults/hlsl.struct.frag.out
+++ b/Test/baseResults/hlsl.struct.frag.out
@@ -279,8 +279,8 @@
                               Decorate 65(s.c) Location 3
                               Decorate 71(s.d) Centroid
                               Decorate 71(s.d) Location 4
-                              Decorate 76(s.ff1) Flat
                               Decorate 76(s.ff1) BuiltIn FrontFacing
+                              Decorate 76(s.ff1) Flat
                               Decorate 80(s.ff2) Flat
                               Decorate 80(s.ff2) Location 5
                               Decorate 84(s.ff3) Flat
@@ -291,12 +291,12 @@
                               MemberDecorate 98(myS) 1 Offset 4
                               MemberDecorate 98(myS) 2 Offset 16
                               MemberDecorate 98(myS) 3 Offset 32
+                              Decorate 99($Global) Block
                               MemberDecorate 99($Global) 0 Offset 0
                               MemberDecorate 99($Global) 1 Offset 1620
                               MemberDecorate 99($Global) 2 Offset 1636
-                              Decorate 99($Global) Block
-                              Decorate 101 DescriptorSet 0
                               Decorate 101 Binding 0
+                              Decorate 101 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.structIoFourWay.frag.out b/Test/baseResults/hlsl.structIoFourWay.frag.out
index 3faff5b..1143a94 100644
--- a/Test/baseResults/hlsl.structIoFourWay.frag.out
+++ b/Test/baseResults/hlsl.structIoFourWay.frag.out
@@ -217,14 +217,14 @@
                               MemberDecorate 58(T) 1 Offset 72
                               MemberDecorate 58(T) 2 Offset 76
                               MemberDecorate 58(T) 3 Offset 80
-                              MemberDecorate 59($Global) 0 Offset 0
                               Decorate 59($Global) Block
-                              Decorate 61 DescriptorSet 0
+                              MemberDecorate 59($Global) 0 Offset 0
                               Decorate 61 Binding 0
-                              MemberDecorate 62(buff) 0 Offset 96
+                              Decorate 61 DescriptorSet 0
                               Decorate 62(buff) Block
-                              Decorate 64 DescriptorSet 0
+                              MemberDecorate 62(buff) 0 Offset 96
                               Decorate 64 Binding 0
+                              Decorate 64 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.structarray.flatten.frag.out b/Test/baseResults/hlsl.structarray.flatten.frag.out
index 4896dca..e5c01fc 100644
--- a/Test/baseResults/hlsl.structarray.flatten.frag.out
+++ b/Test/baseResults/hlsl.structarray.flatten.frag.out
@@ -198,51 +198,51 @@
                               Name 77  "g_texdata_array2[2].samp"
                               Name 78  "g_texdata_array2[2].tex"
                               Name 79  "g_texdata_array2[2].nonopaque_thing"
-                              Decorate 18(g_texdata.tex) DescriptorSet 0
                               Decorate 18(g_texdata.tex) Binding 1
-                              Decorate 22(g_texdata.samp) DescriptorSet 0
+                              Decorate 18(g_texdata.tex) DescriptorSet 0
                               Decorate 22(g_texdata.samp) Binding 0
-                              Decorate 28(g_texdata_array[1].tex) DescriptorSet 0
+                              Decorate 22(g_texdata.samp) DescriptorSet 0
                               Decorate 28(g_texdata_array[1].tex) Binding 3
-                              Decorate 30(g_texdata_array[1].samp) DescriptorSet 0
+                              Decorate 28(g_texdata_array[1].tex) DescriptorSet 0
                               Decorate 30(g_texdata_array[1].samp) Binding 2
-                              Decorate 40(g_texdata_array2[1].tex) DescriptorSet 0
+                              Decorate 30(g_texdata_array[1].samp) DescriptorSet 0
                               Decorate 40(g_texdata_array2[1].tex) Binding 5
-                              Decorate 45(g_texdata_array2[1].samp) DescriptorSet 0
+                              Decorate 40(g_texdata_array2[1].tex) DescriptorSet 0
                               Decorate 45(g_texdata_array2[1].samp) Binding 4
+                              Decorate 45(g_texdata_array2[1].samp) DescriptorSet 0
                               Decorate 59(ps_output.color) Location 0
-                              Decorate 62(g_samp) DescriptorSet 0
                               Decorate 62(g_samp) Binding 0
-                              Decorate 63(g_tex) DescriptorSet 0
+                              Decorate 62(g_samp) DescriptorSet 0
                               Decorate 63(g_tex) Binding 0
+                              Decorate 63(g_tex) DescriptorSet 0
                               Decorate 65(g_texdata.nonopaque_thing) Location 0
                               Decorate 65(g_texdata.nonopaque_thing) DescriptorSet 0
-                              Decorate 66(g_texdata_array[0].samp) DescriptorSet 0
                               Decorate 66(g_texdata_array[0].samp) Binding 0
-                              Decorate 67(g_texdata_array[0].tex) DescriptorSet 0
+                              Decorate 66(g_texdata_array[0].samp) DescriptorSet 0
                               Decorate 67(g_texdata_array[0].tex) Binding 0
+                              Decorate 67(g_texdata_array[0].tex) DescriptorSet 0
                               Decorate 68(g_texdata_array[0].nonopaque_thing) Location 1
                               Decorate 68(g_texdata_array[0].nonopaque_thing) DescriptorSet 0
                               Decorate 69(g_texdata_array[1].nonopaque_thing) Location 2
                               Decorate 69(g_texdata_array[1].nonopaque_thing) DescriptorSet 0
-                              Decorate 70(g_texdata_array[2].samp) DescriptorSet 0
                               Decorate 70(g_texdata_array[2].samp) Binding 0
-                              Decorate 71(g_texdata_array[2].tex) DescriptorSet 0
+                              Decorate 70(g_texdata_array[2].samp) DescriptorSet 0
                               Decorate 71(g_texdata_array[2].tex) Binding 0
+                              Decorate 71(g_texdata_array[2].tex) DescriptorSet 0
                               Decorate 72(g_texdata_array[2].nonopaque_thing) Location 3
                               Decorate 72(g_texdata_array[2].nonopaque_thing) DescriptorSet 0
-                              Decorate 73(g_texdata_array2[0].samp) DescriptorSet 0
                               Decorate 73(g_texdata_array2[0].samp) Binding 0
-                              Decorate 74(g_texdata_array2[0].tex) DescriptorSet 0
+                              Decorate 73(g_texdata_array2[0].samp) DescriptorSet 0
                               Decorate 74(g_texdata_array2[0].tex) Binding 0
+                              Decorate 74(g_texdata_array2[0].tex) DescriptorSet 0
                               Decorate 75(g_texdata_array2[0].nonopaque_thing) Location 4
                               Decorate 75(g_texdata_array2[0].nonopaque_thing) DescriptorSet 0
                               Decorate 76(g_texdata_array2[1].nonopaque_thing) Location 5
                               Decorate 76(g_texdata_array2[1].nonopaque_thing) DescriptorSet 0
-                              Decorate 77(g_texdata_array2[2].samp) DescriptorSet 0
                               Decorate 77(g_texdata_array2[2].samp) Binding 0
-                              Decorate 78(g_texdata_array2[2].tex) DescriptorSet 0
+                              Decorate 77(g_texdata_array2[2].samp) DescriptorSet 0
                               Decorate 78(g_texdata_array2[2].tex) Binding 0
+                              Decorate 78(g_texdata_array2[2].tex) DescriptorSet 0
                               Decorate 79(g_texdata_array2[2].nonopaque_thing) Location 6
                               Decorate 79(g_texdata_array2[2].nonopaque_thing) DescriptorSet 0
                2:             TypeVoid
diff --git a/Test/baseResults/hlsl.structbuffer.append.fn.frag.out b/Test/baseResults/hlsl.structbuffer.append.fn.frag.out
index acfbf5d..aa3fa98 100644
--- a/Test/baseResults/hlsl.structbuffer.append.fn.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.append.fn.frag.out
@@ -186,28 +186,28 @@
                               Name 68  "sbuf_c@count"
                               Name 69  "sbuf_unused"
                               Decorate 8 ArrayStride 16
-                              MemberDecorate 9 0 Offset 0
                               Decorate 9 BufferBlock
+                              MemberDecorate 9 0 Offset 0
                               Decorate 12 BufferBlock
-                              Decorate 49(sbuf_a) DescriptorSet 0
                               Decorate 49(sbuf_a) Binding 0
-                              Decorate 50(sbuf_a@count) DescriptorSet 0
+                              Decorate 49(sbuf_a) DescriptorSet 0
                               Decorate 50(sbuf_a@count) Binding 0
-                              Decorate 51(sbuf_c) DescriptorSet 0
+                              Decorate 50(sbuf_a@count) DescriptorSet 0
                               Decorate 51(sbuf_c) Binding 1
-                              Decorate 52(sbuf_c@count) DescriptorSet 0
+                              Decorate 51(sbuf_c) DescriptorSet 0
                               Decorate 52(sbuf_c@count) Binding 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
+                              MemberDecorate 65(sbuf_a@count) 0 Offset 0
                               Decorate 67(sbuf_a@count) Binding 0
-                              Decorate 68(sbuf_c@count) DescriptorSet 0
+                              Decorate 67(sbuf_a@count) DescriptorSet 0
                               Decorate 68(sbuf_c@count) Binding 0
-                              Decorate 69(sbuf_unused) DescriptorSet 0
+                              Decorate 68(sbuf_c@count) DescriptorSet 0
                               Decorate 69(sbuf_unused) Binding 0
+                              Decorate 69(sbuf_unused) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/hlsl.structbuffer.append.frag.out b/Test/baseResults/hlsl.structbuffer.append.frag.out
index 4c57e0b..48dfe6a 100644
--- a/Test/baseResults/hlsl.structbuffer.append.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.append.frag.out
@@ -150,23 +150,23 @@
                               Name 52  "param"
                               Name 55  "sbuf_unused"
                               Decorate 14 ArrayStride 16
-                              MemberDecorate 15(sbuf_a) 0 Offset 0
                               Decorate 15(sbuf_a) BufferBlock
-                              Decorate 17(sbuf_a) DescriptorSet 0
+                              MemberDecorate 15(sbuf_a) 0 Offset 0
                               Decorate 17(sbuf_a) Binding 0
-                              MemberDecorate 20(sbuf_a@count) 0 Offset 0
+                              Decorate 17(sbuf_a) DescriptorSet 0
                               Decorate 20(sbuf_a@count) BufferBlock
-                              Decorate 22(sbuf_a@count) DescriptorSet 0
+                              MemberDecorate 20(sbuf_a@count) 0 Offset 0
                               Decorate 22(sbuf_a@count) Binding 1
-                              Decorate 35(sbuf_c) DescriptorSet 0
+                              Decorate 22(sbuf_a@count) DescriptorSet 0
                               Decorate 35(sbuf_c) Binding 2
-                              Decorate 36(sbuf_c@count) DescriptorSet 0
+                              Decorate 35(sbuf_c) DescriptorSet 0
                               Decorate 36(sbuf_c@count) Binding 3
+                              Decorate 36(sbuf_c@count) DescriptorSet 0
                               Decorate 48(pos) Flat
                               Decorate 48(pos) Location 0
                               Decorate 51(@entryPointOutput) Location 0
-                              Decorate 55(sbuf_unused) DescriptorSet 0
                               Decorate 55(sbuf_unused) Binding 0
+                              Decorate 55(sbuf_unused) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
diff --git a/Test/baseResults/hlsl.structbuffer.atomics.frag.out b/Test/baseResults/hlsl.structbuffer.atomics.frag.out
index 3f26652..712d974 100644
--- a/Test/baseResults/hlsl.structbuffer.atomics.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.atomics.frag.out
@@ -496,10 +496,10 @@
                               Name 83  "@entryPointOutput"
                               Name 84  "param"
                               Decorate 14 ArrayStride 4
-                              MemberDecorate 15(sbuf) 0 Offset 0
                               Decorate 15(sbuf) BufferBlock
-                              Decorate 17(sbuf) DescriptorSet 0
+                              MemberDecorate 15(sbuf) 0 Offset 0
                               Decorate 17(sbuf) Binding 0
+                              Decorate 17(sbuf) DescriptorSet 0
                               Decorate 80(pos) Flat
                               Decorate 80(pos) Location 0
                               Decorate 83(@entryPointOutput) Location 0
diff --git a/Test/baseResults/hlsl.structbuffer.byte.frag.out b/Test/baseResults/hlsl.structbuffer.byte.frag.out
index f3e92ce..a99b805 100644
--- a/Test/baseResults/hlsl.structbuffer.byte.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.byte.frag.out
@@ -348,11 +348,12 @@
                               Name 110  "@entryPointOutput"
                               Name 111  "param"
                               Decorate 15 ArrayStride 4
+                              Decorate 16(sbuf) BufferBlock
                               MemberDecorate 16(sbuf) 0 NonWritable
                               MemberDecorate 16(sbuf) 0 Offset 0
-                              Decorate 16(sbuf) BufferBlock
-                              Decorate 18(sbuf) DescriptorSet 0
+                              Decorate 18(sbuf) NonWritable
                               Decorate 18(sbuf) Binding 0
+                              Decorate 18(sbuf) DescriptorSet 0
                               Decorate 107(pos) Flat
                               Decorate 107(pos) Location 0
                               Decorate 110(@entryPointOutput) Location 0
diff --git a/Test/baseResults/hlsl.structbuffer.coherent.frag.out b/Test/baseResults/hlsl.structbuffer.coherent.frag.out
index 65e4a14..a75b3cf 100644
--- a/Test/baseResults/hlsl.structbuffer.coherent.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.coherent.frag.out
@@ -204,19 +204,21 @@
                               Name 74  "@entryPointOutput"
                               Name 75  "param"
                               Decorate 14 ArrayStride 4
+                              Decorate 15(sbuf2) BufferBlock
                               MemberDecorate 15(sbuf2) 0 Coherent
                               MemberDecorate 15(sbuf2) 0 Offset 0
-                              Decorate 15(sbuf2) BufferBlock
-                              Decorate 17(sbuf2) DescriptorSet 0
+                              Decorate 17(sbuf2) Coherent
                               Decorate 17(sbuf2) Binding 1
+                              Decorate 17(sbuf2) DescriptorSet 0
                               MemberDecorate 28(sb_t) 0 Offset 0
                               MemberDecorate 28(sb_t) 1 Offset 12
                               Decorate 29 ArrayStride 16
+                              Decorate 30(sbuf) BufferBlock
                               MemberDecorate 30(sbuf) 0 Coherent
                               MemberDecorate 30(sbuf) 0 Offset 0
-                              Decorate 30(sbuf) BufferBlock
-                              Decorate 32(sbuf) DescriptorSet 0
+                              Decorate 32(sbuf) Coherent
                               Decorate 32(sbuf) Binding 0
+                              Decorate 32(sbuf) DescriptorSet 0
                               Decorate 71(pos) Flat
                               Decorate 71(pos) Location 0
                               Decorate 74(@entryPointOutput) Location 0
diff --git a/Test/baseResults/hlsl.structbuffer.floatidx.comp.out b/Test/baseResults/hlsl.structbuffer.floatidx.comp.out
index 6a86e48..cea0ef7 100644
--- a/Test/baseResults/hlsl.structbuffer.floatidx.comp.out
+++ b/Test/baseResults/hlsl.structbuffer.floatidx.comp.out
@@ -217,21 +217,21 @@
                               MemberDecorate 19(sb_t) 0 Offset 0
                               MemberDecorate 19(sb_t) 1 Offset 16
                               Decorate 20 ArrayStride 32
-                              MemberDecorate 21(csb) 0 Offset 0
                               Decorate 21(csb) BufferBlock
-                              Decorate 23(csb) DescriptorSet 0
+                              MemberDecorate 21(csb) 0 Offset 0
                               Decorate 23(csb) Binding 1
-                              MemberDecorate 26(csb@count) 0 Offset 0
+                              Decorate 23(csb) DescriptorSet 0
                               Decorate 26(csb@count) BufferBlock
-                              Decorate 28(csb@count) DescriptorSet 0
+                              MemberDecorate 26(csb@count) 0 Offset 0
                               Decorate 28(csb@count) Binding 2
-                              Decorate 58(outtx) DescriptorSet 0
+                              Decorate 28(csb@count) DescriptorSet 0
                               Decorate 58(outtx) Binding 0
+                              Decorate 58(outtx) DescriptorSet 0
                               Decorate 63 ArrayStride 16
-                              MemberDecorate 64(rwsb) 0 Offset 0
                               Decorate 64(rwsb) BufferBlock
-                              Decorate 66(rwsb) DescriptorSet 0
+                              MemberDecorate 64(rwsb) 0 Offset 0
                               Decorate 66(rwsb) Binding 3
+                              Decorate 66(rwsb) DescriptorSet 0
                               Decorate 80(nThreadId) BuiltIn GlobalInvocationId
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.structbuffer.fn.frag.out b/Test/baseResults/hlsl.structbuffer.fn.frag.out
index 2086d59..7e8536a 100644
--- a/Test/baseResults/hlsl.structbuffer.fn.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.fn.frag.out
@@ -182,33 +182,35 @@
                               MemberName 75(sbuf3) 0  "@data"
                               Name 77  "sbuf3"
                               Decorate 8 ArrayStride 16
+                              Decorate 9 BufferBlock
                               MemberDecorate 9 0 NonWritable
                               MemberDecorate 9 0 Offset 0
-                              Decorate 9 BufferBlock
                               Decorate 13(sb) NonWritable
                               Decorate 17 ArrayStride 16
-                              MemberDecorate 18 0 Offset 0
                               Decorate 18 BufferBlock
+                              MemberDecorate 18 0 Offset 0
                               Decorate 20 BufferBlock
-                              Decorate 47(sbuf2) DescriptorSet 0
                               Decorate 47(sbuf2) Binding 0
-                              Decorate 48(sbuf2@count) DescriptorSet 0
+                              Decorate 47(sbuf2) DescriptorSet 0
                               Decorate 48(sbuf2@count) Binding 0
-                              Decorate 50(sbuf) DescriptorSet 0
+                              Decorate 48(sbuf2@count) DescriptorSet 0
+                              Decorate 50(sbuf) NonWritable
                               Decorate 50(sbuf) Binding 10
+                              Decorate 50(sbuf) DescriptorSet 0
                               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
+                              MemberDecorate 70(sbuf2@count) 0 Offset 0
                               Decorate 72(sbuf2@count) Binding 0
+                              Decorate 72(sbuf2@count) DescriptorSet 0
                               Decorate 74 ArrayStride 16
+                              Decorate 75(sbuf3) BufferBlock
                               MemberDecorate 75(sbuf3) 0 NonWritable
                               MemberDecorate 75(sbuf3) 0 Offset 0
-                              Decorate 75(sbuf3) BufferBlock
-                              Decorate 77(sbuf3) DescriptorSet 0
+                              Decorate 77(sbuf3) NonWritable
                               Decorate 77(sbuf3) Binding 12
+                              Decorate 77(sbuf3) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
diff --git a/Test/baseResults/hlsl.structbuffer.fn2.comp.out b/Test/baseResults/hlsl.structbuffer.fn2.comp.out
index 1953d46..f363006 100644
--- a/Test/baseResults/hlsl.structbuffer.fn2.comp.out
+++ b/Test/baseResults/hlsl.structbuffer.fn2.comp.out
@@ -165,14 +165,15 @@
                               Name 57  "dispatchId"
                               Name 60  "param"
                               Decorate 8 ArrayStride 4
+                              Decorate 9 BufferBlock
                               MemberDecorate 9 0 NonWritable
                               MemberDecorate 9 0 Offset 0
-                              Decorate 9 BufferBlock
                               Decorate 14(buffer) NonWritable
-                              Decorate 44(g_input) DescriptorSet 0
+                              Decorate 44(g_input) NonWritable
                               Decorate 44(g_input) Binding 0
-                              Decorate 50(g_output) DescriptorSet 0
+                              Decorate 44(g_input) DescriptorSet 0
                               Decorate 50(g_output) Binding 1
+                              Decorate 50(g_output) DescriptorSet 0
                               Decorate 57(dispatchId) BuiltIn GlobalInvocationId
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.structbuffer.frag.out b/Test/baseResults/hlsl.structbuffer.frag.out
index 0e16ef1..db1d71c 100644
--- a/Test/baseResults/hlsl.structbuffer.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.frag.out
@@ -225,17 +225,19 @@
                               MemberDecorate 19(sb_t) 1 Offset 12
                               MemberDecorate 19(sb_t) 2 Offset 16
                               Decorate 20 ArrayStride 32
+                              Decorate 21(sbuf) BufferBlock
                               MemberDecorate 21(sbuf) 0 NonWritable
                               MemberDecorate 21(sbuf) 0 Offset 0
-                              Decorate 21(sbuf) BufferBlock
-                              Decorate 23(sbuf) DescriptorSet 0
+                              Decorate 23(sbuf) NonWritable
                               Decorate 23(sbuf) Binding 10
+                              Decorate 23(sbuf) DescriptorSet 0
                               Decorate 58 ArrayStride 4
+                              Decorate 59(sbuf2) BufferBlock
                               MemberDecorate 59(sbuf2) 0 NonWritable
                               MemberDecorate 59(sbuf2) 0 Offset 0
-                              Decorate 59(sbuf2) BufferBlock
-                              Decorate 61(sbuf2) DescriptorSet 0
+                              Decorate 61(sbuf2) NonWritable
                               Decorate 61(sbuf2) Binding 0
+                              Decorate 61(sbuf2) DescriptorSet 0
                               Decorate 89(pos) Flat
                               Decorate 89(pos) Location 0
                               Decorate 92(@entryPointOutput) Location 0
diff --git a/Test/baseResults/hlsl.structbuffer.incdec.frag.hlslfun1.out b/Test/baseResults/hlsl.structbuffer.incdec.frag.hlslfun1.out
index 95b13a8..be5f1cb 100644
--- a/Test/baseResults/hlsl.structbuffer.incdec.frag.hlslfun1.out
+++ b/Test/baseResults/hlsl.structbuffer.incdec.frag.hlslfun1.out
@@ -30,27 +30,27 @@
                               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
+                              MemberDecorate 20(sbuf_rw_i) 0 Offset 0
                               Decorate 22(sbuf_rw_i) Binding 0
-                              Decorate 26(sbuf_rw_d) DescriptorSet 0
+                              Decorate 22(sbuf_rw_i) DescriptorSet 0
+                              DecorateId 22(sbuf_rw_i) DecorationHlslCounterBufferGOOGLE 36(sbuf_rw_i@count)
                               Decorate 26(sbuf_rw_d) Binding 0
-                              Decorate 27(sbuf_rw_nocounter) DescriptorSet 0
+                              Decorate 26(sbuf_rw_d) DescriptorSet 0
+                              DecorateId 26(sbuf_rw_d) DecorationHlslCounterBufferGOOGLE 42(sbuf_rw_d@count)
                               Decorate 27(sbuf_rw_nocounter) Binding 0
-                              MemberDecorate 34(sbuf_rw_i@count) 0 Offset 0
+                              Decorate 27(sbuf_rw_nocounter) DescriptorSet 0
                               Decorate 34(sbuf_rw_i@count) BufferBlock
-                              Decorate 36(sbuf_rw_i@count) DescriptorSet 0
+                              MemberDecorate 34(sbuf_rw_i@count) 0 Offset 0
                               Decorate 36(sbuf_rw_i@count) Binding 0
-                              Decorate 42(sbuf_rw_d@count) DescriptorSet 0
+                              Decorate 36(sbuf_rw_i@count) DescriptorSet 0
                               Decorate 42(sbuf_rw_d@count) Binding 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
diff --git a/Test/baseResults/hlsl.structbuffer.incdec.frag.out b/Test/baseResults/hlsl.structbuffer.incdec.frag.out
index 72efcc0..3f12758 100644
--- a/Test/baseResults/hlsl.structbuffer.incdec.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.incdec.frag.out
@@ -233,20 +233,20 @@
                               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
+                              MemberDecorate 20(sbuf_rw_i) 0 Offset 0
                               Decorate 22(sbuf_rw_i) Binding 0
-                              Decorate 26(sbuf_rw_d) DescriptorSet 0
+                              Decorate 22(sbuf_rw_i) DescriptorSet 0
                               Decorate 26(sbuf_rw_d) Binding 2
-                              Decorate 27(sbuf_rw_nocounter) DescriptorSet 0
+                              Decorate 26(sbuf_rw_d) DescriptorSet 0
                               Decorate 27(sbuf_rw_nocounter) Binding 4
-                              MemberDecorate 34(sbuf_rw_i@count) 0 Offset 0
+                              Decorate 27(sbuf_rw_nocounter) DescriptorSet 0
                               Decorate 34(sbuf_rw_i@count) BufferBlock
-                              Decorate 36(sbuf_rw_i@count) DescriptorSet 0
+                              MemberDecorate 34(sbuf_rw_i@count) 0 Offset 0
                               Decorate 36(sbuf_rw_i@count) Binding 1
-                              Decorate 42(sbuf_rw_d@count) DescriptorSet 0
+                              Decorate 36(sbuf_rw_i@count) DescriptorSet 0
                               Decorate 42(sbuf_rw_d@count) Binding 3
+                              Decorate 42(sbuf_rw_d@count) DescriptorSet 0
                               Decorate 63(pos) Flat
                               Decorate 63(pos) Location 0
                               Decorate 66(@entryPointOutput) Location 0
diff --git a/Test/baseResults/hlsl.structbuffer.rw.frag.out b/Test/baseResults/hlsl.structbuffer.rw.frag.out
index 9dfdaf0..4fcc689 100644
--- a/Test/baseResults/hlsl.structbuffer.rw.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.rw.frag.out
@@ -204,17 +204,17 @@
                               Name 74  "@entryPointOutput"
                               Name 75  "param"
                               Decorate 14 ArrayStride 4
-                              MemberDecorate 15(sbuf2) 0 Offset 0
                               Decorate 15(sbuf2) BufferBlock
-                              Decorate 17(sbuf2) DescriptorSet 0
+                              MemberDecorate 15(sbuf2) 0 Offset 0
                               Decorate 17(sbuf2) Binding 1
+                              Decorate 17(sbuf2) DescriptorSet 0
                               MemberDecorate 28(sb_t) 0 Offset 0
                               MemberDecorate 28(sb_t) 1 Offset 12
                               Decorate 29 ArrayStride 16
-                              MemberDecorate 30(sbuf) 0 Offset 0
                               Decorate 30(sbuf) BufferBlock
-                              Decorate 32(sbuf) DescriptorSet 0
+                              MemberDecorate 30(sbuf) 0 Offset 0
                               Decorate 32(sbuf) Binding 0
+                              Decorate 32(sbuf) DescriptorSet 0
                               Decorate 71(pos) Flat
                               Decorate 71(pos) Location 0
                               Decorate 74(@entryPointOutput) Location 0
diff --git a/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out b/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out
index 5fdbd1d..d8ba034 100644
--- a/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out
+++ b/Test/baseResults/hlsl.structbuffer.rwbyte.frag.out
@@ -1032,10 +1032,10 @@
                               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
+                              MemberDecorate 16(sbuf) 0 Offset 0
                               Decorate 18(sbuf) Binding 0
+                              Decorate 18(sbuf) DescriptorSet 0
                               Decorate 232(pos) Flat
                               Decorate 232(pos) Location 0
                               Decorate 235(@entryPointOutput) Location 0
diff --git a/Test/baseResults/hlsl.structbuffer.rwbyte2.comp.out b/Test/baseResults/hlsl.structbuffer.rwbyte2.comp.out
index b024bd4..fa058b6 100644
--- a/Test/baseResults/hlsl.structbuffer.rwbyte2.comp.out
+++ b/Test/baseResults/hlsl.structbuffer.rwbyte2.comp.out
@@ -95,15 +95,15 @@
                               MemberName 24(g_sbuf) 0  "@data"
                               Name 26  "g_sbuf"
                               Decorate 11 ArrayStride 4
-                              MemberDecorate 12(g_bbuf) 0 Offset 0
                               Decorate 12(g_bbuf) BufferBlock
-                              Decorate 14(g_bbuf) DescriptorSet 0
+                              MemberDecorate 12(g_bbuf) 0 Offset 0
                               Decorate 14(g_bbuf) Binding 1
+                              Decorate 14(g_bbuf) DescriptorSet 0
                               Decorate 23 ArrayStride 4
-                              MemberDecorate 24(g_sbuf) 0 Offset 0
                               Decorate 24(g_sbuf) BufferBlock
-                              Decorate 26(g_sbuf) DescriptorSet 0
+                              MemberDecorate 24(g_sbuf) 0 Offset 0
                               Decorate 26(g_sbuf) Binding 0
+                              Decorate 26(g_sbuf) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                8:             TypeInt 32 0
diff --git a/Test/baseResults/hlsl.structcopy.comp.out b/Test/baseResults/hlsl.structcopy.comp.out
index afc03e0..07441e1 100644
--- a/Test/baseResults/hlsl.structcopy.comp.out
+++ b/Test/baseResults/hlsl.structcopy.comp.out
@@ -281,21 +281,23 @@
                               MemberDecorate 26(MyStruct) 1 Offset 4
                               MemberDecorate 26(MyStruct) 2 Offset 8
                               Decorate 27 ArrayStride 12
+                              Decorate 28(MyStructs) BufferBlock
                               MemberDecorate 28(MyStructs) 0 Offset 0
                               MemberDecorate 28(MyStructs) 1 Offset 4
-                              Decorate 28(MyStructs) BufferBlock
                               Decorate 29 ArrayStride 16
+                              Decorate 30(sb) BufferBlock
                               MemberDecorate 30(sb) 0 NonWritable
                               MemberDecorate 30(sb) 0 Offset 0
-                              Decorate 30(sb) BufferBlock
-                              Decorate 32(sb) DescriptorSet 0
+                              Decorate 32(sb) NonWritable
                               Decorate 32(sb) Binding 0
+                              Decorate 32(sb) DescriptorSet 0
                               Decorate 64 ArrayStride 12
+                              Decorate 65(o) BufferBlock
                               MemberDecorate 65(o) 0 NonWritable
                               MemberDecorate 65(o) 0 Offset 0
-                              Decorate 65(o) BufferBlock
-                              Decorate 67(o) DescriptorSet 0
+                              Decorate 67(o) NonWritable
                               Decorate 67(o) Binding 1
+                              Decorate 67(o) DescriptorSet 0
                               Decorate 83(id) BuiltIn LocalInvocationIndex
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.structcopylogical.comp.out b/Test/baseResults/hlsl.structcopylogical.comp.out
index a9b849b..0b99781 100644
--- a/Test/baseResults/hlsl.structcopylogical.comp.out
+++ b/Test/baseResults/hlsl.structcopylogical.comp.out
@@ -281,21 +281,23 @@
                               MemberDecorate 26(MyStruct) 1 Offset 4
                               MemberDecorate 26(MyStruct) 2 Offset 8
                               Decorate 27 ArrayStride 12
+                              Decorate 28(MyStructs) Block
                               MemberDecorate 28(MyStructs) 0 Offset 0
                               MemberDecorate 28(MyStructs) 1 Offset 4
-                              Decorate 28(MyStructs) Block
                               Decorate 29 ArrayStride 16
+                              Decorate 30(sb) Block
                               MemberDecorate 30(sb) 0 NonWritable
                               MemberDecorate 30(sb) 0 Offset 0
-                              Decorate 30(sb) Block
-                              Decorate 32(sb) DescriptorSet 0
+                              Decorate 32(sb) NonWritable
                               Decorate 32(sb) Binding 0
+                              Decorate 32(sb) DescriptorSet 0
                               Decorate 54 ArrayStride 12
+                              Decorate 55(o) Block
                               MemberDecorate 55(o) 0 NonWritable
                               MemberDecorate 55(o) 0 Offset 0
-                              Decorate 55(o) Block
-                              Decorate 57(o) DescriptorSet 0
+                              Decorate 57(o) NonWritable
                               Decorate 57(o) Binding 1
+                              Decorate 57(o) DescriptorSet 0
                               Decorate 74(id) BuiltIn LocalInvocationIndex
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.subpass.frag.out b/Test/baseResults/hlsl.subpass.frag.out
index 942ef5e..4841862 100644
--- a/Test/baseResults/hlsl.subpass.frag.out
+++ b/Test/baseResults/hlsl.subpass.frag.out
@@ -493,80 +493,80 @@
                               Name 193  "result73"
                               Name 194  "subpass_2"
                               Name 202  "@entryPointOutput"
-                              Decorate 15(subpass_f4) DescriptorSet 0
                               Decorate 15(subpass_f4) Binding 1
+                              Decorate 15(subpass_f4) DescriptorSet 0
                               Decorate 15(subpass_f4) InputAttachmentIndex 1
-                              Decorate 27(subpass_i4) DescriptorSet 0
                               Decorate 27(subpass_i4) Binding 0
+                              Decorate 27(subpass_i4) DescriptorSet 0
                               Decorate 27(subpass_i4) InputAttachmentIndex 2
-                              Decorate 36(subpass_u4) DescriptorSet 0
                               Decorate 36(subpass_u4) Binding 2
+                              Decorate 36(subpass_u4) DescriptorSet 0
                               Decorate 36(subpass_u4) InputAttachmentIndex 3
-                              Decorate 42(subpass_ms_f4) DescriptorSet 0
                               Decorate 42(subpass_ms_f4) Binding 3
+                              Decorate 42(subpass_ms_f4) DescriptorSet 0
                               Decorate 42(subpass_ms_f4) InputAttachmentIndex 4
-                              Decorate 49(subpass_ms_i4) DescriptorSet 0
                               Decorate 49(subpass_ms_i4) Binding 4
+                              Decorate 49(subpass_ms_i4) DescriptorSet 0
                               Decorate 49(subpass_ms_i4) InputAttachmentIndex 5
-                              Decorate 55(subpass_ms_u4) DescriptorSet 0
                               Decorate 55(subpass_ms_u4) Binding 5
+                              Decorate 55(subpass_ms_u4) DescriptorSet 0
                               Decorate 55(subpass_ms_u4) InputAttachmentIndex 6
-                              Decorate 61(subpass_f3) DescriptorSet 0
                               Decorate 61(subpass_f3) Binding 6
+                              Decorate 61(subpass_f3) DescriptorSet 0
                               Decorate 61(subpass_f3) InputAttachmentIndex 1
-                              Decorate 71(subpass_i3) DescriptorSet 0
                               Decorate 71(subpass_i3) Binding 7
+                              Decorate 71(subpass_i3) DescriptorSet 0
                               Decorate 71(subpass_i3) InputAttachmentIndex 2
-                              Decorate 81(subpass_u3) DescriptorSet 0
                               Decorate 81(subpass_u3) Binding 8
+                              Decorate 81(subpass_u3) DescriptorSet 0
                               Decorate 81(subpass_u3) InputAttachmentIndex 3
-                              Decorate 89(subpass_ms_f3) DescriptorSet 0
                               Decorate 89(subpass_ms_f3) Binding 9
+                              Decorate 89(subpass_ms_f3) DescriptorSet 0
                               Decorate 89(subpass_ms_f3) InputAttachmentIndex 4
-                              Decorate 97(subpass_ms_i3) DescriptorSet 0
                               Decorate 97(subpass_ms_i3) Binding 10
+                              Decorate 97(subpass_ms_i3) DescriptorSet 0
                               Decorate 97(subpass_ms_i3) InputAttachmentIndex 5
-                              Decorate 105(subpass_ms_u3) DescriptorSet 0
                               Decorate 105(subpass_ms_u3) Binding 11
+                              Decorate 105(subpass_ms_u3) DescriptorSet 0
                               Decorate 105(subpass_ms_u3) InputAttachmentIndex 6
-                              Decorate 115(subpass_f2) DescriptorSet 0
                               Decorate 115(subpass_f2) Binding 12
+                              Decorate 115(subpass_f2) DescriptorSet 0
                               Decorate 115(subpass_f2) InputAttachmentIndex 1
-                              Decorate 123(subpass_i2) DescriptorSet 0
                               Decorate 123(subpass_i2) Binding 13
+                              Decorate 123(subpass_i2) DescriptorSet 0
                               Decorate 123(subpass_i2) InputAttachmentIndex 2
-                              Decorate 132(subpass_u2) DescriptorSet 0
                               Decorate 132(subpass_u2) Binding 14
+                              Decorate 132(subpass_u2) DescriptorSet 0
                               Decorate 132(subpass_u2) InputAttachmentIndex 3
-                              Decorate 139(subpass_ms_f2) DescriptorSet 0
                               Decorate 139(subpass_ms_f2) Binding 15
+                              Decorate 139(subpass_ms_f2) DescriptorSet 0
                               Decorate 139(subpass_ms_f2) InputAttachmentIndex 4
-                              Decorate 147(subpass_ms_i2) DescriptorSet 0
                               Decorate 147(subpass_ms_i2) Binding 16
+                              Decorate 147(subpass_ms_i2) DescriptorSet 0
                               Decorate 147(subpass_ms_i2) InputAttachmentIndex 5
-                              Decorate 154(subpass_ms_u2) DescriptorSet 0
                               Decorate 154(subpass_ms_u2) Binding 17
+                              Decorate 154(subpass_ms_u2) DescriptorSet 0
                               Decorate 154(subpass_ms_u2) InputAttachmentIndex 6
-                              Decorate 162(subpass_f) DescriptorSet 0
                               Decorate 162(subpass_f) Binding 18
+                              Decorate 162(subpass_f) DescriptorSet 0
                               Decorate 162(subpass_f) InputAttachmentIndex 1
-                              Decorate 168(subpass_i) DescriptorSet 0
                               Decorate 168(subpass_i) Binding 19
+                              Decorate 168(subpass_i) DescriptorSet 0
                               Decorate 168(subpass_i) InputAttachmentIndex 2
-                              Decorate 174(subpass_u) DescriptorSet 0
                               Decorate 174(subpass_u) Binding 20
+                              Decorate 174(subpass_u) DescriptorSet 0
                               Decorate 174(subpass_u) InputAttachmentIndex 3
-                              Decorate 179(subpass_ms_f) DescriptorSet 0
                               Decorate 179(subpass_ms_f) Binding 21
+                              Decorate 179(subpass_ms_f) DescriptorSet 0
                               Decorate 179(subpass_ms_f) InputAttachmentIndex 4
-                              Decorate 184(subpass_ms_i) DescriptorSet 0
                               Decorate 184(subpass_ms_i) Binding 22
+                              Decorate 184(subpass_ms_i) DescriptorSet 0
                               Decorate 184(subpass_ms_i) InputAttachmentIndex 5
-                              Decorate 189(subpass_ms_u) DescriptorSet 0
                               Decorate 189(subpass_ms_u) Binding 23
+                              Decorate 189(subpass_ms_u) DescriptorSet 0
                               Decorate 189(subpass_ms_u) InputAttachmentIndex 6
-                              Decorate 194(subpass_2) DescriptorSet 0
                               Decorate 194(subpass_2) Binding 24
+                              Decorate 194(subpass_2) DescriptorSet 0
                               Decorate 194(subpass_2) InputAttachmentIndex 7
                               Decorate 202(@entryPointOutput) Location 0
                2:             TypeVoid
diff --git a/Test/baseResults/hlsl.swizzle.vec1.comp.out b/Test/baseResults/hlsl.swizzle.vec1.comp.out
new file mode 100644
index 0000000..e1583b8
--- /dev/null
+++ b/Test/baseResults/hlsl.swizzle.vec1.comp.out
@@ -0,0 +1,72 @@
+hlsl.swizzle.vec1.comp
+Shader version: 500
+local_size = (1, 1, 1)
+0:? Sequence
+0:2  Function Definition: @main( ( temp void)
+0:2    Function Parameters: 
+0:?     Sequence
+0:4      move second child to first child ( temp float)
+0:4        direct index ( temp float)
+0:4          'f1' ( temp 1-component vector of float)
+0:4          Constant:
+0:4            0 (const int)
+0:4        Constant:
+0:4          0.500000
+0:2  Function Definition: main( ( temp void)
+0:2    Function Parameters: 
+0:?     Sequence
+0:2      Function Call: @main( ( temp void)
+0:?   Linker Objects
+
+
+Linked compute stage:
+
+
+Shader version: 500
+local_size = (1, 1, 1)
+0:? Sequence
+0:2  Function Definition: @main( ( temp void)
+0:2    Function Parameters: 
+0:?     Sequence
+0:4      move second child to first child ( temp float)
+0:4        direct index ( temp float)
+0:4          'f1' ( temp 1-component vector of float)
+0:4          Constant:
+0:4            0 (const int)
+0:4        Constant:
+0:4          0.500000
+0:2  Function Definition: main( ( temp void)
+0:2    Function Parameters: 
+0:?     Sequence
+0:2      Function Call: @main( ( temp void)
+0:?   Linker Objects
+
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 13
+
+                              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 10  "f1"
+               2:             TypeVoid
+               3:             TypeFunction 2
+               8:             TypeFloat 32
+               9:             TypePointer Function 8(float)
+              11:    8(float) Constant 1056964608
+         4(main):           2 Function None 3
+               5:             Label
+              12:           2 FunctionCall 6(@main()
+                              Return
+                              FunctionEnd
+       6(@main():           2 Function None 3
+               7:             Label
+          10(f1):      9(ptr) Variable Function
+                              Store 10(f1) 11
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/hlsl.texture.struct.frag.out b/Test/baseResults/hlsl.texture.struct.frag.out
index ba632be..879d067 100644
--- a/Test/baseResults/hlsl.texture.struct.frag.out
+++ b/Test/baseResults/hlsl.texture.struct.frag.out
@@ -904,20 +904,20 @@
                               Name 229  "g_tTex2s1a"
                               Name 230  "param"
                               Name 238  "@entryPointOutput"
-                              Decorate 30(g_sSamp) DescriptorSet 0
                               Decorate 30(g_sSamp) Binding 0
-                              Decorate 90(g_tTex2s1) DescriptorSet 0
+                              Decorate 30(g_sSamp) DescriptorSet 0
                               Decorate 90(g_tTex2s1) Binding 1
-                              Decorate 114(g_tTex2s2) DescriptorSet 0
+                              Decorate 90(g_tTex2s1) DescriptorSet 0
                               Decorate 114(g_tTex2s2) Binding 2
-                              Decorate 140(g_tTex2s3) DescriptorSet 0
+                              Decorate 114(g_tTex2s2) DescriptorSet 0
                               Decorate 140(g_tTex2s3) Binding 3
-                              Decorate 168(g_tTex2s4) DescriptorSet 0
+                              Decorate 140(g_tTex2s3) DescriptorSet 0
                               Decorate 168(g_tTex2s4) Binding 4
-                              Decorate 202(g_tTex2s5) DescriptorSet 0
+                              Decorate 168(g_tTex2s4) DescriptorSet 0
                               Decorate 202(g_tTex2s5) Binding 5
-                              Decorate 229(g_tTex2s1a) DescriptorSet 0
+                              Decorate 202(g_tTex2s5) DescriptorSet 0
                               Decorate 229(g_tTex2s1a) Binding 6
+                              Decorate 229(g_tTex2s1a) DescriptorSet 0
                               Decorate 238(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.texture.subvec4.frag.out b/Test/baseResults/hlsl.texture.subvec4.frag.out
index 9c3b741..715cb6d 100644
--- a/Test/baseResults/hlsl.texture.subvec4.frag.out
+++ b/Test/baseResults/hlsl.texture.subvec4.frag.out
@@ -385,24 +385,24 @@
                               Name 109  "g_tTex2df3"
                               Name 118  "g_tTex2df4"
                               Name 128  "@entryPointOutput"
-                              Decorate 17(g_tTex2dmsf1) DescriptorSet 0
                               Decorate 17(g_tTex2dmsf1) Binding 0
-                              Decorate 33(g_tTex2dmsf2) DescriptorSet 0
+                              Decorate 17(g_tTex2dmsf1) DescriptorSet 0
                               Decorate 33(g_tTex2dmsf2) Binding 1
-                              Decorate 43(g_tTex2dmsf3) DescriptorSet 0
+                              Decorate 33(g_tTex2dmsf2) DescriptorSet 0
                               Decorate 43(g_tTex2dmsf3) Binding 2
-                              Decorate 53(g_tTex2dmsf4) DescriptorSet 0
+                              Decorate 43(g_tTex2dmsf3) DescriptorSet 0
                               Decorate 53(g_tTex2dmsf4) Binding 3
-                              Decorate 88(g_tTex2df1) DescriptorSet 0
+                              Decorate 53(g_tTex2dmsf4) DescriptorSet 0
                               Decorate 88(g_tTex2df1) Binding 4
-                              Decorate 92(g_sSamp) DescriptorSet 0
+                              Decorate 88(g_tTex2df1) DescriptorSet 0
                               Decorate 92(g_sSamp) Binding 8
-                              Decorate 101(g_tTex2df2) DescriptorSet 0
+                              Decorate 92(g_sSamp) DescriptorSet 0
                               Decorate 101(g_tTex2df2) Binding 5
-                              Decorate 109(g_tTex2df3) DescriptorSet 0
+                              Decorate 101(g_tTex2df2) DescriptorSet 0
                               Decorate 109(g_tTex2df3) Binding 6
-                              Decorate 118(g_tTex2df4) DescriptorSet 0
+                              Decorate 109(g_tTex2df3) DescriptorSet 0
                               Decorate 118(g_tTex2df4) Binding 7
+                              Decorate 118(g_tTex2df4) DescriptorSet 0
                               Decorate 128(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.texturebuffer.frag.out b/Test/baseResults/hlsl.texturebuffer.frag.out
index ae1d4f7..6a2f8be 100644
--- a/Test/baseResults/hlsl.texturebuffer.frag.out
+++ b/Test/baseResults/hlsl.texturebuffer.frag.out
@@ -94,20 +94,22 @@
                               Name 32  "pos"
                               Name 35  "@entryPointOutput"
                               Name 36  "param"
+                              Decorate 15(TextureBuffer_var) BufferBlock
                               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) NonWritable
                               Decorate 17(TextureBuffer_var) Binding 0
+                              Decorate 17(TextureBuffer_var) DescriptorSet 0
+                              Decorate 22(tbuf2) BufferBlock
                               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 24 NonWritable
                               Decorate 24 Binding 1
+                              Decorate 24 DescriptorSet 0
                               Decorate 32(pos) BuiltIn FragCoord
                               Decorate 35(@entryPointOutput) Location 0
                2:             TypeVoid
diff --git a/Test/baseResults/hlsl.tx.bracket.frag.out b/Test/baseResults/hlsl.tx.bracket.frag.out
index 07f1909..ad83b5f 100644
--- a/Test/baseResults/hlsl.tx.bracket.frag.out
+++ b/Test/baseResults/hlsl.tx.bracket.frag.out
@@ -483,6 +483,7 @@
                               Name 181  "g_tTex2df4a"
                               Name 184  "g_tTex2di4a"
                               Name 187  "g_tTex2du4a"
+                              Decorate 45($Global) Block
                               MemberDecorate 45($Global) 0 Offset 0
                               MemberDecorate 45($Global) 1 Offset 8
                               MemberDecorate 45($Global) 2 Offset 16
@@ -491,42 +492,41 @@
                               MemberDecorate 45($Global) 5 Offset 56
                               MemberDecorate 45($Global) 6 Offset 64
                               MemberDecorate 45($Global) 7 Offset 80
-                              Decorate 45($Global) Block
-                              Decorate 47 DescriptorSet 0
                               Decorate 47 Binding 9
-                              Decorate 57(g_tTex1df4) DescriptorSet 0
+                              Decorate 47 DescriptorSet 0
                               Decorate 57(g_tTex1df4) Binding 0
-                              Decorate 72(g_tTex1di4) DescriptorSet 0
+                              Decorate 57(g_tTex1df4) DescriptorSet 0
                               Decorate 72(g_tTex1di4) Binding 1
-                              Decorate 80(g_tTex1du4) DescriptorSet 0
+                              Decorate 72(g_tTex1di4) DescriptorSet 0
                               Decorate 80(g_tTex1du4) Binding 2
-                              Decorate 88(g_tTex2df4) DescriptorSet 0
+                              Decorate 80(g_tTex1du4) DescriptorSet 0
                               Decorate 88(g_tTex2df4) Binding 3
-                              Decorate 98(g_tTex2di4) DescriptorSet 0
+                              Decorate 88(g_tTex2df4) DescriptorSet 0
                               Decorate 98(g_tTex2di4) Binding 4
-                              Decorate 106(g_tTex2du4) DescriptorSet 0
+                              Decorate 98(g_tTex2di4) DescriptorSet 0
                               Decorate 106(g_tTex2du4) Binding 5
-                              Decorate 114(g_tTex3df4) DescriptorSet 0
+                              Decorate 106(g_tTex2du4) DescriptorSet 0
                               Decorate 114(g_tTex3df4) Binding 6
-                              Decorate 124(g_tTex3di4) DescriptorSet 0
+                              Decorate 114(g_tTex3df4) DescriptorSet 0
                               Decorate 124(g_tTex3di4) Binding 7
-                              Decorate 132(g_tTex3du4) DescriptorSet 0
+                              Decorate 124(g_tTex3di4) DescriptorSet 0
                               Decorate 132(g_tTex3du4) Binding 8
+                              Decorate 132(g_tTex3du4) DescriptorSet 0
                               Decorate 164(@entryPointOutput.Color) Location 0
-                              Decorate 169(g_sSamp) DescriptorSet 0
                               Decorate 169(g_sSamp) Binding 0
-                              Decorate 172(g_tTex1df4a) DescriptorSet 0
+                              Decorate 169(g_sSamp) DescriptorSet 0
                               Decorate 172(g_tTex1df4a) Binding 0
-                              Decorate 175(g_tTex1di4a) DescriptorSet 0
+                              Decorate 172(g_tTex1df4a) DescriptorSet 0
                               Decorate 175(g_tTex1di4a) Binding 0
-                              Decorate 178(g_tTex1du4a) DescriptorSet 0
+                              Decorate 175(g_tTex1di4a) DescriptorSet 0
                               Decorate 178(g_tTex1du4a) Binding 0
-                              Decorate 181(g_tTex2df4a) DescriptorSet 0
+                              Decorate 178(g_tTex1du4a) DescriptorSet 0
                               Decorate 181(g_tTex2df4a) Binding 0
-                              Decorate 184(g_tTex2di4a) DescriptorSet 0
+                              Decorate 181(g_tTex2df4a) DescriptorSet 0
                               Decorate 184(g_tTex2di4a) Binding 0
-                              Decorate 187(g_tTex2du4a) DescriptorSet 0
+                              Decorate 184(g_tTex2di4a) DescriptorSet 0
                               Decorate 187(g_tTex2du4a) Binding 0
+                              Decorate 187(g_tTex2du4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
diff --git a/Test/baseResults/hlsl.tx.overload.frag.out b/Test/baseResults/hlsl.tx.overload.frag.out
index df1bb20..88b38e8 100644
--- a/Test/baseResults/hlsl.tx.overload.frag.out
+++ b/Test/baseResults/hlsl.tx.overload.frag.out
@@ -162,14 +162,14 @@
                               Name 63  "twf4"
                               Name 64  "param"
                               Name 71  "@entryPointOutput"
-                              Decorate 45(tf1) DescriptorSet 0
                               Decorate 45(tf1) Binding 0
-                              Decorate 49(tf4) DescriptorSet 0
+                              Decorate 45(tf1) DescriptorSet 0
                               Decorate 49(tf4) Binding 1
-                              Decorate 56(twf1) DescriptorSet 0
+                              Decorate 49(tf4) DescriptorSet 0
                               Decorate 56(twf1) Binding 2
-                              Decorate 63(twf4) DescriptorSet 0
+                              Decorate 56(twf1) DescriptorSet 0
                               Decorate 63(twf4) Binding 3
+                              Decorate 63(twf4) DescriptorSet 0
                               Decorate 71(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.typeGraphCopy.vert.out b/Test/baseResults/hlsl.typeGraphCopy.vert.out
index e380547..8f52cd6 100644
--- a/Test/baseResults/hlsl.typeGraphCopy.vert.out
+++ b/Test/baseResults/hlsl.typeGraphCopy.vert.out
@@ -93,10 +93,10 @@
                               MemberDecorate 13(N3) 0 Offset 0
                               MemberDecorate 13(N3) 1 Offset 32
                               MemberDecorate 13(N3) 2 Offset 48
-                              MemberDecorate 14($Global) 0 Offset 0
                               Decorate 14($Global) Block
-                              Decorate 16 DescriptorSet 0
+                              MemberDecorate 14($Global) 0 Offset 0
                               Decorate 16 Binding 0
+                              Decorate 16 DescriptorSet 0
                               Decorate 26(@entryPointOutput) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.w-recip.frag.out b/Test/baseResults/hlsl.w-recip.frag.out
index a4fc494..dc9bb11 100644
--- a/Test/baseResults/hlsl.w-recip.frag.out
+++ b/Test/baseResults/hlsl.w-recip.frag.out
@@ -183,11 +183,11 @@
                               Name 53  "vpos"
                               Name 65  "@entryPointOutput"
                               Name 66  "param"
+                              Decorate 36($Global) Block
                               MemberDecorate 36($Global) 0 Offset 0
                               MemberDecorate 36($Global) 1 Offset 16
-                              Decorate 36($Global) Block
-                              Decorate 38 DescriptorSet 0
                               Decorate 38 Binding 0
+                              Decorate 38 DescriptorSet 0
                               Decorate 53(vpos) BuiltIn FragCoord
                               Decorate 65(@entryPointOutput) Location 0
                2:             TypeVoid
diff --git a/Test/baseResults/hlsl.w-recip2.frag.out b/Test/baseResults/hlsl.w-recip2.frag.out
index 2157ce4..03312b8 100644
--- a/Test/baseResults/hlsl.w-recip2.frag.out
+++ b/Test/baseResults/hlsl.w-recip2.frag.out
@@ -207,11 +207,11 @@
                               Name 66  "VSOut.TexCoord"
                               Name 71  "@entryPointOutput"
                               Name 72  "param"
+                              Decorate 28($Global) Block
                               MemberDecorate 28($Global) 0 Offset 0
                               MemberDecorate 28($Global) 1 Offset 16
-                              Decorate 28($Global) Block
-                              Decorate 30 DescriptorSet 0
                               Decorate 30 Binding 0
+                              Decorate 30 DescriptorSet 0
                               Decorate 44(VSOut.PositionPS) BuiltIn FragCoord
                               Decorate 56(VSOut.PosInLightViewSpace) Location 0
                               Decorate 61(VSOut.NormalWS) Location 1
diff --git a/Test/baseResults/hlsl.wavebroadcast.comp.out b/Test/baseResults/hlsl.wavebroadcast.comp.out
index ed35cba..667986c 100644
--- a/Test/baseResults/hlsl.wavebroadcast.comp.out
+++ b/Test/baseResults/hlsl.wavebroadcast.comp.out
@@ -2330,10 +2330,10 @@
                               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) Block
-                              Decorate 24(data) DescriptorSet 0
+                              MemberDecorate 22(data) 0 Offset 0
                               Decorate 24(data) Binding 0
+                              Decorate 24(data) DescriptorSet 0
                               Decorate 388(dti) BuiltIn GlobalInvocationId
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.waveprefix.comp.out b/Test/baseResults/hlsl.waveprefix.comp.out
index ecc1b3e..e9ac135 100644
--- a/Test/baseResults/hlsl.waveprefix.comp.out
+++ b/Test/baseResults/hlsl.waveprefix.comp.out
@@ -2354,10 +2354,10 @@
                               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) Block
-                              Decorate 24(data) DescriptorSet 0
+                              MemberDecorate 22(data) 0 Offset 0
                               Decorate 24(data) Binding 0
+                              Decorate 24(data) DescriptorSet 0
                               Decorate 398(dti) BuiltIn GlobalInvocationId
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.wavequad.comp.out b/Test/baseResults/hlsl.wavequad.comp.out
index 7deb7c7..338b4dc 100644
--- a/Test/baseResults/hlsl.wavequad.comp.out
+++ b/Test/baseResults/hlsl.wavequad.comp.out
@@ -8057,10 +8057,10 @@
                               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) Block
-                              Decorate 24(data) DescriptorSet 0
+                              MemberDecorate 22(data) 0 Offset 0
                               Decorate 24(data) Binding 0
+                              Decorate 24(data) DescriptorSet 0
                               Decorate 1227(dti) BuiltIn GlobalInvocationId
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.wavequery.comp.out b/Test/baseResults/hlsl.wavequery.comp.out
index 8e08b09..015890a 100644
--- a/Test/baseResults/hlsl.wavequery.comp.out
+++ b/Test/baseResults/hlsl.wavequery.comp.out
@@ -78,10 +78,10 @@
                               Name 16  "@gl_SubgroupInvocationID"
                               Name 21  "@gl_SubgroupSize"
                               Decorate 9 ArrayStride 4
-                              MemberDecorate 10(data) 0 Offset 0
                               Decorate 10(data) Block
-                              Decorate 12(data) DescriptorSet 0
+                              MemberDecorate 10(data) 0 Offset 0
                               Decorate 12(data) Binding 0
+                              Decorate 12(data) DescriptorSet 0
                               Decorate 16(@gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
                               Decorate 21(@gl_SubgroupSize) BuiltIn SubgroupSize
                2:             TypeVoid
diff --git a/Test/baseResults/hlsl.wavereduction.comp.out b/Test/baseResults/hlsl.wavereduction.comp.out
index 9a636f5..81b2435 100644
--- a/Test/baseResults/hlsl.wavereduction.comp.out
+++ b/Test/baseResults/hlsl.wavereduction.comp.out
@@ -6218,10 +6218,10 @@
                               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) Block
-                              Decorate 24(data) DescriptorSet 0
+                              MemberDecorate 22(data) 0 Offset 0
                               Decorate 24(data) Binding 0
+                              Decorate 24(data) DescriptorSet 0
                               Decorate 986(dti) BuiltIn GlobalInvocationId
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.wavevote.comp.out b/Test/baseResults/hlsl.wavevote.comp.out
index 382f504..85f661c 100644
--- a/Test/baseResults/hlsl.wavevote.comp.out
+++ b/Test/baseResults/hlsl.wavevote.comp.out
@@ -17,7 +17,7 @@
 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          Convert uint to uint64_t ( 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)
@@ -38,7 +38,7 @@
 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          Convert uint to uint64_t ( 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)
@@ -59,7 +59,7 @@
 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          Convert uint to uint64_t ( 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)
@@ -80,7 +80,7 @@
 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          Convert uint to uint64_t ( 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)
@@ -121,7 +121,7 @@
 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          Convert uint to uint64_t ( 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)
@@ -142,7 +142,7 @@
 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          Convert uint to uint64_t ( 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)
@@ -163,7 +163,7 @@
 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          Convert uint to uint64_t ( 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)
@@ -184,7 +184,7 @@
 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          Convert uint to uint64_t ( 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)
@@ -227,10 +227,10 @@
                               Name 70  "dti"
                               Name 72  "param"
                               Decorate 14 ArrayStride 8
-                              MemberDecorate 15(data) 0 Offset 0
                               Decorate 15(data) Block
-                              Decorate 17(data) DescriptorSet 0
+                              MemberDecorate 15(data) 0 Offset 0
                               Decorate 17(data) Binding 0
+                              Decorate 17(data) DescriptorSet 0
                               Decorate 70(dti) BuiltIn GlobalInvocationId
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.y-negate-1.vert.out b/Test/baseResults/hlsl.y-negate-1.vert.out
index e000752..43a49b6 100644
--- a/Test/baseResults/hlsl.y-negate-1.vert.out
+++ b/Test/baseResults/hlsl.y-negate-1.vert.out
@@ -87,10 +87,10 @@
                               Name 13  ""
                               Name 22  "@position"
                               Name 32  "@entryPointOutput"
-                              MemberDecorate 11($Global) 0 Offset 0
                               Decorate 11($Global) Block
-                              Decorate 13 DescriptorSet 0
+                              MemberDecorate 11($Global) 0 Offset 0
                               Decorate 13 Binding 0
+                              Decorate 13 DescriptorSet 0
                               Decorate 32(@entryPointOutput) BuiltIn Position
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.y-negate-2.vert.out b/Test/baseResults/hlsl.y-negate-2.vert.out
index 57a47ab..98d71b9 100644
--- a/Test/baseResults/hlsl.y-negate-2.vert.out
+++ b/Test/baseResults/hlsl.y-negate-2.vert.out
@@ -98,10 +98,10 @@
                               Name 22  "param"
                               Name 25  "@position"
                               Name 35  "position"
-                              MemberDecorate 13($Global) 0 Offset 0
                               Decorate 13($Global) Block
-                              Decorate 15 DescriptorSet 0
+                              MemberDecorate 13($Global) 0 Offset 0
                               Decorate 15 Binding 0
+                              Decorate 15 DescriptorSet 0
                               Decorate 35(position) BuiltIn Position
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/hlsl.y-negate-3.vert.out b/Test/baseResults/hlsl.y-negate-3.vert.out
index 3e58951..770e37f 100644
--- a/Test/baseResults/hlsl.y-negate-3.vert.out
+++ b/Test/baseResults/hlsl.y-negate-3.vert.out
@@ -147,10 +147,10 @@
                               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
+                              MemberDecorate 16($Global) 0 Offset 0
                               Decorate 18 Binding 0
+                              Decorate 18 DescriptorSet 0
                               Decorate 44(@entryPointOutput.pos) BuiltIn Position
                               Decorate 47(@entryPointOutput.somethingelse) Location 0
                2:             TypeVoid
diff --git a/Test/baseResults/index_outside_sample_mask_range.frag.out b/Test/baseResults/index_outside_sample_mask_range.frag.out
new file mode 100644
index 0000000..fb0dca2
--- /dev/null
+++ b/Test/baseResults/index_outside_sample_mask_range.frag.out
@@ -0,0 +1,55 @@
+index_outside_sample_mask_range.frag
+ERROR: 0:6: '[' : gl_SampleMask array index out of range '1'
+ERROR: 1 compilation errors.  No code generated.
+
+
+Shader version: 320
+ERROR: node is still EOpNull!
+0:3  Function Definition: main( ( global void)
+0:3    Function Parameters: 
+0:?     Sequence
+0:6      Sequence
+0:6        move second child to first child ( temp highp int)
+0:6          'invalidValue' ( temp highp int)
+0:6          direct index ( temp highp int SampleMaskIn)
+0:6            'gl_SampleMask' ( out unsized 2-element array of highp int SampleMaskIn)
+0:6            Constant:
+0:6              1 (const int)
+0:7      move second child to first child ( temp mediump 4-component vector of float)
+0:7        'fs_color' (layout( location=0) out mediump 4-component vector of float)
+0:7        Constant:
+0:7          1.000000
+0:7          0.000000
+0:7          0.000000
+0:7          1.000000
+0:?   Linker Objects
+0:?     'fs_color' (layout( location=0) out mediump 4-component vector of float)
+0:?     'gl_SampleMask' ( out unsized 2-element array of highp int SampleMaskIn)
+
+
+Linked fragment stage:
+
+
+Shader version: 320
+ERROR: node is still EOpNull!
+0:3  Function Definition: main( ( global void)
+0:3    Function Parameters: 
+0:?     Sequence
+0:6      Sequence
+0:6        move second child to first child ( temp highp int)
+0:6          'invalidValue' ( temp highp int)
+0:6          direct index ( temp highp int SampleMaskIn)
+0:6            'gl_SampleMask' ( out 2-element array of highp int SampleMaskIn)
+0:6            Constant:
+0:6              1 (const int)
+0:7      move second child to first child ( temp mediump 4-component vector of float)
+0:7        'fs_color' (layout( location=0) out mediump 4-component vector of float)
+0:7        Constant:
+0:7          1.000000
+0:7          0.000000
+0:7          0.000000
+0:7          1.000000
+0:?   Linker Objects
+0:?     'fs_color' (layout( location=0) out mediump 4-component vector of float)
+0:?     'gl_SampleMask' ( out 2-element array of highp int SampleMaskIn)
+
diff --git a/Test/baseResults/iomap.blockOutVariableIn.2.vert.out b/Test/baseResults/iomap.blockOutVariableIn.2.vert.out
index 2c4ecdc..49ad83e 100644
--- a/Test/baseResults/iomap.blockOutVariableIn.2.vert.out
+++ b/Test/baseResults/iomap.blockOutVariableIn.2.vert.out
@@ -277,10 +277,10 @@
                               Name 32  "gl_InstanceID"
                               Decorate 9(Block) Block
                               Decorate 11 Location 0
+                              Decorate 26(gl_PerVertex) Block
                               MemberDecorate 26(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 26(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 26(gl_PerVertex) 2 BuiltIn ClipDistance
-                              Decorate 26(gl_PerVertex) Block
                               Decorate 31(gl_VertexID) BuiltIn VertexId
                               Decorate 32(gl_InstanceID) BuiltIn InstanceId
                2:             TypeVoid
@@ -346,10 +346,10 @@
                               Decorate 14(in_a1) Location 0
                               Decorate 22(a2) Location 1
                               Decorate 25(in_a2) Location 1
+                              Decorate 31(gl_PerVertex) Block
                               MemberDecorate 31(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 31(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 31(gl_PerVertex) 2 BuiltIn ClipDistance
-                              Decorate 31(gl_PerVertex) Block
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/iomap.blockOutVariableIn.vert.out b/Test/baseResults/iomap.blockOutVariableIn.vert.out
index a43e52f..3ccf47b 100644
--- a/Test/baseResults/iomap.blockOutVariableIn.vert.out
+++ b/Test/baseResults/iomap.blockOutVariableIn.vert.out
@@ -149,10 +149,10 @@
                               Name 32  "gl_InstanceID"
                               Decorate 9(Block) Block
                               Decorate 11 Location 0
+                              Decorate 26(gl_PerVertex) Block
                               MemberDecorate 26(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 26(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 26(gl_PerVertex) 2 BuiltIn ClipDistance
-                              Decorate 26(gl_PerVertex) Block
                               Decorate 31(gl_VertexID) BuiltIn VertexId
                               Decorate 32(gl_InstanceID) BuiltIn InstanceId
                2:             TypeVoid
diff --git a/Test/baseResults/iomap.crossStage.2.vert.out b/Test/baseResults/iomap.crossStage.2.vert.out
index 171cc0e..cf14f53 100644
--- a/Test/baseResults/iomap.crossStage.2.vert.out
+++ b/Test/baseResults/iomap.crossStage.2.vert.out
@@ -207,8 +207,8 @@
 
 Linked fragment stage:
 
-WARNING: Linking unknown stage and fragment stages: Matched shader interfaces are using different instance names.
-    unknown stage stage: Block: crossStageBlock2 Instance: blockName1: ""
+WARNING: Linking fragment stage: Matched shader interfaces are using different instance names.
+    vertex stage: Block: crossStageBlock2 Instance: blockName1: ""
     fragment stage: Block: crossStageBlock2 Instance: blockName2: ""
 
 Shader version: 460
@@ -452,22 +452,22 @@
                               Decorate 36(um2) Location 4
                               Decorate 36(um2) DescriptorSet 0
                               Decorate 40(glass) Location 0
-                              Decorate 40(glass) DescriptorSet 0
                               Decorate 40(glass) Binding 0
+                              Decorate 40(glass) DescriptorSet 0
+                              Decorate 41(crossStageBlock1) Block
                               MemberDecorate 41(crossStageBlock1) 0 Offset 0
                               MemberDecorate 41(crossStageBlock1) 1 Offset 16
-                              Decorate 41(crossStageBlock1) Block
-                              Decorate 43 DescriptorSet 0
                               Decorate 43 Binding 0
-                              MemberDecorate 44(vertOnlyBlock) 0 Offset 0
+                              Decorate 43 DescriptorSet 0
                               Decorate 44(vertOnlyBlock) BufferBlock
-                              Decorate 46 DescriptorSet 0
+                              MemberDecorate 44(vertOnlyBlock) 0 Offset 0
                               Decorate 46 Binding 0
+                              Decorate 46 DescriptorSet 0
+                              Decorate 47(crossStageBlock2) Block
                               MemberDecorate 47(crossStageBlock2) 0 Offset 0
                               MemberDecorate 47(crossStageBlock2) 1 Offset 16
-                              Decorate 47(crossStageBlock2) Block
-                              Decorate 52(blockName1) DescriptorSet 0
                               Decorate 52(blockName1) Binding 0
+                              Decorate 52(blockName1) DescriptorSet 0
                               Decorate 54(gl_VertexID) BuiltIn VertexId
                               Decorate 55(gl_InstanceID) BuiltIn InstanceId
                2:             TypeVoid
@@ -575,11 +575,11 @@
                               Decorate 57(u2) DescriptorSet 0
                               Decorate 59(u3) Location 3
                               Decorate 59(u3) DescriptorSet 0
+                              Decorate 60(crossStageBlock2) Block
                               MemberDecorate 60(crossStageBlock2) 0 Offset 0
                               MemberDecorate 60(crossStageBlock2) 1 Offset 16
-                              Decorate 60(crossStageBlock2) Block
-                              Decorate 64(blockName1) DescriptorSet 0
                               Decorate 64(blockName1) Binding 0
+                              Decorate 64(blockName1) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
@@ -706,22 +706,22 @@
                               Decorate 45(um2) Location 4
                               Decorate 45(um2) DescriptorSet 0
                               Decorate 49(glass) Location 0
-                              Decorate 49(glass) DescriptorSet 0
                               Decorate 49(glass) Binding 0
+                              Decorate 49(glass) DescriptorSet 0
+                              Decorate 50(crossStageBlock1) Block
                               MemberDecorate 50(crossStageBlock1) 0 Offset 0
                               MemberDecorate 50(crossStageBlock1) 1 Offset 16
-                              Decorate 50(crossStageBlock1) Block
-                              Decorate 52 DescriptorSet 0
                               Decorate 52 Binding 0
-                              MemberDecorate 53(fragOnlyBlock) 0 Offset 0
+                              Decorate 52 DescriptorSet 0
                               Decorate 53(fragOnlyBlock) BufferBlock
-                              Decorate 55 DescriptorSet 0
+                              MemberDecorate 53(fragOnlyBlock) 0 Offset 0
                               Decorate 55 Binding 0
+                              Decorate 55 DescriptorSet 0
+                              Decorate 56(crossStageBlock2) Block
                               MemberDecorate 56(crossStageBlock2) 0 Offset 0
                               MemberDecorate 56(crossStageBlock2) 1 Offset 16
-                              Decorate 56(crossStageBlock2) Block
-                              Decorate 61(blockName2) DescriptorSet 0
                               Decorate 61(blockName2) Binding 0
+                              Decorate 61(blockName2) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/iomap.crossStage.vert.out b/Test/baseResults/iomap.crossStage.vert.out
index d6b6e4f..6b93e78 100644
--- a/Test/baseResults/iomap.crossStage.vert.out
+++ b/Test/baseResults/iomap.crossStage.vert.out
@@ -133,8 +133,8 @@
 
 Linked fragment stage:
 
-WARNING: Linking unknown stage and fragment stages: Matched shader interfaces are using different instance names.
-    unknown stage stage: Block: crossStageBlock2 Instance: blockName1: ""
+WARNING: Linking fragment stage: Matched shader interfaces are using different instance names.
+    vertex stage: Block: crossStageBlock2 Instance: blockName1: ""
     fragment stage: Block: crossStageBlock2 Instance: blockName2: ""
 
 Shader version: 460
@@ -309,22 +309,22 @@
                               Decorate 36(um2) Location 4
                               Decorate 36(um2) DescriptorSet 0
                               Decorate 40(glass) Location 0
-                              Decorate 40(glass) DescriptorSet 0
                               Decorate 40(glass) Binding 0
+                              Decorate 40(glass) DescriptorSet 0
+                              Decorate 41(crossStageBlock1) Block
                               MemberDecorate 41(crossStageBlock1) 0 Offset 0
                               MemberDecorate 41(crossStageBlock1) 1 Offset 16
-                              Decorate 41(crossStageBlock1) Block
-                              Decorate 43 DescriptorSet 0
                               Decorate 43 Binding 0
-                              MemberDecorate 44(vertOnlyBlock) 0 Offset 0
+                              Decorate 43 DescriptorSet 0
                               Decorate 44(vertOnlyBlock) BufferBlock
-                              Decorate 46 DescriptorSet 0
+                              MemberDecorate 44(vertOnlyBlock) 0 Offset 0
                               Decorate 46 Binding 0
+                              Decorate 46 DescriptorSet 0
+                              Decorate 47(crossStageBlock2) Block
                               MemberDecorate 47(crossStageBlock2) 0 Offset 0
                               MemberDecorate 47(crossStageBlock2) 1 Offset 16
-                              Decorate 47(crossStageBlock2) Block
-                              Decorate 52(blockName1) DescriptorSet 0
                               Decorate 52(blockName1) Binding 0
+                              Decorate 52(blockName1) DescriptorSet 0
                               Decorate 54(gl_VertexID) BuiltIn VertexId
                               Decorate 55(gl_InstanceID) BuiltIn InstanceId
                2:             TypeVoid
@@ -434,22 +434,22 @@
                               Decorate 45(um2) Location 4
                               Decorate 45(um2) DescriptorSet 0
                               Decorate 49(glass) Location 0
-                              Decorate 49(glass) DescriptorSet 0
                               Decorate 49(glass) Binding 0
+                              Decorate 49(glass) DescriptorSet 0
+                              Decorate 50(crossStageBlock1) Block
                               MemberDecorate 50(crossStageBlock1) 0 Offset 0
                               MemberDecorate 50(crossStageBlock1) 1 Offset 16
-                              Decorate 50(crossStageBlock1) Block
-                              Decorate 52 DescriptorSet 0
                               Decorate 52 Binding 0
-                              MemberDecorate 53(fragOnlyBlock) 0 Offset 0
+                              Decorate 52 DescriptorSet 0
                               Decorate 53(fragOnlyBlock) BufferBlock
-                              Decorate 55 DescriptorSet 0
+                              MemberDecorate 53(fragOnlyBlock) 0 Offset 0
                               Decorate 55 Binding 0
+                              Decorate 55 DescriptorSet 0
+                              Decorate 56(crossStageBlock2) Block
                               MemberDecorate 56(crossStageBlock2) 0 Offset 0
                               MemberDecorate 56(crossStageBlock2) 1 Offset 16
-                              Decorate 56(crossStageBlock2) Block
-                              Decorate 61(blockName2) DescriptorSet 0
                               Decorate 61(blockName2) Binding 0
+                              Decorate 61(blockName2) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/iomap.crossStage.vk.2.vert.out b/Test/baseResults/iomap.crossStage.vk.2.vert.out
new file mode 100644
index 0000000..2334df5
--- /dev/null
+++ b/Test/baseResults/iomap.crossStage.vk.2.vert.out
@@ -0,0 +1,313 @@
+iomap.crossStage.vk.2.vert
+Shader version: 460
+0:? Sequence
+0:8  Function Definition: main( ( global void)
+0:8    Function Parameters: 
+0:10    Sequence
+0:10      move second child to first child ( temp highp 4-component vector of float)
+0:10        val: direct index for structure ( out highp 4-component vector of float)
+0:10          'anon@0' ( out block{ out highp 4-component vector of float val})
+0:10          Constant:
+0:10            0 (const uint)
+0:10        Constant:
+0:10          0.500000
+0:10          0.500000
+0:10          0.500000
+0:10          0.500000
+0:11      move second child to first child ( temp highp 4-component vector of float)
+0:11        'color' ( smooth out highp 4-component vector of float)
+0:11        Constant:
+0:11          1.000000
+0:11          1.000000
+0:11          1.000000
+0:11          1.000000
+0:12      move second child to first child ( temp 4-component vector of float)
+0:12        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:12          'anon@1' ( 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,  out unsized 1-element array of float CullDistance gl_CullDistance})
+0:12          Constant:
+0:12            0 (const uint)
+0:12        Constant:
+0:12          1.000000
+0:12          1.000000
+0:12          1.000000
+0:12          1.000000
+0:?   Linker Objects
+0:?     'anon@0' ( out block{ out highp 4-component vector of float val})
+0:?     'color' ( smooth out highp 4-component vector of float)
+0:?     'anon@1' ( 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,  out unsized 1-element array of float CullDistance gl_CullDistance})
+
+iomap.crossStage.vk.2.geom
+Shader version: 460
+invocations = -1
+max_vertices = 3
+input primitive = points
+output primitive = triangle_strip
+0:? Sequence
+0:23  Function Definition: main( ( global void)
+0:23    Function Parameters: 
+0:25    Sequence
+0:25      Sequence
+0:25        Sequence
+0:25          move second child to first child ( temp highp int)
+0:25            'i' ( temp highp int)
+0:25            Constant:
+0:25              0 (const int)
+0:25        Loop with condition tested first
+0:25          Loop Condition
+0:25          Compare Less Than ( temp bool)
+0:25            'i' ( temp highp int)
+0:25            Constant:
+0:25              3 (const int)
+0:25          Loop Body
+0:26          Sequence
+0:26            move second child to first child ( temp highp 4-component vector of float)
+0:26              'colorOut' (layout( stream=0) out highp 4-component vector of float)
+0:26              component-wise multiply ( temp highp 4-component vector of float)
+0:26                indirect index ( temp highp 4-component vector of float)
+0:26                  'color' ( in 1-element array of highp 4-component vector of float)
+0:26                  'i' ( temp highp int)
+0:26                val: direct index for structure ( in highp 4-component vector of float)
+0:26                  indirect index ( temp block{ in highp 4-component vector of float val})
+0:26                    'vv' ( in 1-element array of block{ in highp 4-component vector of float val})
+0:26                    'i' ( temp highp int)
+0:26                  Constant:
+0:26                    0 (const int)
+0:27            move second child to first child ( temp highp 4-component vector of float)
+0:27              vv2Val: direct index for structure (layout( stream=0) out highp 4-component vector of float)
+0:27                'anon@0' (layout( stream=0) out block{layout( stream=0) out highp 4-component vector of float vv2Val})
+0:27                Constant:
+0:27                  0 (const uint)
+0:27              Constant:
+0:27                1.000000
+0:27                1.000000
+0:27                1.000000
+0:27                1.000000
+0:28            EmitVertex ( global void)
+0:25          Loop Terminal Expression
+0:25          Post-Increment ( temp highp int)
+0:25            'i' ( temp highp int)
+0:30      EndPrimitive ( global void)
+0:?   Linker Objects
+0:?     'vgo1' ( in 1-element array of highp 4-component vector of float)
+0:?     'color' ( in 1-element array of highp 4-component vector of float)
+0:?     'colorOut' (layout( stream=0) out highp 4-component vector of float)
+0:?     'vv' ( in 1-element array of block{ in highp 4-component vector of float val})
+0:?     'anon@0' (layout( stream=0) out block{layout( stream=0) out highp 4-component vector of float vv2Val})
+
+iomap.crossStage.vk.2.frag
+Shader version: 460
+gl_FragCoord origin is upper left
+0:? Sequence
+0:19  Function Definition: main( ( global void)
+0:19    Function Parameters: 
+0:21    Sequence
+0:21      move second child to first child ( temp highp 4-component vector of float)
+0:21        'fragColor' ( out highp 4-component vector of float)
+0:21        add ( temp highp 4-component vector of float)
+0:21          'colorOut' ( smooth in highp 4-component vector of float)
+0:21          component-wise multiply ( temp highp 4-component vector of float)
+0:21            component-wise multiply ( temp highp 4-component vector of float)
+0:21              component-wise multiply ( temp highp 4-component vector of float)
+0:21                'unsetColor' ( smooth in highp 4-component vector of float)
+0:21                Construct vec4 ( temp highp 4-component vector of float)
+0:21                  vector swizzle ( temp highp 4-component vector of float)
+0:21                    val: direct index for structure ( in highp 2-component vector of float)
+0:21                      'iVert' ( in block{ in highp 2-component vector of float val})
+0:21                      Constant:
+0:21                        0 (const int)
+0:21                    Sequence
+0:21                      Constant:
+0:21                        0 (const int)
+0:21                      Constant:
+0:21                        0 (const int)
+0:21                      Constant:
+0:21                        1 (const int)
+0:21                      Constant:
+0:21                        1 (const int)
+0:21              Construct vec4 ( temp highp 4-component vector of float)
+0:21                vector swizzle ( temp highp 4-component vector of float)
+0:21                  val2: direct index for structure ( in highp 2-component vector of float)
+0:21                    'anon@0' ( in block{ in highp 2-component vector of float val2})
+0:21                    Constant:
+0:21                      0 (const uint)
+0:21                  Sequence
+0:21                    Constant:
+0:21                      0 (const int)
+0:21                    Constant:
+0:21                      0 (const int)
+0:21                    Constant:
+0:21                      1 (const int)
+0:21                    Constant:
+0:21                      1 (const int)
+0:22            'vv2Val' ( smooth in highp 4-component vector of float)
+0:?   Linker Objects
+0:?     'unsetColor' ( smooth in highp 4-component vector of float)
+0:?     'colorOut' ( smooth in highp 4-component vector of float)
+0:?     'fragColor' ( out highp 4-component vector of float)
+0:?     'iVert' ( in block{ in highp 2-component vector of float val})
+0:?     'anon@0' ( in block{ in highp 2-component vector of float val2})
+0:?     'vv2Val' ( smooth in highp 4-component vector of float)
+
+
+Linked vertex stage:
+
+
+Linked geometry stage:
+
+
+Linked fragment stage:
+
+ERROR: Linking vertex and geometry stages: Input 'vgo1' in geometry shader has no corresponding output in vertex shader.
+ERROR: Linking geometry and fragment stages: Input 'unsetColor' in fragment shader has no corresponding output in geometry shader.
+ERROR: Linking geometry and fragment stages: Input 'Vertex' in fragment shader has no corresponding output in geometry shader.
+ERROR: Linking geometry and fragment stages: Input 'Vertex2' in fragment shader has no corresponding output in geometry shader.
+ERROR: Linking geometry and fragment stages: Input 'vv2Val' in fragment shader has no corresponding output in geometry shader.
+
+Shader version: 460
+0:? Sequence
+0:8  Function Definition: main( ( global void)
+0:8    Function Parameters: 
+0:10    Sequence
+0:10      move second child to first child ( temp highp 4-component vector of float)
+0:10        val: direct index for structure ( out highp 4-component vector of float)
+0:10          'anon@0' ( out block{ out highp 4-component vector of float val})
+0:10          Constant:
+0:10            0 (const uint)
+0:10        Constant:
+0:10          0.500000
+0:10          0.500000
+0:10          0.500000
+0:10          0.500000
+0:11      move second child to first child ( temp highp 4-component vector of float)
+0:11        'color' ( smooth out highp 4-component vector of float)
+0:11        Constant:
+0:11          1.000000
+0:11          1.000000
+0:11          1.000000
+0:11          1.000000
+0:12      move second child to first child ( temp 4-component vector of float)
+0:12        gl_Position: direct index for structure ( gl_Position 4-component vector of float Position)
+0:12          'anon@1' ( out block{ 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,  out 1-element array of float CullDistance gl_CullDistance})
+0:12          Constant:
+0:12            0 (const uint)
+0:12        Constant:
+0:12          1.000000
+0:12          1.000000
+0:12          1.000000
+0:12          1.000000
+0:?   Linker Objects
+0:?     'anon@0' ( out block{ out highp 4-component vector of float val})
+0:?     'color' ( smooth out highp 4-component vector of float)
+0:?     'anon@1' ( out block{ 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,  out 1-element array of float CullDistance gl_CullDistance})
+Shader version: 460
+invocations = 1
+max_vertices = 3
+input primitive = points
+output primitive = triangle_strip
+0:? Sequence
+0:23  Function Definition: main( ( global void)
+0:23    Function Parameters: 
+0:25    Sequence
+0:25      Sequence
+0:25        Sequence
+0:25          move second child to first child ( temp highp int)
+0:25            'i' ( temp highp int)
+0:25            Constant:
+0:25              0 (const int)
+0:25        Loop with condition tested first
+0:25          Loop Condition
+0:25          Compare Less Than ( temp bool)
+0:25            'i' ( temp highp int)
+0:25            Constant:
+0:25              3 (const int)
+0:25          Loop Body
+0:26          Sequence
+0:26            move second child to first child ( temp highp 4-component vector of float)
+0:26              'colorOut' (layout( stream=0) out highp 4-component vector of float)
+0:26              component-wise multiply ( temp highp 4-component vector of float)
+0:26                indirect index ( temp highp 4-component vector of float)
+0:26                  'color' ( in 1-element array of highp 4-component vector of float)
+0:26                  'i' ( temp highp int)
+0:26                val: direct index for structure ( in highp 4-component vector of float)
+0:26                  indirect index ( temp block{ in highp 4-component vector of float val})
+0:26                    'vv' ( in 1-element array of block{ in highp 4-component vector of float val})
+0:26                    'i' ( temp highp int)
+0:26                  Constant:
+0:26                    0 (const int)
+0:27            move second child to first child ( temp highp 4-component vector of float)
+0:27              vv2Val: direct index for structure (layout( stream=0) out highp 4-component vector of float)
+0:27                'anon@0' (layout( stream=0) out block{layout( stream=0) out highp 4-component vector of float vv2Val})
+0:27                Constant:
+0:27                  0 (const uint)
+0:27              Constant:
+0:27                1.000000
+0:27                1.000000
+0:27                1.000000
+0:27                1.000000
+0:28            EmitVertex ( global void)
+0:25          Loop Terminal Expression
+0:25          Post-Increment ( temp highp int)
+0:25            'i' ( temp highp int)
+0:30      EndPrimitive ( global void)
+0:?   Linker Objects
+0:?     'vgo1' ( in 1-element array of highp 4-component vector of float)
+0:?     'color' ( in 1-element array of highp 4-component vector of float)
+0:?     'colorOut' (layout( stream=0) out highp 4-component vector of float)
+0:?     'vv' ( in 1-element array of block{ in highp 4-component vector of float val})
+0:?     'anon@0' (layout( stream=0) out block{layout( stream=0) out highp 4-component vector of float vv2Val})
+Shader version: 460
+gl_FragCoord origin is upper left
+0:? Sequence
+0:19  Function Definition: main( ( global void)
+0:19    Function Parameters: 
+0:21    Sequence
+0:21      move second child to first child ( temp highp 4-component vector of float)
+0:21        'fragColor' ( out highp 4-component vector of float)
+0:21        add ( temp highp 4-component vector of float)
+0:21          'colorOut' ( smooth in highp 4-component vector of float)
+0:21          component-wise multiply ( temp highp 4-component vector of float)
+0:21            component-wise multiply ( temp highp 4-component vector of float)
+0:21              component-wise multiply ( temp highp 4-component vector of float)
+0:21                'unsetColor' ( smooth in highp 4-component vector of float)
+0:21                Construct vec4 ( temp highp 4-component vector of float)
+0:21                  vector swizzle ( temp highp 4-component vector of float)
+0:21                    val: direct index for structure ( in highp 2-component vector of float)
+0:21                      'iVert' ( in block{ in highp 2-component vector of float val})
+0:21                      Constant:
+0:21                        0 (const int)
+0:21                    Sequence
+0:21                      Constant:
+0:21                        0 (const int)
+0:21                      Constant:
+0:21                        0 (const int)
+0:21                      Constant:
+0:21                        1 (const int)
+0:21                      Constant:
+0:21                        1 (const int)
+0:21              Construct vec4 ( temp highp 4-component vector of float)
+0:21                vector swizzle ( temp highp 4-component vector of float)
+0:21                  val2: direct index for structure ( in highp 2-component vector of float)
+0:21                    'anon@0' ( in block{ in highp 2-component vector of float val2})
+0:21                    Constant:
+0:21                      0 (const uint)
+0:21                  Sequence
+0:21                    Constant:
+0:21                      0 (const int)
+0:21                    Constant:
+0:21                      0 (const int)
+0:21                    Constant:
+0:21                      1 (const int)
+0:21                    Constant:
+0:21                      1 (const int)
+0:22            'vv2Val' ( smooth in highp 4-component vector of float)
+0:?   Linker Objects
+0:?     'unsetColor' ( smooth in highp 4-component vector of float)
+0:?     'colorOut' ( smooth in highp 4-component vector of float)
+0:?     'fragColor' ( out highp 4-component vector of float)
+0:?     'iVert' ( in block{ in highp 2-component vector of float val})
+0:?     'anon@0' ( in block{ in highp 2-component vector of float val2})
+0:?     'vv2Val' ( smooth in highp 4-component vector of float)
+Mismatched cross-stage IO
+
+Validation failed
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/iomap.crossStage.vk.vert.out b/Test/baseResults/iomap.crossStage.vk.vert.out
index dd8029d..9088d83 100644
--- a/Test/baseResults/iomap.crossStage.vk.vert.out
+++ b/Test/baseResults/iomap.crossStage.vk.vert.out
@@ -194,8 +194,8 @@
 
 Linked fragment stage:
 
-WARNING: Linking unknown stage and fragment stages: Matched shader interfaces are using different instance names.
-    unknown stage stage: Block: crossStageBlock2 Instance: blockName1: ""
+WARNING: Linking fragment stage: Matched shader interfaces are using different instance names.
+    vertex stage: Block: crossStageBlock2 Instance: blockName1: ""
     fragment stage: Block: crossStageBlock2 Instance: blockName2: ""
 
 Shader version: 460
@@ -411,23 +411,24 @@
                               Decorate 14(vgo2) Location 1
                               Decorate 16(outBlock) Block
                               Decorate 18 Location 5
-                              Decorate 25(glass) DescriptorSet 0
                               Decorate 25(glass) Binding 0
+                              Decorate 25(glass) DescriptorSet 0
+                              Decorate 26(crossStageBlock1) Block
                               MemberDecorate 26(crossStageBlock1) 0 Offset 0
                               MemberDecorate 26(crossStageBlock1) 1 Offset 16
-                              Decorate 26(crossStageBlock1) Block
-                              Decorate 28 DescriptorSet 0
                               Decorate 28 Binding 1
+                              Decorate 28 DescriptorSet 0
+                              Decorate 29(vertOnlyBlock) BufferBlock
                               MemberDecorate 29(vertOnlyBlock) 0 NonWritable
                               MemberDecorate 29(vertOnlyBlock) 0 Offset 0
-                              Decorate 29(vertOnlyBlock) BufferBlock
-                              Decorate 31 DescriptorSet 0
+                              Decorate 31 NonWritable
                               Decorate 31 Binding 0
+                              Decorate 31 DescriptorSet 0
+                              Decorate 32(crossStageBlock2) Block
                               MemberDecorate 32(crossStageBlock2) 0 Offset 0
                               MemberDecorate 32(crossStageBlock2) 1 Offset 16
-                              Decorate 32(crossStageBlock2) Block
-                              Decorate 37(blockName1) DescriptorSet 0
                               Decorate 37(blockName1) Binding 3
+                              Decorate 37(blockName1) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -506,11 +507,11 @@
                               Decorate 37(inBlock) Location 5
                               Decorate 48(vgo1) Location 0
                               Decorate 51(vgo2) Location 1
+                              Decorate 52(crossStageBlock2) Block
                               MemberDecorate 52(crossStageBlock2) 0 Offset 0
                               MemberDecorate 52(crossStageBlock2) 1 Offset 16
-                              Decorate 52(crossStageBlock2) Block
-                              Decorate 56(blockName1) DescriptorSet 0
                               Decorate 56(blockName1) Binding 3
+                              Decorate 56(blockName1) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
@@ -613,28 +614,29 @@
                               Name 74  ""
                               Name 76  "gfo2"
                               Name 80  "glass"
+                              Decorate 15(fragOnlyBlock) BufferBlock
                               MemberDecorate 15(fragOnlyBlock) 0 NonWritable
                               MemberDecorate 15(fragOnlyBlock) 0 Offset 0
-                              Decorate 15(fragOnlyBlock) BufferBlock
-                              Decorate 17 DescriptorSet 0
+                              Decorate 17 NonWritable
                               Decorate 17 Binding 2
+                              Decorate 17 DescriptorSet 0
+                              Decorate 23(crossStageBlock2) Block
                               MemberDecorate 23(crossStageBlock2) 0 Offset 0
                               MemberDecorate 23(crossStageBlock2) 1 Offset 16
-                              Decorate 23(crossStageBlock2) Block
-                              Decorate 28(blockName2) DescriptorSet 0
                               Decorate 28(blockName2) Binding 3
+                              Decorate 28(blockName2) DescriptorSet 0
+                              Decorate 38(crossStageBlock1) Block
                               MemberDecorate 38(crossStageBlock1) 0 Offset 0
                               MemberDecorate 38(crossStageBlock1) 1 Offset 16
-                              Decorate 38(crossStageBlock1) Block
-                              Decorate 40 DescriptorSet 0
                               Decorate 40 Binding 1
+                              Decorate 40 DescriptorSet 0
                               Decorate 64(gfo1) Location 0
                               Decorate 70(outColor) Location 0
                               Decorate 72(outBlock) Block
                               Decorate 74 Location 5
                               Decorate 76(gfo2) Location 1
-                              Decorate 80(glass) DescriptorSet 0
                               Decorate 80(glass) Binding 0
+                              Decorate 80(glass) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/iomap.mismatchedBufferTypes.vert.out b/Test/baseResults/iomap.mismatchedBufferTypes.vert.out
new file mode 100644
index 0000000..3e44e8f
--- /dev/null
+++ b/Test/baseResults/iomap.mismatchedBufferTypes.vert.out
@@ -0,0 +1,45 @@
+iomap.mismatchedBufferTypes.vert
+Shader version: 460
+0:? Sequence
+0:10  Function Definition: main( ( global void)
+0:10    Function Parameters: 
+0:?   Linker Objects
+0:?     'blockname' (layout( column_major std140) uniform block{layout( column_major std140) uniform float a, layout( column_major std140) uniform float b})
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
+iomap.mismatchedBufferTypes.frag
+Shader version: 460
+0:? Sequence
+0:10  Function Definition: main( ( global void)
+0:10    Function Parameters: 
+0:?   Linker Objects
+0:?     'blockname' (layout( column_major std140) uniform block{layout( column_major std140) uniform float a})
+
+
+Linked vertex stage:
+
+
+Linked fragment stage:
+
+ERROR: Linking fragment stage: vertex block member has no corresponding member in fragment block:
+    vertex stage: Block: crossStageBlock, Member: b
+    fragment stage: Block: crossStageBlock, Member: n/a 
+
+Shader version: 460
+0:? Sequence
+0:10  Function Definition: main( ( global void)
+0:10    Function Parameters: 
+0:?   Linker Objects
+0:?     'blockname' (layout( column_major std140) uniform block{layout( column_major std140) uniform float a, layout( column_major std140) uniform float b})
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+Shader version: 460
+0:? Sequence
+0:10  Function Definition: main( ( global void)
+0:10    Function Parameters: 
+0:?   Linker Objects
+0:?     'blockname' (layout( column_major std140) uniform block{layout( column_major std140) uniform float a})
+
+Validation failed
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/iomap.variableOutBlockIn.2.vert.out b/Test/baseResults/iomap.variableOutBlockIn.2.vert.out
index 3e6d30b..e638bef 100644
--- a/Test/baseResults/iomap.variableOutBlockIn.2.vert.out
+++ b/Test/baseResults/iomap.variableOutBlockIn.2.vert.out
@@ -169,10 +169,10 @@
                               Name 28  "gl_InstanceID"
                               Decorate 9(a1) Location 0
                               Decorate 14(a2) Location 1
+                              Decorate 20(gl_PerVertex) Block
                               MemberDecorate 20(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 20(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 20(gl_PerVertex) 2 BuiltIn ClipDistance
-                              Decorate 20(gl_PerVertex) Block
                               Decorate 27(gl_VertexID) BuiltIn VertexId
                               Decorate 28(gl_InstanceID) BuiltIn InstanceId
                2:             TypeVoid
@@ -234,10 +234,10 @@
                               Name 30  "gin"
                               Decorate 9(a1) Location 0
                               Decorate 14(a2) Location 1
+                              Decorate 20(gl_PerVertex) Block
                               MemberDecorate 20(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 20(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 20(gl_PerVertex) 2 BuiltIn ClipDistance
-                              Decorate 20(gl_PerVertex) Block
                               Decorate 26(Inputs) Block
                               Decorate 30(gin) Location 0
                2:             TypeVoid
diff --git a/Test/baseResults/iomap.variableOutBlockIn.vert.out b/Test/baseResults/iomap.variableOutBlockIn.vert.out
index 4b0ce64..d96df37 100644
--- a/Test/baseResults/iomap.variableOutBlockIn.vert.out
+++ b/Test/baseResults/iomap.variableOutBlockIn.vert.out
@@ -147,10 +147,10 @@
                               Name 28  "gl_InstanceID"
                               Decorate 9(a1) Location 0
                               Decorate 14(a2) Location 1
+                              Decorate 20(gl_PerVertex) Block
                               MemberDecorate 20(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 20(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 20(gl_PerVertex) 2 BuiltIn ClipDistance
-                              Decorate 20(gl_PerVertex) Block
                               Decorate 27(gl_VertexID) BuiltIn VertexId
                               Decorate 28(gl_InstanceID) BuiltIn InstanceId
                2:             TypeVoid
diff --git a/Test/baseResults/link.crossStageOptimization.out b/Test/baseResults/link.crossStageOptimization.out
new file mode 100644
index 0000000..1189c08
--- /dev/null
+++ b/Test/baseResults/link.crossStageOptimization.out
@@ -0,0 +1,232 @@
+link.crossStageOptimization.vert
+link.crossStageOptimization.frag
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 88
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 9 60 84
+                              Source GLSL 440
+                              Name 4  "main"
+                              Name 9  "a0"
+                              Name 10  "AccessedUniformBlock"
+                              MemberName 10(AccessedUniformBlock) 0  "a"
+                              MemberName 10(AccessedUniformBlock) 1  "b"
+                              Name 12  ""
+                              Name 21  "AccessedStorageBlock"
+                              MemberName 21(AccessedStorageBlock) 0  "e"
+                              Name 23  ""
+                              Name 32  "uSampler0"
+                              Name 41  "a1"
+                              Name 42  "NotAccessedUniformBlock"
+                              MemberName 42(NotAccessedUniformBlock) 0  "c"
+                              MemberName 42(NotAccessedUniformBlock) 1  "d"
+                              Name 44  ""
+                              Name 48  "NotAccessedStorageBlock"
+                              MemberName 48(NotAccessedStorageBlock) 0  "f"
+                              Name 50  ""
+                              Name 56  "uSampler1"
+                              Name 60  "a2"
+                              Name 70  "a3"
+                              Name 82  "gl_PerVertex"
+                              MemberName 82(gl_PerVertex) 0  "gl_Position"
+                              MemberName 82(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 82(gl_PerVertex) 2  "gl_ClipDistance"
+                              Name 84  ""
+                              Decorate 9(a0) Location 0
+                              Decorate 10(AccessedUniformBlock) Block
+                              MemberDecorate 10(AccessedUniformBlock) 0 Offset 0
+                              MemberDecorate 10(AccessedUniformBlock) 1 Offset 16
+                              Decorate 12 Binding 0
+                              Decorate 12 DescriptorSet 0
+                              Decorate 20 ArrayStride 4
+                              Decorate 21(AccessedStorageBlock) BufferBlock
+                              MemberDecorate 21(AccessedStorageBlock) 0 Offset 0
+                              Decorate 23 Binding 2
+                              Decorate 23 DescriptorSet 0
+                              Decorate 32(uSampler0) Binding 4
+                              Decorate 32(uSampler0) DescriptorSet 0
+                              Decorate 42(NotAccessedUniformBlock) Block
+                              MemberDecorate 42(NotAccessedUniformBlock) 0 Offset 0
+                              MemberDecorate 42(NotAccessedUniformBlock) 1 Offset 16
+                              Decorate 44 Binding 1
+                              Decorate 44 DescriptorSet 0
+                              Decorate 47 ArrayStride 4
+                              Decorate 48(NotAccessedStorageBlock) BufferBlock
+                              MemberDecorate 48(NotAccessedStorageBlock) 0 Offset 0
+                              Decorate 50 Binding 3
+                              Decorate 50 DescriptorSet 0
+                              Decorate 56(uSampler1) Binding 5
+                              Decorate 56(uSampler1) DescriptorSet 0
+                              Decorate 60(a2) Location 2
+                              Decorate 82(gl_PerVertex) Block
+                              MemberDecorate 82(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 82(gl_PerVertex) 1 BuiltIn PointSize
+                              MemberDecorate 82(gl_PerVertex) 2 BuiltIn ClipDistance
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Output 7(fvec4)
+           9(a0):      8(ptr) Variable Output
+10(AccessedUniformBlock):             TypeStruct 7(fvec4) 7(fvec4)
+              11:             TypePointer Uniform 10(AccessedUniformBlock)
+              12:     11(ptr) Variable Uniform
+              13:             TypeInt 32 1
+              14:     13(int) Constant 0
+              15:             TypePointer Uniform 7(fvec4)
+              18:             TypeInt 32 0
+              19:     18(int) Constant 512
+              20:             TypeArray 6(float) 19
+21(AccessedStorageBlock):             TypeStruct 20
+              22:             TypePointer Uniform 21(AccessedStorageBlock)
+              23:     22(ptr) Variable Uniform
+              24:             TypePointer Uniform 6(float)
+              29:             TypeImage 6(float) 2D sampled format:Unknown
+              30:             TypeSampledImage 29
+              31:             TypePointer UniformConstant 30
+   32(uSampler0):     31(ptr) Variable UniformConstant
+              34:             TypeVector 6(float) 2
+              35:    6(float) Constant 1056964608
+              36:   34(fvec2) ConstantComposite 35 35
+              37:    6(float) Constant 0
+              40:             TypePointer Private 7(fvec4)
+          41(a1):     40(ptr) Variable Private
+42(NotAccessedUniformBlock):             TypeStruct 7(fvec4) 7(fvec4)
+              43:             TypePointer Uniform 42(NotAccessedUniformBlock)
+              44:     43(ptr) Variable Uniform
+              47:             TypeArray 6(float) 19
+48(NotAccessedStorageBlock):             TypeStruct 47
+              49:             TypePointer Uniform 48(NotAccessedStorageBlock)
+              50:     49(ptr) Variable Uniform
+              51:     13(int) Constant 1
+   56(uSampler1):     31(ptr) Variable UniformConstant
+          60(a2):      8(ptr) Variable Output
+          70(a3):     40(ptr) Variable Private
+              80:     18(int) Constant 1
+              81:             TypeArray 6(float) 80
+82(gl_PerVertex):             TypeStruct 7(fvec4) 6(float) 81
+              83:             TypePointer Output 82(gl_PerVertex)
+              84:     83(ptr) Variable Output
+              85:    6(float) Constant 1065353216
+              86:    7(fvec4) ConstantComposite 85 85 85 85
+         4(main):           2 Function None 3
+               5:             Label
+              16:     15(ptr) AccessChain 12 14
+              17:    7(fvec4) Load 16
+              25:     24(ptr) AccessChain 23 14 14
+              26:    6(float) Load 25
+              27:    7(fvec4) CompositeConstruct 26 26 26 26
+              28:    7(fvec4) FAdd 17 27
+              33:          30 Load 32(uSampler0)
+              38:    7(fvec4) ImageSampleExplicitLod 33 36 Lod 37
+              39:    7(fvec4) FAdd 28 38
+                              Store 9(a0) 39
+              45:     15(ptr) AccessChain 44 14
+              46:    7(fvec4) Load 45
+              52:     24(ptr) AccessChain 50 14 51
+              53:    6(float) Load 52
+              54:    7(fvec4) CompositeConstruct 53 53 53 53
+              55:    7(fvec4) FAdd 46 54
+              57:          30 Load 56(uSampler1)
+              58:    7(fvec4) ImageSampleExplicitLod 57 36 Lod 37
+              59:    7(fvec4) FAdd 55 58
+                              Store 41(a1) 59
+              61:     15(ptr) AccessChain 12 51
+              62:    7(fvec4) Load 61
+              63:     24(ptr) AccessChain 23 14 14
+              64:    6(float) Load 63
+              65:    7(fvec4) CompositeConstruct 64 64 64 64
+              66:    7(fvec4) FAdd 62 65
+              67:          30 Load 32(uSampler0)
+              68:    7(fvec4) ImageSampleExplicitLod 67 36 Lod 37
+              69:    7(fvec4) FAdd 66 68
+                              Store 60(a2) 69
+              71:     15(ptr) AccessChain 44 51
+              72:    7(fvec4) Load 71
+              73:     24(ptr) AccessChain 50 14 51
+              74:    6(float) Load 73
+              75:    7(fvec4) CompositeConstruct 74 74 74 74
+              76:    7(fvec4) FAdd 72 75
+              77:          30 Load 56(uSampler1)
+              78:    7(fvec4) ImageSampleExplicitLod 77 36 Lod 37
+              79:    7(fvec4) FAdd 76 78
+                              Store 70(a3) 79
+              87:      8(ptr) AccessChain 84 14
+                              Store 87 86
+                              Return
+                              FunctionEnd
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 40
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 17 21 38
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 440
+                              Name 4  "main"
+                              Name 9  "temp"
+                              Name 17  "a0"
+                              Name 21  "a2"
+                              Name 29  "a1"
+                              Name 33  "a3"
+                              Name 38  "oColor"
+                              Decorate 17(a0) Location 0
+                              Decorate 21(a2) Location 2
+                              Decorate 38(oColor) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+              10:    6(float) Constant 1065353216
+              11:    7(fvec4) ConstantComposite 10 10 10 10
+              12:             TypeBool
+              13:    12(bool) ConstantTrue
+              16:             TypePointer Input 7(fvec4)
+          17(a0):     16(ptr) Variable Input
+          21(a2):     16(ptr) Variable Input
+              25:    12(bool) ConstantFalse
+              28:             TypePointer Private 7(fvec4)
+          29(a1):     28(ptr) Variable Private
+          33(a3):     28(ptr) Variable Private
+              37:             TypePointer Output 7(fvec4)
+      38(oColor):     37(ptr) Variable Output
+         4(main):           2 Function None 3
+               5:             Label
+         9(temp):      8(ptr) Variable Function
+                              Store 9(temp) 11
+                              SelectionMerge 15 None
+                              BranchConditional 13 14 15
+              14:               Label
+              18:    7(fvec4)   Load 17(a0)
+              19:    7(fvec4)   Load 9(temp)
+              20:    7(fvec4)   FMul 19 18
+                                Store 9(temp) 20
+              22:    7(fvec4)   Load 21(a2)
+              23:    7(fvec4)   Load 9(temp)
+              24:    7(fvec4)   FMul 23 22
+                                Store 9(temp) 24
+                                Branch 15
+              15:             Label
+                              SelectionMerge 27 None
+                              BranchConditional 25 26 27
+              26:               Label
+              30:    7(fvec4)   Load 29(a1)
+              31:    7(fvec4)   Load 9(temp)
+              32:    7(fvec4)   FMul 31 30
+                                Store 9(temp) 32
+              34:    7(fvec4)   Load 33(a3)
+              35:    7(fvec4)   Load 9(temp)
+              36:    7(fvec4)   FMul 35 34
+                                Store 9(temp) 36
+                                Branch 27
+              27:             Label
+              39:    7(fvec4) Load 9(temp)
+                              Store 38(oColor) 39
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/link.vk.inconsistentGLPerVertex.0.vert.out b/Test/baseResults/link.vk.inconsistentGLPerVertex.0.vert.out
old mode 100755
new mode 100644
index d3545bf..765fccc
--- a/Test/baseResults/link.vk.inconsistentGLPerVertex.0.vert.out
+++ b/Test/baseResults/link.vk.inconsistentGLPerVertex.0.vert.out
@@ -274,11 +274,11 @@
                               Name 27  "P"
                               Decorate 8(vs_output) Block
                               Decorate 10(vs_out) Location 0
+                              Decorate 20(gl_PerVertex) Block
                               MemberDecorate 20(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 20(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 20(gl_PerVertex) 2 BuiltIn ClipDistance
                               MemberDecorate 20(gl_PerVertex) 3 BuiltIn CullDistance
-                              Decorate 20(gl_PerVertex) Block
                               Decorate 27(P) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/link.vk.matchingPC.0.0.frag.out b/Test/baseResults/link.vk.matchingPC.0.0.frag.out
index 87d3b02..d2101fd 100644
--- a/Test/baseResults/link.vk.matchingPC.0.0.frag.out
+++ b/Test/baseResults/link.vk.matchingPC.0.0.frag.out
@@ -109,10 +109,10 @@
                               MemberName 16(PushConstantBlock) 2  "scale"
                               Name 18  "uPC"
                               Decorate 15(color) Location 0
+                              Decorate 16(PushConstantBlock) Block
                               MemberDecorate 16(PushConstantBlock) 0 Offset 0
                               MemberDecorate 16(PushConstantBlock) 1 Offset 16
                               MemberDecorate 16(PushConstantBlock) 2 Offset 32
-                              Decorate 16(PushConstantBlock) Block
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/link.vk.multiBlocksValid.0.0.vert.out b/Test/baseResults/link.vk.multiBlocksValid.0.0.vert.out
index 7f9a05a..b663876 100644
--- a/Test/baseResults/link.vk.multiBlocksValid.0.0.vert.out
+++ b/Test/baseResults/link.vk.multiBlocksValid.0.0.vert.out
@@ -216,39 +216,39 @@
                               MemberName 70(BufferBlock) 0  "p"
                               Name 72  "uBuf"
                               Decorate 14(oColor) Location 2
+                              Decorate 16(ColorBlock) Block
                               MemberDecorate 16(ColorBlock) 0 Offset 0
                               MemberDecorate 16(ColorBlock) 1 Offset 16
                               MemberDecorate 16(ColorBlock) 2 Offset 32
                               MemberDecorate 16(ColorBlock) 3 Offset 48
-                              Decorate 16(ColorBlock) Block
-                              Decorate 18(uC) DescriptorSet 0
                               Decorate 18(uC) Binding 1
-                              MemberDecorate 26(SecondaryColorBlock) 0 Offset 0
+                              Decorate 18(uC) DescriptorSet 0
                               Decorate 26(SecondaryColorBlock) BufferBlock
-                              Decorate 28(uColorBuf) DescriptorSet 0
+                              MemberDecorate 26(SecondaryColorBlock) 0 Offset 0
                               Decorate 28(uColorBuf) Binding 0
+                              Decorate 28(uColorBuf) DescriptorSet 0
                               Decorate 32(Vertex) Block
                               Decorate 34(oV) Location 0
+                              Decorate 40(gl_PerVertex) Block
                               MemberDecorate 40(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 40(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 40(gl_PerVertex) 2 BuiltIn ClipDistance
-                              Decorate 40(gl_PerVertex) Block
-                              MemberDecorate 44(MatrixBlock) 0 ColMajor
-                              MemberDecorate 44(MatrixBlock) 0 Offset 0
-                              MemberDecorate 44(MatrixBlock) 0 MatrixStride 16
-                              MemberDecorate 44(MatrixBlock) 1 ColMajor
-                              MemberDecorate 44(MatrixBlock) 1 Offset 64
-                              MemberDecorate 44(MatrixBlock) 1 MatrixStride 16
                               Decorate 44(MatrixBlock) Block
-                              Decorate 46(uM) DescriptorSet 0
+                              MemberDecorate 44(MatrixBlock) 0 ColMajor
+                              MemberDecorate 44(MatrixBlock) 0 MatrixStride 16
+                              MemberDecorate 44(MatrixBlock) 0 Offset 0
+                              MemberDecorate 44(MatrixBlock) 1 ColMajor
+                              MemberDecorate 44(MatrixBlock) 1 MatrixStride 16
+                              MemberDecorate 44(MatrixBlock) 1 Offset 64
                               Decorate 46(uM) Binding 0
+                              Decorate 46(uM) DescriptorSet 0
                               Decorate 65(P) Location 0
-                              MemberDecorate 70(BufferBlock) 0 ColMajor
-                              MemberDecorate 70(BufferBlock) 0 Offset 0
-                              MemberDecorate 70(BufferBlock) 0 MatrixStride 16
                               Decorate 70(BufferBlock) BufferBlock
-                              Decorate 72(uBuf) DescriptorSet 0
+                              MemberDecorate 70(BufferBlock) 0 ColMajor
+                              MemberDecorate 70(BufferBlock) 0 MatrixStride 16
+                              MemberDecorate 70(BufferBlock) 0 Offset 0
                               Decorate 72(uBuf) Binding 1
+                              Decorate 72(uBuf) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/link.vk.multiBlocksValid.1.0.geom.out b/Test/baseResults/link.vk.multiBlocksValid.1.0.geom.out
index 374a2a0..7c2b242 100644
--- a/Test/baseResults/link.vk.multiBlocksValid.1.0.geom.out
+++ b/Test/baseResults/link.vk.multiBlocksValid.1.0.geom.out
@@ -310,36 +310,36 @@
                               Name 97  "uBuf"
                               Name 100  "P"
                               Decorate 18(oColor) Location 1
+                              Decorate 20(ColorBlock) Block
                               MemberDecorate 20(ColorBlock) 0 Offset 0
                               MemberDecorate 20(ColorBlock) 1 Offset 16
                               MemberDecorate 20(ColorBlock) 2 Offset 32
                               MemberDecorate 20(ColorBlock) 3 Offset 48
-                              Decorate 20(ColorBlock) Block
-                              Decorate 22(uC) DescriptorSet 0
                               Decorate 22(uC) Binding 1
+                              Decorate 22(uC) DescriptorSet 0
+                              Decorate 44(gl_PerVertex) Block
                               MemberDecorate 44(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 44(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 44(gl_PerVertex) 2 BuiltIn ClipDistance
-                              Decorate 44(gl_PerVertex) Block
-                              MemberDecorate 48(MatrixBlock) 0 ColMajor
-                              MemberDecorate 48(MatrixBlock) 0 Offset 0
-                              MemberDecorate 48(MatrixBlock) 0 MatrixStride 16
-                              MemberDecorate 48(MatrixBlock) 1 ColMajor
-                              MemberDecorate 48(MatrixBlock) 1 Offset 64
-                              MemberDecorate 48(MatrixBlock) 1 MatrixStride 16
                               Decorate 48(MatrixBlock) Block
-                              Decorate 50(uM) DescriptorSet 0
+                              MemberDecorate 48(MatrixBlock) 0 ColMajor
+                              MemberDecorate 48(MatrixBlock) 0 MatrixStride 16
+                              MemberDecorate 48(MatrixBlock) 0 Offset 0
+                              MemberDecorate 48(MatrixBlock) 1 ColMajor
+                              MemberDecorate 48(MatrixBlock) 1 MatrixStride 16
+                              MemberDecorate 48(MatrixBlock) 1 Offset 64
                               Decorate 50(uM) Binding 0
+                              Decorate 50(uM) DescriptorSet 0
                               Decorate 59(Vertex) Block
                               Decorate 61(oV) Location 0
                               Decorate 64(Vertex) Block
                               Decorate 68(iV) Location 0
-                              MemberDecorate 95(BufferBlock) 0 ColMajor
-                              MemberDecorate 95(BufferBlock) 0 Offset 0
-                              MemberDecorate 95(BufferBlock) 0 MatrixStride 16
                               Decorate 95(BufferBlock) BufferBlock
-                              Decorate 97(uBuf) DescriptorSet 0
+                              MemberDecorate 95(BufferBlock) 0 ColMajor
+                              MemberDecorate 95(BufferBlock) 0 MatrixStride 16
+                              MemberDecorate 95(BufferBlock) 0 Offset 0
                               Decorate 97(uBuf) Binding 1
+                              Decorate 97(uBuf) DescriptorSet 0
                               Decorate 100(P) Location 2
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/link.vk.pcNamingValid.0.0.vert.out b/Test/baseResults/link.vk.pcNamingValid.0.0.vert.out
index 410f192..74bc3fb 100644
--- a/Test/baseResults/link.vk.pcNamingValid.0.0.vert.out
+++ b/Test/baseResults/link.vk.pcNamingValid.0.0.vert.out
@@ -135,20 +135,20 @@
                               Name 31  ""
                               Name 48  "P"
                               Decorate 14(oColor) Location 0
+                              Decorate 16(PCBlock) Block
                               MemberDecorate 16(PCBlock) 0 ColMajor
-                              MemberDecorate 16(PCBlock) 0 Offset 0
                               MemberDecorate 16(PCBlock) 0 MatrixStride 16
+                              MemberDecorate 16(PCBlock) 0 Offset 0
                               MemberDecorate 16(PCBlock) 1 ColMajor
-                              MemberDecorate 16(PCBlock) 1 Offset 64
                               MemberDecorate 16(PCBlock) 1 MatrixStride 16
+                              MemberDecorate 16(PCBlock) 1 Offset 64
                               MemberDecorate 16(PCBlock) 2 Offset 128
                               MemberDecorate 16(PCBlock) 3 Offset 144
-                              Decorate 16(PCBlock) Block
+                              Decorate 29(gl_PerVertex) Block
                               MemberDecorate 29(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 29(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 29(gl_PerVertex) 2 BuiltIn ClipDistance
                               MemberDecorate 29(gl_PerVertex) 3 BuiltIn CullDistance
-                              Decorate 29(gl_PerVertex) Block
                               Decorate 48(P) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/link1.vk.frag.out b/Test/baseResults/link1.vk.frag.out
index 225aee1..a758f20 100644
--- a/Test/baseResults/link1.vk.frag.out
+++ b/Test/baseResults/link1.vk.frag.out
@@ -222,18 +222,18 @@
                               MemberName 67(bnameImplicit) 0  "m"
                               Name 69  ""
                               Decorate 12(color) Location 0
-                              Decorate 53(s2D) DescriptorSet 0
                               Decorate 53(s2D) Binding 1
+                              Decorate 53(s2D) DescriptorSet 0
                               Decorate 61 ArrayStride 4
-                              MemberDecorate 62(bnameRuntime) 0 Offset 0
                               Decorate 62(bnameRuntime) BufferBlock
-                              Decorate 64 DescriptorSet 0
+                              MemberDecorate 62(bnameRuntime) 0 Offset 0
                               Decorate 64 Binding 0
+                              Decorate 64 DescriptorSet 0
                               Decorate 66 ArrayStride 4
-                              MemberDecorate 67(bnameImplicit) 0 Offset 0
                               Decorate 67(bnameImplicit) BufferBlock
-                              Decorate 69 DescriptorSet 0
+                              MemberDecorate 67(bnameImplicit) 0 Offset 0
                               Decorate 69 Binding 1
+                              Decorate 69 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/location_aliasing.tesc.out b/Test/baseResults/location_aliasing.tesc.out
new file mode 100644
index 0000000..54263d25
--- /dev/null
+++ b/Test/baseResults/location_aliasing.tesc.out
@@ -0,0 +1,33 @@
+location_aliasing.tesc
+ERROR: 0:7: 'location' : the aliases sharing the location 1 must be the same basic type and interpolation qualification
+ERROR: 1 compilation errors.  No code generated.
+
+
+Shader version: 430
+Requested GL_ARB_enhanced_layouts
+vertices = 1
+ERROR: node is still EOpNull!
+0:13  Function Definition: main( ( global void)
+0:13    Function Parameters: 
+0:?   Linker Objects
+0:?     'gohan' (layout( location=1 component=0) in 32-element array of double)
+0:?     'goten' (layout( location=1 component=2) in 32-element array of float)
+0:?     'vs_tcs' ( in 32-element array of 4-component vector of float)
+0:?     'tcs_tes' ( out 1-element array of 4-component vector of float)
+
+
+Linked tessellation control stage:
+
+
+Shader version: 430
+Requested GL_ARB_enhanced_layouts
+vertices = 1
+ERROR: node is still EOpNull!
+0:13  Function Definition: main( ( global void)
+0:13    Function Parameters: 
+0:?   Linker Objects
+0:?     'gohan' (layout( location=1 component=0) in 32-element array of double)
+0:?     'goten' (layout( location=1 component=2) in 32-element array of float)
+0:?     'vs_tcs' ( in 32-element array of 4-component vector of float)
+0:?     'tcs_tes' ( out 1-element array of 4-component vector of float)
+
diff --git a/Test/baseResults/location_aliasing1.frag.out b/Test/baseResults/location_aliasing1.frag.out
new file mode 100644
index 0000000..3a1e1a2
--- /dev/null
+++ b/Test/baseResults/location_aliasing1.frag.out
@@ -0,0 +1,27 @@
+location_aliasing1.frag
+ERROR: 0:6: 'location' : the aliases sharing the location 1 must be the same basic type and interpolation qualification
+ERROR: 1 compilation errors.  No code generated.
+
+
+Shader version: 430
+Requested GL_ARB_enhanced_layouts
+ERROR: node is still EOpNull!
+0:8  Function Definition: main( ( global void)
+0:8    Function Parameters: 
+0:?   Linker Objects
+0:?     'in1' (layout( location=1 component=0) smooth in float)
+0:?     'in2' (layout( location=1 component=2) flat in float)
+
+
+Linked fragment stage:
+
+
+Shader version: 430
+Requested GL_ARB_enhanced_layouts
+ERROR: node is still EOpNull!
+0:8  Function Definition: main( ( global void)
+0:8    Function Parameters: 
+0:?   Linker Objects
+0:?     'in1' (layout( location=1 component=0) smooth in float)
+0:?     'in2' (layout( location=1 component=2) flat in float)
+
diff --git a/Test/baseResults/matrixCompMult.vert.out b/Test/baseResults/matrixCompMult.vert.out
new file mode 100644
index 0000000..2434ada
--- /dev/null
+++ b/Test/baseResults/matrixCompMult.vert.out
@@ -0,0 +1,33 @@
+matrixCompMult.vert
+Shader version: 460
+0:? Sequence
+0:5  Function Definition: main( ( global void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:26      move second child to first child ( temp float)
+0:26        'o1' ( smooth out float)
+0:26        Constant:
+0:26          18.000000
+0:?   Linker Objects
+0:?     'o1' ( smooth out float)
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
+
+Linked vertex stage:
+
+
+Shader version: 460
+0:? Sequence
+0:5  Function Definition: main( ( global void)
+0:5    Function Parameters: 
+0:?     Sequence
+0:26      move second child to first child ( temp float)
+0:26        'o1' ( smooth out float)
+0:26        Constant:
+0:26          18.000000
+0:?   Linker Objects
+0:?     'o1' ( smooth out float)
+0:?     'gl_VertexID' ( gl_VertexId int VertexId)
+0:?     'gl_InstanceID' ( gl_InstanceId int InstanceId)
+
diff --git a/Test/baseResults/overflow_underflow_toinf_0.frag.out b/Test/baseResults/overflow_underflow_toinf_0.frag.out
new file mode 100644
index 0000000..621d197
--- /dev/null
+++ b/Test/baseResults/overflow_underflow_toinf_0.frag.out
@@ -0,0 +1,75 @@
+overflow_underflow_toinf_0.frag
+Shader version: 320
+0:? Sequence
+0:4  Function Definition: main( ( global void)
+0:4    Function Parameters: 
+0:9    Sequence
+0:9      Sequence
+0:9        move second child to first child ( temp highp float)
+0:9          'correct' ( temp highp float)
+0:9          Constant:
+0:9            1.000000
+0:10      Sequence
+0:10        move second child to first child ( temp highp float)
+0:10          'correct1' ( temp highp float)
+0:10          Constant:
+0:10            1.000000
+0:11      Sequence
+0:11        move second child to first child ( temp highp 4-component vector of float)
+0:11          'foo' ( temp highp 4-component vector of float)
+0:11          Constant:
+0:11            0.000000
+0:11            -0.000000
+0:11            +1.#INF
+0:11            -1.#INF
+0:12      move second child to first child ( temp highp 4-component vector of float)
+0:12        'my_FragColor' ( out highp 4-component vector of float)
+0:12        Construct vec4 ( temp highp 4-component vector of float)
+0:12          Constant:
+0:12            0.000000
+0:12          'correct' ( temp highp float)
+0:12          'correct1' ( temp highp float)
+0:12          Constant:
+0:12            1.000000
+0:?   Linker Objects
+0:?     'my_FragColor' ( out highp 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 320
+0:? Sequence
+0:4  Function Definition: main( ( global void)
+0:4    Function Parameters: 
+0:9    Sequence
+0:9      Sequence
+0:9        move second child to first child ( temp highp float)
+0:9          'correct' ( temp highp float)
+0:9          Constant:
+0:9            1.000000
+0:10      Sequence
+0:10        move second child to first child ( temp highp float)
+0:10          'correct1' ( temp highp float)
+0:10          Constant:
+0:10            1.000000
+0:11      Sequence
+0:11        move second child to first child ( temp highp 4-component vector of float)
+0:11          'foo' ( temp highp 4-component vector of float)
+0:11          Constant:
+0:11            0.000000
+0:11            -0.000000
+0:11            +1.#INF
+0:11            -1.#INF
+0:12      move second child to first child ( temp highp 4-component vector of float)
+0:12        'my_FragColor' ( out highp 4-component vector of float)
+0:12        Construct vec4 ( temp highp 4-component vector of float)
+0:12          Constant:
+0:12            0.000000
+0:12          'correct' ( temp highp float)
+0:12          'correct1' ( temp highp float)
+0:12          Constant:
+0:12            1.000000
+0:?   Linker Objects
+0:?     'my_FragColor' ( out highp 4-component vector of float)
+
diff --git a/Test/baseResults/positive_infinity.frag.out b/Test/baseResults/positive_infinity.frag.out
new file mode 100644
index 0000000..013f829
--- /dev/null
+++ b/Test/baseResults/positive_infinity.frag.out
@@ -0,0 +1,51 @@
+positive_infinity.frag
+Shader version: 300
+0:? Sequence
+0:4  Function Definition: main( ( global void)
+0:4    Function Parameters: 
+0:9    Sequence
+0:9      Sequence
+0:9        move second child to first child ( temp highp float)
+0:9          'correct' ( temp highp float)
+0:9          Constant:
+0:9            1.000000
+0:10      move second child to first child ( temp highp 4-component vector of float)
+0:10        'my_FragColor' ( out highp 4-component vector of float)
+0:10        Construct vec4 ( temp highp 4-component vector of float)
+0:10          Constant:
+0:10            0.000000
+0:10          'correct' ( temp highp float)
+0:10          Constant:
+0:10            0.000000
+0:10          Constant:
+0:10            1.000000
+0:?   Linker Objects
+0:?     'my_FragColor' ( out highp 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 300
+0:? Sequence
+0:4  Function Definition: main( ( global void)
+0:4    Function Parameters: 
+0:9    Sequence
+0:9      Sequence
+0:9        move second child to first child ( temp highp float)
+0:9          'correct' ( temp highp float)
+0:9          Constant:
+0:9            1.000000
+0:10      move second child to first child ( temp highp 4-component vector of float)
+0:10        'my_FragColor' ( out highp 4-component vector of float)
+0:10        Construct vec4 ( temp highp 4-component vector of float)
+0:10          Constant:
+0:10            0.000000
+0:10          'correct' ( temp highp float)
+0:10          Constant:
+0:10            0.000000
+0:10          Constant:
+0:10            1.000000
+0:?   Linker Objects
+0:?     'my_FragColor' ( out highp 4-component vector of float)
+
diff --git a/Test/baseResults/preprocess.arb_shading_language_include.vert.err b/Test/baseResults/preprocess.arb_shading_language_include.vert.err
new file mode 100644
index 0000000..29c6952
--- /dev/null
+++ b/Test/baseResults/preprocess.arb_shading_language_include.vert.err
@@ -0,0 +1,4 @@
+ERROR: 0:7: '#include' : Could not process include directive for header name: bar.h
+ERROR: 1 compilation errors.  No code generated.
+
+
diff --git a/Test/baseResults/preprocess.arb_shading_language_include.vert.out b/Test/baseResults/preprocess.arb_shading_language_include.vert.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Test/baseResults/preprocess.arb_shading_language_include.vert.out
diff --git a/Test/baseResults/preprocess.inactive_stringify.vert.err b/Test/baseResults/preprocess.inactive_stringify.vert.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Test/baseResults/preprocess.inactive_stringify.vert.err
diff --git a/Test/baseResults/preprocess.inactive_stringify.vert.out b/Test/baseResults/preprocess.inactive_stringify.vert.out
new file mode 100755
index 0000000..70cf1de
--- /dev/null
+++ b/Test/baseResults/preprocess.inactive_stringify.vert.out
@@ -0,0 +1,29 @@
+#version 460
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+void main()
+{
+    gl_Position = vec4(1.0);
+}
+
diff --git a/Test/baseResults/preprocess.include_directive_missing_extension.vert.err b/Test/baseResults/preprocess.include_directive_missing_extension.vert.err
new file mode 100644
index 0000000..9675dfa
--- /dev/null
+++ b/Test/baseResults/preprocess.include_directive_missing_extension.vert.err
@@ -0,0 +1,7 @@
+ERROR: 0:3: '#include' : required extension not requested: Possible extensions include:
+GL_GOOGLE_include_directive
+GL_ARB_shading_language_include
+ERROR: 0:3: '#include' : Could not process include directive for header name: bar.h
+ERROR: 2 compilation errors.  No code generated.
+
+
diff --git a/Test/baseResults/preprocess.include_directive_missing_extension.vert.out b/Test/baseResults/preprocess.include_directive_missing_extension.vert.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/Test/baseResults/preprocess.include_directive_missing_extension.vert.out
diff --git a/Test/baseResults/preprocessor.include.disabled.vert.err b/Test/baseResults/preprocessor.include.disabled.vert.err
index 1419204..b0b8296 100644
--- a/Test/baseResults/preprocessor.include.disabled.vert.err
+++ b/Test/baseResults/preprocessor.include.disabled.vert.err
@@ -1,12 +1,22 @@
-ERROR: 0:8000: '#include' : required extension not requested: GL_GOOGLE_include_directive
+ERROR: 0:8000: '#include' : required extension not requested: Possible extensions include:
+GL_GOOGLE_include_directive
+GL_ARB_shading_language_include
 ERROR: 0:8000: '#include' : must be followed by a header name 
-ERROR: 0:8001: '#include' : required extension not requested: GL_GOOGLE_include_directive
+ERROR: 0:8001: '#include' : required extension not requested: Possible extensions include:
+GL_GOOGLE_include_directive
+GL_ARB_shading_language_include
 ERROR: 0:8001: '#include' : must be followed by a header name 
-ERROR: 0:8002: '#include' : required extension not requested: GL_GOOGLE_include_directive
+ERROR: 0:8002: '#include' : required extension not requested: Possible extensions include:
+GL_GOOGLE_include_directive
+GL_ARB_shading_language_include
 ERROR: 0:8002: '#include' : Could not process include directive for header name: foo
-ERROR: 0:8003: '#include' : required extension not requested: GL_GOOGLE_include_directive
+ERROR: 0:8003: '#include' : required extension not requested: Possible extensions include:
+GL_GOOGLE_include_directive
+GL_ARB_shading_language_include
 ERROR: 0:8003: '#include' : extra content after header name: foo
-ERROR: 0:8004: '#include' : required extension not requested: GL_GOOGLE_include_directive
+ERROR: 0:8004: '#include' : required extension not requested: Possible extensions include:
+GL_GOOGLE_include_directive
+GL_ARB_shading_language_include
 ERROR: 0:8004: '#include' : expected newline after header name: no-eol
 ERROR: 10 compilation errors.  No code generated.
 
diff --git a/Test/baseResults/ps_sample.frag.out b/Test/baseResults/ps_sample.frag.out
new file mode 100644
index 0000000..8fc0a19
--- /dev/null
+++ b/Test/baseResults/ps_sample.frag.out
@@ -0,0 +1,47 @@
+ps_sample.frag
+ERROR: 0:5: 'location' : the aliases sharing the location 1 must be the same basic type and interpolation qualification
+ERROR: 1 compilation errors.  No code generated.
+
+
+Shader version: 430
+Requested GL_ARB_enhanced_layouts
+ERROR: node is still EOpNull!
+0:10  Function Definition: main( ( global void)
+0:10    Function Parameters: 
+0:12    Sequence
+0:12      Sequence
+0:12        move second child to first child ( temp 4-component vector of float)
+0:12          'result' ( temp 4-component vector of float)
+0:12          'gs_fs' ( smooth in 4-component vector of float)
+0:16      move second child to first child ( temp 4-component vector of float)
+0:16        'fs_out' ( out 4-component vector of float)
+0:16        'result' ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'gohan' (layout( location=1 component=0) flat in uint)
+0:?     'goten' (layout( location=1 component=2) flat sample in 2-component vector of uint)
+0:?     'gs_fs' ( smooth in 4-component vector of float)
+0:?     'fs_out' ( out 4-component vector of float)
+
+
+Linked fragment stage:
+
+
+Shader version: 430
+Requested GL_ARB_enhanced_layouts
+ERROR: node is still EOpNull!
+0:10  Function Definition: main( ( global void)
+0:10    Function Parameters: 
+0:12    Sequence
+0:12      Sequence
+0:12        move second child to first child ( temp 4-component vector of float)
+0:12          'result' ( temp 4-component vector of float)
+0:12          'gs_fs' ( smooth in 4-component vector of float)
+0:16      move second child to first child ( temp 4-component vector of float)
+0:16        'fs_out' ( out 4-component vector of float)
+0:16        'result' ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'gohan' (layout( location=1 component=0) flat in uint)
+0:?     'goten' (layout( location=1 component=2) flat sample in 2-component vector of uint)
+0:?     'gs_fs' ( smooth in 4-component vector of float)
+0:?     'fs_out' ( out 4-component vector of float)
+
diff --git a/Test/baseResults/ps_uint_int.frag.out b/Test/baseResults/ps_uint_int.frag.out
new file mode 100644
index 0000000..71d2eb9
--- /dev/null
+++ b/Test/baseResults/ps_uint_int.frag.out
@@ -0,0 +1,21 @@
+ps_uint_int.frag
+Shader version: 450
+0:? Sequence
+0:6  Function Definition: main( ( global void)
+0:6    Function Parameters: 
+0:?   Linker Objects
+0:?     'u' (layout( location=0 component=0) flat in uint)
+0:?     'i' (layout( location=0 component=1) flat in int)
+
+
+Linked fragment stage:
+
+
+Shader version: 450
+0:? Sequence
+0:6  Function Definition: main( ( global void)
+0:6    Function Parameters: 
+0:?   Linker Objects
+0:?     'u' (layout( location=0 component=0) flat in uint)
+0:?     'i' (layout( location=0 component=1) flat in int)
+
diff --git a/Test/baseResults/rayQuery-OpConvertUToAccelerationStructureKHR.comp.out b/Test/baseResults/rayQuery-OpConvertUToAccelerationStructureKHR.comp.out
index 007dcb9..e6bc9f5 100644
--- a/Test/baseResults/rayQuery-OpConvertUToAccelerationStructureKHR.comp.out
+++ b/Test/baseResults/rayQuery-OpConvertUToAccelerationStructureKHR.comp.out
@@ -17,8 +17,8 @@
                               Name 11  "params"
                               MemberName 11(params) 0  "tlas"
                               Name 13  ""
-                              MemberDecorate 11(params) 0 Offset 0
                               Decorate 11(params) Block
+                              MemberDecorate 11(params) 0 Offset 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeRayQueryKHR
diff --git a/Test/baseResults/rayQuery-allOps.comp.out b/Test/baseResults/rayQuery-allOps.comp.out
index a84d919..9a606ed 100644
--- a/Test/baseResults/rayQuery-allOps.comp.out
+++ b/Test/baseResults/rayQuery-allOps.comp.out
@@ -49,22 +49,22 @@
                               Name 272  "Rays"
                               MemberName 272(Rays) 0  "rays"
                               Name 274  ""
+                              Decorate 15(Log) BufferBlock
                               MemberDecorate 15(Log) 0 Offset 0
                               MemberDecorate 15(Log) 1 Offset 4
-                              Decorate 15(Log) BufferBlock
-                              Decorate 17 DescriptorSet 0
                               Decorate 17 Binding 0
-                              Decorate 50(rtas) DescriptorSet 0
+                              Decorate 17 DescriptorSet 0
                               Decorate 50(rtas) Binding 1
+                              Decorate 50(rtas) DescriptorSet 0
                               MemberDecorate 270(Ray) 0 Offset 0
                               MemberDecorate 270(Ray) 1 Offset 12
                               MemberDecorate 270(Ray) 2 Offset 16
                               MemberDecorate 270(Ray) 3 Offset 28
                               Decorate 271 ArrayStride 32
-                              MemberDecorate 272(Rays) 0 Offset 0
                               Decorate 272(Rays) BufferBlock
-                              Decorate 274 DescriptorSet 0
+                              MemberDecorate 272(Rays) 0 Offset 0
                               Decorate 274 Binding 2
+                              Decorate 274 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                8:             TypeFloat 32
diff --git a/Test/baseResults/rayQuery-allOps.frag.out b/Test/baseResults/rayQuery-allOps.frag.out
index 19a6171..814f931 100644
--- a/Test/baseResults/rayQuery-allOps.frag.out
+++ b/Test/baseResults/rayQuery-allOps.frag.out
@@ -44,22 +44,22 @@
                               Name 254  "Rays"
                               MemberName 254(Rays) 0  "rays"
                               Name 256  ""
+                              Decorate 15(Log) BufferBlock
                               MemberDecorate 15(Log) 0 Offset 0
                               MemberDecorate 15(Log) 1 Offset 4
-                              Decorate 15(Log) BufferBlock
-                              Decorate 17 DescriptorSet 0
                               Decorate 17 Binding 0
-                              Decorate 50(rtas) DescriptorSet 0
+                              Decorate 17 DescriptorSet 0
                               Decorate 50(rtas) Binding 1
+                              Decorate 50(rtas) DescriptorSet 0
                               MemberDecorate 252(Ray) 0 Offset 0
                               MemberDecorate 252(Ray) 1 Offset 12
                               MemberDecorate 252(Ray) 2 Offset 16
                               MemberDecorate 252(Ray) 3 Offset 28
                               Decorate 253 ArrayStride 32
-                              MemberDecorate 254(Rays) 0 Offset 0
                               Decorate 254(Rays) BufferBlock
-                              Decorate 256 DescriptorSet 0
+                              MemberDecorate 254(Rays) 0 Offset 0
                               Decorate 256 Binding 2
+                              Decorate 256 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                8:             TypeFloat 32
diff --git a/Test/baseResults/rayQuery-allOps.rgen.out b/Test/baseResults/rayQuery-allOps.rgen.out
index 67447b9..6b04403 100644
--- a/Test/baseResults/rayQuery-allOps.rgen.out
+++ b/Test/baseResults/rayQuery-allOps.rgen.out
@@ -44,22 +44,22 @@
                               Name 254  "Rays"
                               MemberName 254(Rays) 0  "rays"
                               Name 256  ""
+                              Decorate 15(Log) BufferBlock
                               MemberDecorate 15(Log) 0 Offset 0
                               MemberDecorate 15(Log) 1 Offset 4
-                              Decorate 15(Log) BufferBlock
-                              Decorate 17 DescriptorSet 0
                               Decorate 17 Binding 0
-                              Decorate 50(rtas) DescriptorSet 0
+                              Decorate 17 DescriptorSet 0
                               Decorate 50(rtas) Binding 1
+                              Decorate 50(rtas) DescriptorSet 0
                               MemberDecorate 252(Ray) 0 Offset 0
                               MemberDecorate 252(Ray) 1 Offset 12
                               MemberDecorate 252(Ray) 2 Offset 16
                               MemberDecorate 252(Ray) 3 Offset 28
                               Decorate 253 ArrayStride 32
-                              MemberDecorate 254(Rays) 0 Offset 0
                               Decorate 254(Rays) BufferBlock
-                              Decorate 256 DescriptorSet 0
+                              MemberDecorate 254(Rays) 0 Offset 0
                               Decorate 256 Binding 2
+                              Decorate 256 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                8:             TypeFloat 32
diff --git a/Test/baseResults/rayQuery-global.rgen.out b/Test/baseResults/rayQuery-global.rgen.out
index 968a178..dfd9840 100644
--- a/Test/baseResults/rayQuery-global.rgen.out
+++ b/Test/baseResults/rayQuery-global.rgen.out
@@ -22,8 +22,8 @@
                               Name 22  "rq2"
                               Name 27  "rtas"
                               Name 40  "rq2"
-                              Decorate 27(rtas) DescriptorSet 0
                               Decorate 27(rtas) Binding 1
+                              Decorate 27(rtas) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeRayQueryKHR
diff --git a/Test/baseResults/rayQuery-initialize.rgen.out b/Test/baseResults/rayQuery-initialize.rgen.out
index dc213c5..5e97f80 100644
--- a/Test/baseResults/rayQuery-initialize.rgen.out
+++ b/Test/baseResults/rayQuery-initialize.rgen.out
@@ -40,17 +40,17 @@
                               Name 90  "param"
                               Decorate 23(gl_LaunchIDNV) BuiltIn LaunchIdKHR
                               Decorate 28(gl_LaunchSizeNV) BuiltIn LaunchSizeKHR
-                              Decorate 50(rtas) DescriptorSet 0
                               Decorate 50(rtas) Binding 0
+                              Decorate 50(rtas) DescriptorSet 0
                               MemberDecorate 72(Ray) 0 Offset 0
                               MemberDecorate 72(Ray) 1 Offset 12
                               MemberDecorate 72(Ray) 2 Offset 16
                               MemberDecorate 72(Ray) 3 Offset 28
                               Decorate 73 ArrayStride 32
-                              MemberDecorate 74(Rays) 0 Offset 0
                               Decorate 74(Rays) BufferBlock
-                              Decorate 76 DescriptorSet 0
+                              MemberDecorate 74(Rays) 0 Offset 0
                               Decorate 76 Binding 2
+                              Decorate 76 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
diff --git a/Test/baseResults/rayQuery-no-cse.rgen.out b/Test/baseResults/rayQuery-no-cse.rgen.out
index 0a751a3..eff4123 100644
--- a/Test/baseResults/rayQuery-no-cse.rgen.out
+++ b/Test/baseResults/rayQuery-no-cse.rgen.out
@@ -42,17 +42,17 @@
                               Name 104  "param"
                               Decorate 23(gl_LaunchIDNV) BuiltIn LaunchIdKHR
                               Decorate 28(gl_LaunchSizeNV) BuiltIn LaunchSizeKHR
-                              Decorate 50(rtas) DescriptorSet 0
                               Decorate 50(rtas) Binding 0
+                              Decorate 50(rtas) DescriptorSet 0
                               MemberDecorate 72(Ray) 0 Offset 0
                               MemberDecorate 72(Ray) 1 Offset 12
                               MemberDecorate 72(Ray) 2 Offset 16
                               MemberDecorate 72(Ray) 3 Offset 28
                               Decorate 73 ArrayStride 32
-                              MemberDecorate 74(Rays) 0 Offset 0
                               Decorate 74(Rays) BufferBlock
-                              Decorate 76 DescriptorSet 0
+                              MemberDecorate 74(Rays) 0 Offset 0
                               Decorate 76 Binding 2
+                              Decorate 76 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
diff --git a/Test/baseResults/rayQuery-types.comp.out b/Test/baseResults/rayQuery-types.comp.out
index bb7ed7b..3a58ab5 100644
--- a/Test/baseResults/rayQuery-types.comp.out
+++ b/Test/baseResults/rayQuery-types.comp.out
@@ -34,8 +34,8 @@
                               Name 73  "objRayOrigin"
                               Name 77  "objToWorld"
                               Name 79  "worldToObj"
-                              Decorate 11(tlas) DescriptorSet 0
                               Decorate 11(tlas) Binding 0
+                              Decorate 11(tlas) DescriptorSet 0
                               Decorate 85 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/rayQuery.rgen.out b/Test/baseResults/rayQuery.rgen.out
index 4a54973..05ebd13 100644
--- a/Test/baseResults/rayQuery.rgen.out
+++ b/Test/baseResults/rayQuery.rgen.out
@@ -23,11 +23,11 @@
                               MemberName 26(block) 0  "dir"
                               MemberName 26(block) 1  "origin"
                               Name 28  ""
-                              Decorate 21(acc0) DescriptorSet 0
                               Decorate 21(acc0) Binding 0
+                              Decorate 21(acc0) DescriptorSet 0
+                              Decorate 26(block) BufferBlock
                               MemberDecorate 26(block) 0 Offset 0
                               MemberDecorate 26(block) 1 Offset 16
-                              Decorate 26(block) BufferBlock
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
diff --git a/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out b/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out
index b1ce523..a15675e 100644
--- a/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out
+++ b/Test/baseResults/remap.hlsl.sample.basic.everything.frag.out
@@ -12,32 +12,32 @@
                               EntryPoint Fragment 5663  "main" 4253 3709
                               ExecutionMode 5663 OriginUpperLeft
                               ExecutionMode 5663 DepthReplacing
-                              Decorate 4727 DescriptorSet 0
                               Decorate 4727 Binding 0
-                              Decorate 3305 DescriptorSet 0
+                              Decorate 4727 DescriptorSet 0
                               Decorate 3305 Binding 0
-                              Decorate 4743 DescriptorSet 0
+                              Decorate 3305 DescriptorSet 0
                               Decorate 4743 Binding 2
-                              Decorate 4807 DescriptorSet 0
+                              Decorate 4743 DescriptorSet 0
                               Decorate 4807 Binding 3
-                              Decorate 5042 DescriptorSet 0
+                              Decorate 4807 DescriptorSet 0
                               Decorate 5042 Binding 4
-                              Decorate 5058 DescriptorSet 0
+                              Decorate 5042 DescriptorSet 0
                               Decorate 5058 Binding 5
-                              Decorate 5122 DescriptorSet 0
+                              Decorate 5058 DescriptorSet 0
                               Decorate 5122 Binding 6
-                              Decorate 3967 DescriptorSet 0
+                              Decorate 5122 DescriptorSet 0
                               Decorate 3967 Binding 7
-                              Decorate 3983 DescriptorSet 0
+                              Decorate 3967 DescriptorSet 0
                               Decorate 3983 Binding 8
-                              Decorate 4047 DescriptorSet 0
+                              Decorate 3983 DescriptorSet 0
                               Decorate 4047 Binding 9
-                              Decorate 3789 DescriptorSet 0
+                              Decorate 4047 DescriptorSet 0
                               Decorate 3789 Binding 10
-                              Decorate 3805 DescriptorSet 0
+                              Decorate 3789 DescriptorSet 0
                               Decorate 3805 Binding 11
-                              Decorate 3869 DescriptorSet 0
+                              Decorate 3805 DescriptorSet 0
                               Decorate 3869 Binding 12
+                              Decorate 3869 DescriptorSet 0
                               Decorate 4253 Location 0
                               Decorate 3709 BuiltIn FragDepth
                8:             TypeVoid
diff --git a/Test/baseResults/remap.hlsl.sample.basic.none.frag.out b/Test/baseResults/remap.hlsl.sample.basic.none.frag.out
index 13ac4f2..5e61daa 100644
--- a/Test/baseResults/remap.hlsl.sample.basic.none.frag.out
+++ b/Test/baseResults/remap.hlsl.sample.basic.none.frag.out
@@ -64,40 +64,40 @@
                               Name 195  "g_sSamp2d"
                               Name 196  "g_sSamp2D_b"
                               Name 197  "g_tTex1df4a"
-                              Decorate 45(g_tTex1df4) DescriptorSet 0
                               Decorate 45(g_tTex1df4) Binding 0
-                              Decorate 49(g_sSamp) DescriptorSet 0
+                              Decorate 45(g_tTex1df4) DescriptorSet 0
                               Decorate 49(g_sSamp) Binding 0
-                              Decorate 60(g_tTex1di4) DescriptorSet 0
+                              Decorate 49(g_sSamp) DescriptorSet 0
                               Decorate 60(g_tTex1di4) Binding 2
-                              Decorate 73(g_tTex1du4) DescriptorSet 0
+                              Decorate 60(g_tTex1di4) DescriptorSet 0
                               Decorate 73(g_tTex1du4) Binding 3
-                              Decorate 83(g_tTex2df4) DescriptorSet 0
+                              Decorate 73(g_tTex1du4) DescriptorSet 0
                               Decorate 83(g_tTex2df4) Binding 4
-                              Decorate 94(g_tTex2di4) DescriptorSet 0
+                              Decorate 83(g_tTex2df4) DescriptorSet 0
                               Decorate 94(g_tTex2di4) Binding 5
-                              Decorate 105(g_tTex2du4) DescriptorSet 0
+                              Decorate 94(g_tTex2di4) DescriptorSet 0
                               Decorate 105(g_tTex2du4) Binding 6
-                              Decorate 117(g_tTex3df4) DescriptorSet 0
+                              Decorate 105(g_tTex2du4) DescriptorSet 0
                               Decorate 117(g_tTex3df4) Binding 7
-                              Decorate 128(g_tTex3di4) DescriptorSet 0
+                              Decorate 117(g_tTex3df4) DescriptorSet 0
                               Decorate 128(g_tTex3di4) Binding 8
-                              Decorate 138(g_tTex3du4) DescriptorSet 0
+                              Decorate 128(g_tTex3di4) DescriptorSet 0
                               Decorate 138(g_tTex3du4) Binding 9
-                              Decorate 151(g_tTexcdf4) DescriptorSet 0
+                              Decorate 138(g_tTex3du4) DescriptorSet 0
                               Decorate 151(g_tTexcdf4) Binding 10
-                              Decorate 160(g_tTexcdi4) DescriptorSet 0
+                              Decorate 151(g_tTexcdf4) DescriptorSet 0
                               Decorate 160(g_tTexcdi4) Binding 11
-                              Decorate 169(g_tTexcdu4) DescriptorSet 0
+                              Decorate 160(g_tTexcdi4) DescriptorSet 0
                               Decorate 169(g_tTexcdu4) Binding 12
+                              Decorate 169(g_tTexcdu4) DescriptorSet 0
                               Decorate 188(@entryPointOutput.Color) Location 0
                               Decorate 192(@entryPointOutput.Depth) BuiltIn FragDepth
-                              Decorate 195(g_sSamp2d) DescriptorSet 0
                               Decorate 195(g_sSamp2d) Binding 0
-                              Decorate 196(g_sSamp2D_b) DescriptorSet 0
+                              Decorate 195(g_sSamp2d) DescriptorSet 0
                               Decorate 196(g_sSamp2D_b) Binding 0
-                              Decorate 197(g_tTex1df4a) DescriptorSet 0
+                              Decorate 196(g_sSamp2D_b) DescriptorSet 0
                               Decorate 197(g_tTex1df4a) Binding 1
+                              Decorate 197(g_tTex1df4a) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out b/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out
index d861a43..a9d041a 100644
--- a/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out
+++ b/Test/baseResults/remap.hlsl.sample.basic.strip.frag.out
@@ -12,40 +12,40 @@
                               EntryPoint Fragment 4  "main" 188 192
                               ExecutionMode 4 OriginUpperLeft
                               ExecutionMode 4 DepthReplacing
-                              Decorate 45 DescriptorSet 0
                               Decorate 45 Binding 0
-                              Decorate 49 DescriptorSet 0
+                              Decorate 45 DescriptorSet 0
                               Decorate 49 Binding 0
-                              Decorate 60 DescriptorSet 0
+                              Decorate 49 DescriptorSet 0
                               Decorate 60 Binding 2
-                              Decorate 73 DescriptorSet 0
+                              Decorate 60 DescriptorSet 0
                               Decorate 73 Binding 3
-                              Decorate 83 DescriptorSet 0
+                              Decorate 73 DescriptorSet 0
                               Decorate 83 Binding 4
-                              Decorate 94 DescriptorSet 0
+                              Decorate 83 DescriptorSet 0
                               Decorate 94 Binding 5
-                              Decorate 105 DescriptorSet 0
+                              Decorate 94 DescriptorSet 0
                               Decorate 105 Binding 6
-                              Decorate 117 DescriptorSet 0
+                              Decorate 105 DescriptorSet 0
                               Decorate 117 Binding 7
-                              Decorate 128 DescriptorSet 0
+                              Decorate 117 DescriptorSet 0
                               Decorate 128 Binding 8
-                              Decorate 138 DescriptorSet 0
+                              Decorate 128 DescriptorSet 0
                               Decorate 138 Binding 9
-                              Decorate 151 DescriptorSet 0
+                              Decorate 138 DescriptorSet 0
                               Decorate 151 Binding 10
-                              Decorate 160 DescriptorSet 0
+                              Decorate 151 DescriptorSet 0
                               Decorate 160 Binding 11
-                              Decorate 169 DescriptorSet 0
+                              Decorate 160 DescriptorSet 0
                               Decorate 169 Binding 12
+                              Decorate 169 DescriptorSet 0
                               Decorate 188 Location 0
                               Decorate 192 BuiltIn FragDepth
-                              Decorate 195 DescriptorSet 0
                               Decorate 195 Binding 0
-                              Decorate 196 DescriptorSet 0
+                              Decorate 195 DescriptorSet 0
                               Decorate 196 Binding 0
-                              Decorate 197 DescriptorSet 0
+                              Decorate 196 DescriptorSet 0
                               Decorate 197 Binding 1
+                              Decorate 197 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/remap.uniformarray.none.frag.out b/Test/baseResults/remap.uniformarray.none.frag.out
index cc4fc7d..458d8c7 100644
--- a/Test/baseResults/remap.uniformarray.none.frag.out
+++ b/Test/baseResults/remap.uniformarray.none.frag.out
@@ -20,8 +20,8 @@
                               Decorate 25(inColor) Location 0
                               Decorate 43(alpha) Location 7
                               Decorate 54(gl_FragColor) Location 0
-                              Decorate 59(texSampler2D) DescriptorSet 0
                               Decorate 59(texSampler2D) Binding 0
+                              Decorate 59(texSampler2D) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.1.3.8bitstorage-ssbo.vert.out b/Test/baseResults/spv.1.3.8bitstorage-ssbo.vert.out
index 858a0db..402729d 100644
--- a/Test/baseResults/spv.1.3.8bitstorage-ssbo.vert.out
+++ b/Test/baseResults/spv.1.3.8bitstorage-ssbo.vert.out
@@ -19,11 +19,12 @@
                               Name 18  "gl_VertexIndex"
                               Decorate 9(color) Location 0
                               Decorate 11 ArrayStride 1
+                              Decorate 12(Vertices) Block
                               MemberDecorate 12(Vertices) 0 NonWritable
                               MemberDecorate 12(Vertices) 0 Offset 0
-                              Decorate 12(Vertices) Block
-                              Decorate 14 DescriptorSet 0
+                              Decorate 14 NonWritable
                               Decorate 14 Binding 0
+                              Decorate 14 DescriptorSet 0
                               Decorate 18(gl_VertexIndex) BuiltIn VertexIndex
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.1.3.8bitstorage-ubo.vert.out b/Test/baseResults/spv.1.3.8bitstorage-ubo.vert.out
index e7ec5ed..e7cd68a 100644
--- a/Test/baseResults/spv.1.3.8bitstorage-ubo.vert.out
+++ b/Test/baseResults/spv.1.3.8bitstorage-ubo.vert.out
@@ -19,10 +19,11 @@
                               Name 20  "gl_VertexIndex"
                               Decorate 9(color) Location 0
                               Decorate 13 ArrayStride 16
-                              MemberDecorate 14(Vertices) 0 Offset 0
                               Decorate 14(Vertices) Block
-                              Decorate 16 DescriptorSet 0
+                              MemberDecorate 14(Vertices) 0 Offset 0
+                              Decorate 16 NonWritable
                               Decorate 16 Binding 0
+                              Decorate 16 DescriptorSet 0
                               Decorate 20(gl_VertexIndex) BuiltIn VertexIndex
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.1.3.coopmat.comp.out b/Test/baseResults/spv.1.3.coopmat.comp.out
index 6b15772..b14f057 100644
--- a/Test/baseResults/spv.1.3.coopmat.comp.out
+++ b/Test/baseResults/spv.1.3.coopmat.comp.out
@@ -26,11 +26,11 @@
                               Name 35  "block"
                               Decorate 31 ArrayStride 4
                               Decorate 32 ArrayStride 4
+                              Decorate 33(Block) Block
                               MemberDecorate 33(Block) 0 Offset 0
                               MemberDecorate 33(Block) 1 Offset 4194304
-                              Decorate 33(Block) Block
-                              Decorate 35(block) DescriptorSet 0
                               Decorate 35(block) Binding 0
+                              Decorate 35(block) DescriptorSet 0
                               Decorate 51 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.1.4.OpCopyLogical.comp.out b/Test/baseResults/spv.1.4.OpCopyLogical.comp.out
index ad0397b..f82a144 100644
--- a/Test/baseResults/spv.1.4.OpCopyLogical.comp.out
+++ b/Test/baseResults/spv.1.4.OpCopyLogical.comp.out
@@ -48,35 +48,35 @@
                               Decorate 15 ArrayStride 8
                               MemberDecorate 16(MyStruct) 0 Offset 0
                               MemberDecorate 16(MyStruct) 1 Offset 16
-                              MemberDecorate 17(SSBO0) 0 Offset 0
                               Decorate 17(SSBO0) Block
-                              Decorate 19(inBuf) DescriptorSet 0
+                              MemberDecorate 17(SSBO0) 0 Offset 0
                               Decorate 19(inBuf) Binding 0
-                              MemberDecorate 25(SSBO1) 0 Offset 0
+                              Decorate 19(inBuf) DescriptorSet 0
                               Decorate 25(SSBO1) Block
-                              Decorate 27(outBuf) DescriptorSet 0
+                              MemberDecorate 25(SSBO1) 0 Offset 0
                               Decorate 27(outBuf) Binding 1
+                              Decorate 27(outBuf) DescriptorSet 0
                               Decorate 31 ArrayStride 16
                               MemberDecorate 32(MyStruct) 0 Offset 0
                               MemberDecorate 32(MyStruct) 1 Offset 32
-                              MemberDecorate 33(UBO) 0 Offset 0
                               Decorate 33(UBO) Block
-                              Decorate 35(uBuf) DescriptorSet 0
+                              MemberDecorate 33(UBO) 0 Offset 0
                               Decorate 35(uBuf) Binding 2
+                              Decorate 35(uBuf) DescriptorSet 0
                               Decorate 47 ArrayStride 48
                               MemberDecorate 48(Nested) 0 Offset 0
                               MemberDecorate 48(Nested) 1 Offset 16
-                              MemberDecorate 49(UBON) 0 Offset 0
                               Decorate 49(UBON) Block
-                              Decorate 51(uBufN) DescriptorSet 0
+                              MemberDecorate 49(UBON) 0 Offset 0
                               Decorate 51(uBufN) Binding 2
+                              Decorate 51(uBufN) DescriptorSet 0
                               Decorate 56 ArrayStride 24
                               MemberDecorate 57(Nested) 0 Offset 0
                               MemberDecorate 57(Nested) 1 Offset 8
-                              MemberDecorate 58(SSBO1N) 0 Offset 0
                               Decorate 58(SSBO1N) Block
-                              Decorate 60(outBufN) DescriptorSet 0
+                              MemberDecorate 58(SSBO1N) 0 Offset 0
                               Decorate 60(outBufN) Binding 1
+                              Decorate 60(outBufN) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.1.4.OpCopyLogical.funcall.frag.out b/Test/baseResults/spv.1.4.OpCopyLogical.funcall.frag.out
index 850ee91..c37bca6 100644
--- a/Test/baseResults/spv.1.4.OpCopyLogical.funcall.frag.out
+++ b/Test/baseResults/spv.1.4.OpCopyLogical.funcall.frag.out
@@ -30,12 +30,12 @@
                               Name 47  "param"
                               Name 55  "param"
                               MemberDecorate 22(S) 0 ColMajor
-                              MemberDecorate 22(S) 0 Offset 0
                               MemberDecorate 22(S) 0 MatrixStride 16
-                              MemberDecorate 23(blockName) 0 Offset 0
+                              MemberDecorate 22(S) 0 Offset 0
                               Decorate 23(blockName) Block
-                              Decorate 25 DescriptorSet 0
+                              MemberDecorate 23(blockName) 0 Offset 0
                               Decorate 25 Binding 0
+                              Decorate 25 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.1.4.OpCopyLogicalBool.comp.out b/Test/baseResults/spv.1.4.OpCopyLogicalBool.comp.out
index 7b52595..0e6f6a6 100644
--- a/Test/baseResults/spv.1.4.OpCopyLogicalBool.comp.out
+++ b/Test/baseResults/spv.1.4.OpCopyLogicalBool.comp.out
@@ -48,35 +48,35 @@
                               Decorate 15 ArrayStride 8
                               MemberDecorate 16(MyStruct) 0 Offset 0
                               MemberDecorate 16(MyStruct) 1 Offset 16
-                              MemberDecorate 17(SSBO0) 0 Offset 0
                               Decorate 17(SSBO0) Block
-                              Decorate 19(inBuf) DescriptorSet 0
+                              MemberDecorate 17(SSBO0) 0 Offset 0
                               Decorate 19(inBuf) Binding 0
-                              MemberDecorate 35(SSBO1) 0 Offset 0
+                              Decorate 19(inBuf) DescriptorSet 0
                               Decorate 35(SSBO1) Block
-                              Decorate 37(outBuf) DescriptorSet 0
+                              MemberDecorate 35(SSBO1) 0 Offset 0
                               Decorate 37(outBuf) Binding 1
+                              Decorate 37(outBuf) DescriptorSet 0
                               Decorate 49 ArrayStride 16
                               MemberDecorate 50(MyStruct) 0 Offset 0
                               MemberDecorate 50(MyStruct) 1 Offset 32
-                              MemberDecorate 51(UBO) 0 Offset 0
                               Decorate 51(UBO) Block
-                              Decorate 53(uBuf) DescriptorSet 0
+                              MemberDecorate 51(UBO) 0 Offset 0
                               Decorate 53(uBuf) Binding 2
+                              Decorate 53(uBuf) DescriptorSet 0
                               Decorate 75 ArrayStride 48
                               MemberDecorate 76(Nested) 0 Offset 0
                               MemberDecorate 76(Nested) 1 Offset 16
-                              MemberDecorate 77(UBON) 0 Offset 0
                               Decorate 77(UBON) Block
-                              Decorate 79(uBufN) DescriptorSet 0
+                              MemberDecorate 77(UBON) 0 Offset 0
                               Decorate 79(uBufN) Binding 2
+                              Decorate 79(uBufN) DescriptorSet 0
                               Decorate 105 ArrayStride 24
                               MemberDecorate 106(Nested) 0 Offset 0
                               MemberDecorate 106(Nested) 1 Offset 8
-                              MemberDecorate 107(SSBO1N) 0 Offset 0
                               Decorate 107(SSBO1N) Block
-                              Decorate 109(outBufN) DescriptorSet 0
+                              MemberDecorate 107(SSBO1N) 0 Offset 0
                               Decorate 109(outBufN) Binding 1
+                              Decorate 109(outBufN) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.1.4.OpEntryPoint.frag.out b/Test/baseResults/spv.1.4.OpEntryPoint.frag.out
index f37b0fd..dd7dbbb 100644
--- a/Test/baseResults/spv.1.4.OpEntryPoint.frag.out
+++ b/Test/baseResults/spv.1.4.OpEntryPoint.frag.out
@@ -25,16 +25,16 @@
                               Name 41  "bufferv"
                               Decorate 11(inv) Location 0
                               Decorate 17(outv) Location 0
-                              MemberDecorate 23(ubt) 0 Offset 0
                               Decorate 23(ubt) Block
-                              Decorate 25(uniformv) DescriptorSet 0
+                              MemberDecorate 23(ubt) 0 Offset 0
                               Decorate 25(uniformv) Binding 0
-                              MemberDecorate 31(pushB) 0 Offset 0
+                              Decorate 25(uniformv) DescriptorSet 0
                               Decorate 31(pushB) Block
-                              MemberDecorate 39(bbt) 0 Offset 0
+                              MemberDecorate 31(pushB) 0 Offset 0
                               Decorate 39(bbt) Block
-                              Decorate 41(bufferv) DescriptorSet 0
+                              MemberDecorate 39(bbt) 0 Offset 0
                               Decorate 41(bufferv) Binding 1
+                              Decorate 41(bufferv) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.1.4.OpEntryPoint.opaqueParams.vert.out b/Test/baseResults/spv.1.4.OpEntryPoint.opaqueParams.vert.out
index dff799f..4a39401 100644
--- a/Test/baseResults/spv.1.4.OpEntryPoint.opaqueParams.vert.out
+++ b/Test/baseResults/spv.1.4.OpEntryPoint.opaqueParams.vert.out
@@ -18,12 +18,12 @@
                               Name 41  "s2D"
                               Name 42  "t2D"
                               Name 43  "s"
-                              Decorate 41(s2D) DescriptorSet 0
                               Decorate 41(s2D) Binding 0
-                              Decorate 42(t2D) DescriptorSet 0
+                              Decorate 41(s2D) DescriptorSet 0
                               Decorate 42(t2D) Binding 1
-                              Decorate 43(s) DescriptorSet 0
+                              Decorate 42(t2D) DescriptorSet 0
                               Decorate 43(s) Binding 3
+                              Decorate 43(s) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.1.4.constructComposite.comp.out b/Test/baseResults/spv.1.4.constructComposite.comp.out
index e896cf8..d228e20 100644
--- a/Test/baseResults/spv.1.4.constructComposite.comp.out
+++ b/Test/baseResults/spv.1.4.constructComposite.comp.out
@@ -27,10 +27,10 @@
                               MemberDecorate 11(sA) 0 Offset 0
                               MemberDecorate 11(sA) 1 Offset 4
                               MemberDecorate 12(sB) 0 Offset 0
-                              MemberDecorate 13(ubo) 0 Offset 0
                               Decorate 13(ubo) Block
-                              Decorate 15 DescriptorSet 0
+                              MemberDecorate 13(ubo) 0 Offset 0
                               Decorate 15 Binding 0
+                              Decorate 15 DescriptorSet 0
                               Decorate 26 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.1.4.funcall.array.frag.out b/Test/baseResults/spv.1.4.funcall.array.frag.out
index 6a23f2a..a7fec76 100644
--- a/Test/baseResults/spv.1.4.funcall.array.frag.out
+++ b/Test/baseResults/spv.1.4.funcall.array.frag.out
@@ -22,10 +22,10 @@
                               Name 40  "param"
                               Decorate 27(color) Location 0
                               Decorate 28 ArrayStride 16
-                              MemberDecorate 29(ub) 0 Offset 0
                               Decorate 29(ub) Block
-                              Decorate 31 DescriptorSet 0
+                              MemberDecorate 29(ub) 0 Offset 0
                               Decorate 31 Binding 0
+                              Decorate 31 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.1.4.image.frag.out b/Test/baseResults/spv.1.4.image.frag.out
index 059ed19..5feb0da 100644
--- a/Test/baseResults/spv.1.4.image.frag.out
+++ b/Test/baseResults/spv.1.4.image.frag.out
@@ -23,20 +23,20 @@
                               Name 89  "ui2DMS"
                               Name 100  "fragData"
                               Name 103  "value"
-                              Decorate 26(i2D) DescriptorSet 0
                               Decorate 26(i2D) Binding 1
+                              Decorate 26(i2D) DescriptorSet 0
                               Decorate 30(ic2D) Flat
                               Decorate 30(ic2D) Location 0
-                              Decorate 40(ii2D) DescriptorSet 0
                               Decorate 40(ii2D) Binding 12
-                              Decorate 52(ui2D) DescriptorSet 0
+                              Decorate 40(ii2D) DescriptorSet 0
                               Decorate 52(ui2D) Binding 12
-                              Decorate 64(i2DMS) DescriptorSet 0
+                              Decorate 52(ui2D) DescriptorSet 0
                               Decorate 64(i2DMS) Binding 9
-                              Decorate 77(ii2DMS) DescriptorSet 0
+                              Decorate 64(i2DMS) DescriptorSet 0
                               Decorate 77(ii2DMS) Binding 13
-                              Decorate 89(ui2DMS) DescriptorSet 0
+                              Decorate 77(ii2DMS) DescriptorSet 0
                               Decorate 89(ui2DMS) Binding 13
+                              Decorate 89(ui2DMS) DescriptorSet 0
                               Decorate 100(fragData) Location 0
                               Decorate 103(value) Flat
                               Decorate 103(value) Location 1
diff --git a/Test/baseResults/spv.1.4.load.bool.array.interface.block.frag.out b/Test/baseResults/spv.1.4.load.bool.array.interface.block.frag.out
index fea83ab..507434f 100644
--- a/Test/baseResults/spv.1.4.load.bool.array.interface.block.frag.out
+++ b/Test/baseResults/spv.1.4.load.bool.array.interface.block.frag.out
@@ -20,16 +20,16 @@
                               Name 61  "color"
                               Decorate 8 ArrayStride 4
                               Decorate 10 ArrayStride 12
-                              MemberDecorate 11(ssbo) 0 Offset 0
                               Decorate 11(ssbo) Block
-                              Decorate 13 DescriptorSet 0
+                              MemberDecorate 11(ssbo) 0 Offset 0
                               Decorate 13 Binding 1
+                              Decorate 13 DescriptorSet 0
                               Decorate 16 ArrayStride 16
                               Decorate 17 ArrayStride 48
-                              MemberDecorate 18(ub) 0 Offset 0
                               Decorate 18(ub) Block
-                              Decorate 20 DescriptorSet 0
+                              MemberDecorate 18(ub) 0 Offset 0
                               Decorate 20 Binding 0
+                              Decorate 20 DescriptorSet 0
                               Decorate 61(color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.1.4.sparseTexture.frag.out b/Test/baseResults/spv.1.4.sparseTexture.frag.out
index a26ae66..214a02f 100644
--- a/Test/baseResults/spv.1.4.sparseTexture.frag.out
+++ b/Test/baseResults/spv.1.4.sparseTexture.frag.out
@@ -47,21 +47,21 @@
                               Name 206  "c3"
                               Name 208  "c4"
                               Name 212  "offsets"
-                              Decorate 29(s2D) DescriptorSet 0
                               Decorate 29(s2D) Binding 0
+                              Decorate 29(s2D) DescriptorSet 0
                               Decorate 33(c2) Location 0
-                              Decorate 46(is2D) DescriptorSet 0
                               Decorate 46(is2D) Binding 1
-                              Decorate 63(us2D) DescriptorSet 0
+                              Decorate 46(is2D) DescriptorSet 0
                               Decorate 63(us2D) Binding 2
-                              Decorate 149(i2D) DescriptorSet 0
+                              Decorate 63(us2D) DescriptorSet 0
                               Decorate 149(i2D) Binding 3
+                              Decorate 149(i2D) DescriptorSet 0
                               Decorate 152(ic2) Flat
                               Decorate 152(ic2) Location 3
-                              Decorate 162(ii2DMS) DescriptorSet 0
                               Decorate 162(ii2DMS) Binding 4
-                              Decorate 177(ui3D) DescriptorSet 0
+                              Decorate 162(ii2DMS) DescriptorSet 0
                               Decorate 177(ui3D) Binding 5
+                              Decorate 177(ui3D) DescriptorSet 0
                               Decorate 181(ic3) Flat
                               Decorate 181(ic3) Location 4
                               Decorate 189(outColor) Location 0
diff --git a/Test/baseResults/spv.1.4.texture.frag.out b/Test/baseResults/spv.1.4.texture.frag.out
index 6d28e1f..352b921 100644
--- a/Test/baseResults/spv.1.4.texture.frag.out
+++ b/Test/baseResults/spv.1.4.texture.frag.out
@@ -19,13 +19,13 @@
                               Name 54  "iLod"
                               Name 76  "t"
                               Name 78  "color"
-                              Decorate 15(texSampler2D) DescriptorSet 0
                               Decorate 15(texSampler2D) Binding 0
+                              Decorate 15(texSampler2D) DescriptorSet 0
                               Decorate 19(coords2D) Location 1
-                              Decorate 28(itexSampler2D) DescriptorSet 0
                               Decorate 28(itexSampler2D) Binding 1
-                              Decorate 40(utexSampler2D) DescriptorSet 0
+                              Decorate 28(itexSampler2D) DescriptorSet 0
                               Decorate 40(utexSampler2D) Binding 2
+                              Decorate 40(utexSampler2D) DescriptorSet 0
                               Decorate 51(iCoords2D) Flat
                               Decorate 51(iCoords2D) Location 2
                               Decorate 54(iLod) Flat
diff --git a/Test/baseResults/spv.1.6.conditionalDiscard.frag.out b/Test/baseResults/spv.1.6.conditionalDiscard.frag.out
index 6364773..aa631f3 100644
--- a/Test/baseResults/spv.1.6.conditionalDiscard.frag.out
+++ b/Test/baseResults/spv.1.6.conditionalDiscard.frag.out
@@ -14,8 +14,8 @@
                               Name 13  "tex"
                               Name 17  "coord"
                               Name 34  "gl_FragColor"
-                              Decorate 13(tex) DescriptorSet 0
                               Decorate 13(tex) Binding 0
+                              Decorate 13(tex) DescriptorSet 0
                               Decorate 17(coord) Location 0
                               Decorate 34(gl_FragColor) Location 0
                2:             TypeVoid
diff --git a/Test/baseResults/spv.1.6.helperInvocation.memmodel.frag.out b/Test/baseResults/spv.1.6.helperInvocation.memmodel.frag.out
index fea4e45..10ca5df 100644
--- a/Test/baseResults/spv.1.6.helperInvocation.memmodel.frag.out
+++ b/Test/baseResults/spv.1.6.helperInvocation.memmodel.frag.out
@@ -18,10 +18,10 @@
                               MemberName 7(B) 0  "o"
                               Name 9  ""
                               Name 14  "gl_HelperInvocation"
-                              MemberDecorate 7(B) 0 Offset 0
                               Decorate 7(B) Block
-                              Decorate 9 DescriptorSet 0
+                              MemberDecorate 7(B) 0 Offset 0
                               Decorate 9 Binding 0
+                              Decorate 9 DescriptorSet 0
                               Decorate 14(gl_HelperInvocation) BuiltIn HelperInvocation
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.1.6.quad.frag.out b/Test/baseResults/spv.1.6.quad.frag.out
new file mode 100644
index 0000000..7b31d7a
--- /dev/null
+++ b/Test/baseResults/spv.1.6.quad.frag.out
@@ -0,0 +1,76 @@
+spv.1.6.quad.frag
+// Module Version 10600
+// Generated by (magic number): 8000b
+// Id's are bound by 39
+
+                              Capability Shader
+                              Capability GroupNonUniform
+                              Capability GroupNonUniformVote
+                              Capability QuadControlKHR
+                              Extension  "SPV_KHR_quad_control"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 16 33
+                              ExecutionMode 4 QuadDerivativesKHR
+                              ExecutionMode 4 RequireFullQuadsKHR
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_shader_quad_control"
+                              SourceExtension  "GL_KHR_shader_subgroup_basic"
+                              SourceExtension  "GL_KHR_shader_subgroup_vote"
+                              Name 4  "main"
+                              Name 8  "bTemp"
+                              Name 16  "iInput"
+                              Name 33  "bOut"
+                              Decorate 16(iInput) Flat
+                              Decorate 16(iInput) Location 0
+                              Decorate 33(bOut) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeBool
+               7:             TypePointer Function 6(bool)
+               9:     6(bool) ConstantFalse
+              14:             TypeInt 32 1
+              15:             TypePointer Input 14(int)
+      16(iInput):     15(ptr) Variable Input
+              18:     14(int) Constant 0
+              20:             TypeInt 32 0
+              21:     20(int) Constant 3
+              32:             TypePointer Output 14(int)
+        33(bOut):     32(ptr) Variable Output
+              35:     6(bool) ConstantTrue
+              37:     14(int) Constant 1
+         4(main):           2 Function None 3
+               5:             Label
+        8(bTemp):      7(ptr) Variable Function
+                              Store 8(bTemp) 9
+              10:     6(bool) Load 8(bTemp)
+              11:     6(bool) LogicalNot 10
+                              SelectionMerge 13 None
+                              BranchConditional 11 12 13
+              12:               Label
+              17:     14(int)   Load 16(iInput)
+              19:     6(bool)   SGreaterThan 17 18
+              22:     6(bool)   GroupNonUniformQuadAllKHR 19
+                                Branch 13
+              13:             Label
+              23:     6(bool) Phi 10 5 22 12
+                              Store 8(bTemp) 23
+              24:     6(bool) Load 8(bTemp)
+              25:     6(bool) LogicalNot 24
+                              SelectionMerge 27 None
+                              BranchConditional 25 26 27
+              26:               Label
+              28:     14(int)   Load 16(iInput)
+              29:     6(bool)   SGreaterThan 28 18
+              30:     6(bool)   GroupNonUniformQuadAnyKHR 29
+                                Branch 27
+              27:             Label
+              31:     6(bool) Phi 24 13 30 26
+                              Store 8(bTemp) 31
+              34:     6(bool) Load 8(bTemp)
+              36:     6(bool) LogicalEqual 34 35
+              38:     14(int) Select 36 37 18
+                              Store 33(bOut) 38
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.1.6.samplerBuffer.frag.out b/Test/baseResults/spv.1.6.samplerBuffer.frag.out
index 1bd52da..eef89e9 100644
--- a/Test/baseResults/spv.1.6.samplerBuffer.frag.out
+++ b/Test/baseResults/spv.1.6.samplerBuffer.frag.out
@@ -15,8 +15,8 @@
                               Name 9  "o"
                               Name 13  "sampB"
                               Decorate 9(o) Location 0
-                              Decorate 13(sampB) DescriptorSet 0
                               Decorate 13(sampB) Binding 0
+                              Decorate 13(sampB) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.1.6.separate.frag.out b/Test/baseResults/spv.1.6.separate.frag.out
index f485fad..3037fab 100644
--- a/Test/baseResults/spv.1.6.separate.frag.out
+++ b/Test/baseResults/spv.1.6.separate.frag.out
@@ -15,14 +15,14 @@
                               Name 13  "s"
                               Name 18  "itexBuffer"
                               Name 24  "utexBuffer"
-                              Decorate 9(texBuffer) DescriptorSet 0
                               Decorate 9(texBuffer) Binding 1
-                              Decorate 13(s) DescriptorSet 0
+                              Decorate 9(texBuffer) DescriptorSet 0
                               Decorate 13(s) Binding 0
-                              Decorate 18(itexBuffer) DescriptorSet 0
+                              Decorate 13(s) DescriptorSet 0
                               Decorate 18(itexBuffer) Binding 2
-                              Decorate 24(utexBuffer) DescriptorSet 0
+                              Decorate 18(itexBuffer) DescriptorSet 0
                               Decorate 24(utexBuffer) Binding 3
+                              Decorate 24(utexBuffer) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.1.6.specConstant.comp.out b/Test/baseResults/spv.1.6.specConstant.comp.out
index 2c32fbd..13eb93c 100644
--- a/Test/baseResults/spv.1.6.specConstant.comp.out
+++ b/Test/baseResults/spv.1.6.specConstant.comp.out
@@ -18,10 +18,10 @@
                               Name 37  "param"
                               Decorate 7 SpecId 18
                               Decorate 9 SpecId 19
-                              MemberDecorate 16(bn) 0 Offset 0
                               Decorate 16(bn) Block
-                              Decorate 18(bi) DescriptorSet 0
+                              MemberDecorate 16(bn) 0 Offset 0
                               Decorate 18(bi) Binding 0
+                              Decorate 18(bi) DescriptorSet 0
                               Decorate 25 SpecId 18
                               Decorate 26 SpecId 19
                2:             TypeVoid
diff --git a/Test/baseResults/spv.130.frag.out b/Test/baseResults/spv.130.frag.out
index 84fa9a3..8e6c118 100644
--- a/Test/baseResults/spv.130.frag.out
+++ b/Test/baseResults/spv.130.frag.out
@@ -59,45 +59,45 @@
                               Name 203  "s1D"
                               Name 204  "s2DS"
                               Decorate 17(o) Location 0
-                              Decorate 21(samp2D) DescriptorSet 0
                               Decorate 21(samp2D) Binding 2
-                              Decorate 37(samp2DA) DescriptorSet 0
+                              Decorate 21(samp2D) DescriptorSet 0
                               Decorate 37(samp2DA) Binding 5
-                              Decorate 47(samp2DR) DescriptorSet 0
+                              Decorate 37(samp2DA) DescriptorSet 0
                               Decorate 47(samp2DR) Binding 4
-                              Decorate 55(samp2DS) DescriptorSet 0
+                              Decorate 47(samp2DR) DescriptorSet 0
                               Decorate 55(samp2DS) Binding 3
+                              Decorate 55(samp2DS) DescriptorSet 0
                               Decorate 68(io) Location 1
-                              Decorate 72(Sca) DescriptorSet 0
                               Decorate 72(Sca) Binding 6
+                              Decorate 72(Sca) DescriptorSet 0
                               Decorate 79(i) Location 0
-                              Decorate 87(Isca) DescriptorSet 0
                               Decorate 87(Isca) Binding 7
+                              Decorate 87(Isca) DescriptorSet 0
                               Decorate 99(uo) Location 2
-                              Decorate 103(Usca) DescriptorSet 0
                               Decorate 103(Usca) Binding 8
-                              Decorate 118(Scas) DescriptorSet 0
+                              Decorate 103(Usca) DescriptorSet 0
                               Decorate 118(Scas) Binding 9
-                              Decorate 167(sampC) DescriptorSet 0
+                              Decorate 118(Scas) DescriptorSet 0
                               Decorate 167(sampC) Binding 1
+                              Decorate 167(sampC) DescriptorSet 0
                               Decorate 173(gl_ClipDistance) BuiltIn ClipDistance
                               Decorate 184(fflat) Flat
                               Decorate 184(fflat) Location 1
                               Decorate 185(fsmooth) Location 2
                               Decorate 186(fnop) NoPerspective
                               Decorate 186(fnop) Location 3
-                              Decorate 193(bounds) DescriptorSet 0
                               Decorate 193(bounds) Binding 0
-                              Decorate 194(s2D) DescriptorSet 0
+                              Decorate 193(bounds) DescriptorSet 0
                               Decorate 194(s2D) Binding 0
-                              Decorate 195(s2DR) DescriptorSet 0
+                              Decorate 194(s2D) DescriptorSet 0
                               Decorate 195(s2DR) Binding 0
-                              Decorate 199(s2DRS) DescriptorSet 0
+                              Decorate 195(s2DR) DescriptorSet 0
                               Decorate 199(s2DRS) Binding 0
-                              Decorate 203(s1D) DescriptorSet 0
+                              Decorate 199(s2DRS) DescriptorSet 0
                               Decorate 203(s1D) Binding 0
-                              Decorate 204(s2DS) DescriptorSet 0
+                              Decorate 203(s1D) DescriptorSet 0
                               Decorate 204(s2DS) Binding 0
+                              Decorate 204(s2DS) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
               14:             TypeFloat 32
diff --git a/Test/baseResults/spv.140.frag.out b/Test/baseResults/spv.140.frag.out
index a4401a2..be76ab4 100644
--- a/Test/baseResults/spv.140.frag.out
+++ b/Test/baseResults/spv.140.frag.out
@@ -40,37 +40,37 @@
                               Decorate 23(o) Location 0
                               Decorate 28(gl_ClipDistance) BuiltIn ClipDistance
                               Decorate 38(k) Location 0
-                              Decorate 50(sampR) DescriptorSet 0
                               Decorate 50(sampR) Binding 0
-                              Decorate 58(sampB) DescriptorSet 0
+                              Decorate 50(sampR) DescriptorSet 0
                               Decorate 58(sampB) Binding 1
-                              Decorate 82(samp2Da) DescriptorSet 0
+                              Decorate 58(sampB) DescriptorSet 0
                               Decorate 82(samp2Da) Binding 0
+                              Decorate 82(samp2Da) DescriptorSet 0
                               Decorate 85 ArrayStride 64
                               Decorate 86 ArrayStride 64
-                              MemberDecorate 87(bn) 0 RowMajor
-                              MemberDecorate 87(bn) 0 Offset 0
-                              MemberDecorate 87(bn) 0 MatrixStride 16
-                              MemberDecorate 87(bn) 1 ColMajor
-                              MemberDecorate 87(bn) 1 Offset 256
-                              MemberDecorate 87(bn) 1 MatrixStride 16
-                              MemberDecorate 87(bn) 2 RowMajor
-                              MemberDecorate 87(bn) 2 Offset 512
-                              MemberDecorate 87(bn) 2 MatrixStride 16
-                              MemberDecorate 87(bn) 3 ColMajor
-                              MemberDecorate 87(bn) 3 Offset 576
-                              MemberDecorate 87(bn) 3 MatrixStride 16
-                              MemberDecorate 87(bn) 4 RowMajor
-                              MemberDecorate 87(bn) 4 Offset 1024
-                              MemberDecorate 87(bn) 4 MatrixStride 16
                               Decorate 87(bn) Block
-                              Decorate 89 DescriptorSet 0
+                              MemberDecorate 87(bn) 0 RowMajor
+                              MemberDecorate 87(bn) 0 MatrixStride 16
+                              MemberDecorate 87(bn) 0 Offset 0
+                              MemberDecorate 87(bn) 1 ColMajor
+                              MemberDecorate 87(bn) 1 MatrixStride 16
+                              MemberDecorate 87(bn) 1 Offset 256
+                              MemberDecorate 87(bn) 2 RowMajor
+                              MemberDecorate 87(bn) 2 MatrixStride 16
+                              MemberDecorate 87(bn) 2 Offset 512
+                              MemberDecorate 87(bn) 3 ColMajor
+                              MemberDecorate 87(bn) 3 MatrixStride 16
+                              MemberDecorate 87(bn) 3 Offset 576
+                              MemberDecorate 87(bn) 4 RowMajor
+                              MemberDecorate 87(bn) 4 MatrixStride 16
+                              MemberDecorate 87(bn) 4 Offset 1024
                               Decorate 89 Binding 0
+                              Decorate 89 DescriptorSet 0
                               Decorate 91 ArrayStride 16
-                              MemberDecorate 92(bi) 0 Offset 0
                               Decorate 92(bi) Block
-                              Decorate 95(bname) DescriptorSet 0
+                              MemberDecorate 92(bi) 0 Offset 0
                               Decorate 95(bname) Binding 0
+                              Decorate 95(bname) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.150.geom.out b/Test/baseResults/spv.150.geom.out
index b6e22e1..1acde69 100644
--- a/Test/baseResults/spv.150.geom.out
+++ b/Test/baseResults/spv.150.geom.out
@@ -38,27 +38,27 @@
                               MemberName 68(toFragment) 0  "color"
                               Name 70  "toF"
                               Decorate 8(fromVertex) Block
-                              Decorate 10 Location 1
                               Decorate 10 Stream 3
+                              Decorate 10 Location 1
                               Decorate 13(fromVertex) Block
                               Decorate 18(fromV) Location 0
+                              Decorate 27(gl_PerVertex) Block
                               MemberDecorate 27(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 27(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 27(gl_PerVertex) 2 BuiltIn ClipDistance
-                              Decorate 27(gl_PerVertex) Block
                               Decorate 29 Stream 0
+                              Decorate 30(gl_PerVertex) Block
                               MemberDecorate 30(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 30(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 30(gl_PerVertex) 2 BuiltIn ClipDistance
-                              Decorate 30(gl_PerVertex) Block
-                              Decorate 47(gl_PrimitiveID) Stream 0
                               Decorate 47(gl_PrimitiveID) BuiltIn PrimitiveId
+                              Decorate 47(gl_PrimitiveID) Stream 0
                               Decorate 49(gl_PrimitiveIDIn) BuiltIn PrimitiveId
-                              Decorate 51(gl_Layer) Stream 0
                               Decorate 51(gl_Layer) BuiltIn Layer
+                              Decorate 51(gl_Layer) Stream 0
                               Decorate 68(toFragment) Block
-                              Decorate 70(toF) Location 0
                               Decorate 70(toF) Stream 3
+                              Decorate 70(toF) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.150.vert.out b/Test/baseResults/spv.150.vert.out
index 167a15e..a5513ac 100644
--- a/Test/baseResults/spv.150.vert.out
+++ b/Test/baseResults/spv.150.vert.out
@@ -28,16 +28,16 @@
                               Name 40  "i"
                               Name 47  "s2D"
                               Name 62  "ui"
-                              MemberDecorate 11(gl_PerVertex) 0 Invariant
+                              Decorate 11(gl_PerVertex) Block
                               MemberDecorate 11(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 11(gl_PerVertex) 0 Invariant
                               MemberDecorate 11(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 11(gl_PerVertex) 2 BuiltIn ClipDistance
-                              Decorate 11(gl_PerVertex) Block
                               Decorate 17(iv4) Location 0
                               Decorate 23(ps) Location 1
                               Decorate 38(s2out) Location 0
-                              Decorate 47(s2D) DescriptorSet 0
                               Decorate 47(s2D) Binding 0
+                              Decorate 47(s2D) DescriptorSet 0
                               Decorate 62(ui) Location 2
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.16bitstorage-int.frag.out b/Test/baseResults/spv.16bitstorage-int.frag.out
index d14519b..07db828 100644
--- a/Test/baseResults/spv.16bitstorage-int.frag.out
+++ b/Test/baseResults/spv.16bitstorage-int.frag.out
@@ -1,7 +1,7 @@
 spv.16bitstorage-int.frag
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 171
+// Id's are bound by 180
 
                               Capability Shader
                               Capability StorageUniformBufferBlock16
@@ -83,6 +83,7 @@
                               Decorate 13 ArrayStride 16
                               Decorate 15 ArrayStride 4
                               Decorate 16 ArrayStride 2
+                              Decorate 17(B2) BufferBlock
                               MemberDecorate 17(B2) 0 Offset 0
                               MemberDecorate 17(B2) 1 Offset 4
                               MemberDecorate 17(B2) 2 Offset 8
@@ -91,14 +92,14 @@
                               MemberDecorate 17(B2) 5 Offset 40
                               MemberDecorate 17(B2) 6 Offset 72
                               MemberDecorate 17(B2) 7 Offset 472
-                              Decorate 17(B2) BufferBlock
-                              Decorate 19(b2) DescriptorSet 0
                               Decorate 19(b2) Binding 1
+                              Decorate 19(b2) DescriptorSet 0
                               Decorate 22 ArrayStride 16
                               MemberDecorate 23(S) 0 Offset 0
                               MemberDecorate 23(S) 1 Offset 4
                               MemberDecorate 23(S) 2 Offset 8
                               Decorate 24 ArrayStride 16
+                              Decorate 25(B1) Block
                               MemberDecorate 25(B1) 0 Offset 0
                               MemberDecorate 25(B1) 1 Offset 4
                               MemberDecorate 25(B1) 2 Offset 8
@@ -106,9 +107,8 @@
                               MemberDecorate 25(B1) 4 Offset 48
                               MemberDecorate 25(B1) 5 Offset 64
                               MemberDecorate 25(B1) 6 Offset 96
-                              Decorate 25(B1) Block
-                              Decorate 27(b1) DescriptorSet 0
                               Decorate 27(b1) Binding 0
+                              Decorate 27(b1) DescriptorSet 0
                               Decorate 44 ArrayStride 16
                               MemberDecorate 45(S) 0 Offset 0
                               MemberDecorate 45(S) 1 Offset 4
@@ -116,6 +116,7 @@
                               Decorate 46 ArrayStride 16
                               Decorate 47 ArrayStride 16
                               Decorate 48 ArrayStride 16
+                              Decorate 49(B5) Block
                               MemberDecorate 49(B5) 0 Offset 0
                               MemberDecorate 49(B5) 1 Offset 4
                               MemberDecorate 49(B5) 2 Offset 8
@@ -124,29 +125,28 @@
                               MemberDecorate 49(B5) 5 Offset 64
                               MemberDecorate 49(B5) 6 Offset 96
                               MemberDecorate 49(B5) 7 Offset 1696
-                              Decorate 49(B5) Block
-                              Decorate 51(b5) DescriptorSet 0
                               Decorate 51(b5) Binding 2
+                              Decorate 51(b5) DescriptorSet 0
                               MemberDecorate 88(S2) 0 ColMajor
-                              MemberDecorate 88(S2) 0 Offset 0
                               MemberDecorate 88(S2) 0 MatrixStride 16
+                              MemberDecorate 88(S2) 0 Offset 0
                               MemberDecorate 88(S2) 1 Offset 64
                               MemberDecorate 88(S2) 2 Offset 68
                               MemberDecorate 89(S3) 0 Offset 0
+                              Decorate 90(B4) BufferBlock
                               MemberDecorate 90(B4) 0 Offset 0
                               MemberDecorate 90(B4) 1 Offset 80
-                              Decorate 90(B4) BufferBlock
-                              Decorate 92(b4) DescriptorSet 0
                               Decorate 92(b4) Binding 4
+                              Decorate 92(b4) DescriptorSet 0
                               MemberDecorate 93(S2) 0 RowMajor
-                              MemberDecorate 93(S2) 0 Offset 0
                               MemberDecorate 93(S2) 0 MatrixStride 16
+                              MemberDecorate 93(S2) 0 Offset 0
                               MemberDecorate 93(S2) 1 Offset 64
                               MemberDecorate 93(S2) 2 Offset 68
-                              MemberDecorate 94(B3) 0 Offset 0
                               Decorate 94(B3) BufferBlock
-                              Decorate 96(b3) DescriptorSet 0
+                              MemberDecorate 94(B3) 0 Offset 0
                               Decorate 96(b3) Binding 3
+                              Decorate 96(b3) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 16 1
@@ -335,5 +335,17 @@
              169:  6(int16_t) SConvert 58
              170:     28(ptr) AccessChain 19(b2) 21
                               Store 170 169
+             171:     28(ptr) AccessChain 27(b1) 21
+             172:  6(int16_t) Load 171
+             173:     28(ptr) AccessChain 19(b2) 21
+                              Store 173 172
+             174:     42(ptr) AccessChain 27(b1) 32
+             175:  7(i16vec2) Load 174
+             176:     42(ptr) AccessChain 19(b2) 32
+                              Store 176 175
+             177:     34(ptr) AccessChain 27(b1) 33
+             178:  8(i16vec3) Load 177
+             179:     34(ptr) AccessChain 19(b2) 33
+                              Store 179 178
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.16bitstorage-uint.frag.out b/Test/baseResults/spv.16bitstorage-uint.frag.out
index ea935ce..8b169f3 100644
--- a/Test/baseResults/spv.16bitstorage-uint.frag.out
+++ b/Test/baseResults/spv.16bitstorage-uint.frag.out
@@ -1,7 +1,7 @@
 spv.16bitstorage-uint.frag
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 173
+// Id's are bound by 182
 
                               Capability Shader
                               Capability StorageUniformBufferBlock16
@@ -83,6 +83,7 @@
                               Decorate 13 ArrayStride 16
                               Decorate 15 ArrayStride 4
                               Decorate 16 ArrayStride 2
+                              Decorate 17(B2) BufferBlock
                               MemberDecorate 17(B2) 0 Offset 0
                               MemberDecorate 17(B2) 1 Offset 4
                               MemberDecorate 17(B2) 2 Offset 8
@@ -91,14 +92,14 @@
                               MemberDecorate 17(B2) 5 Offset 40
                               MemberDecorate 17(B2) 6 Offset 72
                               MemberDecorate 17(B2) 7 Offset 472
-                              Decorate 17(B2) BufferBlock
-                              Decorate 19(b2) DescriptorSet 0
                               Decorate 19(b2) Binding 1
+                              Decorate 19(b2) DescriptorSet 0
                               Decorate 22 ArrayStride 16
                               MemberDecorate 23(S) 0 Offset 0
                               MemberDecorate 23(S) 1 Offset 4
                               MemberDecorate 23(S) 2 Offset 8
                               Decorate 24 ArrayStride 16
+                              Decorate 25(B1) Block
                               MemberDecorate 25(B1) 0 Offset 0
                               MemberDecorate 25(B1) 1 Offset 4
                               MemberDecorate 25(B1) 2 Offset 8
@@ -106,9 +107,8 @@
                               MemberDecorate 25(B1) 4 Offset 48
                               MemberDecorate 25(B1) 5 Offset 64
                               MemberDecorate 25(B1) 6 Offset 96
-                              Decorate 25(B1) Block
-                              Decorate 27(b1) DescriptorSet 0
                               Decorate 27(b1) Binding 0
+                              Decorate 27(b1) DescriptorSet 0
                               Decorate 44 ArrayStride 16
                               MemberDecorate 45(S) 0 Offset 0
                               MemberDecorate 45(S) 1 Offset 4
@@ -116,6 +116,7 @@
                               Decorate 46 ArrayStride 16
                               Decorate 47 ArrayStride 16
                               Decorate 48 ArrayStride 16
+                              Decorate 49(B5) Block
                               MemberDecorate 49(B5) 0 Offset 0
                               MemberDecorate 49(B5) 1 Offset 4
                               MemberDecorate 49(B5) 2 Offset 8
@@ -124,29 +125,28 @@
                               MemberDecorate 49(B5) 5 Offset 64
                               MemberDecorate 49(B5) 6 Offset 96
                               MemberDecorate 49(B5) 7 Offset 1696
-                              Decorate 49(B5) Block
-                              Decorate 51(b5) DescriptorSet 0
                               Decorate 51(b5) Binding 2
+                              Decorate 51(b5) DescriptorSet 0
                               MemberDecorate 89(S2) 0 ColMajor
-                              MemberDecorate 89(S2) 0 Offset 0
                               MemberDecorate 89(S2) 0 MatrixStride 16
+                              MemberDecorate 89(S2) 0 Offset 0
                               MemberDecorate 89(S2) 1 Offset 64
                               MemberDecorate 89(S2) 2 Offset 68
                               MemberDecorate 90(S3) 0 Offset 0
+                              Decorate 91(B4) BufferBlock
                               MemberDecorate 91(B4) 0 Offset 0
                               MemberDecorate 91(B4) 1 Offset 80
-                              Decorate 91(B4) BufferBlock
-                              Decorate 93(b4) DescriptorSet 0
                               Decorate 93(b4) Binding 4
+                              Decorate 93(b4) DescriptorSet 0
                               MemberDecorate 94(S2) 0 RowMajor
-                              MemberDecorate 94(S2) 0 Offset 0
                               MemberDecorate 94(S2) 0 MatrixStride 16
+                              MemberDecorate 94(S2) 0 Offset 0
                               MemberDecorate 94(S2) 1 Offset 64
                               MemberDecorate 94(S2) 2 Offset 68
-                              MemberDecorate 95(B3) 0 Offset 0
                               Decorate 95(B3) BufferBlock
-                              Decorate 97(b3) DescriptorSet 0
+                              MemberDecorate 95(B3) 0 Offset 0
                               Decorate 97(b3) Binding 3
+                              Decorate 97(b3) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 16 0
@@ -337,5 +337,17 @@
              171:  6(int16_t) UConvert 170
              172:     28(ptr) AccessChain 19(b2) 21
                               Store 172 171
+             173:     28(ptr) AccessChain 27(b1) 21
+             174:  6(int16_t) Load 173
+             175:     28(ptr) AccessChain 19(b2) 21
+                              Store 175 174
+             176:     42(ptr) AccessChain 27(b1) 32
+             177:  7(i16vec2) Load 176
+             178:     42(ptr) AccessChain 19(b2) 32
+                              Store 178 177
+             179:     34(ptr) AccessChain 27(b1) 33
+             180:  8(i16vec3) Load 179
+             181:     34(ptr) AccessChain 19(b2) 33
+                              Store 181 180
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.16bitstorage.frag.out b/Test/baseResults/spv.16bitstorage.frag.out
index c19f607..f62f17a 100644
--- a/Test/baseResults/spv.16bitstorage.frag.out
+++ b/Test/baseResults/spv.16bitstorage.frag.out
@@ -1,7 +1,7 @@
 spv.16bitstorage.frag
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 173
+// Id's are bound by 182
 
                               Capability Shader
                               Capability StorageUniformBufferBlock16
@@ -83,6 +83,7 @@
                               Decorate 13 ArrayStride 16
                               Decorate 15 ArrayStride 4
                               Decorate 16 ArrayStride 2
+                              Decorate 17(B2) BufferBlock
                               MemberDecorate 17(B2) 0 Offset 0
                               MemberDecorate 17(B2) 1 Offset 4
                               MemberDecorate 17(B2) 2 Offset 8
@@ -91,14 +92,14 @@
                               MemberDecorate 17(B2) 5 Offset 40
                               MemberDecorate 17(B2) 6 Offset 72
                               MemberDecorate 17(B2) 7 Offset 472
-                              Decorate 17(B2) BufferBlock
-                              Decorate 19(b2) DescriptorSet 0
                               Decorate 19(b2) Binding 1
+                              Decorate 19(b2) DescriptorSet 0
                               Decorate 22 ArrayStride 16
                               MemberDecorate 23(S) 0 Offset 0
                               MemberDecorate 23(S) 1 Offset 4
                               MemberDecorate 23(S) 2 Offset 8
                               Decorate 24 ArrayStride 16
+                              Decorate 25(B1) Block
                               MemberDecorate 25(B1) 0 Offset 0
                               MemberDecorate 25(B1) 1 Offset 4
                               MemberDecorate 25(B1) 2 Offset 8
@@ -106,9 +107,8 @@
                               MemberDecorate 25(B1) 4 Offset 48
                               MemberDecorate 25(B1) 5 Offset 64
                               MemberDecorate 25(B1) 6 Offset 96
-                              Decorate 25(B1) Block
-                              Decorate 27(b1) DescriptorSet 0
                               Decorate 27(b1) Binding 0
+                              Decorate 27(b1) DescriptorSet 0
                               Decorate 45 ArrayStride 16
                               MemberDecorate 46(S) 0 Offset 0
                               MemberDecorate 46(S) 1 Offset 4
@@ -116,6 +116,7 @@
                               Decorate 47 ArrayStride 16
                               Decorate 48 ArrayStride 16
                               Decorate 49 ArrayStride 16
+                              Decorate 50(B5) Block
                               MemberDecorate 50(B5) 0 Offset 0
                               MemberDecorate 50(B5) 1 Offset 4
                               MemberDecorate 50(B5) 2 Offset 8
@@ -124,29 +125,28 @@
                               MemberDecorate 50(B5) 5 Offset 64
                               MemberDecorate 50(B5) 6 Offset 96
                               MemberDecorate 50(B5) 7 Offset 1696
-                              Decorate 50(B5) Block
-                              Decorate 52(b5) DescriptorSet 0
                               Decorate 52(b5) Binding 2
+                              Decorate 52(b5) DescriptorSet 0
                               MemberDecorate 88(S2) 0 ColMajor
-                              MemberDecorate 88(S2) 0 Offset 0
                               MemberDecorate 88(S2) 0 MatrixStride 16
+                              MemberDecorate 88(S2) 0 Offset 0
                               MemberDecorate 88(S2) 1 Offset 64
                               MemberDecorate 88(S2) 2 Offset 68
                               MemberDecorate 89(S3) 0 Offset 0
+                              Decorate 90(B4) BufferBlock
                               MemberDecorate 90(B4) 0 Offset 0
                               MemberDecorate 90(B4) 1 Offset 80
-                              Decorate 90(B4) BufferBlock
-                              Decorate 92(b4) DescriptorSet 0
                               Decorate 92(b4) Binding 4
+                              Decorate 92(b4) DescriptorSet 0
                               MemberDecorate 93(S2) 0 RowMajor
-                              MemberDecorate 93(S2) 0 Offset 0
                               MemberDecorate 93(S2) 0 MatrixStride 16
+                              MemberDecorate 93(S2) 0 Offset 0
                               MemberDecorate 93(S2) 1 Offset 64
                               MemberDecorate 93(S2) 2 Offset 68
-                              MemberDecorate 94(B3) 0 Offset 0
                               Decorate 94(B3) BufferBlock
-                              Decorate 96(b3) DescriptorSet 0
+                              MemberDecorate 94(B3) 0 Offset 0
                               Decorate 96(b3) Binding 3
+                              Decorate 96(b3) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 16
@@ -337,5 +337,17 @@
              171:6(float16_t) FConvert 170
              172:     28(ptr) AccessChain 19(b2) 21
                               Store 172 171
+             173:     28(ptr) AccessChain 27(b1) 21
+             174:6(float16_t) Load 173
+             175:     28(ptr) AccessChain 19(b2) 21
+                              Store 175 174
+             176:     43(ptr) AccessChain 27(b1) 32
+             177:  7(f16vec2) Load 176
+             178:     43(ptr) AccessChain 19(b2) 32
+                              Store 178 177
+             179:     34(ptr) AccessChain 27(b1) 33
+             180:  8(f16vec3) Load 179
+             181:     34(ptr) AccessChain 19(b2) 33
+                              Store 181 180
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.16bitxfb.vert.out b/Test/baseResults/spv.16bitxfb.vert.out
index 2dd93d4..4fe2bf7 100644
--- a/Test/baseResults/spv.16bitxfb.vert.out
+++ b/Test/baseResults/spv.16bitxfb.vert.out
@@ -31,24 +31,24 @@
                               Name 46  ""
                               Name 49  "iu16v4"
                               Decorate 9(of16v3) Location 0
+                              Decorate 9(of16v3) Offset 0
                               Decorate 9(of16v3) XfbBuffer 0
                               Decorate 9(of16v3) XfbStride 6
-                              Decorate 9(of16v3) Offset 0
                               Decorate 12(if16v4) Location 0
+                              Decorate 16(F16Out) Block
                               MemberDecorate 16(F16Out) 0 Offset 0
                               MemberDecorate 16(F16Out) 1 Offset 2
-                              Decorate 16(F16Out) Block
                               Decorate 18 Location 1
                               Decorate 18 XfbBuffer 1
                               Decorate 18 XfbStride 6
                               Decorate 36(oi16v3) Location 5
+                              Decorate 36(oi16v3) Offset 0
                               Decorate 36(oi16v3) XfbBuffer 2
                               Decorate 36(oi16v3) XfbStride 6
-                              Decorate 36(oi16v3) Offset 0
                               Decorate 39(ii16v4) Location 1
+                              Decorate 44(I16Out) Block
                               MemberDecorate 44(I16Out) 0 Offset 0
                               MemberDecorate 44(I16Out) 1 Offset 2
-                              Decorate 44(I16Out) Block
                               Decorate 46 Location 6
                               Decorate 46 XfbBuffer 3
                               Decorate 46 XfbStride 6
diff --git a/Test/baseResults/spv.300BuiltIns.vert.out b/Test/baseResults/spv.300BuiltIns.vert.out
index 10f115b..b2607d3 100644
--- a/Test/baseResults/spv.300BuiltIns.vert.out
+++ b/Test/baseResults/spv.300BuiltIns.vert.out
@@ -16,10 +16,10 @@
                               Name 14  "ps"
                               Name 21  "gl_VertexIndex"
                               Name 34  "gl_InstanceIndex"
-                              MemberDecorate 8(gl_PerVertex) 0 Invariant
-                              MemberDecorate 8(gl_PerVertex) 0 BuiltIn Position
-                              MemberDecorate 8(gl_PerVertex) 1 BuiltIn PointSize
                               Decorate 8(gl_PerVertex) Block
+                              MemberDecorate 8(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 8(gl_PerVertex) 0 Invariant
+                              MemberDecorate 8(gl_PerVertex) 1 BuiltIn PointSize
                               Decorate 14(ps) RelaxedPrecision
                               Decorate 14(ps) Location 0
                               Decorate 15 RelaxedPrecision
diff --git a/Test/baseResults/spv.300layout.vert.out b/Test/baseResults/spv.300layout.vert.out
index 6345aa1..7806b58 100644
--- a/Test/baseResults/spv.300layout.vert.out
+++ b/Test/baseResults/spv.300layout.vert.out
@@ -38,40 +38,40 @@
                               Name 128  "s"
                               Decorate 9(pos) Location 0
                               Decorate 11(p) Location 3
-                              MemberDecorate 17(Transform) 0 RowMajor
-                              MemberDecorate 17(Transform) 0 Offset 0
-                              MemberDecorate 17(Transform) 0 MatrixStride 16
-                              MemberDecorate 17(Transform) 1 ColMajor
-                              MemberDecorate 17(Transform) 1 Offset 64
-                              MemberDecorate 17(Transform) 1 MatrixStride 16
-                              MemberDecorate 17(Transform) 2 RowMajor
-                              MemberDecorate 17(Transform) 2 Offset 128
-                              MemberDecorate 17(Transform) 2 MatrixStride 16
-                              MemberDecorate 17(Transform) 3 Offset 176
                               Decorate 17(Transform) Block
-                              Decorate 19(tblock) DescriptorSet 0
+                              MemberDecorate 17(Transform) 0 RowMajor
+                              MemberDecorate 17(Transform) 0 MatrixStride 16
+                              MemberDecorate 17(Transform) 0 Offset 0
+                              MemberDecorate 17(Transform) 1 ColMajor
+                              MemberDecorate 17(Transform) 1 MatrixStride 16
+                              MemberDecorate 17(Transform) 1 Offset 64
+                              MemberDecorate 17(Transform) 2 RowMajor
+                              MemberDecorate 17(Transform) 2 MatrixStride 16
+                              MemberDecorate 17(Transform) 2 Offset 128
+                              MemberDecorate 17(Transform) 3 Offset 176
                               Decorate 19(tblock) Binding 0
+                              Decorate 19(tblock) DescriptorSet 0
                               Decorate 44 ArrayStride 16
-                              MemberDecorate 45(T3) 0 ColMajor
-                              MemberDecorate 45(T3) 0 Offset 0
-                              MemberDecorate 45(T3) 0 MatrixStride 16
-                              MemberDecorate 45(T3) 1 RowMajor
-                              MemberDecorate 45(T3) 1 Offset 64
-                              MemberDecorate 45(T3) 1 MatrixStride 16
-                              MemberDecorate 45(T3) 2 ColMajor
-                              MemberDecorate 45(T3) 2 Offset 128
-                              MemberDecorate 45(T3) 2 MatrixStride 16
-                              MemberDecorate 45(T3) 3 Offset 2048
                               Decorate 45(T3) Block
-                              Decorate 47 DescriptorSet 0
+                              MemberDecorate 45(T3) 0 ColMajor
+                              MemberDecorate 45(T3) 0 MatrixStride 16
+                              MemberDecorate 45(T3) 0 Offset 0
+                              MemberDecorate 45(T3) 1 RowMajor
+                              MemberDecorate 45(T3) 1 MatrixStride 16
+                              MemberDecorate 45(T3) 1 Offset 64
+                              MemberDecorate 45(T3) 2 ColMajor
+                              MemberDecorate 45(T3) 2 MatrixStride 16
+                              MemberDecorate 45(T3) 2 Offset 128
+                              MemberDecorate 45(T3) 3 Offset 2048
                               Decorate 47 Binding 2
+                              Decorate 47 DescriptorSet 0
+                              Decorate 78(T2) Block
                               MemberDecorate 78(T2) 0 Offset 0
                               MemberDecorate 78(T2) 1 RowMajor
-                              MemberDecorate 78(T2) 1 Offset 16
                               MemberDecorate 78(T2) 1 MatrixStride 16
-                              Decorate 78(T2) Block
-                              Decorate 80 DescriptorSet 0
+                              MemberDecorate 78(T2) 1 Offset 16
                               Decorate 80 Binding 1
+                              Decorate 80 DescriptorSet 0
                               Decorate 98(color) Location 1
                               Decorate 100(c) Location 7
                               Decorate 108(iout) Flat
diff --git a/Test/baseResults/spv.300layoutp.vert.out b/Test/baseResults/spv.300layoutp.vert.out
index d986fb5..cec3474 100644
--- a/Test/baseResults/spv.300layoutp.vert.out
+++ b/Test/baseResults/spv.300layoutp.vert.out
@@ -38,40 +38,40 @@
                               Name 80  "s"
                               Decorate 9(pos) Location 0
                               Decorate 11(p) Location 3
-                              MemberDecorate 17(Transform) 0 RowMajor
-                              MemberDecorate 17(Transform) 0 Offset 0
-                              MemberDecorate 17(Transform) 0 MatrixStride 16
-                              MemberDecorate 17(Transform) 1 ColMajor
-                              MemberDecorate 17(Transform) 1 Offset 64
-                              MemberDecorate 17(Transform) 1 MatrixStride 16
-                              MemberDecorate 17(Transform) 2 RowMajor
-                              MemberDecorate 17(Transform) 2 Offset 128
-                              MemberDecorate 17(Transform) 2 MatrixStride 16
-                              MemberDecorate 17(Transform) 3 Offset 176
                               Decorate 17(Transform) Block
-                              Decorate 19(tblock) DescriptorSet 0
+                              MemberDecorate 17(Transform) 0 RowMajor
+                              MemberDecorate 17(Transform) 0 MatrixStride 16
+                              MemberDecorate 17(Transform) 0 Offset 0
+                              MemberDecorate 17(Transform) 1 ColMajor
+                              MemberDecorate 17(Transform) 1 MatrixStride 16
+                              MemberDecorate 17(Transform) 1 Offset 64
+                              MemberDecorate 17(Transform) 2 RowMajor
+                              MemberDecorate 17(Transform) 2 MatrixStride 16
+                              MemberDecorate 17(Transform) 2 Offset 128
+                              MemberDecorate 17(Transform) 3 Offset 176
                               Decorate 19(tblock) Binding 0
+                              Decorate 19(tblock) DescriptorSet 0
                               Decorate 32 ArrayStride 16
-                              MemberDecorate 33(T3) 0 ColMajor
-                              MemberDecorate 33(T3) 0 Offset 0
-                              MemberDecorate 33(T3) 0 MatrixStride 16
-                              MemberDecorate 33(T3) 1 RowMajor
-                              MemberDecorate 33(T3) 1 Offset 64
-                              MemberDecorate 33(T3) 1 MatrixStride 16
-                              MemberDecorate 33(T3) 2 ColMajor
-                              MemberDecorate 33(T3) 2 Offset 128
-                              MemberDecorate 33(T3) 2 MatrixStride 16
-                              MemberDecorate 33(T3) 3 Offset 160
                               Decorate 33(T3) Block
-                              Decorate 35 DescriptorSet 0
+                              MemberDecorate 33(T3) 0 ColMajor
+                              MemberDecorate 33(T3) 0 MatrixStride 16
+                              MemberDecorate 33(T3) 0 Offset 0
+                              MemberDecorate 33(T3) 1 RowMajor
+                              MemberDecorate 33(T3) 1 MatrixStride 16
+                              MemberDecorate 33(T3) 1 Offset 64
+                              MemberDecorate 33(T3) 2 ColMajor
+                              MemberDecorate 33(T3) 2 MatrixStride 16
+                              MemberDecorate 33(T3) 2 Offset 128
+                              MemberDecorate 33(T3) 3 Offset 160
                               Decorate 35 Binding 2
+                              Decorate 35 DescriptorSet 0
+                              Decorate 42(T2) Block
                               MemberDecorate 42(T2) 0 Offset 0
                               MemberDecorate 42(T2) 1 RowMajor
-                              MemberDecorate 42(T2) 1 Offset 16
                               MemberDecorate 42(T2) 1 MatrixStride 16
-                              Decorate 42(T2) Block
-                              Decorate 44 DescriptorSet 0
+                              MemberDecorate 42(T2) 1 Offset 16
                               Decorate 44 Binding 1
+                              Decorate 44 DescriptorSet 0
                               Decorate 50(color) Location 1
                               Decorate 52(c) Location 7
                               Decorate 60(iout) Flat
diff --git a/Test/baseResults/spv.310.comp.out b/Test/baseResults/spv.310.comp.out
index 459c689..1b585c7 100644
--- a/Test/baseResults/spv.310.comp.out
+++ b/Test/baseResults/spv.310.comp.out
@@ -32,24 +32,24 @@
                               Name 53  "gl_LocalInvocationID"
                               Name 65  "gl_DeviceIndex"
                               Decorate 11 ArrayStride 16
+                              Decorate 12(outb) BufferBlock
                               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
                               Decorate 14(outbname) Binding 0
+                              Decorate 14(outbname) DescriptorSet 0
+                              Decorate 23(outbna) BufferBlock
                               MemberDecorate 23(outbna) 0 Offset 0
                               MemberDecorate 23(outbna) 1 Offset 16
-                              Decorate 23(outbna) BufferBlock
-                              Decorate 25(outbnamena) DescriptorSet 0
                               Decorate 25(outbnamena) Binding 1
+                              Decorate 25(outbnamena) DescriptorSet 0
                               Decorate 47 ArrayStride 16
+                              Decorate 48(outs) BufferBlock
                               MemberDecorate 48(outs) 0 Offset 0
                               MemberDecorate 48(outs) 1 Offset 16
-                              Decorate 48(outs) BufferBlock
-                              Decorate 50(outnames) DescriptorSet 0
                               Decorate 50(outnames) Binding 2
+                              Decorate 50(outnames) DescriptorSet 0
                               Decorate 53(gl_LocalInvocationID) BuiltIn LocalInvocationId
                               Decorate 65(gl_DeviceIndex) BuiltIn DeviceIndex
                               Decorate 71 BuiltIn WorkgroupSize
diff --git a/Test/baseResults/spv.320.meshShaderUserDefined.mesh.out b/Test/baseResults/spv.320.meshShaderUserDefined.mesh.out
index 197fe60..5d82e66 100644
--- a/Test/baseResults/spv.320.meshShaderUserDefined.mesh.out
+++ b/Test/baseResults/spv.320.meshShaderUserDefined.mesh.out
@@ -34,13 +34,13 @@
                               Name 106  "blk2"
                               Decorate 12(gl_LocalInvocationID) BuiltIn LocalInvocationId
                               Decorate 19(gl_WorkGroupID) BuiltIn WorkgroupId
+                              Decorate 33(myblock) Block
                               MemberDecorate 33(myblock) 0 PerPrimitiveNV
                               MemberDecorate 33(myblock) 1 PerPrimitiveNV
                               MemberDecorate 33(myblock) 2 PerPrimitiveNV
                               MemberDecorate 33(myblock) 3 PerPrimitiveNV
                               MemberDecorate 33(myblock) 4 PerPrimitiveNV
                               MemberDecorate 33(myblock) 5 PerPrimitiveNV
-                              Decorate 33(myblock) Block
                               Decorate 37(blk) Location 0
                               Decorate 102(myblock2) Block
                               Decorate 106(blk2) Location 20
diff --git a/Test/baseResults/spv.330.geom.out b/Test/baseResults/spv.330.geom.out
index f9e69e5..a692346 100644
--- a/Test/baseResults/spv.330.geom.out
+++ b/Test/baseResults/spv.330.geom.out
@@ -23,12 +23,12 @@
                               MemberName 16(gl_PerVertex) 0  "gl_Position"
                               MemberName 16(gl_PerVertex) 1  "gl_ClipDistance"
                               Name 20  "gl_in"
+                              Decorate 11(gl_PerVertex) Block
                               MemberDecorate 11(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 11(gl_PerVertex) 1 BuiltIn ClipDistance
-                              Decorate 11(gl_PerVertex) Block
+                              Decorate 16(gl_PerVertex) Block
                               MemberDecorate 16(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 16(gl_PerVertex) 1 BuiltIn ClipDistance
-                              Decorate 16(gl_PerVertex) Block
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.400.frag.nanclamp.out b/Test/baseResults/spv.400.frag.nanclamp.out
index f03e938..dee4625 100644
--- a/Test/baseResults/spv.400.frag.nanclamp.out
+++ b/Test/baseResults/spv.400.frag.nanclamp.out
@@ -1,7 +1,7 @@
 spv.400.frag
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 1122
+// Id's are bound by 1134
 
                               Capability Shader
                               Capability Geometry
@@ -11,7 +11,7 @@
                               Capability SampledRect
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 13 1027 1033 1038 1054 1080 1101 1103 1109 1111 1120
+                              EntryPoint Fragment 4  "main" 13 1039 1045 1050 1066 1092 1113 1115 1121 1123 1132
                               ExecutionMode 4 OriginUpperLeft
                               Source GLSL 400
                               SourceExtension  "GL_ARB_separate_shader_objects"
@@ -24,56 +24,60 @@
                               Name 45  "dvec2v"
                               Name 50  "dvec3v"
                               Name 55  "dvec4v"
-                              Name 430  "boolv"
-                              Name 439  "bvec2v"
-                              Name 448  "bvec3v"
-                              Name 457  "bvec4v"
-                              Name 739  "dmat2v"
-                              Name 745  "dmat3v"
-                              Name 751  "dmat4v"
-                              Name 757  "dmat2x3v"
-                              Name 763  "dmat3x2v"
-                              Name 769  "dmat2x4v"
-                              Name 775  "dmat4x2v"
-                              Name 781  "dmat3x4v"
-                              Name 787  "dmat4x3v"
-                              Name 1019  "v"
-                              Name 1025  "arrayedSampler"
-                              Name 1027  "i"
-                              Name 1033  "c2D"
-                              Name 1038  "gl_ClipDistance"
-                              Name 1054  "uoutp"
-                              Name 1058  "samp2dr"
-                              Name 1080  "ioutp"
-                              Name 1084  "isamp2DA"
-                              Name 1101  "gl_FragCoord"
-                              Name 1103  "vl2"
-                              Name 1109  "uo"
-                              Name 1111  "u"
-                              Name 1119  "id"
-                              Name 1120  "gl_PrimitiveID"
+                              Name 242  "ResType"
+                              Name 249  "ResType"
+                              Name 256  "ResType"
+                              Name 263  "ResType"
+                              Name 442  "boolv"
+                              Name 451  "bvec2v"
+                              Name 460  "bvec3v"
+                              Name 469  "bvec4v"
+                              Name 751  "dmat2v"
+                              Name 757  "dmat3v"
+                              Name 763  "dmat4v"
+                              Name 769  "dmat2x3v"
+                              Name 775  "dmat3x2v"
+                              Name 781  "dmat2x4v"
+                              Name 787  "dmat4x2v"
+                              Name 793  "dmat3x4v"
+                              Name 799  "dmat4x3v"
+                              Name 1031  "v"
+                              Name 1037  "arrayedSampler"
+                              Name 1039  "i"
+                              Name 1045  "c2D"
+                              Name 1050  "gl_ClipDistance"
+                              Name 1066  "uoutp"
+                              Name 1070  "samp2dr"
+                              Name 1092  "ioutp"
+                              Name 1096  "isamp2DA"
+                              Name 1113  "gl_FragCoord"
+                              Name 1115  "vl2"
+                              Name 1121  "uo"
+                              Name 1123  "u"
+                              Name 1131  "id"
+                              Name 1132  "gl_PrimitiveID"
                               Decorate 13(outp) Location 1
-                              Decorate 17(u2drs) DescriptorSet 0
                               Decorate 17(u2drs) Binding 3
-                              Decorate 1025(arrayedSampler) DescriptorSet 0
-                              Decorate 1025(arrayedSampler) Binding 0
-                              Decorate 1027(i) Flat
-                              Decorate 1027(i) Location 1
-                              Decorate 1033(c2D) Location 0
-                              Decorate 1038(gl_ClipDistance) BuiltIn ClipDistance
-                              Decorate 1054(uoutp) Location 3
-                              Decorate 1058(samp2dr) DescriptorSet 0
-                              Decorate 1058(samp2dr) Binding 1
-                              Decorate 1080(ioutp) Location 2
-                              Decorate 1084(isamp2DA) DescriptorSet 0
-                              Decorate 1084(isamp2DA) Binding 2
-                              Decorate 1101(gl_FragCoord) BuiltIn FragCoord
-                              Decorate 1103(vl2) Location 6
-                              Decorate 1109(uo) Location 0
-                              Decorate 1111(u) Flat
-                              Decorate 1111(u) Location 2
-                              Decorate 1120(gl_PrimitiveID) Flat
-                              Decorate 1120(gl_PrimitiveID) BuiltIn PrimitiveId
+                              Decorate 17(u2drs) DescriptorSet 0
+                              Decorate 1037(arrayedSampler) Binding 0
+                              Decorate 1037(arrayedSampler) DescriptorSet 0
+                              Decorate 1039(i) Flat
+                              Decorate 1039(i) Location 1
+                              Decorate 1045(c2D) Location 0
+                              Decorate 1050(gl_ClipDistance) BuiltIn ClipDistance
+                              Decorate 1066(uoutp) Location 3
+                              Decorate 1070(samp2dr) Binding 1
+                              Decorate 1070(samp2dr) DescriptorSet 0
+                              Decorate 1092(ioutp) Location 2
+                              Decorate 1096(isamp2DA) Binding 2
+                              Decorate 1096(isamp2DA) DescriptorSet 0
+                              Decorate 1113(gl_FragCoord) BuiltIn FragCoord
+                              Decorate 1115(vl2) Location 6
+                              Decorate 1121(uo) Location 0
+                              Decorate 1123(u) Flat
+                              Decorate 1123(u) Location 2
+                              Decorate 1132(gl_PrimitiveID) BuiltIn PrimitiveId
+                              Decorate 1132(gl_PrimitiveID) Flat
                2:             TypeVoid
                3:             TypeFunction 2
               10:             TypeFloat 32
@@ -108,161 +112,165 @@
               52: 48(f64vec3) ConstantComposite 51 51 51
               53:             TypeVector 39(float64_t) 4
               54:             TypePointer Function 53(f64vec4)
-             428:             TypeBool
-             429:             TypePointer Function 428(bool)
-             437:             TypeVector 428(bool) 2
-             438:             TypePointer Function 437(bvec2)
-             446:             TypeVector 428(bool) 3
-             447:             TypePointer Function 446(bvec3)
-             455:             TypeVector 428(bool) 4
-             456:             TypePointer Function 455(bvec4)
-             563:   428(bool) ConstantFalse
-             572:  437(bvec2) ConstantComposite 563 563
-             581:  446(bvec3) ConstantComposite 563 563 563
-             590:  455(bvec4) ConstantComposite 563 563 563 563
-             737:             TypeMatrix 43(f64vec2) 2
-             738:             TypePointer Function 737
-             743:             TypeMatrix 48(f64vec3) 3
-             744:             TypePointer Function 743
-             749:             TypeMatrix 53(f64vec4) 4
+    242(ResType):             TypeStruct 39(float64_t) 39(float64_t)
+    249(ResType):             TypeStruct 43(f64vec2) 43(f64vec2)
+    256(ResType):             TypeStruct 48(f64vec3) 48(f64vec3)
+    263(ResType):             TypeStruct 53(f64vec4) 53(f64vec4)
+             440:             TypeBool
+             441:             TypePointer Function 440(bool)
+             449:             TypeVector 440(bool) 2
+             450:             TypePointer Function 449(bvec2)
+             458:             TypeVector 440(bool) 3
+             459:             TypePointer Function 458(bvec3)
+             467:             TypeVector 440(bool) 4
+             468:             TypePointer Function 467(bvec4)
+             575:   440(bool) ConstantFalse
+             584:  449(bvec2) ConstantComposite 575 575
+             593:  458(bvec3) ConstantComposite 575 575 575
+             602:  467(bvec4) ConstantComposite 575 575 575 575
+             749:             TypeMatrix 43(f64vec2) 2
              750:             TypePointer Function 749
-             755:             TypeMatrix 48(f64vec3) 2
+             755:             TypeMatrix 48(f64vec3) 3
              756:             TypePointer Function 755
-             761:             TypeMatrix 43(f64vec2) 3
+             761:             TypeMatrix 53(f64vec4) 4
              762:             TypePointer Function 761
-             767:             TypeMatrix 53(f64vec4) 2
+             767:             TypeMatrix 48(f64vec3) 2
              768:             TypePointer Function 767
-             773:             TypeMatrix 43(f64vec2) 4
+             773:             TypeMatrix 43(f64vec2) 3
              774:             TypePointer Function 773
-             779:             TypeMatrix 53(f64vec4) 3
+             779:             TypeMatrix 53(f64vec4) 2
              780:             TypePointer Function 779
-             785:             TypeMatrix 48(f64vec3) 4
+             785:             TypeMatrix 43(f64vec2) 4
              786:             TypePointer Function 785
-             954:     32(int) Constant 1
-             958:     32(int) Constant 2
-             962:     32(int) Constant 3
-             966:     23(int) Constant 1
-             970:     23(int) Constant 2
-             996:   10(float) Constant 1065353216
-            1018:             TypePointer Function 11(fvec4)
-            1020:             TypeImage 10(float) 2D sampled format:Unknown
-            1021:             TypeSampledImage 1020
-            1022:     32(int) Constant 5
-            1023:             TypeArray 1021 1022
-            1024:             TypePointer UniformConstant 1023
-1025(arrayedSampler):   1024(ptr) Variable UniformConstant
-            1026:             TypePointer Input 23(int)
-         1027(i):   1026(ptr) Variable Input
-            1029:             TypePointer UniformConstant 1021
-            1032:             TypePointer Input 20(fvec2)
-       1033(c2D):   1032(ptr) Variable Input
-            1036:             TypeArray 10(float) 958
-            1037:             TypePointer Input 1036
-1038(gl_ClipDistance):   1037(ptr) Variable Input
-            1039:             TypePointer Input 10(float)
-            1043:             TypeVector 10(float) 3
-            1052:             TypeVector 32(int) 4
-            1053:             TypePointer Output 1052(ivec4)
-     1054(uoutp):   1053(ptr) Variable Output
-            1055:             TypeImage 32(int) Rect sampled format:Unknown
-            1056:             TypeSampledImage 1055
-            1057:             TypePointer UniformConstant 1056
-   1058(samp2dr):   1057(ptr) Variable UniformConstant
-            1061:     32(int) Constant 4
-            1062:             TypeArray 24(ivec2) 1061
-            1063:   24(ivec2) ConstantComposite 966 970
-            1064:     23(int) Constant 15
-            1065:     23(int) Constant 16
-            1066:   24(ivec2) ConstantComposite 1064 1065
-            1067:     23(int) Constant 4294967294
-            1068:     23(int) Constant 0
-            1069:   24(ivec2) ConstantComposite 1067 1068
-            1070:        1062 ConstantComposite 1063 27 1066 1069
-            1078:             TypeVector 23(int) 4
-            1079:             TypePointer Output 1078(ivec4)
-     1080(ioutp):   1079(ptr) Variable Output
-            1081:             TypeImage 23(int) 2D array sampled format:Unknown
-            1082:             TypeSampledImage 1081
-            1083:             TypePointer UniformConstant 1082
-  1084(isamp2DA):   1083(ptr) Variable UniformConstant
-            1086:   10(float) Constant 1036831949
-            1087: 1043(fvec3) ConstantComposite 1086 1086 1086
-            1088:   24(ivec2) ConstantComposite 966 966
-            1100:             TypePointer Input 11(fvec4)
-1101(gl_FragCoord):   1100(ptr) Variable Input
-       1103(vl2):   1100(ptr) Variable Input
-            1108:             TypePointer Output 32(int)
-        1109(uo):   1108(ptr) Variable Output
-            1110:             TypePointer Input 32(int)
-         1111(u):   1110(ptr) Variable Input
-            1118:             TypePointer Function 23(int)
-1120(gl_PrimitiveID):   1026(ptr) Variable Input
+             791:             TypeMatrix 53(f64vec4) 3
+             792:             TypePointer Function 791
+             797:             TypeMatrix 48(f64vec3) 4
+             798:             TypePointer Function 797
+             966:     32(int) Constant 1
+             970:     32(int) Constant 2
+             974:     32(int) Constant 3
+             978:     23(int) Constant 1
+             982:     23(int) Constant 2
+            1008:   10(float) Constant 1065353216
+            1030:             TypePointer Function 11(fvec4)
+            1032:             TypeImage 10(float) 2D sampled format:Unknown
+            1033:             TypeSampledImage 1032
+            1034:     32(int) Constant 5
+            1035:             TypeArray 1033 1034
+            1036:             TypePointer UniformConstant 1035
+1037(arrayedSampler):   1036(ptr) Variable UniformConstant
+            1038:             TypePointer Input 23(int)
+         1039(i):   1038(ptr) Variable Input
+            1041:             TypePointer UniformConstant 1033
+            1044:             TypePointer Input 20(fvec2)
+       1045(c2D):   1044(ptr) Variable Input
+            1048:             TypeArray 10(float) 970
+            1049:             TypePointer Input 1048
+1050(gl_ClipDistance):   1049(ptr) Variable Input
+            1051:             TypePointer Input 10(float)
+            1055:             TypeVector 10(float) 3
+            1064:             TypeVector 32(int) 4
+            1065:             TypePointer Output 1064(ivec4)
+     1066(uoutp):   1065(ptr) Variable Output
+            1067:             TypeImage 32(int) Rect sampled format:Unknown
+            1068:             TypeSampledImage 1067
+            1069:             TypePointer UniformConstant 1068
+   1070(samp2dr):   1069(ptr) Variable UniformConstant
+            1073:     32(int) Constant 4
+            1074:             TypeArray 24(ivec2) 1073
+            1075:   24(ivec2) ConstantComposite 978 982
+            1076:     23(int) Constant 15
+            1077:     23(int) Constant 16
+            1078:   24(ivec2) ConstantComposite 1076 1077
+            1079:     23(int) Constant 4294967294
+            1080:     23(int) Constant 0
+            1081:   24(ivec2) ConstantComposite 1079 1080
+            1082:        1074 ConstantComposite 1075 27 1078 1081
+            1090:             TypeVector 23(int) 4
+            1091:             TypePointer Output 1090(ivec4)
+     1092(ioutp):   1091(ptr) Variable Output
+            1093:             TypeImage 23(int) 2D array sampled format:Unknown
+            1094:             TypeSampledImage 1093
+            1095:             TypePointer UniformConstant 1094
+  1096(isamp2DA):   1095(ptr) Variable UniformConstant
+            1098:   10(float) Constant 1036831949
+            1099: 1055(fvec3) ConstantComposite 1098 1098 1098
+            1100:   24(ivec2) ConstantComposite 978 978
+            1112:             TypePointer Input 11(fvec4)
+1113(gl_FragCoord):   1112(ptr) Variable Input
+       1115(vl2):   1112(ptr) Variable Input
+            1120:             TypePointer Output 32(int)
+        1121(uo):   1120(ptr) Variable Output
+            1122:             TypePointer Input 32(int)
+         1123(u):   1122(ptr) Variable Input
+            1130:             TypePointer Function 23(int)
+1132(gl_PrimitiveID):   1038(ptr) Variable Input
          4(main):           2 Function None 3
                5:             Label
-         1019(v):   1018(ptr) Variable Function
-        1119(id):   1118(ptr) Variable Function
-            1028:     23(int) Load 1027(i)
-            1030:   1029(ptr) AccessChain 1025(arrayedSampler) 1028
-            1031:        1021 Load 1030
-            1034:   20(fvec2) Load 1033(c2D)
-            1035:   11(fvec4) ImageSampleImplicitLod 1031 1034
-                              Store 1019(v) 1035
-            1040:   1039(ptr) AccessChain 1038(gl_ClipDistance) 966
-            1041:   10(float) Load 1040
-            1042:     34(ptr) AccessChain 13(outp) 33
-                              Store 1042 1041
-            1044:   11(fvec4) Load 1019(v)
-            1045: 1043(fvec3) VectorShuffle 1044 1044 1 2 3
-            1046:     34(ptr) AccessChain 13(outp) 954
-            1047:   10(float) CompositeExtract 1045 0
-                              Store 1046 1047
-            1048:     34(ptr) AccessChain 13(outp) 958
-            1049:   10(float) CompositeExtract 1045 1
-                              Store 1048 1049
-            1050:     34(ptr) AccessChain 13(outp) 962
-            1051:   10(float) CompositeExtract 1045 2
-                              Store 1050 1051
-            1059:        1056 Load 1058(samp2dr)
-            1060:   20(fvec2) Load 1033(c2D)
-            1071: 1052(ivec4) ImageGather 1059 1060 970 ConstOffsets 1070
-                              Store 1054(uoutp) 1071
-            1072:   1029(ptr) AccessChain 1025(arrayedSampler) 1068
-            1073:        1021 Load 1072
-            1074:   20(fvec2) Load 1033(c2D)
-            1075:   11(fvec4) ImageGather 1073 1074 1068
-            1076:   11(fvec4) Load 13(outp)
-            1077:   11(fvec4) FAdd 1076 1075
-                              Store 13(outp) 1077
-            1085:        1082 Load 1084(isamp2DA)
-            1089: 1078(ivec4) ImageGather 1085 1087 25 ConstOffset 1088
-                              Store 1080(ioutp) 1089
-            1090:        1082 Load 1084(isamp2DA)
-            1091: 1078(ivec4) ImageGather 1090 1087 25 ConstOffset 1088
-            1092: 1078(ivec4) Load 1080(ioutp)
-            1093: 1078(ivec4) IAdd 1092 1091
-                              Store 1080(ioutp) 1093
-            1094:        1082 Load 1084(isamp2DA)
-            1095:     23(int) Load 1027(i)
-            1096:   24(ivec2) CompositeConstruct 1095 1095
-            1097: 1078(ivec4) ImageGather 1094 1087 1068 Offset 1096
-            1098: 1078(ivec4) Load 1080(ioutp)
-            1099: 1078(ivec4) IAdd 1098 1097
-                              Store 1080(ioutp) 1099
-            1102:   11(fvec4) Load 1101(gl_FragCoord)
-            1104:   11(fvec4) Load 1103(vl2)
-            1105:   11(fvec4) FAdd 1102 1104
-            1106:   11(fvec4) Load 13(outp)
-            1107:   11(fvec4) FAdd 1106 1105
-                              Store 13(outp) 1107
-            1112:     32(int) Load 1111(u)
-            1113:     23(int) Load 1027(i)
-            1114:     32(int) Bitcast 1113
-            1115:     32(int) UMod 1112 1114
-                              Store 1109(uo) 1115
-            1116:           2 FunctionCall 6(foo23()
-            1117:           2 FunctionCall 8(doubles()
-            1121:     23(int) Load 1120(gl_PrimitiveID)
-                              Store 1119(id) 1121
+         1031(v):   1030(ptr) Variable Function
+        1131(id):   1130(ptr) Variable Function
+            1040:     23(int) Load 1039(i)
+            1042:   1041(ptr) AccessChain 1037(arrayedSampler) 1040
+            1043:        1033 Load 1042
+            1046:   20(fvec2) Load 1045(c2D)
+            1047:   11(fvec4) ImageSampleImplicitLod 1043 1046
+                              Store 1031(v) 1047
+            1052:   1051(ptr) AccessChain 1050(gl_ClipDistance) 978
+            1053:   10(float) Load 1052
+            1054:     34(ptr) AccessChain 13(outp) 33
+                              Store 1054 1053
+            1056:   11(fvec4) Load 1031(v)
+            1057: 1055(fvec3) VectorShuffle 1056 1056 1 2 3
+            1058:     34(ptr) AccessChain 13(outp) 966
+            1059:   10(float) CompositeExtract 1057 0
+                              Store 1058 1059
+            1060:     34(ptr) AccessChain 13(outp) 970
+            1061:   10(float) CompositeExtract 1057 1
+                              Store 1060 1061
+            1062:     34(ptr) AccessChain 13(outp) 974
+            1063:   10(float) CompositeExtract 1057 2
+                              Store 1062 1063
+            1071:        1068 Load 1070(samp2dr)
+            1072:   20(fvec2) Load 1045(c2D)
+            1083: 1064(ivec4) ImageGather 1071 1072 982 ConstOffsets 1082
+                              Store 1066(uoutp) 1083
+            1084:   1041(ptr) AccessChain 1037(arrayedSampler) 1080
+            1085:        1033 Load 1084
+            1086:   20(fvec2) Load 1045(c2D)
+            1087:   11(fvec4) ImageGather 1085 1086 1080
+            1088:   11(fvec4) Load 13(outp)
+            1089:   11(fvec4) FAdd 1088 1087
+                              Store 13(outp) 1089
+            1097:        1094 Load 1096(isamp2DA)
+            1101: 1090(ivec4) ImageGather 1097 1099 25 ConstOffset 1100
+                              Store 1092(ioutp) 1101
+            1102:        1094 Load 1096(isamp2DA)
+            1103: 1090(ivec4) ImageGather 1102 1099 25 ConstOffset 1100
+            1104: 1090(ivec4) Load 1092(ioutp)
+            1105: 1090(ivec4) IAdd 1104 1103
+                              Store 1092(ioutp) 1105
+            1106:        1094 Load 1096(isamp2DA)
+            1107:     23(int) Load 1039(i)
+            1108:   24(ivec2) CompositeConstruct 1107 1107
+            1109: 1090(ivec4) ImageGather 1106 1099 1080 Offset 1108
+            1110: 1090(ivec4) Load 1092(ioutp)
+            1111: 1090(ivec4) IAdd 1110 1109
+                              Store 1092(ioutp) 1111
+            1114:   11(fvec4) Load 1113(gl_FragCoord)
+            1116:   11(fvec4) Load 1115(vl2)
+            1117:   11(fvec4) FAdd 1114 1116
+            1118:   11(fvec4) Load 13(outp)
+            1119:   11(fvec4) FAdd 1118 1117
+                              Store 13(outp) 1119
+            1124:     32(int) Load 1123(u)
+            1125:     23(int) Load 1039(i)
+            1126:     32(int) Bitcast 1125
+            1127:     32(int) UMod 1124 1126
+                              Store 1121(uo) 1127
+            1128:           2 FunctionCall 6(foo23()
+            1129:           2 FunctionCall 8(doubles()
+            1133:     23(int) Load 1132(gl_PrimitiveID)
+                              Store 1131(id) 1133
                               Return
                               FunctionEnd
        6(foo23():           2 Function None 3
@@ -286,23 +294,23 @@
       45(dvec2v):     44(ptr) Variable Function
       50(dvec3v):     49(ptr) Variable Function
       55(dvec4v):     54(ptr) Variable Function
-      430(boolv):    429(ptr) Variable Function
-     439(bvec2v):    438(ptr) Variable Function
-     448(bvec3v):    447(ptr) Variable Function
-     457(bvec4v):    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
-   757(dmat2x3v):    756(ptr) Variable Function
-   763(dmat3x2v):    762(ptr) Variable Function
-   769(dmat2x4v):    768(ptr) Variable Function
-   775(dmat4x2v):    774(ptr) Variable Function
-   781(dmat3x4v):    780(ptr) Variable Function
-   787(dmat4x3v):    786(ptr) Variable Function
+      442(boolv):    441(ptr) Variable Function
+     451(bvec2v):    450(ptr) Variable Function
+     460(bvec3v):    459(ptr) Variable Function
+     469(bvec4v):    468(ptr) Variable Function
+             569:    441(ptr) Variable Function
+             578:    450(ptr) Variable Function
+             587:    459(ptr) Variable Function
+             596:    468(ptr) Variable Function
+     751(dmat2v):    750(ptr) Variable Function
+     757(dmat3v):    756(ptr) Variable Function
+     763(dmat4v):    762(ptr) Variable Function
+   769(dmat2x3v):    768(ptr) Variable Function
+   775(dmat3x2v):    774(ptr) Variable Function
+   781(dmat2x4v):    780(ptr) Variable Function
+   787(dmat4x2v):    786(ptr) Variable Function
+   793(dmat3x4v):    792(ptr) Variable Function
+   799(dmat4x3v):    798(ptr) Variable Function
                               Store 41(doublev) 42
                               Store 45(dvec2v) 47
                               Store 50(dvec3v) 52
@@ -536,873 +544,885 @@
              240: 53(f64vec4) FAdd 239 238
                               Store 55(dvec4v) 240
              241:39(float64_t) Load 41(doublev)
-             242:39(float64_t) ExtInst 1(GLSL.std.450) 35(Modf) 241 41(doublev)
-             243:39(float64_t) Load 41(doublev)
-             244:39(float64_t) FAdd 243 242
+             243:242(ResType) ExtInst 1(GLSL.std.450) 36(ModfStruct) 241
+             244:39(float64_t) CompositeExtract 243 1
                               Store 41(doublev) 244
-             245: 43(f64vec2) Load 45(dvec2v)
-             246: 43(f64vec2) ExtInst 1(GLSL.std.450) 35(Modf) 245 45(dvec2v)
-             247: 43(f64vec2) Load 45(dvec2v)
-             248: 43(f64vec2) FAdd 247 246
-                              Store 45(dvec2v) 248
-             249: 48(f64vec3) Load 50(dvec3v)
-             250: 48(f64vec3) ExtInst 1(GLSL.std.450) 35(Modf) 249 50(dvec3v)
-             251: 48(f64vec3) Load 50(dvec3v)
-             252: 48(f64vec3) FAdd 251 250
-                              Store 50(dvec3v) 252
-             253: 53(f64vec4) Load 55(dvec4v)
-             254: 53(f64vec4) ExtInst 1(GLSL.std.450) 35(Modf) 253 55(dvec4v)
-             255: 53(f64vec4) Load 55(dvec4v)
-             256: 53(f64vec4) FAdd 255 254
-                              Store 55(dvec4v) 256
-             257:39(float64_t) Load 41(doublev)
-             258:39(float64_t) Load 41(doublev)
-             259:39(float64_t) ExtInst 1(GLSL.std.450) 79(NMin) 257 258
-             260:39(float64_t) Load 41(doublev)
-             261:39(float64_t) FAdd 260 259
-                              Store 41(doublev) 261
-             262: 43(f64vec2) Load 45(dvec2v)
-             263:39(float64_t) Load 41(doublev)
-             264: 43(f64vec2) CompositeConstruct 263 263
-             265: 43(f64vec2) ExtInst 1(GLSL.std.450) 79(NMin) 262 264
-             266: 43(f64vec2) Load 45(dvec2v)
-             267: 43(f64vec2) FAdd 266 265
-                              Store 45(dvec2v) 267
-             268: 48(f64vec3) Load 50(dvec3v)
+             245:39(float64_t) CompositeExtract 243 0
+             246:39(float64_t) Load 41(doublev)
+             247:39(float64_t) FAdd 246 245
+                              Store 41(doublev) 247
+             248: 43(f64vec2) Load 45(dvec2v)
+             250:249(ResType) ExtInst 1(GLSL.std.450) 36(ModfStruct) 248
+             251: 43(f64vec2) CompositeExtract 250 1
+                              Store 45(dvec2v) 251
+             252: 43(f64vec2) CompositeExtract 250 0
+             253: 43(f64vec2) Load 45(dvec2v)
+             254: 43(f64vec2) FAdd 253 252
+                              Store 45(dvec2v) 254
+             255: 48(f64vec3) Load 50(dvec3v)
+             257:256(ResType) ExtInst 1(GLSL.std.450) 36(ModfStruct) 255
+             258: 48(f64vec3) CompositeExtract 257 1
+                              Store 50(dvec3v) 258
+             259: 48(f64vec3) CompositeExtract 257 0
+             260: 48(f64vec3) Load 50(dvec3v)
+             261: 48(f64vec3) FAdd 260 259
+                              Store 50(dvec3v) 261
+             262: 53(f64vec4) Load 55(dvec4v)
+             264:263(ResType) ExtInst 1(GLSL.std.450) 36(ModfStruct) 262
+             265: 53(f64vec4) CompositeExtract 264 1
+                              Store 55(dvec4v) 265
+             266: 53(f64vec4) CompositeExtract 264 0
+             267: 53(f64vec4) Load 55(dvec4v)
+             268: 53(f64vec4) FAdd 267 266
+                              Store 55(dvec4v) 268
              269:39(float64_t) Load 41(doublev)
-             270: 48(f64vec3) CompositeConstruct 269 269 269
-             271: 48(f64vec3) ExtInst 1(GLSL.std.450) 79(NMin) 268 270
-             272: 48(f64vec3) Load 50(dvec3v)
-             273: 48(f64vec3) FAdd 272 271
-                              Store 50(dvec3v) 273
-             274: 53(f64vec4) Load 55(dvec4v)
+             270:39(float64_t) Load 41(doublev)
+             271:39(float64_t) ExtInst 1(GLSL.std.450) 79(NMin) 269 270
+             272:39(float64_t) Load 41(doublev)
+             273:39(float64_t) FAdd 272 271
+                              Store 41(doublev) 273
+             274: 43(f64vec2) Load 45(dvec2v)
              275:39(float64_t) Load 41(doublev)
-             276: 53(f64vec4) CompositeConstruct 275 275 275 275
-             277: 53(f64vec4) ExtInst 1(GLSL.std.450) 79(NMin) 274 276
-             278: 53(f64vec4) Load 55(dvec4v)
-             279: 53(f64vec4) FAdd 278 277
-                              Store 55(dvec4v) 279
-             280: 43(f64vec2) Load 45(dvec2v)
-             281: 43(f64vec2) Load 45(dvec2v)
-             282: 43(f64vec2) ExtInst 1(GLSL.std.450) 79(NMin) 280 281
-             283: 43(f64vec2) Load 45(dvec2v)
-             284: 43(f64vec2) FAdd 283 282
-                              Store 45(dvec2v) 284
-             285: 48(f64vec3) Load 50(dvec3v)
-             286: 48(f64vec3) Load 50(dvec3v)
-             287: 48(f64vec3) ExtInst 1(GLSL.std.450) 79(NMin) 285 286
-             288: 48(f64vec3) Load 50(dvec3v)
-             289: 48(f64vec3) FAdd 288 287
-                              Store 50(dvec3v) 289
+             276: 43(f64vec2) CompositeConstruct 275 275
+             277: 43(f64vec2) ExtInst 1(GLSL.std.450) 79(NMin) 274 276
+             278: 43(f64vec2) Load 45(dvec2v)
+             279: 43(f64vec2) FAdd 278 277
+                              Store 45(dvec2v) 279
+             280: 48(f64vec3) Load 50(dvec3v)
+             281:39(float64_t) Load 41(doublev)
+             282: 48(f64vec3) CompositeConstruct 281 281 281
+             283: 48(f64vec3) ExtInst 1(GLSL.std.450) 79(NMin) 280 282
+             284: 48(f64vec3) Load 50(dvec3v)
+             285: 48(f64vec3) FAdd 284 283
+                              Store 50(dvec3v) 285
+             286: 53(f64vec4) Load 55(dvec4v)
+             287:39(float64_t) Load 41(doublev)
+             288: 53(f64vec4) CompositeConstruct 287 287 287 287
+             289: 53(f64vec4) ExtInst 1(GLSL.std.450) 79(NMin) 286 288
              290: 53(f64vec4) Load 55(dvec4v)
-             291: 53(f64vec4) Load 55(dvec4v)
-             292: 53(f64vec4) ExtInst 1(GLSL.std.450) 79(NMin) 290 291
-             293: 53(f64vec4) Load 55(dvec4v)
-             294: 53(f64vec4) FAdd 293 292
-                              Store 55(dvec4v) 294
-             295:39(float64_t) Load 41(doublev)
-             296:39(float64_t) Load 41(doublev)
-             297:39(float64_t) ExtInst 1(GLSL.std.450) 80(NMax) 295 296
-             298:39(float64_t) Load 41(doublev)
-             299:39(float64_t) FAdd 298 297
-                              Store 41(doublev) 299
-             300: 43(f64vec2) Load 45(dvec2v)
-             301:39(float64_t) Load 41(doublev)
-             302: 43(f64vec2) CompositeConstruct 301 301
-             303: 43(f64vec2) ExtInst 1(GLSL.std.450) 80(NMax) 300 302
-             304: 43(f64vec2) Load 45(dvec2v)
-             305: 43(f64vec2) FAdd 304 303
-                              Store 45(dvec2v) 305
-             306: 48(f64vec3) Load 50(dvec3v)
+             291: 53(f64vec4) FAdd 290 289
+                              Store 55(dvec4v) 291
+             292: 43(f64vec2) Load 45(dvec2v)
+             293: 43(f64vec2) Load 45(dvec2v)
+             294: 43(f64vec2) ExtInst 1(GLSL.std.450) 79(NMin) 292 293
+             295: 43(f64vec2) Load 45(dvec2v)
+             296: 43(f64vec2) FAdd 295 294
+                              Store 45(dvec2v) 296
+             297: 48(f64vec3) Load 50(dvec3v)
+             298: 48(f64vec3) Load 50(dvec3v)
+             299: 48(f64vec3) ExtInst 1(GLSL.std.450) 79(NMin) 297 298
+             300: 48(f64vec3) Load 50(dvec3v)
+             301: 48(f64vec3) FAdd 300 299
+                              Store 50(dvec3v) 301
+             302: 53(f64vec4) Load 55(dvec4v)
+             303: 53(f64vec4) Load 55(dvec4v)
+             304: 53(f64vec4) ExtInst 1(GLSL.std.450) 79(NMin) 302 303
+             305: 53(f64vec4) Load 55(dvec4v)
+             306: 53(f64vec4) FAdd 305 304
+                              Store 55(dvec4v) 306
              307:39(float64_t) Load 41(doublev)
-             308: 48(f64vec3) CompositeConstruct 307 307 307
-             309: 48(f64vec3) ExtInst 1(GLSL.std.450) 80(NMax) 306 308
-             310: 48(f64vec3) Load 50(dvec3v)
-             311: 48(f64vec3) FAdd 310 309
-                              Store 50(dvec3v) 311
-             312: 53(f64vec4) Load 55(dvec4v)
+             308:39(float64_t) Load 41(doublev)
+             309:39(float64_t) ExtInst 1(GLSL.std.450) 80(NMax) 307 308
+             310:39(float64_t) Load 41(doublev)
+             311:39(float64_t) FAdd 310 309
+                              Store 41(doublev) 311
+             312: 43(f64vec2) Load 45(dvec2v)
              313:39(float64_t) Load 41(doublev)
-             314: 53(f64vec4) CompositeConstruct 313 313 313 313
-             315: 53(f64vec4) ExtInst 1(GLSL.std.450) 80(NMax) 312 314
-             316: 53(f64vec4) Load 55(dvec4v)
-             317: 53(f64vec4) FAdd 316 315
-                              Store 55(dvec4v) 317
-             318: 43(f64vec2) Load 45(dvec2v)
-             319: 43(f64vec2) Load 45(dvec2v)
-             320: 43(f64vec2) ExtInst 1(GLSL.std.450) 80(NMax) 318 319
-             321: 43(f64vec2) Load 45(dvec2v)
-             322: 43(f64vec2) FAdd 321 320
-                              Store 45(dvec2v) 322
-             323: 48(f64vec3) Load 50(dvec3v)
-             324: 48(f64vec3) Load 50(dvec3v)
-             325: 48(f64vec3) ExtInst 1(GLSL.std.450) 80(NMax) 323 324
-             326: 48(f64vec3) Load 50(dvec3v)
-             327: 48(f64vec3) FAdd 326 325
-                              Store 50(dvec3v) 327
+             314: 43(f64vec2) CompositeConstruct 313 313
+             315: 43(f64vec2) ExtInst 1(GLSL.std.450) 80(NMax) 312 314
+             316: 43(f64vec2) Load 45(dvec2v)
+             317: 43(f64vec2) FAdd 316 315
+                              Store 45(dvec2v) 317
+             318: 48(f64vec3) Load 50(dvec3v)
+             319:39(float64_t) Load 41(doublev)
+             320: 48(f64vec3) CompositeConstruct 319 319 319
+             321: 48(f64vec3) ExtInst 1(GLSL.std.450) 80(NMax) 318 320
+             322: 48(f64vec3) Load 50(dvec3v)
+             323: 48(f64vec3) FAdd 322 321
+                              Store 50(dvec3v) 323
+             324: 53(f64vec4) Load 55(dvec4v)
+             325:39(float64_t) Load 41(doublev)
+             326: 53(f64vec4) CompositeConstruct 325 325 325 325
+             327: 53(f64vec4) ExtInst 1(GLSL.std.450) 80(NMax) 324 326
              328: 53(f64vec4) Load 55(dvec4v)
-             329: 53(f64vec4) Load 55(dvec4v)
-             330: 53(f64vec4) ExtInst 1(GLSL.std.450) 80(NMax) 328 329
-             331: 53(f64vec4) Load 55(dvec4v)
-             332: 53(f64vec4) FAdd 331 330
-                              Store 55(dvec4v) 332
-             333:39(float64_t) Load 41(doublev)
-             334:39(float64_t) Load 41(doublev)
-             335:39(float64_t) Load 41(doublev)
-             336:39(float64_t) ExtInst 1(GLSL.std.450) 81(NClamp) 333 334 335
-             337:39(float64_t) Load 41(doublev)
-             338:39(float64_t) FAdd 337 336
-                              Store 41(doublev) 338
-             339: 43(f64vec2) Load 45(dvec2v)
-             340:39(float64_t) Load 41(doublev)
-             341:39(float64_t) Load 41(doublev)
-             342: 43(f64vec2) CompositeConstruct 340 340
-             343: 43(f64vec2) CompositeConstruct 341 341
-             344: 43(f64vec2) ExtInst 1(GLSL.std.450) 81(NClamp) 339 342 343
-             345: 43(f64vec2) Load 45(dvec2v)
-             346: 43(f64vec2) FAdd 345 344
-                              Store 45(dvec2v) 346
-             347: 48(f64vec3) Load 50(dvec3v)
-             348:39(float64_t) Load 41(doublev)
+             329: 53(f64vec4) FAdd 328 327
+                              Store 55(dvec4v) 329
+             330: 43(f64vec2) Load 45(dvec2v)
+             331: 43(f64vec2) Load 45(dvec2v)
+             332: 43(f64vec2) ExtInst 1(GLSL.std.450) 80(NMax) 330 331
+             333: 43(f64vec2) Load 45(dvec2v)
+             334: 43(f64vec2) FAdd 333 332
+                              Store 45(dvec2v) 334
+             335: 48(f64vec3) Load 50(dvec3v)
+             336: 48(f64vec3) Load 50(dvec3v)
+             337: 48(f64vec3) ExtInst 1(GLSL.std.450) 80(NMax) 335 336
+             338: 48(f64vec3) Load 50(dvec3v)
+             339: 48(f64vec3) FAdd 338 337
+                              Store 50(dvec3v) 339
+             340: 53(f64vec4) Load 55(dvec4v)
+             341: 53(f64vec4) Load 55(dvec4v)
+             342: 53(f64vec4) ExtInst 1(GLSL.std.450) 80(NMax) 340 341
+             343: 53(f64vec4) Load 55(dvec4v)
+             344: 53(f64vec4) FAdd 343 342
+                              Store 55(dvec4v) 344
+             345:39(float64_t) Load 41(doublev)
+             346:39(float64_t) Load 41(doublev)
+             347:39(float64_t) Load 41(doublev)
+             348:39(float64_t) ExtInst 1(GLSL.std.450) 81(NClamp) 345 346 347
              349:39(float64_t) Load 41(doublev)
-             350: 48(f64vec3) CompositeConstruct 348 348 348
-             351: 48(f64vec3) CompositeConstruct 349 349 349
-             352: 48(f64vec3) ExtInst 1(GLSL.std.450) 81(NClamp) 347 350 351
-             353: 48(f64vec3) Load 50(dvec3v)
-             354: 48(f64vec3) FAdd 353 352
-                              Store 50(dvec3v) 354
-             355: 53(f64vec4) Load 55(dvec4v)
-             356:39(float64_t) Load 41(doublev)
-             357:39(float64_t) Load 41(doublev)
-             358: 53(f64vec4) CompositeConstruct 356 356 356 356
-             359: 53(f64vec4) CompositeConstruct 357 357 357 357
-             360: 53(f64vec4) ExtInst 1(GLSL.std.450) 81(NClamp) 355 358 359
-             361: 53(f64vec4) Load 55(dvec4v)
-             362: 53(f64vec4) FAdd 361 360
-                              Store 55(dvec4v) 362
-             363: 43(f64vec2) Load 45(dvec2v)
-             364: 43(f64vec2) Load 45(dvec2v)
-             365: 43(f64vec2) Load 45(dvec2v)
-             366: 43(f64vec2) ExtInst 1(GLSL.std.450) 81(NClamp) 363 364 365
-             367: 43(f64vec2) Load 45(dvec2v)
-             368: 43(f64vec2) FAdd 367 366
-                              Store 45(dvec2v) 368
-             369: 48(f64vec3) Load 50(dvec3v)
-             370: 48(f64vec3) Load 50(dvec3v)
-             371: 48(f64vec3) Load 50(dvec3v)
-             372: 48(f64vec3) ExtInst 1(GLSL.std.450) 81(NClamp) 369 370 371
-             373: 48(f64vec3) Load 50(dvec3v)
-             374: 48(f64vec3) FAdd 373 372
-                              Store 50(dvec3v) 374
-             375: 53(f64vec4) Load 55(dvec4v)
-             376: 53(f64vec4) Load 55(dvec4v)
-             377: 53(f64vec4) Load 55(dvec4v)
-             378: 53(f64vec4) ExtInst 1(GLSL.std.450) 81(NClamp) 375 376 377
-             379: 53(f64vec4) Load 55(dvec4v)
-             380: 53(f64vec4) FAdd 379 378
-                              Store 55(dvec4v) 380
-             381:39(float64_t) Load 41(doublev)
-             382:39(float64_t) Load 41(doublev)
-             383:39(float64_t) Load 41(doublev)
-             384:39(float64_t) ExtInst 1(GLSL.std.450) 46(FMix) 381 382 383
-             385:39(float64_t) Load 41(doublev)
-             386:39(float64_t) FAdd 385 384
-                              Store 41(doublev) 386
-             387: 43(f64vec2) Load 45(dvec2v)
-             388: 43(f64vec2) Load 45(dvec2v)
-             389:39(float64_t) Load 41(doublev)
-             390: 43(f64vec2) CompositeConstruct 389 389
-             391: 43(f64vec2) ExtInst 1(GLSL.std.450) 46(FMix) 387 388 390
-             392: 43(f64vec2) Load 45(dvec2v)
-             393: 43(f64vec2) FAdd 392 391
-                              Store 45(dvec2v) 393
-             394: 48(f64vec3) Load 50(dvec3v)
-             395: 48(f64vec3) Load 50(dvec3v)
-             396:39(float64_t) Load 41(doublev)
-             397: 48(f64vec3) CompositeConstruct 396 396 396
-             398: 48(f64vec3) ExtInst 1(GLSL.std.450) 46(FMix) 394 395 397
-             399: 48(f64vec3) Load 50(dvec3v)
-             400: 48(f64vec3) FAdd 399 398
-                              Store 50(dvec3v) 400
-             401: 53(f64vec4) Load 55(dvec4v)
-             402: 53(f64vec4) Load 55(dvec4v)
-             403:39(float64_t) Load 41(doublev)
-             404: 53(f64vec4) CompositeConstruct 403 403 403 403
-             405: 53(f64vec4) ExtInst 1(GLSL.std.450) 46(FMix) 401 402 404
-             406: 53(f64vec4) Load 55(dvec4v)
-             407: 53(f64vec4) FAdd 406 405
-                              Store 55(dvec4v) 407
-             408: 43(f64vec2) Load 45(dvec2v)
-             409: 43(f64vec2) Load 45(dvec2v)
-             410: 43(f64vec2) Load 45(dvec2v)
-             411: 43(f64vec2) ExtInst 1(GLSL.std.450) 46(FMix) 408 409 410
-             412: 43(f64vec2) Load 45(dvec2v)
-             413: 43(f64vec2) FAdd 412 411
-                              Store 45(dvec2v) 413
-             414: 48(f64vec3) Load 50(dvec3v)
-             415: 48(f64vec3) Load 50(dvec3v)
-             416: 48(f64vec3) Load 50(dvec3v)
-             417: 48(f64vec3) ExtInst 1(GLSL.std.450) 46(FMix) 414 415 416
-             418: 48(f64vec3) Load 50(dvec3v)
-             419: 48(f64vec3) FAdd 418 417
-                              Store 50(dvec3v) 419
-             420: 53(f64vec4) Load 55(dvec4v)
-             421: 53(f64vec4) Load 55(dvec4v)
-             422: 53(f64vec4) Load 55(dvec4v)
-             423: 53(f64vec4) ExtInst 1(GLSL.std.450) 46(FMix) 420 421 422
-             424: 53(f64vec4) Load 55(dvec4v)
-             425: 53(f64vec4) FAdd 424 423
-                              Store 55(dvec4v) 425
-             426:39(float64_t) Load 41(doublev)
-             427:39(float64_t) Load 41(doublev)
-             431:   428(bool) Load 430(boolv)
-             432:39(float64_t) Select 431 427 426
-             433:39(float64_t) Load 41(doublev)
-             434:39(float64_t) FAdd 433 432
-                              Store 41(doublev) 434
-             435: 43(f64vec2) Load 45(dvec2v)
-             436: 43(f64vec2) Load 45(dvec2v)
-             440:  437(bvec2) Load 439(bvec2v)
-             441: 43(f64vec2) Select 440 436 435
-             442: 43(f64vec2) Load 45(dvec2v)
-             443: 43(f64vec2) FAdd 442 441
-                              Store 45(dvec2v) 443
-             444: 48(f64vec3) Load 50(dvec3v)
-             445: 48(f64vec3) Load 50(dvec3v)
-             449:  446(bvec3) Load 448(bvec3v)
-             450: 48(f64vec3) Select 449 445 444
-             451: 48(f64vec3) Load 50(dvec3v)
-             452: 48(f64vec3) FAdd 451 450
-                              Store 50(dvec3v) 452
-             453: 53(f64vec4) Load 55(dvec4v)
-             454: 53(f64vec4) Load 55(dvec4v)
-             458:  455(bvec4) Load 457(bvec4v)
-             459: 53(f64vec4) Select 458 454 453
-             460: 53(f64vec4) Load 55(dvec4v)
-             461: 53(f64vec4) FAdd 460 459
-                              Store 55(dvec4v) 461
-             462:39(float64_t) Load 41(doublev)
-             463:39(float64_t) Load 41(doublev)
-             464:39(float64_t) ExtInst 1(GLSL.std.450) 48(Step) 462 463
-             465:39(float64_t) Load 41(doublev)
-             466:39(float64_t) FAdd 465 464
-                              Store 41(doublev) 466
-             467: 43(f64vec2) Load 45(dvec2v)
-             468: 43(f64vec2) Load 45(dvec2v)
-             469: 43(f64vec2) ExtInst 1(GLSL.std.450) 48(Step) 467 468
-             470: 43(f64vec2) Load 45(dvec2v)
-             471: 43(f64vec2) FAdd 470 469
-                              Store 45(dvec2v) 471
-             472: 48(f64vec3) Load 50(dvec3v)
-             473: 48(f64vec3) Load 50(dvec3v)
-             474: 48(f64vec3) ExtInst 1(GLSL.std.450) 48(Step) 472 473
-             475: 48(f64vec3) Load 50(dvec3v)
-             476: 48(f64vec3) FAdd 475 474
-                              Store 50(dvec3v) 476
-             477: 53(f64vec4) Load 55(dvec4v)
-             478: 53(f64vec4) Load 55(dvec4v)
-             479: 53(f64vec4) ExtInst 1(GLSL.std.450) 48(Step) 477 478
-             480: 53(f64vec4) Load 55(dvec4v)
-             481: 53(f64vec4) FAdd 480 479
-                              Store 55(dvec4v) 481
-             482:39(float64_t) Load 41(doublev)
-             483: 43(f64vec2) Load 45(dvec2v)
-             484: 43(f64vec2) CompositeConstruct 482 482
-             485: 43(f64vec2) ExtInst 1(GLSL.std.450) 48(Step) 484 483
-             486: 43(f64vec2) Load 45(dvec2v)
-             487: 43(f64vec2) FAdd 486 485
-                              Store 45(dvec2v) 487
-             488:39(float64_t) Load 41(doublev)
-             489: 48(f64vec3) Load 50(dvec3v)
-             490: 48(f64vec3) CompositeConstruct 488 488 488
-             491: 48(f64vec3) ExtInst 1(GLSL.std.450) 48(Step) 490 489
-             492: 48(f64vec3) Load 50(dvec3v)
-             493: 48(f64vec3) FAdd 492 491
-                              Store 50(dvec3v) 493
+             350:39(float64_t) FAdd 349 348
+                              Store 41(doublev) 350
+             351: 43(f64vec2) Load 45(dvec2v)
+             352:39(float64_t) Load 41(doublev)
+             353:39(float64_t) Load 41(doublev)
+             354: 43(f64vec2) CompositeConstruct 352 352
+             355: 43(f64vec2) CompositeConstruct 353 353
+             356: 43(f64vec2) ExtInst 1(GLSL.std.450) 81(NClamp) 351 354 355
+             357: 43(f64vec2) Load 45(dvec2v)
+             358: 43(f64vec2) FAdd 357 356
+                              Store 45(dvec2v) 358
+             359: 48(f64vec3) Load 50(dvec3v)
+             360:39(float64_t) Load 41(doublev)
+             361:39(float64_t) Load 41(doublev)
+             362: 48(f64vec3) CompositeConstruct 360 360 360
+             363: 48(f64vec3) CompositeConstruct 361 361 361
+             364: 48(f64vec3) ExtInst 1(GLSL.std.450) 81(NClamp) 359 362 363
+             365: 48(f64vec3) Load 50(dvec3v)
+             366: 48(f64vec3) FAdd 365 364
+                              Store 50(dvec3v) 366
+             367: 53(f64vec4) Load 55(dvec4v)
+             368:39(float64_t) Load 41(doublev)
+             369:39(float64_t) Load 41(doublev)
+             370: 53(f64vec4) CompositeConstruct 368 368 368 368
+             371: 53(f64vec4) CompositeConstruct 369 369 369 369
+             372: 53(f64vec4) ExtInst 1(GLSL.std.450) 81(NClamp) 367 370 371
+             373: 53(f64vec4) Load 55(dvec4v)
+             374: 53(f64vec4) FAdd 373 372
+                              Store 55(dvec4v) 374
+             375: 43(f64vec2) Load 45(dvec2v)
+             376: 43(f64vec2) Load 45(dvec2v)
+             377: 43(f64vec2) Load 45(dvec2v)
+             378: 43(f64vec2) ExtInst 1(GLSL.std.450) 81(NClamp) 375 376 377
+             379: 43(f64vec2) Load 45(dvec2v)
+             380: 43(f64vec2) FAdd 379 378
+                              Store 45(dvec2v) 380
+             381: 48(f64vec3) Load 50(dvec3v)
+             382: 48(f64vec3) Load 50(dvec3v)
+             383: 48(f64vec3) Load 50(dvec3v)
+             384: 48(f64vec3) ExtInst 1(GLSL.std.450) 81(NClamp) 381 382 383
+             385: 48(f64vec3) Load 50(dvec3v)
+             386: 48(f64vec3) FAdd 385 384
+                              Store 50(dvec3v) 386
+             387: 53(f64vec4) Load 55(dvec4v)
+             388: 53(f64vec4) Load 55(dvec4v)
+             389: 53(f64vec4) Load 55(dvec4v)
+             390: 53(f64vec4) ExtInst 1(GLSL.std.450) 81(NClamp) 387 388 389
+             391: 53(f64vec4) Load 55(dvec4v)
+             392: 53(f64vec4) FAdd 391 390
+                              Store 55(dvec4v) 392
+             393:39(float64_t) Load 41(doublev)
+             394:39(float64_t) Load 41(doublev)
+             395:39(float64_t) Load 41(doublev)
+             396:39(float64_t) ExtInst 1(GLSL.std.450) 46(FMix) 393 394 395
+             397:39(float64_t) Load 41(doublev)
+             398:39(float64_t) FAdd 397 396
+                              Store 41(doublev) 398
+             399: 43(f64vec2) Load 45(dvec2v)
+             400: 43(f64vec2) Load 45(dvec2v)
+             401:39(float64_t) Load 41(doublev)
+             402: 43(f64vec2) CompositeConstruct 401 401
+             403: 43(f64vec2) ExtInst 1(GLSL.std.450) 46(FMix) 399 400 402
+             404: 43(f64vec2) Load 45(dvec2v)
+             405: 43(f64vec2) FAdd 404 403
+                              Store 45(dvec2v) 405
+             406: 48(f64vec3) Load 50(dvec3v)
+             407: 48(f64vec3) Load 50(dvec3v)
+             408:39(float64_t) Load 41(doublev)
+             409: 48(f64vec3) CompositeConstruct 408 408 408
+             410: 48(f64vec3) ExtInst 1(GLSL.std.450) 46(FMix) 406 407 409
+             411: 48(f64vec3) Load 50(dvec3v)
+             412: 48(f64vec3) FAdd 411 410
+                              Store 50(dvec3v) 412
+             413: 53(f64vec4) Load 55(dvec4v)
+             414: 53(f64vec4) Load 55(dvec4v)
+             415:39(float64_t) Load 41(doublev)
+             416: 53(f64vec4) CompositeConstruct 415 415 415 415
+             417: 53(f64vec4) ExtInst 1(GLSL.std.450) 46(FMix) 413 414 416
+             418: 53(f64vec4) Load 55(dvec4v)
+             419: 53(f64vec4) FAdd 418 417
+                              Store 55(dvec4v) 419
+             420: 43(f64vec2) Load 45(dvec2v)
+             421: 43(f64vec2) Load 45(dvec2v)
+             422: 43(f64vec2) Load 45(dvec2v)
+             423: 43(f64vec2) ExtInst 1(GLSL.std.450) 46(FMix) 420 421 422
+             424: 43(f64vec2) Load 45(dvec2v)
+             425: 43(f64vec2) FAdd 424 423
+                              Store 45(dvec2v) 425
+             426: 48(f64vec3) Load 50(dvec3v)
+             427: 48(f64vec3) Load 50(dvec3v)
+             428: 48(f64vec3) Load 50(dvec3v)
+             429: 48(f64vec3) ExtInst 1(GLSL.std.450) 46(FMix) 426 427 428
+             430: 48(f64vec3) Load 50(dvec3v)
+             431: 48(f64vec3) FAdd 430 429
+                              Store 50(dvec3v) 431
+             432: 53(f64vec4) Load 55(dvec4v)
+             433: 53(f64vec4) Load 55(dvec4v)
+             434: 53(f64vec4) Load 55(dvec4v)
+             435: 53(f64vec4) ExtInst 1(GLSL.std.450) 46(FMix) 432 433 434
+             436: 53(f64vec4) Load 55(dvec4v)
+             437: 53(f64vec4) FAdd 436 435
+                              Store 55(dvec4v) 437
+             438:39(float64_t) Load 41(doublev)
+             439:39(float64_t) Load 41(doublev)
+             443:   440(bool) Load 442(boolv)
+             444:39(float64_t) Select 443 439 438
+             445:39(float64_t) Load 41(doublev)
+             446:39(float64_t) FAdd 445 444
+                              Store 41(doublev) 446
+             447: 43(f64vec2) Load 45(dvec2v)
+             448: 43(f64vec2) Load 45(dvec2v)
+             452:  449(bvec2) Load 451(bvec2v)
+             453: 43(f64vec2) Select 452 448 447
+             454: 43(f64vec2) Load 45(dvec2v)
+             455: 43(f64vec2) FAdd 454 453
+                              Store 45(dvec2v) 455
+             456: 48(f64vec3) Load 50(dvec3v)
+             457: 48(f64vec3) Load 50(dvec3v)
+             461:  458(bvec3) Load 460(bvec3v)
+             462: 48(f64vec3) Select 461 457 456
+             463: 48(f64vec3) Load 50(dvec3v)
+             464: 48(f64vec3) FAdd 463 462
+                              Store 50(dvec3v) 464
+             465: 53(f64vec4) Load 55(dvec4v)
+             466: 53(f64vec4) Load 55(dvec4v)
+             470:  467(bvec4) Load 469(bvec4v)
+             471: 53(f64vec4) Select 470 466 465
+             472: 53(f64vec4) Load 55(dvec4v)
+             473: 53(f64vec4) FAdd 472 471
+                              Store 55(dvec4v) 473
+             474:39(float64_t) Load 41(doublev)
+             475:39(float64_t) Load 41(doublev)
+             476:39(float64_t) ExtInst 1(GLSL.std.450) 48(Step) 474 475
+             477:39(float64_t) Load 41(doublev)
+             478:39(float64_t) FAdd 477 476
+                              Store 41(doublev) 478
+             479: 43(f64vec2) Load 45(dvec2v)
+             480: 43(f64vec2) Load 45(dvec2v)
+             481: 43(f64vec2) ExtInst 1(GLSL.std.450) 48(Step) 479 480
+             482: 43(f64vec2) Load 45(dvec2v)
+             483: 43(f64vec2) FAdd 482 481
+                              Store 45(dvec2v) 483
+             484: 48(f64vec3) Load 50(dvec3v)
+             485: 48(f64vec3) Load 50(dvec3v)
+             486: 48(f64vec3) ExtInst 1(GLSL.std.450) 48(Step) 484 485
+             487: 48(f64vec3) Load 50(dvec3v)
+             488: 48(f64vec3) FAdd 487 486
+                              Store 50(dvec3v) 488
+             489: 53(f64vec4) Load 55(dvec4v)
+             490: 53(f64vec4) Load 55(dvec4v)
+             491: 53(f64vec4) ExtInst 1(GLSL.std.450) 48(Step) 489 490
+             492: 53(f64vec4) Load 55(dvec4v)
+             493: 53(f64vec4) FAdd 492 491
+                              Store 55(dvec4v) 493
              494:39(float64_t) Load 41(doublev)
-             495: 53(f64vec4) Load 55(dvec4v)
-             496: 53(f64vec4) CompositeConstruct 494 494 494 494
-             497: 53(f64vec4) ExtInst 1(GLSL.std.450) 48(Step) 496 495
-             498: 53(f64vec4) Load 55(dvec4v)
-             499: 53(f64vec4) FAdd 498 497
-                              Store 55(dvec4v) 499
+             495: 43(f64vec2) Load 45(dvec2v)
+             496: 43(f64vec2) CompositeConstruct 494 494
+             497: 43(f64vec2) ExtInst 1(GLSL.std.450) 48(Step) 496 495
+             498: 43(f64vec2) Load 45(dvec2v)
+             499: 43(f64vec2) FAdd 498 497
+                              Store 45(dvec2v) 499
              500:39(float64_t) Load 41(doublev)
-             501:39(float64_t) Load 41(doublev)
-             502:39(float64_t) Load 41(doublev)
-             503:39(float64_t) ExtInst 1(GLSL.std.450) 49(SmoothStep) 500 501 502
-             504:39(float64_t) Load 41(doublev)
-             505:39(float64_t) FAdd 504 503
-                              Store 41(doublev) 505
-             506: 43(f64vec2) Load 45(dvec2v)
-             507: 43(f64vec2) Load 45(dvec2v)
-             508: 43(f64vec2) Load 45(dvec2v)
-             509: 43(f64vec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 506 507 508
-             510: 43(f64vec2) Load 45(dvec2v)
-             511: 43(f64vec2) FAdd 510 509
-                              Store 45(dvec2v) 511
-             512: 48(f64vec3) Load 50(dvec3v)
-             513: 48(f64vec3) Load 50(dvec3v)
-             514: 48(f64vec3) Load 50(dvec3v)
-             515: 48(f64vec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 512 513 514
-             516: 48(f64vec3) Load 50(dvec3v)
-             517: 48(f64vec3) FAdd 516 515
-                              Store 50(dvec3v) 517
-             518: 53(f64vec4) Load 55(dvec4v)
-             519: 53(f64vec4) Load 55(dvec4v)
-             520: 53(f64vec4) Load 55(dvec4v)
-             521: 53(f64vec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 518 519 520
-             522: 53(f64vec4) Load 55(dvec4v)
-             523: 53(f64vec4) FAdd 522 521
-                              Store 55(dvec4v) 523
-             524:39(float64_t) Load 41(doublev)
-             525:39(float64_t) Load 41(doublev)
-             526: 43(f64vec2) Load 45(dvec2v)
-             527: 43(f64vec2) CompositeConstruct 524 524
-             528: 43(f64vec2) CompositeConstruct 525 525
-             529: 43(f64vec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 527 528 526
-             530: 43(f64vec2) Load 45(dvec2v)
-             531: 43(f64vec2) FAdd 530 529
-                              Store 45(dvec2v) 531
-             532:39(float64_t) Load 41(doublev)
-             533:39(float64_t) Load 41(doublev)
-             534: 48(f64vec3) Load 50(dvec3v)
-             535: 48(f64vec3) CompositeConstruct 532 532 532
-             536: 48(f64vec3) CompositeConstruct 533 533 533
-             537: 48(f64vec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 535 536 534
-             538: 48(f64vec3) Load 50(dvec3v)
-             539: 48(f64vec3) FAdd 538 537
-                              Store 50(dvec3v) 539
-             540:39(float64_t) Load 41(doublev)
-             541:39(float64_t) Load 41(doublev)
-             542: 53(f64vec4) Load 55(dvec4v)
-             543: 53(f64vec4) CompositeConstruct 540 540 540 540
-             544: 53(f64vec4) CompositeConstruct 541 541 541 541
-             545: 53(f64vec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 543 544 542
-             546: 53(f64vec4) Load 55(dvec4v)
-             547: 53(f64vec4) FAdd 546 545
-                              Store 55(dvec4v) 547
-             548:39(float64_t) Load 41(doublev)
-             549:   428(bool) IsNan 548
-                              Store 430(boolv) 549
-             550: 43(f64vec2) Load 45(dvec2v)
-             551:  437(bvec2) IsNan 550
-                              Store 439(bvec2v) 551
-             552: 48(f64vec3) Load 50(dvec3v)
-             553:  446(bvec3) IsNan 552
-                              Store 448(bvec3v) 553
+             501: 48(f64vec3) Load 50(dvec3v)
+             502: 48(f64vec3) CompositeConstruct 500 500 500
+             503: 48(f64vec3) ExtInst 1(GLSL.std.450) 48(Step) 502 501
+             504: 48(f64vec3) Load 50(dvec3v)
+             505: 48(f64vec3) FAdd 504 503
+                              Store 50(dvec3v) 505
+             506:39(float64_t) Load 41(doublev)
+             507: 53(f64vec4) Load 55(dvec4v)
+             508: 53(f64vec4) CompositeConstruct 506 506 506 506
+             509: 53(f64vec4) ExtInst 1(GLSL.std.450) 48(Step) 508 507
+             510: 53(f64vec4) Load 55(dvec4v)
+             511: 53(f64vec4) FAdd 510 509
+                              Store 55(dvec4v) 511
+             512:39(float64_t) Load 41(doublev)
+             513:39(float64_t) Load 41(doublev)
+             514:39(float64_t) Load 41(doublev)
+             515:39(float64_t) ExtInst 1(GLSL.std.450) 49(SmoothStep) 512 513 514
+             516:39(float64_t) Load 41(doublev)
+             517:39(float64_t) FAdd 516 515
+                              Store 41(doublev) 517
+             518: 43(f64vec2) Load 45(dvec2v)
+             519: 43(f64vec2) Load 45(dvec2v)
+             520: 43(f64vec2) Load 45(dvec2v)
+             521: 43(f64vec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 518 519 520
+             522: 43(f64vec2) Load 45(dvec2v)
+             523: 43(f64vec2) FAdd 522 521
+                              Store 45(dvec2v) 523
+             524: 48(f64vec3) Load 50(dvec3v)
+             525: 48(f64vec3) Load 50(dvec3v)
+             526: 48(f64vec3) Load 50(dvec3v)
+             527: 48(f64vec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 524 525 526
+             528: 48(f64vec3) Load 50(dvec3v)
+             529: 48(f64vec3) FAdd 528 527
+                              Store 50(dvec3v) 529
+             530: 53(f64vec4) Load 55(dvec4v)
+             531: 53(f64vec4) Load 55(dvec4v)
+             532: 53(f64vec4) Load 55(dvec4v)
+             533: 53(f64vec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 530 531 532
+             534: 53(f64vec4) Load 55(dvec4v)
+             535: 53(f64vec4) FAdd 534 533
+                              Store 55(dvec4v) 535
+             536:39(float64_t) Load 41(doublev)
+             537:39(float64_t) Load 41(doublev)
+             538: 43(f64vec2) Load 45(dvec2v)
+             539: 43(f64vec2) CompositeConstruct 536 536
+             540: 43(f64vec2) CompositeConstruct 537 537
+             541: 43(f64vec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 539 540 538
+             542: 43(f64vec2) Load 45(dvec2v)
+             543: 43(f64vec2) FAdd 542 541
+                              Store 45(dvec2v) 543
+             544:39(float64_t) Load 41(doublev)
+             545:39(float64_t) Load 41(doublev)
+             546: 48(f64vec3) Load 50(dvec3v)
+             547: 48(f64vec3) CompositeConstruct 544 544 544
+             548: 48(f64vec3) CompositeConstruct 545 545 545
+             549: 48(f64vec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 547 548 546
+             550: 48(f64vec3) Load 50(dvec3v)
+             551: 48(f64vec3) FAdd 550 549
+                              Store 50(dvec3v) 551
+             552:39(float64_t) Load 41(doublev)
+             553:39(float64_t) Load 41(doublev)
              554: 53(f64vec4) Load 55(dvec4v)
-             555:  455(bvec4) IsNan 554
-                              Store 457(bvec4v) 555
-             556:   428(bool) Load 430(boolv)
-                              SelectionMerge 559 None
-                              BranchConditional 556 558 562
-             558:               Label
-             560:39(float64_t)   Load 41(doublev)
-             561:   428(bool)   IsInf 560
-                                Store 557 561
-                                Branch 559
-             562:               Label
-                                Store 557 563
-                                Branch 559
-             559:             Label
-             564:   428(bool) Load 557
-                              Store 430(boolv) 564
-             565:   428(bool) Load 430(boolv)
-                              SelectionMerge 568 None
-                              BranchConditional 565 567 571
-             567:               Label
-             569: 43(f64vec2)   Load 45(dvec2v)
-             570:  437(bvec2)   IsInf 569
-                                Store 566 570
-                                Branch 568
-             571:               Label
-                                Store 566 572
-                                Branch 568
-             568:             Label
-             573:  437(bvec2) Load 566
-                              Store 439(bvec2v) 573
-             574:   428(bool) Load 430(boolv)
-                              SelectionMerge 577 None
-                              BranchConditional 574 576 580
-             576:               Label
-             578: 48(f64vec3)   Load 50(dvec3v)
-             579:  446(bvec3)   IsInf 578
-                                Store 575 579
-                                Branch 577
-             580:               Label
-                                Store 575 581
-                                Branch 577
-             577:             Label
-             582:  446(bvec3) Load 575
-                              Store 448(bvec3v) 582
-             583:   428(bool) Load 430(boolv)
-                              SelectionMerge 586 None
-                              BranchConditional 583 585 589
-             585:               Label
-             587: 53(f64vec4)   Load 55(dvec4v)
-             588:  455(bvec4)   IsInf 587
-                                Store 584 588
-                                Branch 586
-             589:               Label
-                                Store 584 590
-                                Branch 586
-             586:             Label
-             591:  455(bvec4) Load 584
-                              Store 457(bvec4v) 591
-             592:39(float64_t) Load 41(doublev)
-             593:39(float64_t) ExtInst 1(GLSL.std.450) 66(Length) 592
-             594:39(float64_t) Load 41(doublev)
-             595:39(float64_t) FAdd 594 593
-                              Store 41(doublev) 595
-             596: 43(f64vec2) Load 45(dvec2v)
-             597:39(float64_t) ExtInst 1(GLSL.std.450) 66(Length) 596
-             598:39(float64_t) Load 41(doublev)
-             599:39(float64_t) FAdd 598 597
-                              Store 41(doublev) 599
-             600: 48(f64vec3) Load 50(dvec3v)
-             601:39(float64_t) ExtInst 1(GLSL.std.450) 66(Length) 600
-             602:39(float64_t) Load 41(doublev)
-             603:39(float64_t) FAdd 602 601
-                              Store 41(doublev) 603
-             604: 53(f64vec4) Load 55(dvec4v)
+             555: 53(f64vec4) CompositeConstruct 552 552 552 552
+             556: 53(f64vec4) CompositeConstruct 553 553 553 553
+             557: 53(f64vec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 555 556 554
+             558: 53(f64vec4) Load 55(dvec4v)
+             559: 53(f64vec4) FAdd 558 557
+                              Store 55(dvec4v) 559
+             560:39(float64_t) Load 41(doublev)
+             561:   440(bool) IsNan 560
+                              Store 442(boolv) 561
+             562: 43(f64vec2) Load 45(dvec2v)
+             563:  449(bvec2) IsNan 562
+                              Store 451(bvec2v) 563
+             564: 48(f64vec3) Load 50(dvec3v)
+             565:  458(bvec3) IsNan 564
+                              Store 460(bvec3v) 565
+             566: 53(f64vec4) Load 55(dvec4v)
+             567:  467(bvec4) IsNan 566
+                              Store 469(bvec4v) 567
+             568:   440(bool) Load 442(boolv)
+                              SelectionMerge 571 None
+                              BranchConditional 568 570 574
+             570:               Label
+             572:39(float64_t)   Load 41(doublev)
+             573:   440(bool)   IsInf 572
+                                Store 569 573
+                                Branch 571
+             574:               Label
+                                Store 569 575
+                                Branch 571
+             571:             Label
+             576:   440(bool) Load 569
+                              Store 442(boolv) 576
+             577:   440(bool) Load 442(boolv)
+                              SelectionMerge 580 None
+                              BranchConditional 577 579 583
+             579:               Label
+             581: 43(f64vec2)   Load 45(dvec2v)
+             582:  449(bvec2)   IsInf 581
+                                Store 578 582
+                                Branch 580
+             583:               Label
+                                Store 578 584
+                                Branch 580
+             580:             Label
+             585:  449(bvec2) Load 578
+                              Store 451(bvec2v) 585
+             586:   440(bool) Load 442(boolv)
+                              SelectionMerge 589 None
+                              BranchConditional 586 588 592
+             588:               Label
+             590: 48(f64vec3)   Load 50(dvec3v)
+             591:  458(bvec3)   IsInf 590
+                                Store 587 591
+                                Branch 589
+             592:               Label
+                                Store 587 593
+                                Branch 589
+             589:             Label
+             594:  458(bvec3) Load 587
+                              Store 460(bvec3v) 594
+             595:   440(bool) Load 442(boolv)
+                              SelectionMerge 598 None
+                              BranchConditional 595 597 601
+             597:               Label
+             599: 53(f64vec4)   Load 55(dvec4v)
+             600:  467(bvec4)   IsInf 599
+                                Store 596 600
+                                Branch 598
+             601:               Label
+                                Store 596 602
+                                Branch 598
+             598:             Label
+             603:  467(bvec4) Load 596
+                              Store 469(bvec4v) 603
+             604:39(float64_t) Load 41(doublev)
              605:39(float64_t) ExtInst 1(GLSL.std.450) 66(Length) 604
              606:39(float64_t) Load 41(doublev)
              607:39(float64_t) FAdd 606 605
                               Store 41(doublev) 607
-             608:39(float64_t) Load 41(doublev)
-             609:39(float64_t) Load 41(doublev)
-             610:39(float64_t) ExtInst 1(GLSL.std.450) 67(Distance) 608 609
-             611:39(float64_t) Load 41(doublev)
-             612:39(float64_t) FAdd 611 610
-                              Store 41(doublev) 612
-             613: 43(f64vec2) Load 45(dvec2v)
-             614: 43(f64vec2) Load 45(dvec2v)
-             615:39(float64_t) ExtInst 1(GLSL.std.450) 67(Distance) 613 614
-             616:39(float64_t) Load 41(doublev)
-             617:39(float64_t) FAdd 616 615
-                              Store 41(doublev) 617
-             618: 48(f64vec3) Load 50(dvec3v)
-             619: 48(f64vec3) Load 50(dvec3v)
-             620:39(float64_t) ExtInst 1(GLSL.std.450) 67(Distance) 618 619
+             608: 43(f64vec2) Load 45(dvec2v)
+             609:39(float64_t) ExtInst 1(GLSL.std.450) 66(Length) 608
+             610:39(float64_t) Load 41(doublev)
+             611:39(float64_t) FAdd 610 609
+                              Store 41(doublev) 611
+             612: 48(f64vec3) Load 50(dvec3v)
+             613:39(float64_t) ExtInst 1(GLSL.std.450) 66(Length) 612
+             614:39(float64_t) Load 41(doublev)
+             615:39(float64_t) FAdd 614 613
+                              Store 41(doublev) 615
+             616: 53(f64vec4) Load 55(dvec4v)
+             617:39(float64_t) ExtInst 1(GLSL.std.450) 66(Length) 616
+             618:39(float64_t) Load 41(doublev)
+             619:39(float64_t) FAdd 618 617
+                              Store 41(doublev) 619
+             620:39(float64_t) Load 41(doublev)
              621:39(float64_t) Load 41(doublev)
-             622:39(float64_t) FAdd 621 620
-                              Store 41(doublev) 622
-             623: 53(f64vec4) Load 55(dvec4v)
-             624: 53(f64vec4) Load 55(dvec4v)
-             625:39(float64_t) ExtInst 1(GLSL.std.450) 67(Distance) 623 624
-             626:39(float64_t) Load 41(doublev)
-             627:39(float64_t) FAdd 626 625
-                              Store 41(doublev) 627
+             622:39(float64_t) ExtInst 1(GLSL.std.450) 67(Distance) 620 621
+             623:39(float64_t) Load 41(doublev)
+             624:39(float64_t) FAdd 623 622
+                              Store 41(doublev) 624
+             625: 43(f64vec2) Load 45(dvec2v)
+             626: 43(f64vec2) Load 45(dvec2v)
+             627:39(float64_t) ExtInst 1(GLSL.std.450) 67(Distance) 625 626
              628:39(float64_t) Load 41(doublev)
-             629:39(float64_t) Load 41(doublev)
-             630:39(float64_t) FMul 628 629
-             631:39(float64_t) Load 41(doublev)
-             632:39(float64_t) FAdd 631 630
-                              Store 41(doublev) 632
-             633: 43(f64vec2) Load 45(dvec2v)
-             634: 43(f64vec2) Load 45(dvec2v)
-             635:39(float64_t) Dot 633 634
-             636:39(float64_t) Load 41(doublev)
-             637:39(float64_t) FAdd 636 635
-                              Store 41(doublev) 637
-             638: 48(f64vec3) Load 50(dvec3v)
-             639: 48(f64vec3) Load 50(dvec3v)
-             640:39(float64_t) Dot 638 639
+             629:39(float64_t) FAdd 628 627
+                              Store 41(doublev) 629
+             630: 48(f64vec3) Load 50(dvec3v)
+             631: 48(f64vec3) Load 50(dvec3v)
+             632:39(float64_t) ExtInst 1(GLSL.std.450) 67(Distance) 630 631
+             633:39(float64_t) Load 41(doublev)
+             634:39(float64_t) FAdd 633 632
+                              Store 41(doublev) 634
+             635: 53(f64vec4) Load 55(dvec4v)
+             636: 53(f64vec4) Load 55(dvec4v)
+             637:39(float64_t) ExtInst 1(GLSL.std.450) 67(Distance) 635 636
+             638:39(float64_t) Load 41(doublev)
+             639:39(float64_t) FAdd 638 637
+                              Store 41(doublev) 639
+             640:39(float64_t) Load 41(doublev)
              641:39(float64_t) Load 41(doublev)
-             642:39(float64_t) FAdd 641 640
-                              Store 41(doublev) 642
-             643: 53(f64vec4) Load 55(dvec4v)
-             644: 53(f64vec4) Load 55(dvec4v)
-             645:39(float64_t) Dot 643 644
-             646:39(float64_t) Load 41(doublev)
-             647:39(float64_t) FAdd 646 645
-                              Store 41(doublev) 647
-             648: 48(f64vec3) Load 50(dvec3v)
-             649: 48(f64vec3) Load 50(dvec3v)
-             650: 48(f64vec3) ExtInst 1(GLSL.std.450) 68(Cross) 648 649
+             642:39(float64_t) FMul 640 641
+             643:39(float64_t) Load 41(doublev)
+             644:39(float64_t) FAdd 643 642
+                              Store 41(doublev) 644
+             645: 43(f64vec2) Load 45(dvec2v)
+             646: 43(f64vec2) Load 45(dvec2v)
+             647:39(float64_t) Dot 645 646
+             648:39(float64_t) Load 41(doublev)
+             649:39(float64_t) FAdd 648 647
+                              Store 41(doublev) 649
+             650: 48(f64vec3) Load 50(dvec3v)
              651: 48(f64vec3) Load 50(dvec3v)
-             652: 48(f64vec3) FAdd 651 650
-                              Store 50(dvec3v) 652
+             652:39(float64_t) Dot 650 651
              653:39(float64_t) Load 41(doublev)
-             654:39(float64_t) ExtInst 1(GLSL.std.450) 69(Normalize) 653
-             655:39(float64_t) Load 41(doublev)
-             656:39(float64_t) FAdd 655 654
-                              Store 41(doublev) 656
-             657: 43(f64vec2) Load 45(dvec2v)
-             658: 43(f64vec2) ExtInst 1(GLSL.std.450) 69(Normalize) 657
-             659: 43(f64vec2) Load 45(dvec2v)
-             660: 43(f64vec2) FAdd 659 658
-                              Store 45(dvec2v) 660
+             654:39(float64_t) FAdd 653 652
+                              Store 41(doublev) 654
+             655: 53(f64vec4) Load 55(dvec4v)
+             656: 53(f64vec4) Load 55(dvec4v)
+             657:39(float64_t) Dot 655 656
+             658:39(float64_t) Load 41(doublev)
+             659:39(float64_t) FAdd 658 657
+                              Store 41(doublev) 659
+             660: 48(f64vec3) Load 50(dvec3v)
              661: 48(f64vec3) Load 50(dvec3v)
-             662: 48(f64vec3) ExtInst 1(GLSL.std.450) 69(Normalize) 661
+             662: 48(f64vec3) ExtInst 1(GLSL.std.450) 68(Cross) 660 661
              663: 48(f64vec3) Load 50(dvec3v)
              664: 48(f64vec3) FAdd 663 662
                               Store 50(dvec3v) 664
-             665: 53(f64vec4) Load 55(dvec4v)
-             666: 53(f64vec4) ExtInst 1(GLSL.std.450) 69(Normalize) 665
-             667: 53(f64vec4) Load 55(dvec4v)
-             668: 53(f64vec4) FAdd 667 666
-                              Store 55(dvec4v) 668
-             669:39(float64_t) Load 41(doublev)
-             670:39(float64_t) Load 41(doublev)
-             671:39(float64_t) Load 41(doublev)
-             672:39(float64_t) ExtInst 1(GLSL.std.450) 70(FaceForward) 669 670 671
-             673:39(float64_t) Load 41(doublev)
-             674:39(float64_t) FAdd 673 672
-                              Store 41(doublev) 674
-             675: 43(f64vec2) Load 45(dvec2v)
-             676: 43(f64vec2) Load 45(dvec2v)
-             677: 43(f64vec2) Load 45(dvec2v)
-             678: 43(f64vec2) ExtInst 1(GLSL.std.450) 70(FaceForward) 675 676 677
-             679: 43(f64vec2) Load 45(dvec2v)
-             680: 43(f64vec2) FAdd 679 678
-                              Store 45(dvec2v) 680
-             681: 48(f64vec3) Load 50(dvec3v)
-             682: 48(f64vec3) Load 50(dvec3v)
-             683: 48(f64vec3) Load 50(dvec3v)
-             684: 48(f64vec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 681 682 683
-             685: 48(f64vec3) Load 50(dvec3v)
-             686: 48(f64vec3) FAdd 685 684
-                              Store 50(dvec3v) 686
-             687: 53(f64vec4) Load 55(dvec4v)
-             688: 53(f64vec4) Load 55(dvec4v)
-             689: 53(f64vec4) Load 55(dvec4v)
-             690: 53(f64vec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 687 688 689
-             691: 53(f64vec4) Load 55(dvec4v)
-             692: 53(f64vec4) FAdd 691 690
-                              Store 55(dvec4v) 692
-             693:39(float64_t) Load 41(doublev)
-             694:39(float64_t) Load 41(doublev)
-             695:39(float64_t) ExtInst 1(GLSL.std.450) 71(Reflect) 693 694
-             696:39(float64_t) Load 41(doublev)
-             697:39(float64_t) FAdd 696 695
-                              Store 41(doublev) 697
-             698: 43(f64vec2) Load 45(dvec2v)
-             699: 43(f64vec2) Load 45(dvec2v)
-             700: 43(f64vec2) ExtInst 1(GLSL.std.450) 71(Reflect) 698 699
-             701: 43(f64vec2) Load 45(dvec2v)
-             702: 43(f64vec2) FAdd 701 700
-                              Store 45(dvec2v) 702
-             703: 48(f64vec3) Load 50(dvec3v)
-             704: 48(f64vec3) Load 50(dvec3v)
-             705: 48(f64vec3) ExtInst 1(GLSL.std.450) 71(Reflect) 703 704
-             706: 48(f64vec3) Load 50(dvec3v)
-             707: 48(f64vec3) FAdd 706 705
-                              Store 50(dvec3v) 707
-             708: 53(f64vec4) Load 55(dvec4v)
-             709: 53(f64vec4) Load 55(dvec4v)
-             710: 53(f64vec4) ExtInst 1(GLSL.std.450) 71(Reflect) 708 709
-             711: 53(f64vec4) Load 55(dvec4v)
-             712: 53(f64vec4) FAdd 711 710
-                              Store 55(dvec4v) 712
-             713:39(float64_t) Load 41(doublev)
-             714:39(float64_t) Load 41(doublev)
-             715:39(float64_t) Load 41(doublev)
-             716:39(float64_t) ExtInst 1(GLSL.std.450) 72(Refract) 713 714 715
-             717:39(float64_t) Load 41(doublev)
-             718:39(float64_t) FAdd 717 716
-                              Store 41(doublev) 718
-             719: 43(f64vec2) Load 45(dvec2v)
-             720: 43(f64vec2) Load 45(dvec2v)
-             721:39(float64_t) Load 41(doublev)
-             722: 43(f64vec2) ExtInst 1(GLSL.std.450) 72(Refract) 719 720 721
-             723: 43(f64vec2) Load 45(dvec2v)
-             724: 43(f64vec2) FAdd 723 722
-                              Store 45(dvec2v) 724
-             725: 48(f64vec3) Load 50(dvec3v)
-             726: 48(f64vec3) Load 50(dvec3v)
+             665:39(float64_t) Load 41(doublev)
+             666:39(float64_t) ExtInst 1(GLSL.std.450) 69(Normalize) 665
+             667:39(float64_t) Load 41(doublev)
+             668:39(float64_t) FAdd 667 666
+                              Store 41(doublev) 668
+             669: 43(f64vec2) Load 45(dvec2v)
+             670: 43(f64vec2) ExtInst 1(GLSL.std.450) 69(Normalize) 669
+             671: 43(f64vec2) Load 45(dvec2v)
+             672: 43(f64vec2) FAdd 671 670
+                              Store 45(dvec2v) 672
+             673: 48(f64vec3) Load 50(dvec3v)
+             674: 48(f64vec3) ExtInst 1(GLSL.std.450) 69(Normalize) 673
+             675: 48(f64vec3) Load 50(dvec3v)
+             676: 48(f64vec3) FAdd 675 674
+                              Store 50(dvec3v) 676
+             677: 53(f64vec4) Load 55(dvec4v)
+             678: 53(f64vec4) ExtInst 1(GLSL.std.450) 69(Normalize) 677
+             679: 53(f64vec4) Load 55(dvec4v)
+             680: 53(f64vec4) FAdd 679 678
+                              Store 55(dvec4v) 680
+             681:39(float64_t) Load 41(doublev)
+             682:39(float64_t) Load 41(doublev)
+             683:39(float64_t) Load 41(doublev)
+             684:39(float64_t) ExtInst 1(GLSL.std.450) 70(FaceForward) 681 682 683
+             685:39(float64_t) Load 41(doublev)
+             686:39(float64_t) FAdd 685 684
+                              Store 41(doublev) 686
+             687: 43(f64vec2) Load 45(dvec2v)
+             688: 43(f64vec2) Load 45(dvec2v)
+             689: 43(f64vec2) Load 45(dvec2v)
+             690: 43(f64vec2) ExtInst 1(GLSL.std.450) 70(FaceForward) 687 688 689
+             691: 43(f64vec2) Load 45(dvec2v)
+             692: 43(f64vec2) FAdd 691 690
+                              Store 45(dvec2v) 692
+             693: 48(f64vec3) Load 50(dvec3v)
+             694: 48(f64vec3) Load 50(dvec3v)
+             695: 48(f64vec3) Load 50(dvec3v)
+             696: 48(f64vec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 693 694 695
+             697: 48(f64vec3) Load 50(dvec3v)
+             698: 48(f64vec3) FAdd 697 696
+                              Store 50(dvec3v) 698
+             699: 53(f64vec4) Load 55(dvec4v)
+             700: 53(f64vec4) Load 55(dvec4v)
+             701: 53(f64vec4) Load 55(dvec4v)
+             702: 53(f64vec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 699 700 701
+             703: 53(f64vec4) Load 55(dvec4v)
+             704: 53(f64vec4) FAdd 703 702
+                              Store 55(dvec4v) 704
+             705:39(float64_t) Load 41(doublev)
+             706:39(float64_t) Load 41(doublev)
+             707:39(float64_t) ExtInst 1(GLSL.std.450) 71(Reflect) 705 706
+             708:39(float64_t) Load 41(doublev)
+             709:39(float64_t) FAdd 708 707
+                              Store 41(doublev) 709
+             710: 43(f64vec2) Load 45(dvec2v)
+             711: 43(f64vec2) Load 45(dvec2v)
+             712: 43(f64vec2) ExtInst 1(GLSL.std.450) 71(Reflect) 710 711
+             713: 43(f64vec2) Load 45(dvec2v)
+             714: 43(f64vec2) FAdd 713 712
+                              Store 45(dvec2v) 714
+             715: 48(f64vec3) Load 50(dvec3v)
+             716: 48(f64vec3) Load 50(dvec3v)
+             717: 48(f64vec3) ExtInst 1(GLSL.std.450) 71(Reflect) 715 716
+             718: 48(f64vec3) Load 50(dvec3v)
+             719: 48(f64vec3) FAdd 718 717
+                              Store 50(dvec3v) 719
+             720: 53(f64vec4) Load 55(dvec4v)
+             721: 53(f64vec4) Load 55(dvec4v)
+             722: 53(f64vec4) ExtInst 1(GLSL.std.450) 71(Reflect) 720 721
+             723: 53(f64vec4) Load 55(dvec4v)
+             724: 53(f64vec4) FAdd 723 722
+                              Store 55(dvec4v) 724
+             725:39(float64_t) Load 41(doublev)
+             726:39(float64_t) Load 41(doublev)
              727:39(float64_t) Load 41(doublev)
-             728: 48(f64vec3) ExtInst 1(GLSL.std.450) 72(Refract) 725 726 727
-             729: 48(f64vec3) Load 50(dvec3v)
-             730: 48(f64vec3) FAdd 729 728
-                              Store 50(dvec3v) 730
-             731: 53(f64vec4) Load 55(dvec4v)
-             732: 53(f64vec4) Load 55(dvec4v)
+             728:39(float64_t) ExtInst 1(GLSL.std.450) 72(Refract) 725 726 727
+             729:39(float64_t) Load 41(doublev)
+             730:39(float64_t) FAdd 729 728
+                              Store 41(doublev) 730
+             731: 43(f64vec2) Load 45(dvec2v)
+             732: 43(f64vec2) Load 45(dvec2v)
              733:39(float64_t) Load 41(doublev)
-             734: 53(f64vec4) ExtInst 1(GLSL.std.450) 72(Refract) 731 732 733
-             735: 53(f64vec4) Load 55(dvec4v)
-             736: 53(f64vec4) FAdd 735 734
-                              Store 55(dvec4v) 736
-             740: 43(f64vec2) Load 45(dvec2v)
-             741: 43(f64vec2) Load 45(dvec2v)
-             742:         737 OuterProduct 740 741
-                              Store 739(dmat2v) 742
-             746: 48(f64vec3) Load 50(dvec3v)
-             747: 48(f64vec3) Load 50(dvec3v)
-             748:         743 OuterProduct 746 747
-                              Store 745(dmat3v) 748
-             752: 53(f64vec4) Load 55(dvec4v)
-             753: 53(f64vec4) Load 55(dvec4v)
+             734: 43(f64vec2) ExtInst 1(GLSL.std.450) 72(Refract) 731 732 733
+             735: 43(f64vec2) Load 45(dvec2v)
+             736: 43(f64vec2) FAdd 735 734
+                              Store 45(dvec2v) 736
+             737: 48(f64vec3) Load 50(dvec3v)
+             738: 48(f64vec3) Load 50(dvec3v)
+             739:39(float64_t) Load 41(doublev)
+             740: 48(f64vec3) ExtInst 1(GLSL.std.450) 72(Refract) 737 738 739
+             741: 48(f64vec3) Load 50(dvec3v)
+             742: 48(f64vec3) FAdd 741 740
+                              Store 50(dvec3v) 742
+             743: 53(f64vec4) Load 55(dvec4v)
+             744: 53(f64vec4) Load 55(dvec4v)
+             745:39(float64_t) Load 41(doublev)
+             746: 53(f64vec4) ExtInst 1(GLSL.std.450) 72(Refract) 743 744 745
+             747: 53(f64vec4) Load 55(dvec4v)
+             748: 53(f64vec4) FAdd 747 746
+                              Store 55(dvec4v) 748
+             752: 43(f64vec2) Load 45(dvec2v)
+             753: 43(f64vec2) Load 45(dvec2v)
              754:         749 OuterProduct 752 753
-                              Store 751(dmat4v) 754
+                              Store 751(dmat2v) 754
              758: 48(f64vec3) Load 50(dvec3v)
-             759: 43(f64vec2) Load 45(dvec2v)
+             759: 48(f64vec3) Load 50(dvec3v)
              760:         755 OuterProduct 758 759
-                              Store 757(dmat2x3v) 760
-             764: 43(f64vec2) Load 45(dvec2v)
-             765: 48(f64vec3) Load 50(dvec3v)
+                              Store 757(dmat3v) 760
+             764: 53(f64vec4) Load 55(dvec4v)
+             765: 53(f64vec4) Load 55(dvec4v)
              766:         761 OuterProduct 764 765
-                              Store 763(dmat3x2v) 766
-             770: 53(f64vec4) Load 55(dvec4v)
+                              Store 763(dmat4v) 766
+             770: 48(f64vec3) Load 50(dvec3v)
              771: 43(f64vec2) Load 45(dvec2v)
              772:         767 OuterProduct 770 771
-                              Store 769(dmat2x4v) 772
+                              Store 769(dmat2x3v) 772
              776: 43(f64vec2) Load 45(dvec2v)
-             777: 53(f64vec4) Load 55(dvec4v)
+             777: 48(f64vec3) Load 50(dvec3v)
              778:         773 OuterProduct 776 777
-                              Store 775(dmat4x2v) 778
+                              Store 775(dmat3x2v) 778
              782: 53(f64vec4) Load 55(dvec4v)
-             783: 48(f64vec3) Load 50(dvec3v)
+             783: 43(f64vec2) Load 45(dvec2v)
              784:         779 OuterProduct 782 783
-                              Store 781(dmat3x4v) 784
-             788: 48(f64vec3) Load 50(dvec3v)
+                              Store 781(dmat2x4v) 784
+             788: 43(f64vec2) Load 45(dvec2v)
              789: 53(f64vec4) Load 55(dvec4v)
              790:         785 OuterProduct 788 789
-                              Store 787(dmat4x3v) 790
-             791:         737 Load 739(dmat2v)
-             792:         737 Load 739(dmat2v)
-             793: 43(f64vec2) CompositeExtract 791 0
-             794: 43(f64vec2) CompositeExtract 792 0
-             795: 43(f64vec2) FMul 793 794
-             796: 43(f64vec2) CompositeExtract 791 1
-             797: 43(f64vec2) CompositeExtract 792 1
-             798: 43(f64vec2) FMul 796 797
-             799:         737 CompositeConstruct 795 798
-             800:         737 Load 739(dmat2v)
-             801:         737 MatrixTimesMatrix 800 799
-                              Store 739(dmat2v) 801
-             802:         743 Load 745(dmat3v)
-             803:         743 Load 745(dmat3v)
-             804: 48(f64vec3) CompositeExtract 802 0
-             805: 48(f64vec3) CompositeExtract 803 0
-             806: 48(f64vec3) FMul 804 805
-             807: 48(f64vec3) CompositeExtract 802 1
-             808: 48(f64vec3) CompositeExtract 803 1
-             809: 48(f64vec3) FMul 807 808
-             810: 48(f64vec3) CompositeExtract 802 2
-             811: 48(f64vec3) CompositeExtract 803 2
-             812: 48(f64vec3) FMul 810 811
-             813:         743 CompositeConstruct 806 809 812
-             814:         743 Load 745(dmat3v)
-             815:         743 MatrixTimesMatrix 814 813
-                              Store 745(dmat3v) 815
-             816:         749 Load 751(dmat4v)
-             817:         749 Load 751(dmat4v)
-             818: 53(f64vec4) CompositeExtract 816 0
-             819: 53(f64vec4) CompositeExtract 817 0
-             820: 53(f64vec4) FMul 818 819
-             821: 53(f64vec4) CompositeExtract 816 1
-             822: 53(f64vec4) CompositeExtract 817 1
-             823: 53(f64vec4) FMul 821 822
-             824: 53(f64vec4) CompositeExtract 816 2
-             825: 53(f64vec4) CompositeExtract 817 2
-             826: 53(f64vec4) FMul 824 825
-             827: 53(f64vec4) CompositeExtract 816 3
-             828: 53(f64vec4) CompositeExtract 817 3
-             829: 53(f64vec4) FMul 827 828
-             830:         749 CompositeConstruct 820 823 826 829
-             831:         749 Load 751(dmat4v)
-             832:         749 MatrixTimesMatrix 831 830
-                              Store 751(dmat4v) 832
-             833:         755 Load 757(dmat2x3v)
-             834:         755 Load 757(dmat2x3v)
-             835: 48(f64vec3) CompositeExtract 833 0
-             836: 48(f64vec3) CompositeExtract 834 0
-             837: 48(f64vec3) FMul 835 836
-             838: 48(f64vec3) CompositeExtract 833 1
-             839: 48(f64vec3) CompositeExtract 834 1
-             840: 48(f64vec3) FMul 838 839
-             841:         755 CompositeConstruct 837 840
-                              Store 757(dmat2x3v) 841
-             842:         767 Load 769(dmat2x4v)
-             843:         767 Load 769(dmat2x4v)
-             844: 53(f64vec4) CompositeExtract 842 0
-             845: 53(f64vec4) CompositeExtract 843 0
-             846: 53(f64vec4) FMul 844 845
-             847: 53(f64vec4) CompositeExtract 842 1
-             848: 53(f64vec4) CompositeExtract 843 1
-             849: 53(f64vec4) FMul 847 848
-             850:         767 CompositeConstruct 846 849
-                              Store 769(dmat2x4v) 850
-             851:         761 Load 763(dmat3x2v)
-             852:         761 Load 763(dmat3x2v)
-             853: 43(f64vec2) CompositeExtract 851 0
-             854: 43(f64vec2) CompositeExtract 852 0
-             855: 43(f64vec2) FMul 853 854
-             856: 43(f64vec2) CompositeExtract 851 1
-             857: 43(f64vec2) CompositeExtract 852 1
-             858: 43(f64vec2) FMul 856 857
-             859: 43(f64vec2) CompositeExtract 851 2
-             860: 43(f64vec2) CompositeExtract 852 2
-             861: 43(f64vec2) FMul 859 860
-             862:         761 CompositeConstruct 855 858 861
-                              Store 763(dmat3x2v) 862
-             863:         779 Load 781(dmat3x4v)
-             864:         779 Load 781(dmat3x4v)
-             865: 53(f64vec4) CompositeExtract 863 0
-             866: 53(f64vec4) CompositeExtract 864 0
-             867: 53(f64vec4) FMul 865 866
-             868: 53(f64vec4) CompositeExtract 863 1
-             869: 53(f64vec4) CompositeExtract 864 1
-             870: 53(f64vec4) FMul 868 869
-             871: 53(f64vec4) CompositeExtract 863 2
-             872: 53(f64vec4) CompositeExtract 864 2
-             873: 53(f64vec4) FMul 871 872
-             874:         779 CompositeConstruct 867 870 873
-                              Store 781(dmat3x4v) 874
-             875:         773 Load 775(dmat4x2v)
-             876:         773 Load 775(dmat4x2v)
-             877: 43(f64vec2) CompositeExtract 875 0
-             878: 43(f64vec2) CompositeExtract 876 0
-             879: 43(f64vec2) FMul 877 878
-             880: 43(f64vec2) CompositeExtract 875 1
-             881: 43(f64vec2) CompositeExtract 876 1
-             882: 43(f64vec2) FMul 880 881
-             883: 43(f64vec2) CompositeExtract 875 2
-             884: 43(f64vec2) CompositeExtract 876 2
-             885: 43(f64vec2) FMul 883 884
-             886: 43(f64vec2) CompositeExtract 875 3
-             887: 43(f64vec2) CompositeExtract 876 3
-             888: 43(f64vec2) FMul 886 887
-             889:         773 CompositeConstruct 879 882 885 888
-                              Store 775(dmat4x2v) 889
-             890:         785 Load 787(dmat4x3v)
-             891:         785 Load 787(dmat4x3v)
-             892: 48(f64vec3) CompositeExtract 890 0
-             893: 48(f64vec3) CompositeExtract 891 0
-             894: 48(f64vec3) FMul 892 893
-             895: 48(f64vec3) CompositeExtract 890 1
-             896: 48(f64vec3) CompositeExtract 891 1
-             897: 48(f64vec3) FMul 895 896
-             898: 48(f64vec3) CompositeExtract 890 2
-             899: 48(f64vec3) CompositeExtract 891 2
-             900: 48(f64vec3) FMul 898 899
-             901: 48(f64vec3) CompositeExtract 890 3
-             902: 48(f64vec3) CompositeExtract 891 3
-             903: 48(f64vec3) FMul 901 902
-             904:         785 CompositeConstruct 894 897 900 903
-                              Store 787(dmat4x3v) 904
-             905:         737 Load 739(dmat2v)
-             906:         737 Transpose 905
-             907:         737 Load 739(dmat2v)
-             908:         737 MatrixTimesMatrix 907 906
-                              Store 739(dmat2v) 908
-             909:         743 Load 745(dmat3v)
-             910:         743 Transpose 909
-             911:         743 Load 745(dmat3v)
-             912:         743 MatrixTimesMatrix 911 910
-                              Store 745(dmat3v) 912
-             913:         749 Load 751(dmat4v)
-             914:         749 Transpose 913
-             915:         749 Load 751(dmat4v)
-             916:         749 MatrixTimesMatrix 915 914
-                              Store 751(dmat4v) 916
-             917:         761 Load 763(dmat3x2v)
-             918:         755 Transpose 917
-                              Store 757(dmat2x3v) 918
-             919:         755 Load 757(dmat2x3v)
-             920:         761 Transpose 919
-                              Store 763(dmat3x2v) 920
-             921:         773 Load 775(dmat4x2v)
-             922:         767 Transpose 921
-                              Store 769(dmat2x4v) 922
-             923:         767 Load 769(dmat2x4v)
-             924:         773 Transpose 923
-                              Store 775(dmat4x2v) 924
-             925:         785 Load 787(dmat4x3v)
-             926:         779 Transpose 925
-                              Store 781(dmat3x4v) 926
-             927:         779 Load 781(dmat3x4v)
-             928:         785 Transpose 927
-                              Store 787(dmat4x3v) 928
-             929:         737 Load 739(dmat2v)
-             930:39(float64_t) ExtInst 1(GLSL.std.450) 33(Determinant) 929
-             931:39(float64_t) Load 41(doublev)
-             932:39(float64_t) FAdd 931 930
-                              Store 41(doublev) 932
-             933:         743 Load 745(dmat3v)
-             934:39(float64_t) ExtInst 1(GLSL.std.450) 33(Determinant) 933
-             935:39(float64_t) Load 41(doublev)
-             936:39(float64_t) FAdd 935 934
-                              Store 41(doublev) 936
-             937:         749 Load 751(dmat4v)
-             938:39(float64_t) ExtInst 1(GLSL.std.450) 33(Determinant) 937
-             939:39(float64_t) Load 41(doublev)
-             940:39(float64_t) FAdd 939 938
-                              Store 41(doublev) 940
-             941:         737 Load 739(dmat2v)
-             942:         737 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 941
-             943:         737 Load 739(dmat2v)
-             944:         737 MatrixTimesMatrix 943 942
-                              Store 739(dmat2v) 944
-             945:         743 Load 745(dmat3v)
-             946:         743 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 945
-             947:         743 Load 745(dmat3v)
-             948:         743 MatrixTimesMatrix 947 946
-                              Store 745(dmat3v) 948
-             949:         749 Load 751(dmat4v)
-             950:         749 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 949
-             951:         749 Load 751(dmat4v)
-             952:         749 MatrixTimesMatrix 951 950
-                              Store 751(dmat4v) 952
-             953:39(float64_t) Load 41(doublev)
-             955:     40(ptr) AccessChain 45(dvec2v) 954
-             956:39(float64_t) Load 955
-             957:39(float64_t) FAdd 953 956
-             959:     40(ptr) AccessChain 50(dvec3v) 958
-             960:39(float64_t) Load 959
-             961:39(float64_t) FAdd 957 960
-             963:     40(ptr) AccessChain 55(dvec4v) 962
-             964:39(float64_t) Load 963
-             965:39(float64_t) FAdd 961 964
-             967:     40(ptr) AccessChain 739(dmat2v) 966 954
+                              Store 787(dmat4x2v) 790
+             794: 53(f64vec4) Load 55(dvec4v)
+             795: 48(f64vec3) Load 50(dvec3v)
+             796:         791 OuterProduct 794 795
+                              Store 793(dmat3x4v) 796
+             800: 48(f64vec3) Load 50(dvec3v)
+             801: 53(f64vec4) Load 55(dvec4v)
+             802:         797 OuterProduct 800 801
+                              Store 799(dmat4x3v) 802
+             803:         749 Load 751(dmat2v)
+             804:         749 Load 751(dmat2v)
+             805: 43(f64vec2) CompositeExtract 803 0
+             806: 43(f64vec2) CompositeExtract 804 0
+             807: 43(f64vec2) FMul 805 806
+             808: 43(f64vec2) CompositeExtract 803 1
+             809: 43(f64vec2) CompositeExtract 804 1
+             810: 43(f64vec2) FMul 808 809
+             811:         749 CompositeConstruct 807 810
+             812:         749 Load 751(dmat2v)
+             813:         749 MatrixTimesMatrix 812 811
+                              Store 751(dmat2v) 813
+             814:         755 Load 757(dmat3v)
+             815:         755 Load 757(dmat3v)
+             816: 48(f64vec3) CompositeExtract 814 0
+             817: 48(f64vec3) CompositeExtract 815 0
+             818: 48(f64vec3) FMul 816 817
+             819: 48(f64vec3) CompositeExtract 814 1
+             820: 48(f64vec3) CompositeExtract 815 1
+             821: 48(f64vec3) FMul 819 820
+             822: 48(f64vec3) CompositeExtract 814 2
+             823: 48(f64vec3) CompositeExtract 815 2
+             824: 48(f64vec3) FMul 822 823
+             825:         755 CompositeConstruct 818 821 824
+             826:         755 Load 757(dmat3v)
+             827:         755 MatrixTimesMatrix 826 825
+                              Store 757(dmat3v) 827
+             828:         761 Load 763(dmat4v)
+             829:         761 Load 763(dmat4v)
+             830: 53(f64vec4) CompositeExtract 828 0
+             831: 53(f64vec4) CompositeExtract 829 0
+             832: 53(f64vec4) FMul 830 831
+             833: 53(f64vec4) CompositeExtract 828 1
+             834: 53(f64vec4) CompositeExtract 829 1
+             835: 53(f64vec4) FMul 833 834
+             836: 53(f64vec4) CompositeExtract 828 2
+             837: 53(f64vec4) CompositeExtract 829 2
+             838: 53(f64vec4) FMul 836 837
+             839: 53(f64vec4) CompositeExtract 828 3
+             840: 53(f64vec4) CompositeExtract 829 3
+             841: 53(f64vec4) FMul 839 840
+             842:         761 CompositeConstruct 832 835 838 841
+             843:         761 Load 763(dmat4v)
+             844:         761 MatrixTimesMatrix 843 842
+                              Store 763(dmat4v) 844
+             845:         767 Load 769(dmat2x3v)
+             846:         767 Load 769(dmat2x3v)
+             847: 48(f64vec3) CompositeExtract 845 0
+             848: 48(f64vec3) CompositeExtract 846 0
+             849: 48(f64vec3) FMul 847 848
+             850: 48(f64vec3) CompositeExtract 845 1
+             851: 48(f64vec3) CompositeExtract 846 1
+             852: 48(f64vec3) FMul 850 851
+             853:         767 CompositeConstruct 849 852
+                              Store 769(dmat2x3v) 853
+             854:         779 Load 781(dmat2x4v)
+             855:         779 Load 781(dmat2x4v)
+             856: 53(f64vec4) CompositeExtract 854 0
+             857: 53(f64vec4) CompositeExtract 855 0
+             858: 53(f64vec4) FMul 856 857
+             859: 53(f64vec4) CompositeExtract 854 1
+             860: 53(f64vec4) CompositeExtract 855 1
+             861: 53(f64vec4) FMul 859 860
+             862:         779 CompositeConstruct 858 861
+                              Store 781(dmat2x4v) 862
+             863:         773 Load 775(dmat3x2v)
+             864:         773 Load 775(dmat3x2v)
+             865: 43(f64vec2) CompositeExtract 863 0
+             866: 43(f64vec2) CompositeExtract 864 0
+             867: 43(f64vec2) FMul 865 866
+             868: 43(f64vec2) CompositeExtract 863 1
+             869: 43(f64vec2) CompositeExtract 864 1
+             870: 43(f64vec2) FMul 868 869
+             871: 43(f64vec2) CompositeExtract 863 2
+             872: 43(f64vec2) CompositeExtract 864 2
+             873: 43(f64vec2) FMul 871 872
+             874:         773 CompositeConstruct 867 870 873
+                              Store 775(dmat3x2v) 874
+             875:         791 Load 793(dmat3x4v)
+             876:         791 Load 793(dmat3x4v)
+             877: 53(f64vec4) CompositeExtract 875 0
+             878: 53(f64vec4) CompositeExtract 876 0
+             879: 53(f64vec4) FMul 877 878
+             880: 53(f64vec4) CompositeExtract 875 1
+             881: 53(f64vec4) CompositeExtract 876 1
+             882: 53(f64vec4) FMul 880 881
+             883: 53(f64vec4) CompositeExtract 875 2
+             884: 53(f64vec4) CompositeExtract 876 2
+             885: 53(f64vec4) FMul 883 884
+             886:         791 CompositeConstruct 879 882 885
+                              Store 793(dmat3x4v) 886
+             887:         785 Load 787(dmat4x2v)
+             888:         785 Load 787(dmat4x2v)
+             889: 43(f64vec2) CompositeExtract 887 0
+             890: 43(f64vec2) CompositeExtract 888 0
+             891: 43(f64vec2) FMul 889 890
+             892: 43(f64vec2) CompositeExtract 887 1
+             893: 43(f64vec2) CompositeExtract 888 1
+             894: 43(f64vec2) FMul 892 893
+             895: 43(f64vec2) CompositeExtract 887 2
+             896: 43(f64vec2) CompositeExtract 888 2
+             897: 43(f64vec2) FMul 895 896
+             898: 43(f64vec2) CompositeExtract 887 3
+             899: 43(f64vec2) CompositeExtract 888 3
+             900: 43(f64vec2) FMul 898 899
+             901:         785 CompositeConstruct 891 894 897 900
+                              Store 787(dmat4x2v) 901
+             902:         797 Load 799(dmat4x3v)
+             903:         797 Load 799(dmat4x3v)
+             904: 48(f64vec3) CompositeExtract 902 0
+             905: 48(f64vec3) CompositeExtract 903 0
+             906: 48(f64vec3) FMul 904 905
+             907: 48(f64vec3) CompositeExtract 902 1
+             908: 48(f64vec3) CompositeExtract 903 1
+             909: 48(f64vec3) FMul 907 908
+             910: 48(f64vec3) CompositeExtract 902 2
+             911: 48(f64vec3) CompositeExtract 903 2
+             912: 48(f64vec3) FMul 910 911
+             913: 48(f64vec3) CompositeExtract 902 3
+             914: 48(f64vec3) CompositeExtract 903 3
+             915: 48(f64vec3) FMul 913 914
+             916:         797 CompositeConstruct 906 909 912 915
+                              Store 799(dmat4x3v) 916
+             917:         749 Load 751(dmat2v)
+             918:         749 Transpose 917
+             919:         749 Load 751(dmat2v)
+             920:         749 MatrixTimesMatrix 919 918
+                              Store 751(dmat2v) 920
+             921:         755 Load 757(dmat3v)
+             922:         755 Transpose 921
+             923:         755 Load 757(dmat3v)
+             924:         755 MatrixTimesMatrix 923 922
+                              Store 757(dmat3v) 924
+             925:         761 Load 763(dmat4v)
+             926:         761 Transpose 925
+             927:         761 Load 763(dmat4v)
+             928:         761 MatrixTimesMatrix 927 926
+                              Store 763(dmat4v) 928
+             929:         773 Load 775(dmat3x2v)
+             930:         767 Transpose 929
+                              Store 769(dmat2x3v) 930
+             931:         767 Load 769(dmat2x3v)
+             932:         773 Transpose 931
+                              Store 775(dmat3x2v) 932
+             933:         785 Load 787(dmat4x2v)
+             934:         779 Transpose 933
+                              Store 781(dmat2x4v) 934
+             935:         779 Load 781(dmat2x4v)
+             936:         785 Transpose 935
+                              Store 787(dmat4x2v) 936
+             937:         797 Load 799(dmat4x3v)
+             938:         791 Transpose 937
+                              Store 793(dmat3x4v) 938
+             939:         791 Load 793(dmat3x4v)
+             940:         797 Transpose 939
+                              Store 799(dmat4x3v) 940
+             941:         749 Load 751(dmat2v)
+             942:39(float64_t) ExtInst 1(GLSL.std.450) 33(Determinant) 941
+             943:39(float64_t) Load 41(doublev)
+             944:39(float64_t) FAdd 943 942
+                              Store 41(doublev) 944
+             945:         755 Load 757(dmat3v)
+             946:39(float64_t) ExtInst 1(GLSL.std.450) 33(Determinant) 945
+             947:39(float64_t) Load 41(doublev)
+             948:39(float64_t) FAdd 947 946
+                              Store 41(doublev) 948
+             949:         761 Load 763(dmat4v)
+             950:39(float64_t) ExtInst 1(GLSL.std.450) 33(Determinant) 949
+             951:39(float64_t) Load 41(doublev)
+             952:39(float64_t) FAdd 951 950
+                              Store 41(doublev) 952
+             953:         749 Load 751(dmat2v)
+             954:         749 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 953
+             955:         749 Load 751(dmat2v)
+             956:         749 MatrixTimesMatrix 955 954
+                              Store 751(dmat2v) 956
+             957:         755 Load 757(dmat3v)
+             958:         755 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 957
+             959:         755 Load 757(dmat3v)
+             960:         755 MatrixTimesMatrix 959 958
+                              Store 757(dmat3v) 960
+             961:         761 Load 763(dmat4v)
+             962:         761 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 961
+             963:         761 Load 763(dmat4v)
+             964:         761 MatrixTimesMatrix 963 962
+                              Store 763(dmat4v) 964
+             965:39(float64_t) Load 41(doublev)
+             967:     40(ptr) AccessChain 45(dvec2v) 966
              968:39(float64_t) Load 967
              969:39(float64_t) FAdd 965 968
-             971:     40(ptr) AccessChain 745(dmat3v) 970 958
+             971:     40(ptr) AccessChain 50(dvec3v) 970
              972:39(float64_t) Load 971
              973:39(float64_t) FAdd 969 972
-             974:     40(ptr) AccessChain 751(dmat4v) 25 962
-             975:39(float64_t) Load 974
-             976:39(float64_t) FAdd 973 975
-             977:     40(ptr) AccessChain 757(dmat2x3v) 966 954
-             978:39(float64_t) Load 977
-             979:39(float64_t) FAdd 976 978
-             980:     40(ptr) AccessChain 763(dmat3x2v) 966 954
-             981:39(float64_t) Load 980
-             982:39(float64_t) FAdd 979 981
-             983:     40(ptr) AccessChain 781(dmat3x4v) 970 958
+             975:     40(ptr) AccessChain 55(dvec4v) 974
+             976:39(float64_t) Load 975
+             977:39(float64_t) FAdd 973 976
+             979:     40(ptr) AccessChain 751(dmat2v) 978 966
+             980:39(float64_t) Load 979
+             981:39(float64_t) FAdd 977 980
+             983:     40(ptr) AccessChain 757(dmat3v) 982 970
              984:39(float64_t) Load 983
-             985:39(float64_t) FAdd 982 984
-             986:     40(ptr) AccessChain 787(dmat4x3v) 970 958
+             985:39(float64_t) FAdd 981 984
+             986:     40(ptr) AccessChain 763(dmat4v) 25 974
              987:39(float64_t) Load 986
              988:39(float64_t) FAdd 985 987
-             989:     40(ptr) AccessChain 769(dmat2x4v) 966 954
+             989:     40(ptr) AccessChain 769(dmat2x3v) 978 966
              990:39(float64_t) Load 989
              991:39(float64_t) FAdd 988 990
-             992:     40(ptr) AccessChain 775(dmat4x2v) 966 954
+             992:     40(ptr) AccessChain 775(dmat3x2v) 978 966
              993:39(float64_t) Load 992
              994:39(float64_t) FAdd 991 993
-             995:   428(bool) Load 430(boolv)
-             997:   10(float) Select 995 996 21
-             998:39(float64_t) FConvert 997
-             999:39(float64_t) FAdd 994 998
-            1000:    429(ptr) AccessChain 439(bvec2v) 33
-            1001:   428(bool) Load 1000
-            1002:   10(float) Select 1001 996 21
-            1003:39(float64_t) FConvert 1002
-            1004:39(float64_t) FAdd 999 1003
-            1005:    429(ptr) AccessChain 448(bvec3v) 33
-            1006:   428(bool) Load 1005
-            1007:   10(float) Select 1006 996 21
-            1008:39(float64_t) FConvert 1007
-            1009:39(float64_t) FAdd 1004 1008
-            1010:    429(ptr) AccessChain 457(bvec4v) 33
-            1011:   428(bool) Load 1010
-            1012:   10(float) Select 1011 996 21
-            1013:39(float64_t) FConvert 1012
-            1014:39(float64_t) FAdd 1009 1013
-            1015:   10(float) FConvert 1014
-            1016:   11(fvec4) Load 13(outp)
-            1017:   11(fvec4) VectorTimesScalar 1016 1015
-                              Store 13(outp) 1017
+             995:     40(ptr) AccessChain 793(dmat3x4v) 982 970
+             996:39(float64_t) Load 995
+             997:39(float64_t) FAdd 994 996
+             998:     40(ptr) AccessChain 799(dmat4x3v) 982 970
+             999:39(float64_t) Load 998
+            1000:39(float64_t) FAdd 997 999
+            1001:     40(ptr) AccessChain 781(dmat2x4v) 978 966
+            1002:39(float64_t) Load 1001
+            1003:39(float64_t) FAdd 1000 1002
+            1004:     40(ptr) AccessChain 787(dmat4x2v) 978 966
+            1005:39(float64_t) Load 1004
+            1006:39(float64_t) FAdd 1003 1005
+            1007:   440(bool) Load 442(boolv)
+            1009:   10(float) Select 1007 1008 21
+            1010:39(float64_t) FConvert 1009
+            1011:39(float64_t) FAdd 1006 1010
+            1012:    441(ptr) AccessChain 451(bvec2v) 33
+            1013:   440(bool) Load 1012
+            1014:   10(float) Select 1013 1008 21
+            1015:39(float64_t) FConvert 1014
+            1016:39(float64_t) FAdd 1011 1015
+            1017:    441(ptr) AccessChain 460(bvec3v) 33
+            1018:   440(bool) Load 1017
+            1019:   10(float) Select 1018 1008 21
+            1020:39(float64_t) FConvert 1019
+            1021:39(float64_t) FAdd 1016 1020
+            1022:    441(ptr) AccessChain 469(bvec4v) 33
+            1023:   440(bool) Load 1022
+            1024:   10(float) Select 1023 1008 21
+            1025:39(float64_t) FConvert 1024
+            1026:39(float64_t) FAdd 1021 1025
+            1027:   10(float) FConvert 1026
+            1028:   11(fvec4) Load 13(outp)
+            1029:   11(fvec4) VectorTimesScalar 1028 1027
+                              Store 13(outp) 1029
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.400.frag.out b/Test/baseResults/spv.400.frag.out
index aa42d28..9beede2 100644
--- a/Test/baseResults/spv.400.frag.out
+++ b/Test/baseResults/spv.400.frag.out
@@ -2,7 +2,7 @@
 Validation failed
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 1122
+// Id's are bound by 1134
 
                               Capability Shader
                               Capability Geometry
@@ -12,7 +12,7 @@
                               Capability SampledRect
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 13 1027 1033 1038 1054 1080 1101 1103 1109 1111 1120
+                              EntryPoint Fragment 4  "main" 13 1039 1045 1050 1066 1092 1113 1115 1121 1123 1132
                               ExecutionMode 4 OriginUpperLeft
                               Source GLSL 400
                               SourceExtension  "GL_ARB_separate_shader_objects"
@@ -25,56 +25,60 @@
                               Name 45  "dvec2v"
                               Name 50  "dvec3v"
                               Name 55  "dvec4v"
-                              Name 430  "boolv"
-                              Name 439  "bvec2v"
-                              Name 448  "bvec3v"
-                              Name 457  "bvec4v"
-                              Name 739  "dmat2v"
-                              Name 745  "dmat3v"
-                              Name 751  "dmat4v"
-                              Name 757  "dmat2x3v"
-                              Name 763  "dmat3x2v"
-                              Name 769  "dmat2x4v"
-                              Name 775  "dmat4x2v"
-                              Name 781  "dmat3x4v"
-                              Name 787  "dmat4x3v"
-                              Name 1019  "v"
-                              Name 1025  "arrayedSampler"
-                              Name 1027  "i"
-                              Name 1033  "c2D"
-                              Name 1038  "gl_ClipDistance"
-                              Name 1054  "uoutp"
-                              Name 1058  "samp2dr"
-                              Name 1080  "ioutp"
-                              Name 1084  "isamp2DA"
-                              Name 1101  "gl_FragCoord"
-                              Name 1103  "vl2"
-                              Name 1109  "uo"
-                              Name 1111  "u"
-                              Name 1119  "id"
-                              Name 1120  "gl_PrimitiveID"
+                              Name 242  "ResType"
+                              Name 249  "ResType"
+                              Name 256  "ResType"
+                              Name 263  "ResType"
+                              Name 442  "boolv"
+                              Name 451  "bvec2v"
+                              Name 460  "bvec3v"
+                              Name 469  "bvec4v"
+                              Name 751  "dmat2v"
+                              Name 757  "dmat3v"
+                              Name 763  "dmat4v"
+                              Name 769  "dmat2x3v"
+                              Name 775  "dmat3x2v"
+                              Name 781  "dmat2x4v"
+                              Name 787  "dmat4x2v"
+                              Name 793  "dmat3x4v"
+                              Name 799  "dmat4x3v"
+                              Name 1031  "v"
+                              Name 1037  "arrayedSampler"
+                              Name 1039  "i"
+                              Name 1045  "c2D"
+                              Name 1050  "gl_ClipDistance"
+                              Name 1066  "uoutp"
+                              Name 1070  "samp2dr"
+                              Name 1092  "ioutp"
+                              Name 1096  "isamp2DA"
+                              Name 1113  "gl_FragCoord"
+                              Name 1115  "vl2"
+                              Name 1121  "uo"
+                              Name 1123  "u"
+                              Name 1131  "id"
+                              Name 1132  "gl_PrimitiveID"
                               Decorate 13(outp) Location 1
-                              Decorate 17(u2drs) DescriptorSet 0
                               Decorate 17(u2drs) Binding 3
-                              Decorate 1025(arrayedSampler) DescriptorSet 0
-                              Decorate 1025(arrayedSampler) Binding 0
-                              Decorate 1027(i) Flat
-                              Decorate 1027(i) Location 1
-                              Decorate 1033(c2D) Location 0
-                              Decorate 1038(gl_ClipDistance) BuiltIn ClipDistance
-                              Decorate 1054(uoutp) Location 3
-                              Decorate 1058(samp2dr) DescriptorSet 0
-                              Decorate 1058(samp2dr) Binding 1
-                              Decorate 1080(ioutp) Location 2
-                              Decorate 1084(isamp2DA) DescriptorSet 0
-                              Decorate 1084(isamp2DA) Binding 2
-                              Decorate 1101(gl_FragCoord) BuiltIn FragCoord
-                              Decorate 1103(vl2) Location 6
-                              Decorate 1109(uo) Location 0
-                              Decorate 1111(u) Flat
-                              Decorate 1111(u) Location 2
-                              Decorate 1120(gl_PrimitiveID) Flat
-                              Decorate 1120(gl_PrimitiveID) BuiltIn PrimitiveId
+                              Decorate 17(u2drs) DescriptorSet 0
+                              Decorate 1037(arrayedSampler) Binding 0
+                              Decorate 1037(arrayedSampler) DescriptorSet 0
+                              Decorate 1039(i) Flat
+                              Decorate 1039(i) Location 1
+                              Decorate 1045(c2D) Location 0
+                              Decorate 1050(gl_ClipDistance) BuiltIn ClipDistance
+                              Decorate 1066(uoutp) Location 3
+                              Decorate 1070(samp2dr) Binding 1
+                              Decorate 1070(samp2dr) DescriptorSet 0
+                              Decorate 1092(ioutp) Location 2
+                              Decorate 1096(isamp2DA) Binding 2
+                              Decorate 1096(isamp2DA) DescriptorSet 0
+                              Decorate 1113(gl_FragCoord) BuiltIn FragCoord
+                              Decorate 1115(vl2) Location 6
+                              Decorate 1121(uo) Location 0
+                              Decorate 1123(u) Flat
+                              Decorate 1123(u) Location 2
+                              Decorate 1132(gl_PrimitiveID) BuiltIn PrimitiveId
+                              Decorate 1132(gl_PrimitiveID) Flat
                2:             TypeVoid
                3:             TypeFunction 2
               10:             TypeFloat 32
@@ -109,161 +113,165 @@
               52: 48(f64vec3) ConstantComposite 51 51 51
               53:             TypeVector 39(float64_t) 4
               54:             TypePointer Function 53(f64vec4)
-             428:             TypeBool
-             429:             TypePointer Function 428(bool)
-             437:             TypeVector 428(bool) 2
-             438:             TypePointer Function 437(bvec2)
-             446:             TypeVector 428(bool) 3
-             447:             TypePointer Function 446(bvec3)
-             455:             TypeVector 428(bool) 4
-             456:             TypePointer Function 455(bvec4)
-             563:   428(bool) ConstantFalse
-             572:  437(bvec2) ConstantComposite 563 563
-             581:  446(bvec3) ConstantComposite 563 563 563
-             590:  455(bvec4) ConstantComposite 563 563 563 563
-             737:             TypeMatrix 43(f64vec2) 2
-             738:             TypePointer Function 737
-             743:             TypeMatrix 48(f64vec3) 3
-             744:             TypePointer Function 743
-             749:             TypeMatrix 53(f64vec4) 4
+    242(ResType):             TypeStruct 39(float64_t) 39(float64_t)
+    249(ResType):             TypeStruct 43(f64vec2) 43(f64vec2)
+    256(ResType):             TypeStruct 48(f64vec3) 48(f64vec3)
+    263(ResType):             TypeStruct 53(f64vec4) 53(f64vec4)
+             440:             TypeBool
+             441:             TypePointer Function 440(bool)
+             449:             TypeVector 440(bool) 2
+             450:             TypePointer Function 449(bvec2)
+             458:             TypeVector 440(bool) 3
+             459:             TypePointer Function 458(bvec3)
+             467:             TypeVector 440(bool) 4
+             468:             TypePointer Function 467(bvec4)
+             575:   440(bool) ConstantFalse
+             584:  449(bvec2) ConstantComposite 575 575
+             593:  458(bvec3) ConstantComposite 575 575 575
+             602:  467(bvec4) ConstantComposite 575 575 575 575
+             749:             TypeMatrix 43(f64vec2) 2
              750:             TypePointer Function 749
-             755:             TypeMatrix 48(f64vec3) 2
+             755:             TypeMatrix 48(f64vec3) 3
              756:             TypePointer Function 755
-             761:             TypeMatrix 43(f64vec2) 3
+             761:             TypeMatrix 53(f64vec4) 4
              762:             TypePointer Function 761
-             767:             TypeMatrix 53(f64vec4) 2
+             767:             TypeMatrix 48(f64vec3) 2
              768:             TypePointer Function 767
-             773:             TypeMatrix 43(f64vec2) 4
+             773:             TypeMatrix 43(f64vec2) 3
              774:             TypePointer Function 773
-             779:             TypeMatrix 53(f64vec4) 3
+             779:             TypeMatrix 53(f64vec4) 2
              780:             TypePointer Function 779
-             785:             TypeMatrix 48(f64vec3) 4
+             785:             TypeMatrix 43(f64vec2) 4
              786:             TypePointer Function 785
-             954:     32(int) Constant 1
-             958:     32(int) Constant 2
-             962:     32(int) Constant 3
-             966:     23(int) Constant 1
-             970:     23(int) Constant 2
-             996:   10(float) Constant 1065353216
-            1018:             TypePointer Function 11(fvec4)
-            1020:             TypeImage 10(float) 2D sampled format:Unknown
-            1021:             TypeSampledImage 1020
-            1022:     32(int) Constant 5
-            1023:             TypeArray 1021 1022
-            1024:             TypePointer UniformConstant 1023
-1025(arrayedSampler):   1024(ptr) Variable UniformConstant
-            1026:             TypePointer Input 23(int)
-         1027(i):   1026(ptr) Variable Input
-            1029:             TypePointer UniformConstant 1021
-            1032:             TypePointer Input 20(fvec2)
-       1033(c2D):   1032(ptr) Variable Input
-            1036:             TypeArray 10(float) 958
-            1037:             TypePointer Input 1036
-1038(gl_ClipDistance):   1037(ptr) Variable Input
-            1039:             TypePointer Input 10(float)
-            1043:             TypeVector 10(float) 3
-            1052:             TypeVector 32(int) 4
-            1053:             TypePointer Output 1052(ivec4)
-     1054(uoutp):   1053(ptr) Variable Output
-            1055:             TypeImage 32(int) Rect sampled format:Unknown
-            1056:             TypeSampledImage 1055
-            1057:             TypePointer UniformConstant 1056
-   1058(samp2dr):   1057(ptr) Variable UniformConstant
-            1061:     32(int) Constant 4
-            1062:             TypeArray 24(ivec2) 1061
-            1063:   24(ivec2) ConstantComposite 966 970
-            1064:     23(int) Constant 15
-            1065:     23(int) Constant 16
-            1066:   24(ivec2) ConstantComposite 1064 1065
-            1067:     23(int) Constant 4294967294
-            1068:     23(int) Constant 0
-            1069:   24(ivec2) ConstantComposite 1067 1068
-            1070:        1062 ConstantComposite 1063 27 1066 1069
-            1078:             TypeVector 23(int) 4
-            1079:             TypePointer Output 1078(ivec4)
-     1080(ioutp):   1079(ptr) Variable Output
-            1081:             TypeImage 23(int) 2D array sampled format:Unknown
-            1082:             TypeSampledImage 1081
-            1083:             TypePointer UniformConstant 1082
-  1084(isamp2DA):   1083(ptr) Variable UniformConstant
-            1086:   10(float) Constant 1036831949
-            1087: 1043(fvec3) ConstantComposite 1086 1086 1086
-            1088:   24(ivec2) ConstantComposite 966 966
-            1100:             TypePointer Input 11(fvec4)
-1101(gl_FragCoord):   1100(ptr) Variable Input
-       1103(vl2):   1100(ptr) Variable Input
-            1108:             TypePointer Output 32(int)
-        1109(uo):   1108(ptr) Variable Output
-            1110:             TypePointer Input 32(int)
-         1111(u):   1110(ptr) Variable Input
-            1118:             TypePointer Function 23(int)
-1120(gl_PrimitiveID):   1026(ptr) Variable Input
+             791:             TypeMatrix 53(f64vec4) 3
+             792:             TypePointer Function 791
+             797:             TypeMatrix 48(f64vec3) 4
+             798:             TypePointer Function 797
+             966:     32(int) Constant 1
+             970:     32(int) Constant 2
+             974:     32(int) Constant 3
+             978:     23(int) Constant 1
+             982:     23(int) Constant 2
+            1008:   10(float) Constant 1065353216
+            1030:             TypePointer Function 11(fvec4)
+            1032:             TypeImage 10(float) 2D sampled format:Unknown
+            1033:             TypeSampledImage 1032
+            1034:     32(int) Constant 5
+            1035:             TypeArray 1033 1034
+            1036:             TypePointer UniformConstant 1035
+1037(arrayedSampler):   1036(ptr) Variable UniformConstant
+            1038:             TypePointer Input 23(int)
+         1039(i):   1038(ptr) Variable Input
+            1041:             TypePointer UniformConstant 1033
+            1044:             TypePointer Input 20(fvec2)
+       1045(c2D):   1044(ptr) Variable Input
+            1048:             TypeArray 10(float) 970
+            1049:             TypePointer Input 1048
+1050(gl_ClipDistance):   1049(ptr) Variable Input
+            1051:             TypePointer Input 10(float)
+            1055:             TypeVector 10(float) 3
+            1064:             TypeVector 32(int) 4
+            1065:             TypePointer Output 1064(ivec4)
+     1066(uoutp):   1065(ptr) Variable Output
+            1067:             TypeImage 32(int) Rect sampled format:Unknown
+            1068:             TypeSampledImage 1067
+            1069:             TypePointer UniformConstant 1068
+   1070(samp2dr):   1069(ptr) Variable UniformConstant
+            1073:     32(int) Constant 4
+            1074:             TypeArray 24(ivec2) 1073
+            1075:   24(ivec2) ConstantComposite 978 982
+            1076:     23(int) Constant 15
+            1077:     23(int) Constant 16
+            1078:   24(ivec2) ConstantComposite 1076 1077
+            1079:     23(int) Constant 4294967294
+            1080:     23(int) Constant 0
+            1081:   24(ivec2) ConstantComposite 1079 1080
+            1082:        1074 ConstantComposite 1075 27 1078 1081
+            1090:             TypeVector 23(int) 4
+            1091:             TypePointer Output 1090(ivec4)
+     1092(ioutp):   1091(ptr) Variable Output
+            1093:             TypeImage 23(int) 2D array sampled format:Unknown
+            1094:             TypeSampledImage 1093
+            1095:             TypePointer UniformConstant 1094
+  1096(isamp2DA):   1095(ptr) Variable UniformConstant
+            1098:   10(float) Constant 1036831949
+            1099: 1055(fvec3) ConstantComposite 1098 1098 1098
+            1100:   24(ivec2) ConstantComposite 978 978
+            1112:             TypePointer Input 11(fvec4)
+1113(gl_FragCoord):   1112(ptr) Variable Input
+       1115(vl2):   1112(ptr) Variable Input
+            1120:             TypePointer Output 32(int)
+        1121(uo):   1120(ptr) Variable Output
+            1122:             TypePointer Input 32(int)
+         1123(u):   1122(ptr) Variable Input
+            1130:             TypePointer Function 23(int)
+1132(gl_PrimitiveID):   1038(ptr) Variable Input
          4(main):           2 Function None 3
                5:             Label
-         1019(v):   1018(ptr) Variable Function
-        1119(id):   1118(ptr) Variable Function
-            1028:     23(int) Load 1027(i)
-            1030:   1029(ptr) AccessChain 1025(arrayedSampler) 1028
-            1031:        1021 Load 1030
-            1034:   20(fvec2) Load 1033(c2D)
-            1035:   11(fvec4) ImageSampleImplicitLod 1031 1034
-                              Store 1019(v) 1035
-            1040:   1039(ptr) AccessChain 1038(gl_ClipDistance) 966
-            1041:   10(float) Load 1040
-            1042:     34(ptr) AccessChain 13(outp) 33
-                              Store 1042 1041
-            1044:   11(fvec4) Load 1019(v)
-            1045: 1043(fvec3) VectorShuffle 1044 1044 1 2 3
-            1046:     34(ptr) AccessChain 13(outp) 954
-            1047:   10(float) CompositeExtract 1045 0
-                              Store 1046 1047
-            1048:     34(ptr) AccessChain 13(outp) 958
-            1049:   10(float) CompositeExtract 1045 1
-                              Store 1048 1049
-            1050:     34(ptr) AccessChain 13(outp) 962
-            1051:   10(float) CompositeExtract 1045 2
-                              Store 1050 1051
-            1059:        1056 Load 1058(samp2dr)
-            1060:   20(fvec2) Load 1033(c2D)
-            1071: 1052(ivec4) ImageGather 1059 1060 970 ConstOffsets 1070
-                              Store 1054(uoutp) 1071
-            1072:   1029(ptr) AccessChain 1025(arrayedSampler) 1068
-            1073:        1021 Load 1072
-            1074:   20(fvec2) Load 1033(c2D)
-            1075:   11(fvec4) ImageGather 1073 1074 1068
-            1076:   11(fvec4) Load 13(outp)
-            1077:   11(fvec4) FAdd 1076 1075
-                              Store 13(outp) 1077
-            1085:        1082 Load 1084(isamp2DA)
-            1089: 1078(ivec4) ImageGather 1085 1087 25 ConstOffset 1088
-                              Store 1080(ioutp) 1089
-            1090:        1082 Load 1084(isamp2DA)
-            1091: 1078(ivec4) ImageGather 1090 1087 25 ConstOffset 1088
-            1092: 1078(ivec4) Load 1080(ioutp)
-            1093: 1078(ivec4) IAdd 1092 1091
-                              Store 1080(ioutp) 1093
-            1094:        1082 Load 1084(isamp2DA)
-            1095:     23(int) Load 1027(i)
-            1096:   24(ivec2) CompositeConstruct 1095 1095
-            1097: 1078(ivec4) ImageGather 1094 1087 1068 Offset 1096
-            1098: 1078(ivec4) Load 1080(ioutp)
-            1099: 1078(ivec4) IAdd 1098 1097
-                              Store 1080(ioutp) 1099
-            1102:   11(fvec4) Load 1101(gl_FragCoord)
-            1104:   11(fvec4) Load 1103(vl2)
-            1105:   11(fvec4) FAdd 1102 1104
-            1106:   11(fvec4) Load 13(outp)
-            1107:   11(fvec4) FAdd 1106 1105
-                              Store 13(outp) 1107
-            1112:     32(int) Load 1111(u)
-            1113:     23(int) Load 1027(i)
-            1114:     32(int) Bitcast 1113
-            1115:     32(int) UMod 1112 1114
-                              Store 1109(uo) 1115
-            1116:           2 FunctionCall 6(foo23()
-            1117:           2 FunctionCall 8(doubles()
-            1121:     23(int) Load 1120(gl_PrimitiveID)
-                              Store 1119(id) 1121
+         1031(v):   1030(ptr) Variable Function
+        1131(id):   1130(ptr) Variable Function
+            1040:     23(int) Load 1039(i)
+            1042:   1041(ptr) AccessChain 1037(arrayedSampler) 1040
+            1043:        1033 Load 1042
+            1046:   20(fvec2) Load 1045(c2D)
+            1047:   11(fvec4) ImageSampleImplicitLod 1043 1046
+                              Store 1031(v) 1047
+            1052:   1051(ptr) AccessChain 1050(gl_ClipDistance) 978
+            1053:   10(float) Load 1052
+            1054:     34(ptr) AccessChain 13(outp) 33
+                              Store 1054 1053
+            1056:   11(fvec4) Load 1031(v)
+            1057: 1055(fvec3) VectorShuffle 1056 1056 1 2 3
+            1058:     34(ptr) AccessChain 13(outp) 966
+            1059:   10(float) CompositeExtract 1057 0
+                              Store 1058 1059
+            1060:     34(ptr) AccessChain 13(outp) 970
+            1061:   10(float) CompositeExtract 1057 1
+                              Store 1060 1061
+            1062:     34(ptr) AccessChain 13(outp) 974
+            1063:   10(float) CompositeExtract 1057 2
+                              Store 1062 1063
+            1071:        1068 Load 1070(samp2dr)
+            1072:   20(fvec2) Load 1045(c2D)
+            1083: 1064(ivec4) ImageGather 1071 1072 982 ConstOffsets 1082
+                              Store 1066(uoutp) 1083
+            1084:   1041(ptr) AccessChain 1037(arrayedSampler) 1080
+            1085:        1033 Load 1084
+            1086:   20(fvec2) Load 1045(c2D)
+            1087:   11(fvec4) ImageGather 1085 1086 1080
+            1088:   11(fvec4) Load 13(outp)
+            1089:   11(fvec4) FAdd 1088 1087
+                              Store 13(outp) 1089
+            1097:        1094 Load 1096(isamp2DA)
+            1101: 1090(ivec4) ImageGather 1097 1099 25 ConstOffset 1100
+                              Store 1092(ioutp) 1101
+            1102:        1094 Load 1096(isamp2DA)
+            1103: 1090(ivec4) ImageGather 1102 1099 25 ConstOffset 1100
+            1104: 1090(ivec4) Load 1092(ioutp)
+            1105: 1090(ivec4) IAdd 1104 1103
+                              Store 1092(ioutp) 1105
+            1106:        1094 Load 1096(isamp2DA)
+            1107:     23(int) Load 1039(i)
+            1108:   24(ivec2) CompositeConstruct 1107 1107
+            1109: 1090(ivec4) ImageGather 1106 1099 1080 Offset 1108
+            1110: 1090(ivec4) Load 1092(ioutp)
+            1111: 1090(ivec4) IAdd 1110 1109
+                              Store 1092(ioutp) 1111
+            1114:   11(fvec4) Load 1113(gl_FragCoord)
+            1116:   11(fvec4) Load 1115(vl2)
+            1117:   11(fvec4) FAdd 1114 1116
+            1118:   11(fvec4) Load 13(outp)
+            1119:   11(fvec4) FAdd 1118 1117
+                              Store 13(outp) 1119
+            1124:     32(int) Load 1123(u)
+            1125:     23(int) Load 1039(i)
+            1126:     32(int) Bitcast 1125
+            1127:     32(int) UMod 1124 1126
+                              Store 1121(uo) 1127
+            1128:           2 FunctionCall 6(foo23()
+            1129:           2 FunctionCall 8(doubles()
+            1133:     23(int) Load 1132(gl_PrimitiveID)
+                              Store 1131(id) 1133
                               Return
                               FunctionEnd
        6(foo23():           2 Function None 3
@@ -287,23 +295,23 @@
       45(dvec2v):     44(ptr) Variable Function
       50(dvec3v):     49(ptr) Variable Function
       55(dvec4v):     54(ptr) Variable Function
-      430(boolv):    429(ptr) Variable Function
-     439(bvec2v):    438(ptr) Variable Function
-     448(bvec3v):    447(ptr) Variable Function
-     457(bvec4v):    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
-   757(dmat2x3v):    756(ptr) Variable Function
-   763(dmat3x2v):    762(ptr) Variable Function
-   769(dmat2x4v):    768(ptr) Variable Function
-   775(dmat4x2v):    774(ptr) Variable Function
-   781(dmat3x4v):    780(ptr) Variable Function
-   787(dmat4x3v):    786(ptr) Variable Function
+      442(boolv):    441(ptr) Variable Function
+     451(bvec2v):    450(ptr) Variable Function
+     460(bvec3v):    459(ptr) Variable Function
+     469(bvec4v):    468(ptr) Variable Function
+             569:    441(ptr) Variable Function
+             578:    450(ptr) Variable Function
+             587:    459(ptr) Variable Function
+             596:    468(ptr) Variable Function
+     751(dmat2v):    750(ptr) Variable Function
+     757(dmat3v):    756(ptr) Variable Function
+     763(dmat4v):    762(ptr) Variable Function
+   769(dmat2x3v):    768(ptr) Variable Function
+   775(dmat3x2v):    774(ptr) Variable Function
+   781(dmat2x4v):    780(ptr) Variable Function
+   787(dmat4x2v):    786(ptr) Variable Function
+   793(dmat3x4v):    792(ptr) Variable Function
+   799(dmat4x3v):    798(ptr) Variable Function
                               Store 41(doublev) 42
                               Store 45(dvec2v) 47
                               Store 50(dvec3v) 52
@@ -537,873 +545,885 @@
              240: 53(f64vec4) FAdd 239 238
                               Store 55(dvec4v) 240
              241:39(float64_t) Load 41(doublev)
-             242:39(float64_t) ExtInst 1(GLSL.std.450) 35(Modf) 241 41(doublev)
-             243:39(float64_t) Load 41(doublev)
-             244:39(float64_t) FAdd 243 242
+             243:242(ResType) ExtInst 1(GLSL.std.450) 36(ModfStruct) 241
+             244:39(float64_t) CompositeExtract 243 1
                               Store 41(doublev) 244
-             245: 43(f64vec2) Load 45(dvec2v)
-             246: 43(f64vec2) ExtInst 1(GLSL.std.450) 35(Modf) 245 45(dvec2v)
-             247: 43(f64vec2) Load 45(dvec2v)
-             248: 43(f64vec2) FAdd 247 246
-                              Store 45(dvec2v) 248
-             249: 48(f64vec3) Load 50(dvec3v)
-             250: 48(f64vec3) ExtInst 1(GLSL.std.450) 35(Modf) 249 50(dvec3v)
-             251: 48(f64vec3) Load 50(dvec3v)
-             252: 48(f64vec3) FAdd 251 250
-                              Store 50(dvec3v) 252
-             253: 53(f64vec4) Load 55(dvec4v)
-             254: 53(f64vec4) ExtInst 1(GLSL.std.450) 35(Modf) 253 55(dvec4v)
-             255: 53(f64vec4) Load 55(dvec4v)
-             256: 53(f64vec4) FAdd 255 254
-                              Store 55(dvec4v) 256
-             257:39(float64_t) Load 41(doublev)
-             258:39(float64_t) Load 41(doublev)
-             259:39(float64_t) ExtInst 1(GLSL.std.450) 37(FMin) 257 258
-             260:39(float64_t) Load 41(doublev)
-             261:39(float64_t) FAdd 260 259
-                              Store 41(doublev) 261
-             262: 43(f64vec2) Load 45(dvec2v)
-             263:39(float64_t) Load 41(doublev)
-             264: 43(f64vec2) CompositeConstruct 263 263
-             265: 43(f64vec2) ExtInst 1(GLSL.std.450) 37(FMin) 262 264
-             266: 43(f64vec2) Load 45(dvec2v)
-             267: 43(f64vec2) FAdd 266 265
-                              Store 45(dvec2v) 267
-             268: 48(f64vec3) Load 50(dvec3v)
+             245:39(float64_t) CompositeExtract 243 0
+             246:39(float64_t) Load 41(doublev)
+             247:39(float64_t) FAdd 246 245
+                              Store 41(doublev) 247
+             248: 43(f64vec2) Load 45(dvec2v)
+             250:249(ResType) ExtInst 1(GLSL.std.450) 36(ModfStruct) 248
+             251: 43(f64vec2) CompositeExtract 250 1
+                              Store 45(dvec2v) 251
+             252: 43(f64vec2) CompositeExtract 250 0
+             253: 43(f64vec2) Load 45(dvec2v)
+             254: 43(f64vec2) FAdd 253 252
+                              Store 45(dvec2v) 254
+             255: 48(f64vec3) Load 50(dvec3v)
+             257:256(ResType) ExtInst 1(GLSL.std.450) 36(ModfStruct) 255
+             258: 48(f64vec3) CompositeExtract 257 1
+                              Store 50(dvec3v) 258
+             259: 48(f64vec3) CompositeExtract 257 0
+             260: 48(f64vec3) Load 50(dvec3v)
+             261: 48(f64vec3) FAdd 260 259
+                              Store 50(dvec3v) 261
+             262: 53(f64vec4) Load 55(dvec4v)
+             264:263(ResType) ExtInst 1(GLSL.std.450) 36(ModfStruct) 262
+             265: 53(f64vec4) CompositeExtract 264 1
+                              Store 55(dvec4v) 265
+             266: 53(f64vec4) CompositeExtract 264 0
+             267: 53(f64vec4) Load 55(dvec4v)
+             268: 53(f64vec4) FAdd 267 266
+                              Store 55(dvec4v) 268
              269:39(float64_t) Load 41(doublev)
-             270: 48(f64vec3) CompositeConstruct 269 269 269
-             271: 48(f64vec3) ExtInst 1(GLSL.std.450) 37(FMin) 268 270
-             272: 48(f64vec3) Load 50(dvec3v)
-             273: 48(f64vec3) FAdd 272 271
-                              Store 50(dvec3v) 273
-             274: 53(f64vec4) Load 55(dvec4v)
+             270:39(float64_t) Load 41(doublev)
+             271:39(float64_t) ExtInst 1(GLSL.std.450) 37(FMin) 269 270
+             272:39(float64_t) Load 41(doublev)
+             273:39(float64_t) FAdd 272 271
+                              Store 41(doublev) 273
+             274: 43(f64vec2) Load 45(dvec2v)
              275:39(float64_t) Load 41(doublev)
-             276: 53(f64vec4) CompositeConstruct 275 275 275 275
-             277: 53(f64vec4) ExtInst 1(GLSL.std.450) 37(FMin) 274 276
-             278: 53(f64vec4) Load 55(dvec4v)
-             279: 53(f64vec4) FAdd 278 277
-                              Store 55(dvec4v) 279
-             280: 43(f64vec2) Load 45(dvec2v)
-             281: 43(f64vec2) Load 45(dvec2v)
-             282: 43(f64vec2) ExtInst 1(GLSL.std.450) 37(FMin) 280 281
-             283: 43(f64vec2) Load 45(dvec2v)
-             284: 43(f64vec2) FAdd 283 282
-                              Store 45(dvec2v) 284
-             285: 48(f64vec3) Load 50(dvec3v)
-             286: 48(f64vec3) Load 50(dvec3v)
-             287: 48(f64vec3) ExtInst 1(GLSL.std.450) 37(FMin) 285 286
-             288: 48(f64vec3) Load 50(dvec3v)
-             289: 48(f64vec3) FAdd 288 287
-                              Store 50(dvec3v) 289
+             276: 43(f64vec2) CompositeConstruct 275 275
+             277: 43(f64vec2) ExtInst 1(GLSL.std.450) 37(FMin) 274 276
+             278: 43(f64vec2) Load 45(dvec2v)
+             279: 43(f64vec2) FAdd 278 277
+                              Store 45(dvec2v) 279
+             280: 48(f64vec3) Load 50(dvec3v)
+             281:39(float64_t) Load 41(doublev)
+             282: 48(f64vec3) CompositeConstruct 281 281 281
+             283: 48(f64vec3) ExtInst 1(GLSL.std.450) 37(FMin) 280 282
+             284: 48(f64vec3) Load 50(dvec3v)
+             285: 48(f64vec3) FAdd 284 283
+                              Store 50(dvec3v) 285
+             286: 53(f64vec4) Load 55(dvec4v)
+             287:39(float64_t) Load 41(doublev)
+             288: 53(f64vec4) CompositeConstruct 287 287 287 287
+             289: 53(f64vec4) ExtInst 1(GLSL.std.450) 37(FMin) 286 288
              290: 53(f64vec4) Load 55(dvec4v)
-             291: 53(f64vec4) Load 55(dvec4v)
-             292: 53(f64vec4) ExtInst 1(GLSL.std.450) 37(FMin) 290 291
-             293: 53(f64vec4) Load 55(dvec4v)
-             294: 53(f64vec4) FAdd 293 292
-                              Store 55(dvec4v) 294
-             295:39(float64_t) Load 41(doublev)
-             296:39(float64_t) Load 41(doublev)
-             297:39(float64_t) ExtInst 1(GLSL.std.450) 40(FMax) 295 296
-             298:39(float64_t) Load 41(doublev)
-             299:39(float64_t) FAdd 298 297
-                              Store 41(doublev) 299
-             300: 43(f64vec2) Load 45(dvec2v)
-             301:39(float64_t) Load 41(doublev)
-             302: 43(f64vec2) CompositeConstruct 301 301
-             303: 43(f64vec2) ExtInst 1(GLSL.std.450) 40(FMax) 300 302
-             304: 43(f64vec2) Load 45(dvec2v)
-             305: 43(f64vec2) FAdd 304 303
-                              Store 45(dvec2v) 305
-             306: 48(f64vec3) Load 50(dvec3v)
+             291: 53(f64vec4) FAdd 290 289
+                              Store 55(dvec4v) 291
+             292: 43(f64vec2) Load 45(dvec2v)
+             293: 43(f64vec2) Load 45(dvec2v)
+             294: 43(f64vec2) ExtInst 1(GLSL.std.450) 37(FMin) 292 293
+             295: 43(f64vec2) Load 45(dvec2v)
+             296: 43(f64vec2) FAdd 295 294
+                              Store 45(dvec2v) 296
+             297: 48(f64vec3) Load 50(dvec3v)
+             298: 48(f64vec3) Load 50(dvec3v)
+             299: 48(f64vec3) ExtInst 1(GLSL.std.450) 37(FMin) 297 298
+             300: 48(f64vec3) Load 50(dvec3v)
+             301: 48(f64vec3) FAdd 300 299
+                              Store 50(dvec3v) 301
+             302: 53(f64vec4) Load 55(dvec4v)
+             303: 53(f64vec4) Load 55(dvec4v)
+             304: 53(f64vec4) ExtInst 1(GLSL.std.450) 37(FMin) 302 303
+             305: 53(f64vec4) Load 55(dvec4v)
+             306: 53(f64vec4) FAdd 305 304
+                              Store 55(dvec4v) 306
              307:39(float64_t) Load 41(doublev)
-             308: 48(f64vec3) CompositeConstruct 307 307 307
-             309: 48(f64vec3) ExtInst 1(GLSL.std.450) 40(FMax) 306 308
-             310: 48(f64vec3) Load 50(dvec3v)
-             311: 48(f64vec3) FAdd 310 309
-                              Store 50(dvec3v) 311
-             312: 53(f64vec4) Load 55(dvec4v)
+             308:39(float64_t) Load 41(doublev)
+             309:39(float64_t) ExtInst 1(GLSL.std.450) 40(FMax) 307 308
+             310:39(float64_t) Load 41(doublev)
+             311:39(float64_t) FAdd 310 309
+                              Store 41(doublev) 311
+             312: 43(f64vec2) Load 45(dvec2v)
              313:39(float64_t) Load 41(doublev)
-             314: 53(f64vec4) CompositeConstruct 313 313 313 313
-             315: 53(f64vec4) ExtInst 1(GLSL.std.450) 40(FMax) 312 314
-             316: 53(f64vec4) Load 55(dvec4v)
-             317: 53(f64vec4) FAdd 316 315
-                              Store 55(dvec4v) 317
-             318: 43(f64vec2) Load 45(dvec2v)
-             319: 43(f64vec2) Load 45(dvec2v)
-             320: 43(f64vec2) ExtInst 1(GLSL.std.450) 40(FMax) 318 319
-             321: 43(f64vec2) Load 45(dvec2v)
-             322: 43(f64vec2) FAdd 321 320
-                              Store 45(dvec2v) 322
-             323: 48(f64vec3) Load 50(dvec3v)
-             324: 48(f64vec3) Load 50(dvec3v)
-             325: 48(f64vec3) ExtInst 1(GLSL.std.450) 40(FMax) 323 324
-             326: 48(f64vec3) Load 50(dvec3v)
-             327: 48(f64vec3) FAdd 326 325
-                              Store 50(dvec3v) 327
+             314: 43(f64vec2) CompositeConstruct 313 313
+             315: 43(f64vec2) ExtInst 1(GLSL.std.450) 40(FMax) 312 314
+             316: 43(f64vec2) Load 45(dvec2v)
+             317: 43(f64vec2) FAdd 316 315
+                              Store 45(dvec2v) 317
+             318: 48(f64vec3) Load 50(dvec3v)
+             319:39(float64_t) Load 41(doublev)
+             320: 48(f64vec3) CompositeConstruct 319 319 319
+             321: 48(f64vec3) ExtInst 1(GLSL.std.450) 40(FMax) 318 320
+             322: 48(f64vec3) Load 50(dvec3v)
+             323: 48(f64vec3) FAdd 322 321
+                              Store 50(dvec3v) 323
+             324: 53(f64vec4) Load 55(dvec4v)
+             325:39(float64_t) Load 41(doublev)
+             326: 53(f64vec4) CompositeConstruct 325 325 325 325
+             327: 53(f64vec4) ExtInst 1(GLSL.std.450) 40(FMax) 324 326
              328: 53(f64vec4) Load 55(dvec4v)
-             329: 53(f64vec4) Load 55(dvec4v)
-             330: 53(f64vec4) ExtInst 1(GLSL.std.450) 40(FMax) 328 329
-             331: 53(f64vec4) Load 55(dvec4v)
-             332: 53(f64vec4) FAdd 331 330
-                              Store 55(dvec4v) 332
-             333:39(float64_t) Load 41(doublev)
-             334:39(float64_t) Load 41(doublev)
-             335:39(float64_t) Load 41(doublev)
-             336:39(float64_t) ExtInst 1(GLSL.std.450) 43(FClamp) 333 334 335
-             337:39(float64_t) Load 41(doublev)
-             338:39(float64_t) FAdd 337 336
-                              Store 41(doublev) 338
-             339: 43(f64vec2) Load 45(dvec2v)
-             340:39(float64_t) Load 41(doublev)
-             341:39(float64_t) Load 41(doublev)
-             342: 43(f64vec2) CompositeConstruct 340 340
-             343: 43(f64vec2) CompositeConstruct 341 341
-             344: 43(f64vec2) ExtInst 1(GLSL.std.450) 43(FClamp) 339 342 343
-             345: 43(f64vec2) Load 45(dvec2v)
-             346: 43(f64vec2) FAdd 345 344
-                              Store 45(dvec2v) 346
-             347: 48(f64vec3) Load 50(dvec3v)
-             348:39(float64_t) Load 41(doublev)
+             329: 53(f64vec4) FAdd 328 327
+                              Store 55(dvec4v) 329
+             330: 43(f64vec2) Load 45(dvec2v)
+             331: 43(f64vec2) Load 45(dvec2v)
+             332: 43(f64vec2) ExtInst 1(GLSL.std.450) 40(FMax) 330 331
+             333: 43(f64vec2) Load 45(dvec2v)
+             334: 43(f64vec2) FAdd 333 332
+                              Store 45(dvec2v) 334
+             335: 48(f64vec3) Load 50(dvec3v)
+             336: 48(f64vec3) Load 50(dvec3v)
+             337: 48(f64vec3) ExtInst 1(GLSL.std.450) 40(FMax) 335 336
+             338: 48(f64vec3) Load 50(dvec3v)
+             339: 48(f64vec3) FAdd 338 337
+                              Store 50(dvec3v) 339
+             340: 53(f64vec4) Load 55(dvec4v)
+             341: 53(f64vec4) Load 55(dvec4v)
+             342: 53(f64vec4) ExtInst 1(GLSL.std.450) 40(FMax) 340 341
+             343: 53(f64vec4) Load 55(dvec4v)
+             344: 53(f64vec4) FAdd 343 342
+                              Store 55(dvec4v) 344
+             345:39(float64_t) Load 41(doublev)
+             346:39(float64_t) Load 41(doublev)
+             347:39(float64_t) Load 41(doublev)
+             348:39(float64_t) ExtInst 1(GLSL.std.450) 43(FClamp) 345 346 347
              349:39(float64_t) Load 41(doublev)
-             350: 48(f64vec3) CompositeConstruct 348 348 348
-             351: 48(f64vec3) CompositeConstruct 349 349 349
-             352: 48(f64vec3) ExtInst 1(GLSL.std.450) 43(FClamp) 347 350 351
-             353: 48(f64vec3) Load 50(dvec3v)
-             354: 48(f64vec3) FAdd 353 352
-                              Store 50(dvec3v) 354
-             355: 53(f64vec4) Load 55(dvec4v)
-             356:39(float64_t) Load 41(doublev)
-             357:39(float64_t) Load 41(doublev)
-             358: 53(f64vec4) CompositeConstruct 356 356 356 356
-             359: 53(f64vec4) CompositeConstruct 357 357 357 357
-             360: 53(f64vec4) ExtInst 1(GLSL.std.450) 43(FClamp) 355 358 359
-             361: 53(f64vec4) Load 55(dvec4v)
-             362: 53(f64vec4) FAdd 361 360
-                              Store 55(dvec4v) 362
-             363: 43(f64vec2) Load 45(dvec2v)
-             364: 43(f64vec2) Load 45(dvec2v)
-             365: 43(f64vec2) Load 45(dvec2v)
-             366: 43(f64vec2) ExtInst 1(GLSL.std.450) 43(FClamp) 363 364 365
-             367: 43(f64vec2) Load 45(dvec2v)
-             368: 43(f64vec2) FAdd 367 366
-                              Store 45(dvec2v) 368
-             369: 48(f64vec3) Load 50(dvec3v)
-             370: 48(f64vec3) Load 50(dvec3v)
-             371: 48(f64vec3) Load 50(dvec3v)
-             372: 48(f64vec3) ExtInst 1(GLSL.std.450) 43(FClamp) 369 370 371
-             373: 48(f64vec3) Load 50(dvec3v)
-             374: 48(f64vec3) FAdd 373 372
-                              Store 50(dvec3v) 374
-             375: 53(f64vec4) Load 55(dvec4v)
-             376: 53(f64vec4) Load 55(dvec4v)
-             377: 53(f64vec4) Load 55(dvec4v)
-             378: 53(f64vec4) ExtInst 1(GLSL.std.450) 43(FClamp) 375 376 377
-             379: 53(f64vec4) Load 55(dvec4v)
-             380: 53(f64vec4) FAdd 379 378
-                              Store 55(dvec4v) 380
-             381:39(float64_t) Load 41(doublev)
-             382:39(float64_t) Load 41(doublev)
-             383:39(float64_t) Load 41(doublev)
-             384:39(float64_t) ExtInst 1(GLSL.std.450) 46(FMix) 381 382 383
-             385:39(float64_t) Load 41(doublev)
-             386:39(float64_t) FAdd 385 384
-                              Store 41(doublev) 386
-             387: 43(f64vec2) Load 45(dvec2v)
-             388: 43(f64vec2) Load 45(dvec2v)
-             389:39(float64_t) Load 41(doublev)
-             390: 43(f64vec2) CompositeConstruct 389 389
-             391: 43(f64vec2) ExtInst 1(GLSL.std.450) 46(FMix) 387 388 390
-             392: 43(f64vec2) Load 45(dvec2v)
-             393: 43(f64vec2) FAdd 392 391
-                              Store 45(dvec2v) 393
-             394: 48(f64vec3) Load 50(dvec3v)
-             395: 48(f64vec3) Load 50(dvec3v)
-             396:39(float64_t) Load 41(doublev)
-             397: 48(f64vec3) CompositeConstruct 396 396 396
-             398: 48(f64vec3) ExtInst 1(GLSL.std.450) 46(FMix) 394 395 397
-             399: 48(f64vec3) Load 50(dvec3v)
-             400: 48(f64vec3) FAdd 399 398
-                              Store 50(dvec3v) 400
-             401: 53(f64vec4) Load 55(dvec4v)
-             402: 53(f64vec4) Load 55(dvec4v)
-             403:39(float64_t) Load 41(doublev)
-             404: 53(f64vec4) CompositeConstruct 403 403 403 403
-             405: 53(f64vec4) ExtInst 1(GLSL.std.450) 46(FMix) 401 402 404
-             406: 53(f64vec4) Load 55(dvec4v)
-             407: 53(f64vec4) FAdd 406 405
-                              Store 55(dvec4v) 407
-             408: 43(f64vec2) Load 45(dvec2v)
-             409: 43(f64vec2) Load 45(dvec2v)
-             410: 43(f64vec2) Load 45(dvec2v)
-             411: 43(f64vec2) ExtInst 1(GLSL.std.450) 46(FMix) 408 409 410
-             412: 43(f64vec2) Load 45(dvec2v)
-             413: 43(f64vec2) FAdd 412 411
-                              Store 45(dvec2v) 413
-             414: 48(f64vec3) Load 50(dvec3v)
-             415: 48(f64vec3) Load 50(dvec3v)
-             416: 48(f64vec3) Load 50(dvec3v)
-             417: 48(f64vec3) ExtInst 1(GLSL.std.450) 46(FMix) 414 415 416
-             418: 48(f64vec3) Load 50(dvec3v)
-             419: 48(f64vec3) FAdd 418 417
-                              Store 50(dvec3v) 419
-             420: 53(f64vec4) Load 55(dvec4v)
-             421: 53(f64vec4) Load 55(dvec4v)
-             422: 53(f64vec4) Load 55(dvec4v)
-             423: 53(f64vec4) ExtInst 1(GLSL.std.450) 46(FMix) 420 421 422
-             424: 53(f64vec4) Load 55(dvec4v)
-             425: 53(f64vec4) FAdd 424 423
-                              Store 55(dvec4v) 425
-             426:39(float64_t) Load 41(doublev)
-             427:39(float64_t) Load 41(doublev)
-             431:   428(bool) Load 430(boolv)
-             432:39(float64_t) Select 431 427 426
-             433:39(float64_t) Load 41(doublev)
-             434:39(float64_t) FAdd 433 432
-                              Store 41(doublev) 434
-             435: 43(f64vec2) Load 45(dvec2v)
-             436: 43(f64vec2) Load 45(dvec2v)
-             440:  437(bvec2) Load 439(bvec2v)
-             441: 43(f64vec2) Select 440 436 435
-             442: 43(f64vec2) Load 45(dvec2v)
-             443: 43(f64vec2) FAdd 442 441
-                              Store 45(dvec2v) 443
-             444: 48(f64vec3) Load 50(dvec3v)
-             445: 48(f64vec3) Load 50(dvec3v)
-             449:  446(bvec3) Load 448(bvec3v)
-             450: 48(f64vec3) Select 449 445 444
-             451: 48(f64vec3) Load 50(dvec3v)
-             452: 48(f64vec3) FAdd 451 450
-                              Store 50(dvec3v) 452
-             453: 53(f64vec4) Load 55(dvec4v)
-             454: 53(f64vec4) Load 55(dvec4v)
-             458:  455(bvec4) Load 457(bvec4v)
-             459: 53(f64vec4) Select 458 454 453
-             460: 53(f64vec4) Load 55(dvec4v)
-             461: 53(f64vec4) FAdd 460 459
-                              Store 55(dvec4v) 461
-             462:39(float64_t) Load 41(doublev)
-             463:39(float64_t) Load 41(doublev)
-             464:39(float64_t) ExtInst 1(GLSL.std.450) 48(Step) 462 463
-             465:39(float64_t) Load 41(doublev)
-             466:39(float64_t) FAdd 465 464
-                              Store 41(doublev) 466
-             467: 43(f64vec2) Load 45(dvec2v)
-             468: 43(f64vec2) Load 45(dvec2v)
-             469: 43(f64vec2) ExtInst 1(GLSL.std.450) 48(Step) 467 468
-             470: 43(f64vec2) Load 45(dvec2v)
-             471: 43(f64vec2) FAdd 470 469
-                              Store 45(dvec2v) 471
-             472: 48(f64vec3) Load 50(dvec3v)
-             473: 48(f64vec3) Load 50(dvec3v)
-             474: 48(f64vec3) ExtInst 1(GLSL.std.450) 48(Step) 472 473
-             475: 48(f64vec3) Load 50(dvec3v)
-             476: 48(f64vec3) FAdd 475 474
-                              Store 50(dvec3v) 476
-             477: 53(f64vec4) Load 55(dvec4v)
-             478: 53(f64vec4) Load 55(dvec4v)
-             479: 53(f64vec4) ExtInst 1(GLSL.std.450) 48(Step) 477 478
-             480: 53(f64vec4) Load 55(dvec4v)
-             481: 53(f64vec4) FAdd 480 479
-                              Store 55(dvec4v) 481
-             482:39(float64_t) Load 41(doublev)
-             483: 43(f64vec2) Load 45(dvec2v)
-             484: 43(f64vec2) CompositeConstruct 482 482
-             485: 43(f64vec2) ExtInst 1(GLSL.std.450) 48(Step) 484 483
-             486: 43(f64vec2) Load 45(dvec2v)
-             487: 43(f64vec2) FAdd 486 485
-                              Store 45(dvec2v) 487
-             488:39(float64_t) Load 41(doublev)
-             489: 48(f64vec3) Load 50(dvec3v)
-             490: 48(f64vec3) CompositeConstruct 488 488 488
-             491: 48(f64vec3) ExtInst 1(GLSL.std.450) 48(Step) 490 489
-             492: 48(f64vec3) Load 50(dvec3v)
-             493: 48(f64vec3) FAdd 492 491
-                              Store 50(dvec3v) 493
+             350:39(float64_t) FAdd 349 348
+                              Store 41(doublev) 350
+             351: 43(f64vec2) Load 45(dvec2v)
+             352:39(float64_t) Load 41(doublev)
+             353:39(float64_t) Load 41(doublev)
+             354: 43(f64vec2) CompositeConstruct 352 352
+             355: 43(f64vec2) CompositeConstruct 353 353
+             356: 43(f64vec2) ExtInst 1(GLSL.std.450) 43(FClamp) 351 354 355
+             357: 43(f64vec2) Load 45(dvec2v)
+             358: 43(f64vec2) FAdd 357 356
+                              Store 45(dvec2v) 358
+             359: 48(f64vec3) Load 50(dvec3v)
+             360:39(float64_t) Load 41(doublev)
+             361:39(float64_t) Load 41(doublev)
+             362: 48(f64vec3) CompositeConstruct 360 360 360
+             363: 48(f64vec3) CompositeConstruct 361 361 361
+             364: 48(f64vec3) ExtInst 1(GLSL.std.450) 43(FClamp) 359 362 363
+             365: 48(f64vec3) Load 50(dvec3v)
+             366: 48(f64vec3) FAdd 365 364
+                              Store 50(dvec3v) 366
+             367: 53(f64vec4) Load 55(dvec4v)
+             368:39(float64_t) Load 41(doublev)
+             369:39(float64_t) Load 41(doublev)
+             370: 53(f64vec4) CompositeConstruct 368 368 368 368
+             371: 53(f64vec4) CompositeConstruct 369 369 369 369
+             372: 53(f64vec4) ExtInst 1(GLSL.std.450) 43(FClamp) 367 370 371
+             373: 53(f64vec4) Load 55(dvec4v)
+             374: 53(f64vec4) FAdd 373 372
+                              Store 55(dvec4v) 374
+             375: 43(f64vec2) Load 45(dvec2v)
+             376: 43(f64vec2) Load 45(dvec2v)
+             377: 43(f64vec2) Load 45(dvec2v)
+             378: 43(f64vec2) ExtInst 1(GLSL.std.450) 43(FClamp) 375 376 377
+             379: 43(f64vec2) Load 45(dvec2v)
+             380: 43(f64vec2) FAdd 379 378
+                              Store 45(dvec2v) 380
+             381: 48(f64vec3) Load 50(dvec3v)
+             382: 48(f64vec3) Load 50(dvec3v)
+             383: 48(f64vec3) Load 50(dvec3v)
+             384: 48(f64vec3) ExtInst 1(GLSL.std.450) 43(FClamp) 381 382 383
+             385: 48(f64vec3) Load 50(dvec3v)
+             386: 48(f64vec3) FAdd 385 384
+                              Store 50(dvec3v) 386
+             387: 53(f64vec4) Load 55(dvec4v)
+             388: 53(f64vec4) Load 55(dvec4v)
+             389: 53(f64vec4) Load 55(dvec4v)
+             390: 53(f64vec4) ExtInst 1(GLSL.std.450) 43(FClamp) 387 388 389
+             391: 53(f64vec4) Load 55(dvec4v)
+             392: 53(f64vec4) FAdd 391 390
+                              Store 55(dvec4v) 392
+             393:39(float64_t) Load 41(doublev)
+             394:39(float64_t) Load 41(doublev)
+             395:39(float64_t) Load 41(doublev)
+             396:39(float64_t) ExtInst 1(GLSL.std.450) 46(FMix) 393 394 395
+             397:39(float64_t) Load 41(doublev)
+             398:39(float64_t) FAdd 397 396
+                              Store 41(doublev) 398
+             399: 43(f64vec2) Load 45(dvec2v)
+             400: 43(f64vec2) Load 45(dvec2v)
+             401:39(float64_t) Load 41(doublev)
+             402: 43(f64vec2) CompositeConstruct 401 401
+             403: 43(f64vec2) ExtInst 1(GLSL.std.450) 46(FMix) 399 400 402
+             404: 43(f64vec2) Load 45(dvec2v)
+             405: 43(f64vec2) FAdd 404 403
+                              Store 45(dvec2v) 405
+             406: 48(f64vec3) Load 50(dvec3v)
+             407: 48(f64vec3) Load 50(dvec3v)
+             408:39(float64_t) Load 41(doublev)
+             409: 48(f64vec3) CompositeConstruct 408 408 408
+             410: 48(f64vec3) ExtInst 1(GLSL.std.450) 46(FMix) 406 407 409
+             411: 48(f64vec3) Load 50(dvec3v)
+             412: 48(f64vec3) FAdd 411 410
+                              Store 50(dvec3v) 412
+             413: 53(f64vec4) Load 55(dvec4v)
+             414: 53(f64vec4) Load 55(dvec4v)
+             415:39(float64_t) Load 41(doublev)
+             416: 53(f64vec4) CompositeConstruct 415 415 415 415
+             417: 53(f64vec4) ExtInst 1(GLSL.std.450) 46(FMix) 413 414 416
+             418: 53(f64vec4) Load 55(dvec4v)
+             419: 53(f64vec4) FAdd 418 417
+                              Store 55(dvec4v) 419
+             420: 43(f64vec2) Load 45(dvec2v)
+             421: 43(f64vec2) Load 45(dvec2v)
+             422: 43(f64vec2) Load 45(dvec2v)
+             423: 43(f64vec2) ExtInst 1(GLSL.std.450) 46(FMix) 420 421 422
+             424: 43(f64vec2) Load 45(dvec2v)
+             425: 43(f64vec2) FAdd 424 423
+                              Store 45(dvec2v) 425
+             426: 48(f64vec3) Load 50(dvec3v)
+             427: 48(f64vec3) Load 50(dvec3v)
+             428: 48(f64vec3) Load 50(dvec3v)
+             429: 48(f64vec3) ExtInst 1(GLSL.std.450) 46(FMix) 426 427 428
+             430: 48(f64vec3) Load 50(dvec3v)
+             431: 48(f64vec3) FAdd 430 429
+                              Store 50(dvec3v) 431
+             432: 53(f64vec4) Load 55(dvec4v)
+             433: 53(f64vec4) Load 55(dvec4v)
+             434: 53(f64vec4) Load 55(dvec4v)
+             435: 53(f64vec4) ExtInst 1(GLSL.std.450) 46(FMix) 432 433 434
+             436: 53(f64vec4) Load 55(dvec4v)
+             437: 53(f64vec4) FAdd 436 435
+                              Store 55(dvec4v) 437
+             438:39(float64_t) Load 41(doublev)
+             439:39(float64_t) Load 41(doublev)
+             443:   440(bool) Load 442(boolv)
+             444:39(float64_t) Select 443 439 438
+             445:39(float64_t) Load 41(doublev)
+             446:39(float64_t) FAdd 445 444
+                              Store 41(doublev) 446
+             447: 43(f64vec2) Load 45(dvec2v)
+             448: 43(f64vec2) Load 45(dvec2v)
+             452:  449(bvec2) Load 451(bvec2v)
+             453: 43(f64vec2) Select 452 448 447
+             454: 43(f64vec2) Load 45(dvec2v)
+             455: 43(f64vec2) FAdd 454 453
+                              Store 45(dvec2v) 455
+             456: 48(f64vec3) Load 50(dvec3v)
+             457: 48(f64vec3) Load 50(dvec3v)
+             461:  458(bvec3) Load 460(bvec3v)
+             462: 48(f64vec3) Select 461 457 456
+             463: 48(f64vec3) Load 50(dvec3v)
+             464: 48(f64vec3) FAdd 463 462
+                              Store 50(dvec3v) 464
+             465: 53(f64vec4) Load 55(dvec4v)
+             466: 53(f64vec4) Load 55(dvec4v)
+             470:  467(bvec4) Load 469(bvec4v)
+             471: 53(f64vec4) Select 470 466 465
+             472: 53(f64vec4) Load 55(dvec4v)
+             473: 53(f64vec4) FAdd 472 471
+                              Store 55(dvec4v) 473
+             474:39(float64_t) Load 41(doublev)
+             475:39(float64_t) Load 41(doublev)
+             476:39(float64_t) ExtInst 1(GLSL.std.450) 48(Step) 474 475
+             477:39(float64_t) Load 41(doublev)
+             478:39(float64_t) FAdd 477 476
+                              Store 41(doublev) 478
+             479: 43(f64vec2) Load 45(dvec2v)
+             480: 43(f64vec2) Load 45(dvec2v)
+             481: 43(f64vec2) ExtInst 1(GLSL.std.450) 48(Step) 479 480
+             482: 43(f64vec2) Load 45(dvec2v)
+             483: 43(f64vec2) FAdd 482 481
+                              Store 45(dvec2v) 483
+             484: 48(f64vec3) Load 50(dvec3v)
+             485: 48(f64vec3) Load 50(dvec3v)
+             486: 48(f64vec3) ExtInst 1(GLSL.std.450) 48(Step) 484 485
+             487: 48(f64vec3) Load 50(dvec3v)
+             488: 48(f64vec3) FAdd 487 486
+                              Store 50(dvec3v) 488
+             489: 53(f64vec4) Load 55(dvec4v)
+             490: 53(f64vec4) Load 55(dvec4v)
+             491: 53(f64vec4) ExtInst 1(GLSL.std.450) 48(Step) 489 490
+             492: 53(f64vec4) Load 55(dvec4v)
+             493: 53(f64vec4) FAdd 492 491
+                              Store 55(dvec4v) 493
              494:39(float64_t) Load 41(doublev)
-             495: 53(f64vec4) Load 55(dvec4v)
-             496: 53(f64vec4) CompositeConstruct 494 494 494 494
-             497: 53(f64vec4) ExtInst 1(GLSL.std.450) 48(Step) 496 495
-             498: 53(f64vec4) Load 55(dvec4v)
-             499: 53(f64vec4) FAdd 498 497
-                              Store 55(dvec4v) 499
+             495: 43(f64vec2) Load 45(dvec2v)
+             496: 43(f64vec2) CompositeConstruct 494 494
+             497: 43(f64vec2) ExtInst 1(GLSL.std.450) 48(Step) 496 495
+             498: 43(f64vec2) Load 45(dvec2v)
+             499: 43(f64vec2) FAdd 498 497
+                              Store 45(dvec2v) 499
              500:39(float64_t) Load 41(doublev)
-             501:39(float64_t) Load 41(doublev)
-             502:39(float64_t) Load 41(doublev)
-             503:39(float64_t) ExtInst 1(GLSL.std.450) 49(SmoothStep) 500 501 502
-             504:39(float64_t) Load 41(doublev)
-             505:39(float64_t) FAdd 504 503
-                              Store 41(doublev) 505
-             506: 43(f64vec2) Load 45(dvec2v)
-             507: 43(f64vec2) Load 45(dvec2v)
-             508: 43(f64vec2) Load 45(dvec2v)
-             509: 43(f64vec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 506 507 508
-             510: 43(f64vec2) Load 45(dvec2v)
-             511: 43(f64vec2) FAdd 510 509
-                              Store 45(dvec2v) 511
-             512: 48(f64vec3) Load 50(dvec3v)
-             513: 48(f64vec3) Load 50(dvec3v)
-             514: 48(f64vec3) Load 50(dvec3v)
-             515: 48(f64vec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 512 513 514
-             516: 48(f64vec3) Load 50(dvec3v)
-             517: 48(f64vec3) FAdd 516 515
-                              Store 50(dvec3v) 517
-             518: 53(f64vec4) Load 55(dvec4v)
-             519: 53(f64vec4) Load 55(dvec4v)
-             520: 53(f64vec4) Load 55(dvec4v)
-             521: 53(f64vec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 518 519 520
-             522: 53(f64vec4) Load 55(dvec4v)
-             523: 53(f64vec4) FAdd 522 521
-                              Store 55(dvec4v) 523
-             524:39(float64_t) Load 41(doublev)
-             525:39(float64_t) Load 41(doublev)
-             526: 43(f64vec2) Load 45(dvec2v)
-             527: 43(f64vec2) CompositeConstruct 524 524
-             528: 43(f64vec2) CompositeConstruct 525 525
-             529: 43(f64vec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 527 528 526
-             530: 43(f64vec2) Load 45(dvec2v)
-             531: 43(f64vec2) FAdd 530 529
-                              Store 45(dvec2v) 531
-             532:39(float64_t) Load 41(doublev)
-             533:39(float64_t) Load 41(doublev)
-             534: 48(f64vec3) Load 50(dvec3v)
-             535: 48(f64vec3) CompositeConstruct 532 532 532
-             536: 48(f64vec3) CompositeConstruct 533 533 533
-             537: 48(f64vec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 535 536 534
-             538: 48(f64vec3) Load 50(dvec3v)
-             539: 48(f64vec3) FAdd 538 537
-                              Store 50(dvec3v) 539
-             540:39(float64_t) Load 41(doublev)
-             541:39(float64_t) Load 41(doublev)
-             542: 53(f64vec4) Load 55(dvec4v)
-             543: 53(f64vec4) CompositeConstruct 540 540 540 540
-             544: 53(f64vec4) CompositeConstruct 541 541 541 541
-             545: 53(f64vec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 543 544 542
-             546: 53(f64vec4) Load 55(dvec4v)
-             547: 53(f64vec4) FAdd 546 545
-                              Store 55(dvec4v) 547
-             548:39(float64_t) Load 41(doublev)
-             549:   428(bool) IsNan 548
-                              Store 430(boolv) 549
-             550: 43(f64vec2) Load 45(dvec2v)
-             551:  437(bvec2) IsNan 550
-                              Store 439(bvec2v) 551
-             552: 48(f64vec3) Load 50(dvec3v)
-             553:  446(bvec3) IsNan 552
-                              Store 448(bvec3v) 553
+             501: 48(f64vec3) Load 50(dvec3v)
+             502: 48(f64vec3) CompositeConstruct 500 500 500
+             503: 48(f64vec3) ExtInst 1(GLSL.std.450) 48(Step) 502 501
+             504: 48(f64vec3) Load 50(dvec3v)
+             505: 48(f64vec3) FAdd 504 503
+                              Store 50(dvec3v) 505
+             506:39(float64_t) Load 41(doublev)
+             507: 53(f64vec4) Load 55(dvec4v)
+             508: 53(f64vec4) CompositeConstruct 506 506 506 506
+             509: 53(f64vec4) ExtInst 1(GLSL.std.450) 48(Step) 508 507
+             510: 53(f64vec4) Load 55(dvec4v)
+             511: 53(f64vec4) FAdd 510 509
+                              Store 55(dvec4v) 511
+             512:39(float64_t) Load 41(doublev)
+             513:39(float64_t) Load 41(doublev)
+             514:39(float64_t) Load 41(doublev)
+             515:39(float64_t) ExtInst 1(GLSL.std.450) 49(SmoothStep) 512 513 514
+             516:39(float64_t) Load 41(doublev)
+             517:39(float64_t) FAdd 516 515
+                              Store 41(doublev) 517
+             518: 43(f64vec2) Load 45(dvec2v)
+             519: 43(f64vec2) Load 45(dvec2v)
+             520: 43(f64vec2) Load 45(dvec2v)
+             521: 43(f64vec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 518 519 520
+             522: 43(f64vec2) Load 45(dvec2v)
+             523: 43(f64vec2) FAdd 522 521
+                              Store 45(dvec2v) 523
+             524: 48(f64vec3) Load 50(dvec3v)
+             525: 48(f64vec3) Load 50(dvec3v)
+             526: 48(f64vec3) Load 50(dvec3v)
+             527: 48(f64vec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 524 525 526
+             528: 48(f64vec3) Load 50(dvec3v)
+             529: 48(f64vec3) FAdd 528 527
+                              Store 50(dvec3v) 529
+             530: 53(f64vec4) Load 55(dvec4v)
+             531: 53(f64vec4) Load 55(dvec4v)
+             532: 53(f64vec4) Load 55(dvec4v)
+             533: 53(f64vec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 530 531 532
+             534: 53(f64vec4) Load 55(dvec4v)
+             535: 53(f64vec4) FAdd 534 533
+                              Store 55(dvec4v) 535
+             536:39(float64_t) Load 41(doublev)
+             537:39(float64_t) Load 41(doublev)
+             538: 43(f64vec2) Load 45(dvec2v)
+             539: 43(f64vec2) CompositeConstruct 536 536
+             540: 43(f64vec2) CompositeConstruct 537 537
+             541: 43(f64vec2) ExtInst 1(GLSL.std.450) 49(SmoothStep) 539 540 538
+             542: 43(f64vec2) Load 45(dvec2v)
+             543: 43(f64vec2) FAdd 542 541
+                              Store 45(dvec2v) 543
+             544:39(float64_t) Load 41(doublev)
+             545:39(float64_t) Load 41(doublev)
+             546: 48(f64vec3) Load 50(dvec3v)
+             547: 48(f64vec3) CompositeConstruct 544 544 544
+             548: 48(f64vec3) CompositeConstruct 545 545 545
+             549: 48(f64vec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 547 548 546
+             550: 48(f64vec3) Load 50(dvec3v)
+             551: 48(f64vec3) FAdd 550 549
+                              Store 50(dvec3v) 551
+             552:39(float64_t) Load 41(doublev)
+             553:39(float64_t) Load 41(doublev)
              554: 53(f64vec4) Load 55(dvec4v)
-             555:  455(bvec4) IsNan 554
-                              Store 457(bvec4v) 555
-             556:   428(bool) Load 430(boolv)
-                              SelectionMerge 559 None
-                              BranchConditional 556 558 562
-             558:               Label
-             560:39(float64_t)   Load 41(doublev)
-             561:   428(bool)   IsInf 560
-                                Store 557 561
-                                Branch 559
-             562:               Label
-                                Store 557 563
-                                Branch 559
-             559:             Label
-             564:   428(bool) Load 557
-                              Store 430(boolv) 564
-             565:   428(bool) Load 430(boolv)
-                              SelectionMerge 568 None
-                              BranchConditional 565 567 571
-             567:               Label
-             569: 43(f64vec2)   Load 45(dvec2v)
-             570:  437(bvec2)   IsInf 569
-                                Store 566 570
-                                Branch 568
-             571:               Label
-                                Store 566 572
-                                Branch 568
-             568:             Label
-             573:  437(bvec2) Load 566
-                              Store 439(bvec2v) 573
-             574:   428(bool) Load 430(boolv)
-                              SelectionMerge 577 None
-                              BranchConditional 574 576 580
-             576:               Label
-             578: 48(f64vec3)   Load 50(dvec3v)
-             579:  446(bvec3)   IsInf 578
-                                Store 575 579
-                                Branch 577
-             580:               Label
-                                Store 575 581
-                                Branch 577
-             577:             Label
-             582:  446(bvec3) Load 575
-                              Store 448(bvec3v) 582
-             583:   428(bool) Load 430(boolv)
-                              SelectionMerge 586 None
-                              BranchConditional 583 585 589
-             585:               Label
-             587: 53(f64vec4)   Load 55(dvec4v)
-             588:  455(bvec4)   IsInf 587
-                                Store 584 588
-                                Branch 586
-             589:               Label
-                                Store 584 590
-                                Branch 586
-             586:             Label
-             591:  455(bvec4) Load 584
-                              Store 457(bvec4v) 591
-             592:39(float64_t) Load 41(doublev)
-             593:39(float64_t) ExtInst 1(GLSL.std.450) 66(Length) 592
-             594:39(float64_t) Load 41(doublev)
-             595:39(float64_t) FAdd 594 593
-                              Store 41(doublev) 595
-             596: 43(f64vec2) Load 45(dvec2v)
-             597:39(float64_t) ExtInst 1(GLSL.std.450) 66(Length) 596
-             598:39(float64_t) Load 41(doublev)
-             599:39(float64_t) FAdd 598 597
-                              Store 41(doublev) 599
-             600: 48(f64vec3) Load 50(dvec3v)
-             601:39(float64_t) ExtInst 1(GLSL.std.450) 66(Length) 600
-             602:39(float64_t) Load 41(doublev)
-             603:39(float64_t) FAdd 602 601
-                              Store 41(doublev) 603
-             604: 53(f64vec4) Load 55(dvec4v)
+             555: 53(f64vec4) CompositeConstruct 552 552 552 552
+             556: 53(f64vec4) CompositeConstruct 553 553 553 553
+             557: 53(f64vec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 555 556 554
+             558: 53(f64vec4) Load 55(dvec4v)
+             559: 53(f64vec4) FAdd 558 557
+                              Store 55(dvec4v) 559
+             560:39(float64_t) Load 41(doublev)
+             561:   440(bool) IsNan 560
+                              Store 442(boolv) 561
+             562: 43(f64vec2) Load 45(dvec2v)
+             563:  449(bvec2) IsNan 562
+                              Store 451(bvec2v) 563
+             564: 48(f64vec3) Load 50(dvec3v)
+             565:  458(bvec3) IsNan 564
+                              Store 460(bvec3v) 565
+             566: 53(f64vec4) Load 55(dvec4v)
+             567:  467(bvec4) IsNan 566
+                              Store 469(bvec4v) 567
+             568:   440(bool) Load 442(boolv)
+                              SelectionMerge 571 None
+                              BranchConditional 568 570 574
+             570:               Label
+             572:39(float64_t)   Load 41(doublev)
+             573:   440(bool)   IsInf 572
+                                Store 569 573
+                                Branch 571
+             574:               Label
+                                Store 569 575
+                                Branch 571
+             571:             Label
+             576:   440(bool) Load 569
+                              Store 442(boolv) 576
+             577:   440(bool) Load 442(boolv)
+                              SelectionMerge 580 None
+                              BranchConditional 577 579 583
+             579:               Label
+             581: 43(f64vec2)   Load 45(dvec2v)
+             582:  449(bvec2)   IsInf 581
+                                Store 578 582
+                                Branch 580
+             583:               Label
+                                Store 578 584
+                                Branch 580
+             580:             Label
+             585:  449(bvec2) Load 578
+                              Store 451(bvec2v) 585
+             586:   440(bool) Load 442(boolv)
+                              SelectionMerge 589 None
+                              BranchConditional 586 588 592
+             588:               Label
+             590: 48(f64vec3)   Load 50(dvec3v)
+             591:  458(bvec3)   IsInf 590
+                                Store 587 591
+                                Branch 589
+             592:               Label
+                                Store 587 593
+                                Branch 589
+             589:             Label
+             594:  458(bvec3) Load 587
+                              Store 460(bvec3v) 594
+             595:   440(bool) Load 442(boolv)
+                              SelectionMerge 598 None
+                              BranchConditional 595 597 601
+             597:               Label
+             599: 53(f64vec4)   Load 55(dvec4v)
+             600:  467(bvec4)   IsInf 599
+                                Store 596 600
+                                Branch 598
+             601:               Label
+                                Store 596 602
+                                Branch 598
+             598:             Label
+             603:  467(bvec4) Load 596
+                              Store 469(bvec4v) 603
+             604:39(float64_t) Load 41(doublev)
              605:39(float64_t) ExtInst 1(GLSL.std.450) 66(Length) 604
              606:39(float64_t) Load 41(doublev)
              607:39(float64_t) FAdd 606 605
                               Store 41(doublev) 607
-             608:39(float64_t) Load 41(doublev)
-             609:39(float64_t) Load 41(doublev)
-             610:39(float64_t) ExtInst 1(GLSL.std.450) 67(Distance) 608 609
-             611:39(float64_t) Load 41(doublev)
-             612:39(float64_t) FAdd 611 610
-                              Store 41(doublev) 612
-             613: 43(f64vec2) Load 45(dvec2v)
-             614: 43(f64vec2) Load 45(dvec2v)
-             615:39(float64_t) ExtInst 1(GLSL.std.450) 67(Distance) 613 614
-             616:39(float64_t) Load 41(doublev)
-             617:39(float64_t) FAdd 616 615
-                              Store 41(doublev) 617
-             618: 48(f64vec3) Load 50(dvec3v)
-             619: 48(f64vec3) Load 50(dvec3v)
-             620:39(float64_t) ExtInst 1(GLSL.std.450) 67(Distance) 618 619
+             608: 43(f64vec2) Load 45(dvec2v)
+             609:39(float64_t) ExtInst 1(GLSL.std.450) 66(Length) 608
+             610:39(float64_t) Load 41(doublev)
+             611:39(float64_t) FAdd 610 609
+                              Store 41(doublev) 611
+             612: 48(f64vec3) Load 50(dvec3v)
+             613:39(float64_t) ExtInst 1(GLSL.std.450) 66(Length) 612
+             614:39(float64_t) Load 41(doublev)
+             615:39(float64_t) FAdd 614 613
+                              Store 41(doublev) 615
+             616: 53(f64vec4) Load 55(dvec4v)
+             617:39(float64_t) ExtInst 1(GLSL.std.450) 66(Length) 616
+             618:39(float64_t) Load 41(doublev)
+             619:39(float64_t) FAdd 618 617
+                              Store 41(doublev) 619
+             620:39(float64_t) Load 41(doublev)
              621:39(float64_t) Load 41(doublev)
-             622:39(float64_t) FAdd 621 620
-                              Store 41(doublev) 622
-             623: 53(f64vec4) Load 55(dvec4v)
-             624: 53(f64vec4) Load 55(dvec4v)
-             625:39(float64_t) ExtInst 1(GLSL.std.450) 67(Distance) 623 624
-             626:39(float64_t) Load 41(doublev)
-             627:39(float64_t) FAdd 626 625
-                              Store 41(doublev) 627
+             622:39(float64_t) ExtInst 1(GLSL.std.450) 67(Distance) 620 621
+             623:39(float64_t) Load 41(doublev)
+             624:39(float64_t) FAdd 623 622
+                              Store 41(doublev) 624
+             625: 43(f64vec2) Load 45(dvec2v)
+             626: 43(f64vec2) Load 45(dvec2v)
+             627:39(float64_t) ExtInst 1(GLSL.std.450) 67(Distance) 625 626
              628:39(float64_t) Load 41(doublev)
-             629:39(float64_t) Load 41(doublev)
-             630:39(float64_t) FMul 628 629
-             631:39(float64_t) Load 41(doublev)
-             632:39(float64_t) FAdd 631 630
-                              Store 41(doublev) 632
-             633: 43(f64vec2) Load 45(dvec2v)
-             634: 43(f64vec2) Load 45(dvec2v)
-             635:39(float64_t) Dot 633 634
-             636:39(float64_t) Load 41(doublev)
-             637:39(float64_t) FAdd 636 635
-                              Store 41(doublev) 637
-             638: 48(f64vec3) Load 50(dvec3v)
-             639: 48(f64vec3) Load 50(dvec3v)
-             640:39(float64_t) Dot 638 639
+             629:39(float64_t) FAdd 628 627
+                              Store 41(doublev) 629
+             630: 48(f64vec3) Load 50(dvec3v)
+             631: 48(f64vec3) Load 50(dvec3v)
+             632:39(float64_t) ExtInst 1(GLSL.std.450) 67(Distance) 630 631
+             633:39(float64_t) Load 41(doublev)
+             634:39(float64_t) FAdd 633 632
+                              Store 41(doublev) 634
+             635: 53(f64vec4) Load 55(dvec4v)
+             636: 53(f64vec4) Load 55(dvec4v)
+             637:39(float64_t) ExtInst 1(GLSL.std.450) 67(Distance) 635 636
+             638:39(float64_t) Load 41(doublev)
+             639:39(float64_t) FAdd 638 637
+                              Store 41(doublev) 639
+             640:39(float64_t) Load 41(doublev)
              641:39(float64_t) Load 41(doublev)
-             642:39(float64_t) FAdd 641 640
-                              Store 41(doublev) 642
-             643: 53(f64vec4) Load 55(dvec4v)
-             644: 53(f64vec4) Load 55(dvec4v)
-             645:39(float64_t) Dot 643 644
-             646:39(float64_t) Load 41(doublev)
-             647:39(float64_t) FAdd 646 645
-                              Store 41(doublev) 647
-             648: 48(f64vec3) Load 50(dvec3v)
-             649: 48(f64vec3) Load 50(dvec3v)
-             650: 48(f64vec3) ExtInst 1(GLSL.std.450) 68(Cross) 648 649
+             642:39(float64_t) FMul 640 641
+             643:39(float64_t) Load 41(doublev)
+             644:39(float64_t) FAdd 643 642
+                              Store 41(doublev) 644
+             645: 43(f64vec2) Load 45(dvec2v)
+             646: 43(f64vec2) Load 45(dvec2v)
+             647:39(float64_t) Dot 645 646
+             648:39(float64_t) Load 41(doublev)
+             649:39(float64_t) FAdd 648 647
+                              Store 41(doublev) 649
+             650: 48(f64vec3) Load 50(dvec3v)
              651: 48(f64vec3) Load 50(dvec3v)
-             652: 48(f64vec3) FAdd 651 650
-                              Store 50(dvec3v) 652
+             652:39(float64_t) Dot 650 651
              653:39(float64_t) Load 41(doublev)
-             654:39(float64_t) ExtInst 1(GLSL.std.450) 69(Normalize) 653
-             655:39(float64_t) Load 41(doublev)
-             656:39(float64_t) FAdd 655 654
-                              Store 41(doublev) 656
-             657: 43(f64vec2) Load 45(dvec2v)
-             658: 43(f64vec2) ExtInst 1(GLSL.std.450) 69(Normalize) 657
-             659: 43(f64vec2) Load 45(dvec2v)
-             660: 43(f64vec2) FAdd 659 658
-                              Store 45(dvec2v) 660
+             654:39(float64_t) FAdd 653 652
+                              Store 41(doublev) 654
+             655: 53(f64vec4) Load 55(dvec4v)
+             656: 53(f64vec4) Load 55(dvec4v)
+             657:39(float64_t) Dot 655 656
+             658:39(float64_t) Load 41(doublev)
+             659:39(float64_t) FAdd 658 657
+                              Store 41(doublev) 659
+             660: 48(f64vec3) Load 50(dvec3v)
              661: 48(f64vec3) Load 50(dvec3v)
-             662: 48(f64vec3) ExtInst 1(GLSL.std.450) 69(Normalize) 661
+             662: 48(f64vec3) ExtInst 1(GLSL.std.450) 68(Cross) 660 661
              663: 48(f64vec3) Load 50(dvec3v)
              664: 48(f64vec3) FAdd 663 662
                               Store 50(dvec3v) 664
-             665: 53(f64vec4) Load 55(dvec4v)
-             666: 53(f64vec4) ExtInst 1(GLSL.std.450) 69(Normalize) 665
-             667: 53(f64vec4) Load 55(dvec4v)
-             668: 53(f64vec4) FAdd 667 666
-                              Store 55(dvec4v) 668
-             669:39(float64_t) Load 41(doublev)
-             670:39(float64_t) Load 41(doublev)
-             671:39(float64_t) Load 41(doublev)
-             672:39(float64_t) ExtInst 1(GLSL.std.450) 70(FaceForward) 669 670 671
-             673:39(float64_t) Load 41(doublev)
-             674:39(float64_t) FAdd 673 672
-                              Store 41(doublev) 674
-             675: 43(f64vec2) Load 45(dvec2v)
-             676: 43(f64vec2) Load 45(dvec2v)
-             677: 43(f64vec2) Load 45(dvec2v)
-             678: 43(f64vec2) ExtInst 1(GLSL.std.450) 70(FaceForward) 675 676 677
-             679: 43(f64vec2) Load 45(dvec2v)
-             680: 43(f64vec2) FAdd 679 678
-                              Store 45(dvec2v) 680
-             681: 48(f64vec3) Load 50(dvec3v)
-             682: 48(f64vec3) Load 50(dvec3v)
-             683: 48(f64vec3) Load 50(dvec3v)
-             684: 48(f64vec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 681 682 683
-             685: 48(f64vec3) Load 50(dvec3v)
-             686: 48(f64vec3) FAdd 685 684
-                              Store 50(dvec3v) 686
-             687: 53(f64vec4) Load 55(dvec4v)
-             688: 53(f64vec4) Load 55(dvec4v)
-             689: 53(f64vec4) Load 55(dvec4v)
-             690: 53(f64vec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 687 688 689
-             691: 53(f64vec4) Load 55(dvec4v)
-             692: 53(f64vec4) FAdd 691 690
-                              Store 55(dvec4v) 692
-             693:39(float64_t) Load 41(doublev)
-             694:39(float64_t) Load 41(doublev)
-             695:39(float64_t) ExtInst 1(GLSL.std.450) 71(Reflect) 693 694
-             696:39(float64_t) Load 41(doublev)
-             697:39(float64_t) FAdd 696 695
-                              Store 41(doublev) 697
-             698: 43(f64vec2) Load 45(dvec2v)
-             699: 43(f64vec2) Load 45(dvec2v)
-             700: 43(f64vec2) ExtInst 1(GLSL.std.450) 71(Reflect) 698 699
-             701: 43(f64vec2) Load 45(dvec2v)
-             702: 43(f64vec2) FAdd 701 700
-                              Store 45(dvec2v) 702
-             703: 48(f64vec3) Load 50(dvec3v)
-             704: 48(f64vec3) Load 50(dvec3v)
-             705: 48(f64vec3) ExtInst 1(GLSL.std.450) 71(Reflect) 703 704
-             706: 48(f64vec3) Load 50(dvec3v)
-             707: 48(f64vec3) FAdd 706 705
-                              Store 50(dvec3v) 707
-             708: 53(f64vec4) Load 55(dvec4v)
-             709: 53(f64vec4) Load 55(dvec4v)
-             710: 53(f64vec4) ExtInst 1(GLSL.std.450) 71(Reflect) 708 709
-             711: 53(f64vec4) Load 55(dvec4v)
-             712: 53(f64vec4) FAdd 711 710
-                              Store 55(dvec4v) 712
-             713:39(float64_t) Load 41(doublev)
-             714:39(float64_t) Load 41(doublev)
-             715:39(float64_t) Load 41(doublev)
-             716:39(float64_t) ExtInst 1(GLSL.std.450) 72(Refract) 713 714 715
-             717:39(float64_t) Load 41(doublev)
-             718:39(float64_t) FAdd 717 716
-                              Store 41(doublev) 718
-             719: 43(f64vec2) Load 45(dvec2v)
-             720: 43(f64vec2) Load 45(dvec2v)
-             721:39(float64_t) Load 41(doublev)
-             722: 43(f64vec2) ExtInst 1(GLSL.std.450) 72(Refract) 719 720 721
-             723: 43(f64vec2) Load 45(dvec2v)
-             724: 43(f64vec2) FAdd 723 722
-                              Store 45(dvec2v) 724
-             725: 48(f64vec3) Load 50(dvec3v)
-             726: 48(f64vec3) Load 50(dvec3v)
+             665:39(float64_t) Load 41(doublev)
+             666:39(float64_t) ExtInst 1(GLSL.std.450) 69(Normalize) 665
+             667:39(float64_t) Load 41(doublev)
+             668:39(float64_t) FAdd 667 666
+                              Store 41(doublev) 668
+             669: 43(f64vec2) Load 45(dvec2v)
+             670: 43(f64vec2) ExtInst 1(GLSL.std.450) 69(Normalize) 669
+             671: 43(f64vec2) Load 45(dvec2v)
+             672: 43(f64vec2) FAdd 671 670
+                              Store 45(dvec2v) 672
+             673: 48(f64vec3) Load 50(dvec3v)
+             674: 48(f64vec3) ExtInst 1(GLSL.std.450) 69(Normalize) 673
+             675: 48(f64vec3) Load 50(dvec3v)
+             676: 48(f64vec3) FAdd 675 674
+                              Store 50(dvec3v) 676
+             677: 53(f64vec4) Load 55(dvec4v)
+             678: 53(f64vec4) ExtInst 1(GLSL.std.450) 69(Normalize) 677
+             679: 53(f64vec4) Load 55(dvec4v)
+             680: 53(f64vec4) FAdd 679 678
+                              Store 55(dvec4v) 680
+             681:39(float64_t) Load 41(doublev)
+             682:39(float64_t) Load 41(doublev)
+             683:39(float64_t) Load 41(doublev)
+             684:39(float64_t) ExtInst 1(GLSL.std.450) 70(FaceForward) 681 682 683
+             685:39(float64_t) Load 41(doublev)
+             686:39(float64_t) FAdd 685 684
+                              Store 41(doublev) 686
+             687: 43(f64vec2) Load 45(dvec2v)
+             688: 43(f64vec2) Load 45(dvec2v)
+             689: 43(f64vec2) Load 45(dvec2v)
+             690: 43(f64vec2) ExtInst 1(GLSL.std.450) 70(FaceForward) 687 688 689
+             691: 43(f64vec2) Load 45(dvec2v)
+             692: 43(f64vec2) FAdd 691 690
+                              Store 45(dvec2v) 692
+             693: 48(f64vec3) Load 50(dvec3v)
+             694: 48(f64vec3) Load 50(dvec3v)
+             695: 48(f64vec3) Load 50(dvec3v)
+             696: 48(f64vec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 693 694 695
+             697: 48(f64vec3) Load 50(dvec3v)
+             698: 48(f64vec3) FAdd 697 696
+                              Store 50(dvec3v) 698
+             699: 53(f64vec4) Load 55(dvec4v)
+             700: 53(f64vec4) Load 55(dvec4v)
+             701: 53(f64vec4) Load 55(dvec4v)
+             702: 53(f64vec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 699 700 701
+             703: 53(f64vec4) Load 55(dvec4v)
+             704: 53(f64vec4) FAdd 703 702
+                              Store 55(dvec4v) 704
+             705:39(float64_t) Load 41(doublev)
+             706:39(float64_t) Load 41(doublev)
+             707:39(float64_t) ExtInst 1(GLSL.std.450) 71(Reflect) 705 706
+             708:39(float64_t) Load 41(doublev)
+             709:39(float64_t) FAdd 708 707
+                              Store 41(doublev) 709
+             710: 43(f64vec2) Load 45(dvec2v)
+             711: 43(f64vec2) Load 45(dvec2v)
+             712: 43(f64vec2) ExtInst 1(GLSL.std.450) 71(Reflect) 710 711
+             713: 43(f64vec2) Load 45(dvec2v)
+             714: 43(f64vec2) FAdd 713 712
+                              Store 45(dvec2v) 714
+             715: 48(f64vec3) Load 50(dvec3v)
+             716: 48(f64vec3) Load 50(dvec3v)
+             717: 48(f64vec3) ExtInst 1(GLSL.std.450) 71(Reflect) 715 716
+             718: 48(f64vec3) Load 50(dvec3v)
+             719: 48(f64vec3) FAdd 718 717
+                              Store 50(dvec3v) 719
+             720: 53(f64vec4) Load 55(dvec4v)
+             721: 53(f64vec4) Load 55(dvec4v)
+             722: 53(f64vec4) ExtInst 1(GLSL.std.450) 71(Reflect) 720 721
+             723: 53(f64vec4) Load 55(dvec4v)
+             724: 53(f64vec4) FAdd 723 722
+                              Store 55(dvec4v) 724
+             725:39(float64_t) Load 41(doublev)
+             726:39(float64_t) Load 41(doublev)
              727:39(float64_t) Load 41(doublev)
-             728: 48(f64vec3) ExtInst 1(GLSL.std.450) 72(Refract) 725 726 727
-             729: 48(f64vec3) Load 50(dvec3v)
-             730: 48(f64vec3) FAdd 729 728
-                              Store 50(dvec3v) 730
-             731: 53(f64vec4) Load 55(dvec4v)
-             732: 53(f64vec4) Load 55(dvec4v)
+             728:39(float64_t) ExtInst 1(GLSL.std.450) 72(Refract) 725 726 727
+             729:39(float64_t) Load 41(doublev)
+             730:39(float64_t) FAdd 729 728
+                              Store 41(doublev) 730
+             731: 43(f64vec2) Load 45(dvec2v)
+             732: 43(f64vec2) Load 45(dvec2v)
              733:39(float64_t) Load 41(doublev)
-             734: 53(f64vec4) ExtInst 1(GLSL.std.450) 72(Refract) 731 732 733
-             735: 53(f64vec4) Load 55(dvec4v)
-             736: 53(f64vec4) FAdd 735 734
-                              Store 55(dvec4v) 736
-             740: 43(f64vec2) Load 45(dvec2v)
-             741: 43(f64vec2) Load 45(dvec2v)
-             742:         737 OuterProduct 740 741
-                              Store 739(dmat2v) 742
-             746: 48(f64vec3) Load 50(dvec3v)
-             747: 48(f64vec3) Load 50(dvec3v)
-             748:         743 OuterProduct 746 747
-                              Store 745(dmat3v) 748
-             752: 53(f64vec4) Load 55(dvec4v)
-             753: 53(f64vec4) Load 55(dvec4v)
+             734: 43(f64vec2) ExtInst 1(GLSL.std.450) 72(Refract) 731 732 733
+             735: 43(f64vec2) Load 45(dvec2v)
+             736: 43(f64vec2) FAdd 735 734
+                              Store 45(dvec2v) 736
+             737: 48(f64vec3) Load 50(dvec3v)
+             738: 48(f64vec3) Load 50(dvec3v)
+             739:39(float64_t) Load 41(doublev)
+             740: 48(f64vec3) ExtInst 1(GLSL.std.450) 72(Refract) 737 738 739
+             741: 48(f64vec3) Load 50(dvec3v)
+             742: 48(f64vec3) FAdd 741 740
+                              Store 50(dvec3v) 742
+             743: 53(f64vec4) Load 55(dvec4v)
+             744: 53(f64vec4) Load 55(dvec4v)
+             745:39(float64_t) Load 41(doublev)
+             746: 53(f64vec4) ExtInst 1(GLSL.std.450) 72(Refract) 743 744 745
+             747: 53(f64vec4) Load 55(dvec4v)
+             748: 53(f64vec4) FAdd 747 746
+                              Store 55(dvec4v) 748
+             752: 43(f64vec2) Load 45(dvec2v)
+             753: 43(f64vec2) Load 45(dvec2v)
              754:         749 OuterProduct 752 753
-                              Store 751(dmat4v) 754
+                              Store 751(dmat2v) 754
              758: 48(f64vec3) Load 50(dvec3v)
-             759: 43(f64vec2) Load 45(dvec2v)
+             759: 48(f64vec3) Load 50(dvec3v)
              760:         755 OuterProduct 758 759
-                              Store 757(dmat2x3v) 760
-             764: 43(f64vec2) Load 45(dvec2v)
-             765: 48(f64vec3) Load 50(dvec3v)
+                              Store 757(dmat3v) 760
+             764: 53(f64vec4) Load 55(dvec4v)
+             765: 53(f64vec4) Load 55(dvec4v)
              766:         761 OuterProduct 764 765
-                              Store 763(dmat3x2v) 766
-             770: 53(f64vec4) Load 55(dvec4v)
+                              Store 763(dmat4v) 766
+             770: 48(f64vec3) Load 50(dvec3v)
              771: 43(f64vec2) Load 45(dvec2v)
              772:         767 OuterProduct 770 771
-                              Store 769(dmat2x4v) 772
+                              Store 769(dmat2x3v) 772
              776: 43(f64vec2) Load 45(dvec2v)
-             777: 53(f64vec4) Load 55(dvec4v)
+             777: 48(f64vec3) Load 50(dvec3v)
              778:         773 OuterProduct 776 777
-                              Store 775(dmat4x2v) 778
+                              Store 775(dmat3x2v) 778
              782: 53(f64vec4) Load 55(dvec4v)
-             783: 48(f64vec3) Load 50(dvec3v)
+             783: 43(f64vec2) Load 45(dvec2v)
              784:         779 OuterProduct 782 783
-                              Store 781(dmat3x4v) 784
-             788: 48(f64vec3) Load 50(dvec3v)
+                              Store 781(dmat2x4v) 784
+             788: 43(f64vec2) Load 45(dvec2v)
              789: 53(f64vec4) Load 55(dvec4v)
              790:         785 OuterProduct 788 789
-                              Store 787(dmat4x3v) 790
-             791:         737 Load 739(dmat2v)
-             792:         737 Load 739(dmat2v)
-             793: 43(f64vec2) CompositeExtract 791 0
-             794: 43(f64vec2) CompositeExtract 792 0
-             795: 43(f64vec2) FMul 793 794
-             796: 43(f64vec2) CompositeExtract 791 1
-             797: 43(f64vec2) CompositeExtract 792 1
-             798: 43(f64vec2) FMul 796 797
-             799:         737 CompositeConstruct 795 798
-             800:         737 Load 739(dmat2v)
-             801:         737 MatrixTimesMatrix 800 799
-                              Store 739(dmat2v) 801
-             802:         743 Load 745(dmat3v)
-             803:         743 Load 745(dmat3v)
-             804: 48(f64vec3) CompositeExtract 802 0
-             805: 48(f64vec3) CompositeExtract 803 0
-             806: 48(f64vec3) FMul 804 805
-             807: 48(f64vec3) CompositeExtract 802 1
-             808: 48(f64vec3) CompositeExtract 803 1
-             809: 48(f64vec3) FMul 807 808
-             810: 48(f64vec3) CompositeExtract 802 2
-             811: 48(f64vec3) CompositeExtract 803 2
-             812: 48(f64vec3) FMul 810 811
-             813:         743 CompositeConstruct 806 809 812
-             814:         743 Load 745(dmat3v)
-             815:         743 MatrixTimesMatrix 814 813
-                              Store 745(dmat3v) 815
-             816:         749 Load 751(dmat4v)
-             817:         749 Load 751(dmat4v)
-             818: 53(f64vec4) CompositeExtract 816 0
-             819: 53(f64vec4) CompositeExtract 817 0
-             820: 53(f64vec4) FMul 818 819
-             821: 53(f64vec4) CompositeExtract 816 1
-             822: 53(f64vec4) CompositeExtract 817 1
-             823: 53(f64vec4) FMul 821 822
-             824: 53(f64vec4) CompositeExtract 816 2
-             825: 53(f64vec4) CompositeExtract 817 2
-             826: 53(f64vec4) FMul 824 825
-             827: 53(f64vec4) CompositeExtract 816 3
-             828: 53(f64vec4) CompositeExtract 817 3
-             829: 53(f64vec4) FMul 827 828
-             830:         749 CompositeConstruct 820 823 826 829
-             831:         749 Load 751(dmat4v)
-             832:         749 MatrixTimesMatrix 831 830
-                              Store 751(dmat4v) 832
-             833:         755 Load 757(dmat2x3v)
-             834:         755 Load 757(dmat2x3v)
-             835: 48(f64vec3) CompositeExtract 833 0
-             836: 48(f64vec3) CompositeExtract 834 0
-             837: 48(f64vec3) FMul 835 836
-             838: 48(f64vec3) CompositeExtract 833 1
-             839: 48(f64vec3) CompositeExtract 834 1
-             840: 48(f64vec3) FMul 838 839
-             841:         755 CompositeConstruct 837 840
-                              Store 757(dmat2x3v) 841
-             842:         767 Load 769(dmat2x4v)
-             843:         767 Load 769(dmat2x4v)
-             844: 53(f64vec4) CompositeExtract 842 0
-             845: 53(f64vec4) CompositeExtract 843 0
-             846: 53(f64vec4) FMul 844 845
-             847: 53(f64vec4) CompositeExtract 842 1
-             848: 53(f64vec4) CompositeExtract 843 1
-             849: 53(f64vec4) FMul 847 848
-             850:         767 CompositeConstruct 846 849
-                              Store 769(dmat2x4v) 850
-             851:         761 Load 763(dmat3x2v)
-             852:         761 Load 763(dmat3x2v)
-             853: 43(f64vec2) CompositeExtract 851 0
-             854: 43(f64vec2) CompositeExtract 852 0
-             855: 43(f64vec2) FMul 853 854
-             856: 43(f64vec2) CompositeExtract 851 1
-             857: 43(f64vec2) CompositeExtract 852 1
-             858: 43(f64vec2) FMul 856 857
-             859: 43(f64vec2) CompositeExtract 851 2
-             860: 43(f64vec2) CompositeExtract 852 2
-             861: 43(f64vec2) FMul 859 860
-             862:         761 CompositeConstruct 855 858 861
-                              Store 763(dmat3x2v) 862
-             863:         779 Load 781(dmat3x4v)
-             864:         779 Load 781(dmat3x4v)
-             865: 53(f64vec4) CompositeExtract 863 0
-             866: 53(f64vec4) CompositeExtract 864 0
-             867: 53(f64vec4) FMul 865 866
-             868: 53(f64vec4) CompositeExtract 863 1
-             869: 53(f64vec4) CompositeExtract 864 1
-             870: 53(f64vec4) FMul 868 869
-             871: 53(f64vec4) CompositeExtract 863 2
-             872: 53(f64vec4) CompositeExtract 864 2
-             873: 53(f64vec4) FMul 871 872
-             874:         779 CompositeConstruct 867 870 873
-                              Store 781(dmat3x4v) 874
-             875:         773 Load 775(dmat4x2v)
-             876:         773 Load 775(dmat4x2v)
-             877: 43(f64vec2) CompositeExtract 875 0
-             878: 43(f64vec2) CompositeExtract 876 0
-             879: 43(f64vec2) FMul 877 878
-             880: 43(f64vec2) CompositeExtract 875 1
-             881: 43(f64vec2) CompositeExtract 876 1
-             882: 43(f64vec2) FMul 880 881
-             883: 43(f64vec2) CompositeExtract 875 2
-             884: 43(f64vec2) CompositeExtract 876 2
-             885: 43(f64vec2) FMul 883 884
-             886: 43(f64vec2) CompositeExtract 875 3
-             887: 43(f64vec2) CompositeExtract 876 3
-             888: 43(f64vec2) FMul 886 887
-             889:         773 CompositeConstruct 879 882 885 888
-                              Store 775(dmat4x2v) 889
-             890:         785 Load 787(dmat4x3v)
-             891:         785 Load 787(dmat4x3v)
-             892: 48(f64vec3) CompositeExtract 890 0
-             893: 48(f64vec3) CompositeExtract 891 0
-             894: 48(f64vec3) FMul 892 893
-             895: 48(f64vec3) CompositeExtract 890 1
-             896: 48(f64vec3) CompositeExtract 891 1
-             897: 48(f64vec3) FMul 895 896
-             898: 48(f64vec3) CompositeExtract 890 2
-             899: 48(f64vec3) CompositeExtract 891 2
-             900: 48(f64vec3) FMul 898 899
-             901: 48(f64vec3) CompositeExtract 890 3
-             902: 48(f64vec3) CompositeExtract 891 3
-             903: 48(f64vec3) FMul 901 902
-             904:         785 CompositeConstruct 894 897 900 903
-                              Store 787(dmat4x3v) 904
-             905:         737 Load 739(dmat2v)
-             906:         737 Transpose 905
-             907:         737 Load 739(dmat2v)
-             908:         737 MatrixTimesMatrix 907 906
-                              Store 739(dmat2v) 908
-             909:         743 Load 745(dmat3v)
-             910:         743 Transpose 909
-             911:         743 Load 745(dmat3v)
-             912:         743 MatrixTimesMatrix 911 910
-                              Store 745(dmat3v) 912
-             913:         749 Load 751(dmat4v)
-             914:         749 Transpose 913
-             915:         749 Load 751(dmat4v)
-             916:         749 MatrixTimesMatrix 915 914
-                              Store 751(dmat4v) 916
-             917:         761 Load 763(dmat3x2v)
-             918:         755 Transpose 917
-                              Store 757(dmat2x3v) 918
-             919:         755 Load 757(dmat2x3v)
-             920:         761 Transpose 919
-                              Store 763(dmat3x2v) 920
-             921:         773 Load 775(dmat4x2v)
-             922:         767 Transpose 921
-                              Store 769(dmat2x4v) 922
-             923:         767 Load 769(dmat2x4v)
-             924:         773 Transpose 923
-                              Store 775(dmat4x2v) 924
-             925:         785 Load 787(dmat4x3v)
-             926:         779 Transpose 925
-                              Store 781(dmat3x4v) 926
-             927:         779 Load 781(dmat3x4v)
-             928:         785 Transpose 927
-                              Store 787(dmat4x3v) 928
-             929:         737 Load 739(dmat2v)
-             930:39(float64_t) ExtInst 1(GLSL.std.450) 33(Determinant) 929
-             931:39(float64_t) Load 41(doublev)
-             932:39(float64_t) FAdd 931 930
-                              Store 41(doublev) 932
-             933:         743 Load 745(dmat3v)
-             934:39(float64_t) ExtInst 1(GLSL.std.450) 33(Determinant) 933
-             935:39(float64_t) Load 41(doublev)
-             936:39(float64_t) FAdd 935 934
-                              Store 41(doublev) 936
-             937:         749 Load 751(dmat4v)
-             938:39(float64_t) ExtInst 1(GLSL.std.450) 33(Determinant) 937
-             939:39(float64_t) Load 41(doublev)
-             940:39(float64_t) FAdd 939 938
-                              Store 41(doublev) 940
-             941:         737 Load 739(dmat2v)
-             942:         737 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 941
-             943:         737 Load 739(dmat2v)
-             944:         737 MatrixTimesMatrix 943 942
-                              Store 739(dmat2v) 944
-             945:         743 Load 745(dmat3v)
-             946:         743 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 945
-             947:         743 Load 745(dmat3v)
-             948:         743 MatrixTimesMatrix 947 946
-                              Store 745(dmat3v) 948
-             949:         749 Load 751(dmat4v)
-             950:         749 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 949
-             951:         749 Load 751(dmat4v)
-             952:         749 MatrixTimesMatrix 951 950
-                              Store 751(dmat4v) 952
-             953:39(float64_t) Load 41(doublev)
-             955:     40(ptr) AccessChain 45(dvec2v) 954
-             956:39(float64_t) Load 955
-             957:39(float64_t) FAdd 953 956
-             959:     40(ptr) AccessChain 50(dvec3v) 958
-             960:39(float64_t) Load 959
-             961:39(float64_t) FAdd 957 960
-             963:     40(ptr) AccessChain 55(dvec4v) 962
-             964:39(float64_t) Load 963
-             965:39(float64_t) FAdd 961 964
-             967:     40(ptr) AccessChain 739(dmat2v) 966 954
+                              Store 787(dmat4x2v) 790
+             794: 53(f64vec4) Load 55(dvec4v)
+             795: 48(f64vec3) Load 50(dvec3v)
+             796:         791 OuterProduct 794 795
+                              Store 793(dmat3x4v) 796
+             800: 48(f64vec3) Load 50(dvec3v)
+             801: 53(f64vec4) Load 55(dvec4v)
+             802:         797 OuterProduct 800 801
+                              Store 799(dmat4x3v) 802
+             803:         749 Load 751(dmat2v)
+             804:         749 Load 751(dmat2v)
+             805: 43(f64vec2) CompositeExtract 803 0
+             806: 43(f64vec2) CompositeExtract 804 0
+             807: 43(f64vec2) FMul 805 806
+             808: 43(f64vec2) CompositeExtract 803 1
+             809: 43(f64vec2) CompositeExtract 804 1
+             810: 43(f64vec2) FMul 808 809
+             811:         749 CompositeConstruct 807 810
+             812:         749 Load 751(dmat2v)
+             813:         749 MatrixTimesMatrix 812 811
+                              Store 751(dmat2v) 813
+             814:         755 Load 757(dmat3v)
+             815:         755 Load 757(dmat3v)
+             816: 48(f64vec3) CompositeExtract 814 0
+             817: 48(f64vec3) CompositeExtract 815 0
+             818: 48(f64vec3) FMul 816 817
+             819: 48(f64vec3) CompositeExtract 814 1
+             820: 48(f64vec3) CompositeExtract 815 1
+             821: 48(f64vec3) FMul 819 820
+             822: 48(f64vec3) CompositeExtract 814 2
+             823: 48(f64vec3) CompositeExtract 815 2
+             824: 48(f64vec3) FMul 822 823
+             825:         755 CompositeConstruct 818 821 824
+             826:         755 Load 757(dmat3v)
+             827:         755 MatrixTimesMatrix 826 825
+                              Store 757(dmat3v) 827
+             828:         761 Load 763(dmat4v)
+             829:         761 Load 763(dmat4v)
+             830: 53(f64vec4) CompositeExtract 828 0
+             831: 53(f64vec4) CompositeExtract 829 0
+             832: 53(f64vec4) FMul 830 831
+             833: 53(f64vec4) CompositeExtract 828 1
+             834: 53(f64vec4) CompositeExtract 829 1
+             835: 53(f64vec4) FMul 833 834
+             836: 53(f64vec4) CompositeExtract 828 2
+             837: 53(f64vec4) CompositeExtract 829 2
+             838: 53(f64vec4) FMul 836 837
+             839: 53(f64vec4) CompositeExtract 828 3
+             840: 53(f64vec4) CompositeExtract 829 3
+             841: 53(f64vec4) FMul 839 840
+             842:         761 CompositeConstruct 832 835 838 841
+             843:         761 Load 763(dmat4v)
+             844:         761 MatrixTimesMatrix 843 842
+                              Store 763(dmat4v) 844
+             845:         767 Load 769(dmat2x3v)
+             846:         767 Load 769(dmat2x3v)
+             847: 48(f64vec3) CompositeExtract 845 0
+             848: 48(f64vec3) CompositeExtract 846 0
+             849: 48(f64vec3) FMul 847 848
+             850: 48(f64vec3) CompositeExtract 845 1
+             851: 48(f64vec3) CompositeExtract 846 1
+             852: 48(f64vec3) FMul 850 851
+             853:         767 CompositeConstruct 849 852
+                              Store 769(dmat2x3v) 853
+             854:         779 Load 781(dmat2x4v)
+             855:         779 Load 781(dmat2x4v)
+             856: 53(f64vec4) CompositeExtract 854 0
+             857: 53(f64vec4) CompositeExtract 855 0
+             858: 53(f64vec4) FMul 856 857
+             859: 53(f64vec4) CompositeExtract 854 1
+             860: 53(f64vec4) CompositeExtract 855 1
+             861: 53(f64vec4) FMul 859 860
+             862:         779 CompositeConstruct 858 861
+                              Store 781(dmat2x4v) 862
+             863:         773 Load 775(dmat3x2v)
+             864:         773 Load 775(dmat3x2v)
+             865: 43(f64vec2) CompositeExtract 863 0
+             866: 43(f64vec2) CompositeExtract 864 0
+             867: 43(f64vec2) FMul 865 866
+             868: 43(f64vec2) CompositeExtract 863 1
+             869: 43(f64vec2) CompositeExtract 864 1
+             870: 43(f64vec2) FMul 868 869
+             871: 43(f64vec2) CompositeExtract 863 2
+             872: 43(f64vec2) CompositeExtract 864 2
+             873: 43(f64vec2) FMul 871 872
+             874:         773 CompositeConstruct 867 870 873
+                              Store 775(dmat3x2v) 874
+             875:         791 Load 793(dmat3x4v)
+             876:         791 Load 793(dmat3x4v)
+             877: 53(f64vec4) CompositeExtract 875 0
+             878: 53(f64vec4) CompositeExtract 876 0
+             879: 53(f64vec4) FMul 877 878
+             880: 53(f64vec4) CompositeExtract 875 1
+             881: 53(f64vec4) CompositeExtract 876 1
+             882: 53(f64vec4) FMul 880 881
+             883: 53(f64vec4) CompositeExtract 875 2
+             884: 53(f64vec4) CompositeExtract 876 2
+             885: 53(f64vec4) FMul 883 884
+             886:         791 CompositeConstruct 879 882 885
+                              Store 793(dmat3x4v) 886
+             887:         785 Load 787(dmat4x2v)
+             888:         785 Load 787(dmat4x2v)
+             889: 43(f64vec2) CompositeExtract 887 0
+             890: 43(f64vec2) CompositeExtract 888 0
+             891: 43(f64vec2) FMul 889 890
+             892: 43(f64vec2) CompositeExtract 887 1
+             893: 43(f64vec2) CompositeExtract 888 1
+             894: 43(f64vec2) FMul 892 893
+             895: 43(f64vec2) CompositeExtract 887 2
+             896: 43(f64vec2) CompositeExtract 888 2
+             897: 43(f64vec2) FMul 895 896
+             898: 43(f64vec2) CompositeExtract 887 3
+             899: 43(f64vec2) CompositeExtract 888 3
+             900: 43(f64vec2) FMul 898 899
+             901:         785 CompositeConstruct 891 894 897 900
+                              Store 787(dmat4x2v) 901
+             902:         797 Load 799(dmat4x3v)
+             903:         797 Load 799(dmat4x3v)
+             904: 48(f64vec3) CompositeExtract 902 0
+             905: 48(f64vec3) CompositeExtract 903 0
+             906: 48(f64vec3) FMul 904 905
+             907: 48(f64vec3) CompositeExtract 902 1
+             908: 48(f64vec3) CompositeExtract 903 1
+             909: 48(f64vec3) FMul 907 908
+             910: 48(f64vec3) CompositeExtract 902 2
+             911: 48(f64vec3) CompositeExtract 903 2
+             912: 48(f64vec3) FMul 910 911
+             913: 48(f64vec3) CompositeExtract 902 3
+             914: 48(f64vec3) CompositeExtract 903 3
+             915: 48(f64vec3) FMul 913 914
+             916:         797 CompositeConstruct 906 909 912 915
+                              Store 799(dmat4x3v) 916
+             917:         749 Load 751(dmat2v)
+             918:         749 Transpose 917
+             919:         749 Load 751(dmat2v)
+             920:         749 MatrixTimesMatrix 919 918
+                              Store 751(dmat2v) 920
+             921:         755 Load 757(dmat3v)
+             922:         755 Transpose 921
+             923:         755 Load 757(dmat3v)
+             924:         755 MatrixTimesMatrix 923 922
+                              Store 757(dmat3v) 924
+             925:         761 Load 763(dmat4v)
+             926:         761 Transpose 925
+             927:         761 Load 763(dmat4v)
+             928:         761 MatrixTimesMatrix 927 926
+                              Store 763(dmat4v) 928
+             929:         773 Load 775(dmat3x2v)
+             930:         767 Transpose 929
+                              Store 769(dmat2x3v) 930
+             931:         767 Load 769(dmat2x3v)
+             932:         773 Transpose 931
+                              Store 775(dmat3x2v) 932
+             933:         785 Load 787(dmat4x2v)
+             934:         779 Transpose 933
+                              Store 781(dmat2x4v) 934
+             935:         779 Load 781(dmat2x4v)
+             936:         785 Transpose 935
+                              Store 787(dmat4x2v) 936
+             937:         797 Load 799(dmat4x3v)
+             938:         791 Transpose 937
+                              Store 793(dmat3x4v) 938
+             939:         791 Load 793(dmat3x4v)
+             940:         797 Transpose 939
+                              Store 799(dmat4x3v) 940
+             941:         749 Load 751(dmat2v)
+             942:39(float64_t) ExtInst 1(GLSL.std.450) 33(Determinant) 941
+             943:39(float64_t) Load 41(doublev)
+             944:39(float64_t) FAdd 943 942
+                              Store 41(doublev) 944
+             945:         755 Load 757(dmat3v)
+             946:39(float64_t) ExtInst 1(GLSL.std.450) 33(Determinant) 945
+             947:39(float64_t) Load 41(doublev)
+             948:39(float64_t) FAdd 947 946
+                              Store 41(doublev) 948
+             949:         761 Load 763(dmat4v)
+             950:39(float64_t) ExtInst 1(GLSL.std.450) 33(Determinant) 949
+             951:39(float64_t) Load 41(doublev)
+             952:39(float64_t) FAdd 951 950
+                              Store 41(doublev) 952
+             953:         749 Load 751(dmat2v)
+             954:         749 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 953
+             955:         749 Load 751(dmat2v)
+             956:         749 MatrixTimesMatrix 955 954
+                              Store 751(dmat2v) 956
+             957:         755 Load 757(dmat3v)
+             958:         755 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 957
+             959:         755 Load 757(dmat3v)
+             960:         755 MatrixTimesMatrix 959 958
+                              Store 757(dmat3v) 960
+             961:         761 Load 763(dmat4v)
+             962:         761 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 961
+             963:         761 Load 763(dmat4v)
+             964:         761 MatrixTimesMatrix 963 962
+                              Store 763(dmat4v) 964
+             965:39(float64_t) Load 41(doublev)
+             967:     40(ptr) AccessChain 45(dvec2v) 966
              968:39(float64_t) Load 967
              969:39(float64_t) FAdd 965 968
-             971:     40(ptr) AccessChain 745(dmat3v) 970 958
+             971:     40(ptr) AccessChain 50(dvec3v) 970
              972:39(float64_t) Load 971
              973:39(float64_t) FAdd 969 972
-             974:     40(ptr) AccessChain 751(dmat4v) 25 962
-             975:39(float64_t) Load 974
-             976:39(float64_t) FAdd 973 975
-             977:     40(ptr) AccessChain 757(dmat2x3v) 966 954
-             978:39(float64_t) Load 977
-             979:39(float64_t) FAdd 976 978
-             980:     40(ptr) AccessChain 763(dmat3x2v) 966 954
-             981:39(float64_t) Load 980
-             982:39(float64_t) FAdd 979 981
-             983:     40(ptr) AccessChain 781(dmat3x4v) 970 958
+             975:     40(ptr) AccessChain 55(dvec4v) 974
+             976:39(float64_t) Load 975
+             977:39(float64_t) FAdd 973 976
+             979:     40(ptr) AccessChain 751(dmat2v) 978 966
+             980:39(float64_t) Load 979
+             981:39(float64_t) FAdd 977 980
+             983:     40(ptr) AccessChain 757(dmat3v) 982 970
              984:39(float64_t) Load 983
-             985:39(float64_t) FAdd 982 984
-             986:     40(ptr) AccessChain 787(dmat4x3v) 970 958
+             985:39(float64_t) FAdd 981 984
+             986:     40(ptr) AccessChain 763(dmat4v) 25 974
              987:39(float64_t) Load 986
              988:39(float64_t) FAdd 985 987
-             989:     40(ptr) AccessChain 769(dmat2x4v) 966 954
+             989:     40(ptr) AccessChain 769(dmat2x3v) 978 966
              990:39(float64_t) Load 989
              991:39(float64_t) FAdd 988 990
-             992:     40(ptr) AccessChain 775(dmat4x2v) 966 954
+             992:     40(ptr) AccessChain 775(dmat3x2v) 978 966
              993:39(float64_t) Load 992
              994:39(float64_t) FAdd 991 993
-             995:   428(bool) Load 430(boolv)
-             997:   10(float) Select 995 996 21
-             998:39(float64_t) FConvert 997
-             999:39(float64_t) FAdd 994 998
-            1000:    429(ptr) AccessChain 439(bvec2v) 33
-            1001:   428(bool) Load 1000
-            1002:   10(float) Select 1001 996 21
-            1003:39(float64_t) FConvert 1002
-            1004:39(float64_t) FAdd 999 1003
-            1005:    429(ptr) AccessChain 448(bvec3v) 33
-            1006:   428(bool) Load 1005
-            1007:   10(float) Select 1006 996 21
-            1008:39(float64_t) FConvert 1007
-            1009:39(float64_t) FAdd 1004 1008
-            1010:    429(ptr) AccessChain 457(bvec4v) 33
-            1011:   428(bool) Load 1010
-            1012:   10(float) Select 1011 996 21
-            1013:39(float64_t) FConvert 1012
-            1014:39(float64_t) FAdd 1009 1013
-            1015:   10(float) FConvert 1014
-            1016:   11(fvec4) Load 13(outp)
-            1017:   11(fvec4) VectorTimesScalar 1016 1015
-                              Store 13(outp) 1017
+             995:     40(ptr) AccessChain 793(dmat3x4v) 982 970
+             996:39(float64_t) Load 995
+             997:39(float64_t) FAdd 994 996
+             998:     40(ptr) AccessChain 799(dmat4x3v) 982 970
+             999:39(float64_t) Load 998
+            1000:39(float64_t) FAdd 997 999
+            1001:     40(ptr) AccessChain 781(dmat2x4v) 978 966
+            1002:39(float64_t) Load 1001
+            1003:39(float64_t) FAdd 1000 1002
+            1004:     40(ptr) AccessChain 787(dmat4x2v) 978 966
+            1005:39(float64_t) Load 1004
+            1006:39(float64_t) FAdd 1003 1005
+            1007:   440(bool) Load 442(boolv)
+            1009:   10(float) Select 1007 1008 21
+            1010:39(float64_t) FConvert 1009
+            1011:39(float64_t) FAdd 1006 1010
+            1012:    441(ptr) AccessChain 451(bvec2v) 33
+            1013:   440(bool) Load 1012
+            1014:   10(float) Select 1013 1008 21
+            1015:39(float64_t) FConvert 1014
+            1016:39(float64_t) FAdd 1011 1015
+            1017:    441(ptr) AccessChain 460(bvec3v) 33
+            1018:   440(bool) Load 1017
+            1019:   10(float) Select 1018 1008 21
+            1020:39(float64_t) FConvert 1019
+            1021:39(float64_t) FAdd 1016 1020
+            1022:    441(ptr) AccessChain 469(bvec4v) 33
+            1023:   440(bool) Load 1022
+            1024:   10(float) Select 1023 1008 21
+            1025:39(float64_t) FConvert 1024
+            1026:39(float64_t) FAdd 1021 1025
+            1027:   10(float) FConvert 1026
+            1028:   11(fvec4) Load 13(outp)
+            1029:   11(fvec4) VectorTimesScalar 1028 1027
+                              Store 13(outp) 1029
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.400.tesc.out b/Test/baseResults/spv.400.tesc.out
index b6f0ddf..7936933 100644
--- a/Test/baseResults/spv.400.tesc.out
+++ b/Test/baseResults/spv.400.tesc.out
@@ -43,21 +43,21 @@
                               Name 87  "ivlb"
                               Name 90  "ovla"
                               Name 91  "ovlb"
+                              Decorate 20(gl_PerVertex) Block
                               MemberDecorate 20(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 20(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 20(gl_PerVertex) 2 BuiltIn ClipDistance
-                              Decorate 20(gl_PerVertex) Block
                               Decorate 41(gl_PatchVerticesIn) BuiltIn PatchVertices
                               Decorate 44(gl_PrimitiveID) BuiltIn PrimitiveId
                               Decorate 47(gl_InvocationID) BuiltIn InvocationId
+                              Decorate 50(gl_PerVertex) Block
                               MemberDecorate 50(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 50(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 50(gl_PerVertex) 2 BuiltIn ClipDistance
-                              Decorate 50(gl_PerVertex) Block
-                              Decorate 67(gl_TessLevelOuter) Patch
                               Decorate 67(gl_TessLevelOuter) BuiltIn TessLevelOuter
-                              Decorate 72(gl_TessLevelInner) Patch
+                              Decorate 67(gl_TessLevelOuter) Patch
                               Decorate 72(gl_TessLevelInner) BuiltIn TessLevelInner
+                              Decorate 72(gl_TessLevelInner) Patch
                               Decorate 78(patchOut) Patch
                               Decorate 78(patchOut) Location 0
                               Decorate 82(inb) Location 0
diff --git a/Test/baseResults/spv.400.tese.out b/Test/baseResults/spv.400.tese.out
index 0b8abf6..0bcfc11 100644
--- a/Test/baseResults/spv.400.tese.out
+++ b/Test/baseResults/spv.400.tese.out
@@ -52,21 +52,21 @@
                               Name 91  "ivla"
                               Name 92  "ivlb"
                               Name 95  "ovla"
+                              Decorate 17(gl_PerVertex) Block
                               MemberDecorate 17(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 17(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 17(gl_PerVertex) 2 BuiltIn ClipDistance
-                              Decorate 17(gl_PerVertex) Block
                               Decorate 38(gl_PatchVerticesIn) BuiltIn PatchVertices
                               Decorate 41(gl_PrimitiveID) BuiltIn PrimitiveId
                               Decorate 47(gl_TessCoord) BuiltIn TessCoord
-                              Decorate 53(gl_TessLevelOuter) Patch
                               Decorate 53(gl_TessLevelOuter) BuiltIn TessLevelOuter
-                              Decorate 61(gl_TessLevelInner) Patch
+                              Decorate 53(gl_TessLevelOuter) Patch
                               Decorate 61(gl_TessLevelInner) BuiltIn TessLevelInner
+                              Decorate 61(gl_TessLevelInner) Patch
+                              Decorate 64(gl_PerVertex) Block
                               MemberDecorate 64(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 64(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 64(gl_PerVertex) 2 BuiltIn ClipDistance
-                              Decorate 64(gl_PerVertex) Block
                               Decorate 75(patchIn) Patch
                               Decorate 75(patchIn) Location 0
                               Decorate 79(inb) Location 1
diff --git a/Test/baseResults/spv.420.geom.out b/Test/baseResults/spv.420.geom.out
index d814d1a..8cd4420 100644
--- a/Test/baseResults/spv.420.geom.out
+++ b/Test/baseResults/spv.420.geom.out
@@ -32,16 +32,16 @@
                               Name 46  "coord"
                               Name 64  "i"
                               Name 67  "indexable"
-                              MemberDecorate 9(gl_PerVertex) 0 BuiltIn PointSize
                               Decorate 9(gl_PerVertex) Block
-                              MemberDecorate 21(gl_PerVertex) 0 BuiltIn PointSize
+                              MemberDecorate 9(gl_PerVertex) 0 BuiltIn PointSize
                               Decorate 21(gl_PerVertex) Block
+                              MemberDecorate 21(gl_PerVertex) 0 BuiltIn PointSize
                               Decorate 23 Stream 0
-                              Decorate 28(gl_ViewportIndex) Stream 0
                               Decorate 28(gl_ViewportIndex) BuiltIn ViewportIndex
+                              Decorate 28(gl_ViewportIndex) Stream 0
                               Decorate 33(gl_InvocationID) BuiltIn InvocationId
-                              Decorate 41(s2D) DescriptorSet 0
                               Decorate 41(s2D) Binding 0
+                              Decorate 41(s2D) DescriptorSet 0
                               Decorate 46(coord) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.430.frag.out b/Test/baseResults/spv.430.frag.out
index bc00fa1..009f063 100644
--- a/Test/baseResults/spv.430.frag.out
+++ b/Test/baseResults/spv.430.frag.out
@@ -16,10 +16,10 @@
                               Name 14  "gl_Layer"
                               Name 19  "gl_ViewportIndex"
                               Decorate 9(color) Location 0
-                              Decorate 14(gl_Layer) Flat
                               Decorate 14(gl_Layer) BuiltIn Layer
-                              Decorate 19(gl_ViewportIndex) Flat
+                              Decorate 14(gl_Layer) Flat
                               Decorate 19(gl_ViewportIndex) BuiltIn ViewportIndex
+                              Decorate 19(gl_ViewportIndex) Flat
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.430.vert.out b/Test/baseResults/spv.430.vert.out
index eada8d0..8a75ae0 100644
--- a/Test/baseResults/spv.430.vert.out
+++ b/Test/baseResults/spv.430.vert.out
@@ -40,34 +40,34 @@
                               Name 63  "MS"
                               MemberName 63(MS) 0  "f"
                               Name 65  "outMS"
-                              MemberDecorate 10(gl_PerVertex) 0 BuiltIn ClipDistance
                               Decorate 10(gl_PerVertex) Block
+                              MemberDecorate 10(gl_PerVertex) 0 BuiltIn ClipDistance
                               Decorate 23(bad) Location 0
                               Decorate 34(badorder3) Flat
                               Decorate 34(badorder3) Location 1
                               Decorate 38(f) Location 11
                               Decorate 41(badorder) Location 10
-                              Decorate 42(badorder2) Location 0
                               Decorate 42(badorder2) Invariant
-                              MemberDecorate 43(boundblock) 0 Offset 0
+                              Decorate 42(badorder2) Location 0
                               Decorate 43(boundblock) Block
-                              Decorate 45(boundInst) DescriptorSet 0
+                              MemberDecorate 43(boundblock) 0 Offset 0
                               Decorate 45(boundInst) Binding 3
-                              MemberDecorate 46(anonblock) 0 Offset 0
+                              Decorate 45(boundInst) DescriptorSet 0
                               Decorate 46(anonblock) Block
-                              Decorate 48 DescriptorSet 0
+                              MemberDecorate 46(anonblock) 0 Offset 0
                               Decorate 48 Binding 7
-                              Decorate 52(sampb1) DescriptorSet 0
+                              Decorate 48 DescriptorSet 0
                               Decorate 52(sampb1) Binding 4
-                              Decorate 55(sampb2) DescriptorSet 0
+                              Decorate 52(sampb1) DescriptorSet 0
                               Decorate 55(sampb2) Binding 5
-                              Decorate 56(sampb4) DescriptorSet 0
+                              Decorate 55(sampb2) DescriptorSet 0
                               Decorate 56(sampb4) Binding 31
+                              Decorate 56(sampb4) DescriptorSet 0
                               MemberDecorate 59(S) 0 RelaxedPrecision
                               Decorate 62(var) Flat
                               Decorate 62(var) Location 0
-                              MemberDecorate 63(MS) 0 Location 17
                               Decorate 63(MS) Block
+                              MemberDecorate 63(MS) 0 Location 17
                               Decorate 65(outMS) Location 2
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.450.geom.out b/Test/baseResults/spv.450.geom.out
index 5398b3c..f2f9a06 100644
--- a/Test/baseResults/spv.450.geom.out
+++ b/Test/baseResults/spv.450.geom.out
@@ -29,16 +29,16 @@
                               Name 20  "gl_in"
                               Name 27  "gl_Layer"
                               Name 29  "gl_ViewportIndex"
+                              Decorate 11(gl_PerVertex) Block
                               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
+                              Decorate 16(gl_PerVertex) Block
                               MemberDecorate 16(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 16(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 16(gl_PerVertex) 2 BuiltIn ClipDistance
                               MemberDecorate 16(gl_PerVertex) 3 BuiltIn CullDistance
-                              Decorate 16(gl_PerVertex) Block
                               Decorate 27(gl_Layer) BuiltIn Layer
                               Decorate 29(gl_ViewportIndex) BuiltIn ViewportIndex
                2:             TypeVoid
diff --git a/Test/baseResults/spv.450.noRedecl.tesc.out b/Test/baseResults/spv.450.noRedecl.tesc.out
index dcf0a9f..fb31be5 100644
--- a/Test/baseResults/spv.450.noRedecl.tesc.out
+++ b/Test/baseResults/spv.450.noRedecl.tesc.out
@@ -18,11 +18,11 @@
                               MemberName 11(gl_PerVertex) 3  "gl_CullDistance"
                               Name 15  "gl_in"
                               Name 20  "patchOut"
+                              Decorate 11(gl_PerVertex) Block
                               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
                               Decorate 20(patchOut) Patch
                               Decorate 20(patchOut) Location 0
                2:             TypeVoid
diff --git a/Test/baseResults/spv.450.tesc.out b/Test/baseResults/spv.450.tesc.out
index eabb9e7..bb5d55b 100644
--- a/Test/baseResults/spv.450.tesc.out
+++ b/Test/baseResults/spv.450.tesc.out
@@ -43,36 +43,36 @@
                               MemberName 42(bn) 1  "v2"
                               MemberName 42(bn) 2  "v3"
                               Name 44  ""
+                              Decorate 11(gl_PerVertex) Block
                               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
                               Decorate 18(gl_InvocationID) BuiltIn InvocationId
+                              Decorate 21(gl_PerVertex) Block
                               MemberDecorate 21(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 21(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 21(gl_PerVertex) 2 BuiltIn ClipDistance
                               MemberDecorate 21(gl_PerVertex) 3 BuiltIn CullDistance
-                              Decorate 21(gl_PerVertex) Block
                               Decorate 32(patchOut) Patch
                               Decorate 32(patchOut) Location 1
+                              Decorate 34(TheBlock) Block
                               MemberDecorate 34(TheBlock) 0 Patch
                               MemberDecorate 34(TheBlock) 1 Patch
                               MemberDecorate 34(TheBlock) 2 Patch
-                              Decorate 34(TheBlock) Block
                               Decorate 38(tcBlock) Location 12
+                              Decorate 39(SingleBlock) Block
                               MemberDecorate 39(SingleBlock) 0 Patch
                               MemberDecorate 39(SingleBlock) 1 Patch
                               MemberDecorate 39(SingleBlock) 2 Patch
-                              Decorate 39(SingleBlock) Block
                               Decorate 41(singleBlock) Location 2
+                              Decorate 42(bn) Block
                               MemberDecorate 42(bn) 0 Patch
                               MemberDecorate 42(bn) 0 Location 20
                               MemberDecorate 42(bn) 1 Patch
                               MemberDecorate 42(bn) 1 Location 24
                               MemberDecorate 42(bn) 2 Patch
                               MemberDecorate 42(bn) 2 Location 25
-                              Decorate 42(bn) Block
                               Decorate 44 Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.460.frag.out b/Test/baseResults/spv.460.frag.out
index 4201fbb..e40e833 100644
--- a/Test/baseResults/spv.460.frag.out
+++ b/Test/baseResults/spv.460.frag.out
@@ -15,9 +15,9 @@
                               Name 4  "main"
                               Name 8  "aui"
                               Name 10  "ui"
-                              Decorate 8(aui) Offset 0
-                              Decorate 8(aui) DescriptorSet 0
                               Decorate 8(aui) Binding 0
+                              Decorate 8(aui) DescriptorSet 0
+                              Decorate 8(aui) Offset 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
diff --git a/Test/baseResults/spv.460.subgroupEXT.mesh.out b/Test/baseResults/spv.460.subgroupEXT.mesh.out
index f41895f..112d50d 100644
--- a/Test/baseResults/spv.460.subgroupEXT.mesh.out
+++ b/Test/baseResults/spv.460.subgroupEXT.mesh.out
@@ -79,20 +79,20 @@
                               Name 253  "ballot"
                               Decorate 35(gl_LocalInvocationID) BuiltIn LocalInvocationId
                               Decorate 41(gl_WorkGroupID) BuiltIn WorkgroupId
+                              Decorate 54(gl_MeshPerVertexEXT) Block
                               MemberDecorate 54(gl_MeshPerVertexEXT) 0 BuiltIn Position
                               MemberDecorate 54(gl_MeshPerVertexEXT) 1 BuiltIn PointSize
                               MemberDecorate 54(gl_MeshPerVertexEXT) 2 BuiltIn ClipDistance
                               MemberDecorate 54(gl_MeshPerVertexEXT) 3 BuiltIn CullDistance
-                              Decorate 54(gl_MeshPerVertexEXT) Block
-                              MemberDecorate 106(gl_MeshPerPrimitiveEXT) 0 PerPrimitiveNV
-                              MemberDecorate 106(gl_MeshPerPrimitiveEXT) 0 BuiltIn PrimitiveId
-                              MemberDecorate 106(gl_MeshPerPrimitiveEXT) 1 PerPrimitiveNV
-                              MemberDecorate 106(gl_MeshPerPrimitiveEXT) 1 BuiltIn Layer
-                              MemberDecorate 106(gl_MeshPerPrimitiveEXT) 2 PerPrimitiveNV
-                              MemberDecorate 106(gl_MeshPerPrimitiveEXT) 2 BuiltIn ViewportIndex
-                              MemberDecorate 106(gl_MeshPerPrimitiveEXT) 3 PerPrimitiveNV
-                              MemberDecorate 106(gl_MeshPerPrimitiveEXT) 3 BuiltIn CullPrimitiveEXT
                               Decorate 106(gl_MeshPerPrimitiveEXT) Block
+                              MemberDecorate 106(gl_MeshPerPrimitiveEXT) 0 BuiltIn PrimitiveId
+                              MemberDecorate 106(gl_MeshPerPrimitiveEXT) 0 PerPrimitiveNV
+                              MemberDecorate 106(gl_MeshPerPrimitiveEXT) 1 BuiltIn Layer
+                              MemberDecorate 106(gl_MeshPerPrimitiveEXT) 1 PerPrimitiveNV
+                              MemberDecorate 106(gl_MeshPerPrimitiveEXT) 2 BuiltIn ViewportIndex
+                              MemberDecorate 106(gl_MeshPerPrimitiveEXT) 2 PerPrimitiveNV
+                              MemberDecorate 106(gl_MeshPerPrimitiveEXT) 3 BuiltIn CullPrimitiveEXT
+                              MemberDecorate 106(gl_MeshPerPrimitiveEXT) 3 PerPrimitiveNV
                               Decorate 147(gl_PrimitiveTriangleIndicesEXT) BuiltIn PrimitiveTriangleIndicesEXT
                               Decorate 161(gl_SubgroupSize) RelaxedPrecision
                               Decorate 161(gl_SubgroupSize) BuiltIn SubgroupSize
diff --git a/Test/baseResults/spv.460.subgroupEXT.task.out b/Test/baseResults/spv.460.subgroupEXT.task.out
index efe30b7..4424b2a 100644
--- a/Test/baseResults/spv.460.subgroupEXT.task.out
+++ b/Test/baseResults/spv.460.subgroupEXT.task.out
@@ -70,13 +70,13 @@
                               Name 216  "ballot"
                               Decorate 35(gl_LocalInvocationID) BuiltIn LocalInvocationId
                               Decorate 41(gl_WorkGroupID) BuiltIn WorkgroupId
-                              MemberDecorate 59(block0) 0 Offset 0
                               Decorate 59(block0) Block
-                              Decorate 61 DescriptorSet 0
+                              MemberDecorate 59(block0) 0 Offset 0
                               Decorate 61 Binding 1
-                              Decorate 77(uni_image) DescriptorSet 0
-                              Decorate 77(uni_image) Binding 0
+                              Decorate 61 DescriptorSet 0
                               Decorate 77(uni_image) NonReadable
+                              Decorate 77(uni_image) Binding 0
+                              Decorate 77(uni_image) DescriptorSet 0
                               Decorate 123(gl_SubgroupSize) RelaxedPrecision
                               Decorate 123(gl_SubgroupSize) BuiltIn SubgroupSize
                               Decorate 124(gl_SubgroupInvocationID) RelaxedPrecision
diff --git a/Test/baseResults/spv.8bit-16bit-construction.frag.out b/Test/baseResults/spv.8bit-16bit-construction.frag.out
index 9a85a6a..78e941a 100644
--- a/Test/baseResults/spv.8bit-16bit-construction.frag.out
+++ b/Test/baseResults/spv.8bit-16bit-construction.frag.out
@@ -24,14 +24,14 @@
                               MemberName 11(B) 3  "u16_from_u8"
                               MemberName 11(B) 4  "f16_from_i8"
                               Name 13  ""
+                              Decorate 11(B) BufferBlock
                               MemberDecorate 11(B) 0 Offset 0
                               MemberDecorate 11(B) 1 Offset 2
                               MemberDecorate 11(B) 2 Offset 4
                               MemberDecorate 11(B) 3 Offset 6
                               MemberDecorate 11(B) 4 Offset 8
-                              Decorate 11(B) BufferBlock
-                              Decorate 13 DescriptorSet 0
                               Decorate 13 Binding 0
+                              Decorate 13 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 8 1
diff --git a/Test/baseResults/spv.8bitstorage-int.frag.out b/Test/baseResults/spv.8bitstorage-int.frag.out
index 830b3e3..a40e2c1 100644
--- a/Test/baseResults/spv.8bitstorage-int.frag.out
+++ b/Test/baseResults/spv.8bitstorage-int.frag.out
@@ -1,7 +1,7 @@
 spv.8bitstorage-int.frag
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 171
+// Id's are bound by 180
 
                               Capability Shader
                               Capability UniformAndStorageBuffer8BitAccess
@@ -82,6 +82,7 @@
                               Decorate 13 ArrayStride 8
                               Decorate 15 ArrayStride 2
                               Decorate 16 ArrayStride 1
+                              Decorate 17(B2) BufferBlock
                               MemberDecorate 17(B2) 0 Offset 0
                               MemberDecorate 17(B2) 1 Offset 2
                               MemberDecorate 17(B2) 2 Offset 4
@@ -90,14 +91,14 @@
                               MemberDecorate 17(B2) 5 Offset 20
                               MemberDecorate 17(B2) 6 Offset 36
                               MemberDecorate 17(B2) 7 Offset 236
-                              Decorate 17(B2) BufferBlock
-                              Decorate 19(b2) DescriptorSet 0
                               Decorate 19(b2) Binding 1
+                              Decorate 19(b2) DescriptorSet 0
                               Decorate 22 ArrayStride 16
                               MemberDecorate 23(S) 0 Offset 0
                               MemberDecorate 23(S) 1 Offset 2
                               MemberDecorate 23(S) 2 Offset 4
                               Decorate 24 ArrayStride 16
+                              Decorate 25(B1) Block
                               MemberDecorate 25(B1) 0 Offset 0
                               MemberDecorate 25(B1) 1 Offset 2
                               MemberDecorate 25(B1) 2 Offset 4
@@ -105,9 +106,8 @@
                               MemberDecorate 25(B1) 4 Offset 48
                               MemberDecorate 25(B1) 5 Offset 64
                               MemberDecorate 25(B1) 6 Offset 96
-                              Decorate 25(B1) Block
-                              Decorate 27(b1) DescriptorSet 0
                               Decorate 27(b1) Binding 0
+                              Decorate 27(b1) DescriptorSet 0
                               Decorate 44 ArrayStride 16
                               MemberDecorate 45(S) 0 Offset 0
                               MemberDecorate 45(S) 1 Offset 2
@@ -115,6 +115,7 @@
                               Decorate 46 ArrayStride 16
                               Decorate 47 ArrayStride 16
                               Decorate 48 ArrayStride 16
+                              Decorate 49(B5) Block
                               MemberDecorate 49(B5) 0 Offset 0
                               MemberDecorate 49(B5) 1 Offset 2
                               MemberDecorate 49(B5) 2 Offset 4
@@ -123,29 +124,28 @@
                               MemberDecorate 49(B5) 5 Offset 64
                               MemberDecorate 49(B5) 6 Offset 96
                               MemberDecorate 49(B5) 7 Offset 1696
-                              Decorate 49(B5) Block
-                              Decorate 51(b5) DescriptorSet 0
                               Decorate 51(b5) Binding 2
+                              Decorate 51(b5) DescriptorSet 0
                               MemberDecorate 88(S2) 0 ColMajor
-                              MemberDecorate 88(S2) 0 Offset 0
                               MemberDecorate 88(S2) 0 MatrixStride 16
+                              MemberDecorate 88(S2) 0 Offset 0
                               MemberDecorate 88(S2) 1 Offset 64
                               MemberDecorate 88(S2) 2 Offset 68
                               MemberDecorate 89(S3) 0 Offset 0
+                              Decorate 90(B4) BufferBlock
                               MemberDecorate 90(B4) 0 Offset 0
                               MemberDecorate 90(B4) 1 Offset 80
-                              Decorate 90(B4) BufferBlock
-                              Decorate 92(b4) DescriptorSet 0
                               Decorate 92(b4) Binding 4
+                              Decorate 92(b4) DescriptorSet 0
                               MemberDecorate 93(S2) 0 RowMajor
-                              MemberDecorate 93(S2) 0 Offset 0
                               MemberDecorate 93(S2) 0 MatrixStride 16
+                              MemberDecorate 93(S2) 0 Offset 0
                               MemberDecorate 93(S2) 1 Offset 64
                               MemberDecorate 93(S2) 2 Offset 68
-                              MemberDecorate 94(B3) 0 Offset 0
                               Decorate 94(B3) BufferBlock
-                              Decorate 96(b3) DescriptorSet 0
+                              MemberDecorate 94(B3) 0 Offset 0
                               Decorate 96(b3) Binding 3
+                              Decorate 96(b3) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 8 1
@@ -334,5 +334,17 @@
              169:   6(int8_t) SConvert 58
              170:     28(ptr) AccessChain 19(b2) 21
                               Store 170 169
+             171:     28(ptr) AccessChain 27(b1) 21
+             172:   6(int8_t) Load 171
+             173:     28(ptr) AccessChain 19(b2) 21
+                              Store 173 172
+             174:     42(ptr) AccessChain 27(b1) 32
+             175:   7(i8vec2) Load 174
+             176:     42(ptr) AccessChain 19(b2) 32
+                              Store 176 175
+             177:     34(ptr) AccessChain 27(b1) 33
+             178:   8(i8vec3) Load 177
+             179:     34(ptr) AccessChain 19(b2) 33
+                              Store 179 178
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.8bitstorage-ssbo.vert.out b/Test/baseResults/spv.8bitstorage-ssbo.vert.out
index e8e9ca3..012b50f 100644
--- a/Test/baseResults/spv.8bitstorage-ssbo.vert.out
+++ b/Test/baseResults/spv.8bitstorage-ssbo.vert.out
@@ -19,11 +19,12 @@
                               Name 18  "gl_VertexIndex"
                               Decorate 9(color) Location 0
                               Decorate 11 ArrayStride 1
+                              Decorate 12(Vertices) BufferBlock
                               MemberDecorate 12(Vertices) 0 NonWritable
                               MemberDecorate 12(Vertices) 0 Offset 0
-                              Decorate 12(Vertices) BufferBlock
-                              Decorate 14 DescriptorSet 0
+                              Decorate 14 NonWritable
                               Decorate 14 Binding 0
+                              Decorate 14 DescriptorSet 0
                               Decorate 18(gl_VertexIndex) BuiltIn VertexIndex
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.8bitstorage-ubo.vert.out b/Test/baseResults/spv.8bitstorage-ubo.vert.out
index f41f63e..2207b6f 100644
--- a/Test/baseResults/spv.8bitstorage-ubo.vert.out
+++ b/Test/baseResults/spv.8bitstorage-ubo.vert.out
@@ -19,10 +19,11 @@
                               Name 20  "gl_VertexIndex"
                               Decorate 9(color) Location 0
                               Decorate 13 ArrayStride 16
-                              MemberDecorate 14(Vertices) 0 Offset 0
                               Decorate 14(Vertices) Block
-                              Decorate 16 DescriptorSet 0
+                              MemberDecorate 14(Vertices) 0 Offset 0
+                              Decorate 16 NonWritable
                               Decorate 16 Binding 0
+                              Decorate 16 DescriptorSet 0
                               Decorate 20(gl_VertexIndex) BuiltIn VertexIndex
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.8bitstorage-uint.frag.out b/Test/baseResults/spv.8bitstorage-uint.frag.out
index f372baf..a90edf1 100644
--- a/Test/baseResults/spv.8bitstorage-uint.frag.out
+++ b/Test/baseResults/spv.8bitstorage-uint.frag.out
@@ -1,7 +1,7 @@
 spv.8bitstorage-uint.frag
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 173
+// Id's are bound by 182
 
                               Capability Shader
                               Capability UniformAndStorageBuffer8BitAccess
@@ -82,6 +82,7 @@
                               Decorate 13 ArrayStride 8
                               Decorate 15 ArrayStride 2
                               Decorate 16 ArrayStride 1
+                              Decorate 17(B2) BufferBlock
                               MemberDecorate 17(B2) 0 Offset 0
                               MemberDecorate 17(B2) 1 Offset 2
                               MemberDecorate 17(B2) 2 Offset 4
@@ -90,14 +91,14 @@
                               MemberDecorate 17(B2) 5 Offset 20
                               MemberDecorate 17(B2) 6 Offset 36
                               MemberDecorate 17(B2) 7 Offset 236
-                              Decorate 17(B2) BufferBlock
-                              Decorate 19(b2) DescriptorSet 0
                               Decorate 19(b2) Binding 1
+                              Decorate 19(b2) DescriptorSet 0
                               Decorate 22 ArrayStride 16
                               MemberDecorate 23(S) 0 Offset 0
                               MemberDecorate 23(S) 1 Offset 2
                               MemberDecorate 23(S) 2 Offset 4
                               Decorate 24 ArrayStride 16
+                              Decorate 25(B1) Block
                               MemberDecorate 25(B1) 0 Offset 0
                               MemberDecorate 25(B1) 1 Offset 2
                               MemberDecorate 25(B1) 2 Offset 4
@@ -105,9 +106,8 @@
                               MemberDecorate 25(B1) 4 Offset 48
                               MemberDecorate 25(B1) 5 Offset 64
                               MemberDecorate 25(B1) 6 Offset 96
-                              Decorate 25(B1) Block
-                              Decorate 27(b1) DescriptorSet 0
                               Decorate 27(b1) Binding 0
+                              Decorate 27(b1) DescriptorSet 0
                               Decorate 44 ArrayStride 16
                               MemberDecorate 45(S) 0 Offset 0
                               MemberDecorate 45(S) 1 Offset 2
@@ -115,6 +115,7 @@
                               Decorate 46 ArrayStride 16
                               Decorate 47 ArrayStride 16
                               Decorate 48 ArrayStride 16
+                              Decorate 49(B5) Block
                               MemberDecorate 49(B5) 0 Offset 0
                               MemberDecorate 49(B5) 1 Offset 2
                               MemberDecorate 49(B5) 2 Offset 4
@@ -123,29 +124,28 @@
                               MemberDecorate 49(B5) 5 Offset 64
                               MemberDecorate 49(B5) 6 Offset 96
                               MemberDecorate 49(B5) 7 Offset 1696
-                              Decorate 49(B5) Block
-                              Decorate 51(b5) DescriptorSet 0
                               Decorate 51(b5) Binding 2
+                              Decorate 51(b5) DescriptorSet 0
                               MemberDecorate 89(S2) 0 ColMajor
-                              MemberDecorate 89(S2) 0 Offset 0
                               MemberDecorate 89(S2) 0 MatrixStride 16
+                              MemberDecorate 89(S2) 0 Offset 0
                               MemberDecorate 89(S2) 1 Offset 64
                               MemberDecorate 89(S2) 2 Offset 68
                               MemberDecorate 90(S3) 0 Offset 0
+                              Decorate 91(B4) BufferBlock
                               MemberDecorate 91(B4) 0 Offset 0
                               MemberDecorate 91(B4) 1 Offset 80
-                              Decorate 91(B4) BufferBlock
-                              Decorate 93(b4) DescriptorSet 0
                               Decorate 93(b4) Binding 4
+                              Decorate 93(b4) DescriptorSet 0
                               MemberDecorate 94(S2) 0 RowMajor
-                              MemberDecorate 94(S2) 0 Offset 0
                               MemberDecorate 94(S2) 0 MatrixStride 16
+                              MemberDecorate 94(S2) 0 Offset 0
                               MemberDecorate 94(S2) 1 Offset 64
                               MemberDecorate 94(S2) 2 Offset 68
-                              MemberDecorate 95(B3) 0 Offset 0
                               Decorate 95(B3) BufferBlock
-                              Decorate 97(b3) DescriptorSet 0
+                              MemberDecorate 95(B3) 0 Offset 0
                               Decorate 97(b3) Binding 3
+                              Decorate 97(b3) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 8 0
@@ -336,5 +336,17 @@
              171:   6(int8_t) UConvert 170
              172:     28(ptr) AccessChain 19(b2) 21
                               Store 172 171
+             173:     28(ptr) AccessChain 27(b1) 21
+             174:   6(int8_t) Load 173
+             175:     28(ptr) AccessChain 19(b2) 21
+                              Store 175 174
+             176:     42(ptr) AccessChain 27(b1) 32
+             177:   7(i8vec2) Load 176
+             178:     42(ptr) AccessChain 19(b2) 32
+                              Store 178 177
+             179:     34(ptr) AccessChain 27(b1) 33
+             180:   8(i8vec3) Load 179
+             181:     34(ptr) AccessChain 19(b2) 33
+                              Store 181 180
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.ARMCoreBuiltIns.frag.out b/Test/baseResults/spv.ARMCoreBuiltIns.frag.out
index ccfb409..6da6921 100644
--- a/Test/baseResults/spv.ARMCoreBuiltIns.frag.out
+++ b/Test/baseResults/spv.ARMCoreBuiltIns.frag.out
@@ -20,17 +20,17 @@
                               Name 17  "gl_CoreCountARM"
                               Name 19  "gl_CoreMaxIDARM"
                               Name 21  "gl_WarpIDARM"
-                              Decorate 10(gl_WarpMaxIDARM) Flat
                               Decorate 10(gl_WarpMaxIDARM) BuiltIn BuiltInWarpMaxIDARM
+                              Decorate 10(gl_WarpMaxIDARM) Flat
                               Decorate 14(data) Location 0
-                              Decorate 15(gl_CoreIDARM) Flat
                               Decorate 15(gl_CoreIDARM) BuiltIn CoreIDARM
-                              Decorate 17(gl_CoreCountARM) Flat
+                              Decorate 15(gl_CoreIDARM) Flat
                               Decorate 17(gl_CoreCountARM) BuiltIn CoreCountARM
-                              Decorate 19(gl_CoreMaxIDARM) Flat
+                              Decorate 17(gl_CoreCountARM) Flat
                               Decorate 19(gl_CoreMaxIDARM) BuiltIn CoreMaxIDARM
-                              Decorate 21(gl_WarpIDARM) Flat
+                              Decorate 19(gl_CoreMaxIDARM) Flat
                               Decorate 21(gl_WarpIDARM) BuiltIn WarpIDARM
+                              Decorate 21(gl_WarpIDARM) Flat
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
diff --git a/Test/baseResults/spv.ARMCoreBuiltIns.vert.out b/Test/baseResults/spv.ARMCoreBuiltIns.vert.out
index 5419be4..e1503ad 100644
--- a/Test/baseResults/spv.ARMCoreBuiltIns.vert.out
+++ b/Test/baseResults/spv.ARMCoreBuiltIns.vert.out
@@ -22,10 +22,10 @@
                               Name 22  "gl_CoreMaxIDARM"
                               Name 24  "gl_WarpIDARM"
                               Decorate 10(gl_WarpMaxIDARM) BuiltIn BuiltInWarpMaxIDARM
-                              MemberDecorate 13(Output) 0 Offset 0
                               Decorate 13(Output) BufferBlock
-                              Decorate 15 DescriptorSet 0
+                              MemberDecorate 13(Output) 0 Offset 0
                               Decorate 15 Binding 0
+                              Decorate 15 DescriptorSet 0
                               Decorate 18(gl_CoreIDARM) BuiltIn CoreIDARM
                               Decorate 20(gl_CoreCountARM) BuiltIn CoreCountARM
                               Decorate 22(gl_CoreMaxIDARM) BuiltIn CoreMaxIDARM
diff --git a/Test/baseResults/spv.AnyHitShader.rahit.out b/Test/baseResults/spv.AnyHitShader.rahit.out
index d075b36..027325e 100644
--- a/Test/baseResults/spv.AnyHitShader.rahit.out
+++ b/Test/baseResults/spv.AnyHitShader.rahit.out
@@ -1,13 +1,13 @@
 spv.AnyHitShader.rahit
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 81
+// Id's are bound by 80
 
                               Capability RayTracingNV
                               Extension  "SPV_NV_ray_tracing"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint AnyHitKHR 4  "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67
+                              EntryPoint AnyHitKHR 4  "main" 11 14 20 23 26 33 36 39 42 47 50 57 63 66
                               Source GLSL 460
                               SourceExtension  "GL_NV_ray_tracing"
                               Name 4  "main"
@@ -34,14 +34,13 @@
                               Name 49  "v10"
                               Name 50  "gl_RayTmaxNV"
                               Name 52  "v11"
-                              Name 53  "gl_HitTNV"
-                              Name 56  "v12"
-                              Name 58  "gl_HitKindNV"
-                              Name 62  "v13"
-                              Name 64  "gl_ObjectToWorldNV"
-                              Name 66  "v14"
-                              Name 67  "gl_WorldToObjectNV"
-                              Name 71  "incomingPayload"
+                              Name 55  "v12"
+                              Name 57  "gl_HitKindNV"
+                              Name 61  "v13"
+                              Name 63  "gl_ObjectToWorldNV"
+                              Name 65  "v14"
+                              Name 66  "gl_WorldToObjectNV"
+                              Name 70  "incomingPayload"
                               Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdKHR
                               Decorate 14(gl_LaunchSizeNV) BuiltIn LaunchSizeKHR
                               Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId
@@ -53,11 +52,10 @@
                               Decorate 42(gl_ObjectRayDirectionNV) BuiltIn ObjectRayDirectionKHR
                               Decorate 47(gl_RayTminNV) BuiltIn RayTminKHR
                               Decorate 50(gl_RayTmaxNV) BuiltIn RayTmaxKHR
-                              Decorate 53(gl_HitTNV) BuiltIn HitTNV
-                              Decorate 58(gl_HitKindNV) BuiltIn HitKindKHR
-                              Decorate 64(gl_ObjectToWorldNV) BuiltIn ObjectToWorldKHR
-                              Decorate 67(gl_WorldToObjectNV) BuiltIn WorldToObjectKHR
-                              Decorate 71(incomingPayload) Location 1
+                              Decorate 57(gl_HitKindNV) BuiltIn HitKindKHR
+                              Decorate 63(gl_ObjectToWorldNV) BuiltIn ObjectToWorldKHR
+                              Decorate 66(gl_WorldToObjectNV) BuiltIn WorldToObjectKHR
+                              Decorate 70(incomingPayload) Location 1
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
@@ -84,22 +82,21 @@
               46:             TypePointer Input 28(float)
 47(gl_RayTminNV):     46(ptr) Variable Input
 50(gl_RayTmaxNV):     46(ptr) Variable Input
-   53(gl_HitTNV):     46(ptr) Variable Input
-              55:             TypePointer Function 6(int)
-              57:             TypePointer Input 6(int)
-58(gl_HitKindNV):     57(ptr) Variable Input
-              60:             TypeMatrix 29(fvec3) 4
-              61:             TypePointer Function 60
-              63:             TypePointer Input 60
-64(gl_ObjectToWorldNV):     63(ptr) Variable Input
-67(gl_WorldToObjectNV):     63(ptr) Variable Input
-              69:             TypeVector 28(float) 4
-              70:             TypePointer IncomingRayPayloadKHR 69(fvec4)
-71(incomingPayload):     70(ptr) Variable IncomingRayPayloadKHR
-              72:   28(float) Constant 1056964608
-              73:   69(fvec4) ConstantComposite 72 72 72 72
-              75:     16(int) Constant 1
-              76:             TypeBool
+              54:             TypePointer Function 6(int)
+              56:             TypePointer Input 6(int)
+57(gl_HitKindNV):     56(ptr) Variable Input
+              59:             TypeMatrix 29(fvec3) 4
+              60:             TypePointer Function 59
+              62:             TypePointer Input 59
+63(gl_ObjectToWorldNV):     62(ptr) Variable Input
+66(gl_WorldToObjectNV):     62(ptr) Variable Input
+              68:             TypeVector 28(float) 4
+              69:             TypePointer IncomingRayPayloadKHR 68(fvec4)
+70(incomingPayload):     69(ptr) Variable IncomingRayPayloadKHR
+              71:   28(float) Constant 1056964608
+              72:   68(fvec4) ConstantComposite 71 71 71 71
+              74:     16(int) Constant 1
+              75:             TypeBool
          4(main):           2 Function None 3
                5:             Label
            9(v0):      8(ptr) Variable Function
@@ -114,9 +111,9 @@
           45(v9):     44(ptr) Variable Function
          49(v10):     44(ptr) Variable Function
          52(v11):     44(ptr) Variable Function
-         56(v12):     55(ptr) Variable Function
-         62(v13):     61(ptr) Variable Function
-         66(v14):     61(ptr) Variable Function
+         55(v12):     54(ptr) Variable Function
+         61(v13):     60(ptr) Variable Function
+         65(v14):     60(ptr) Variable Function
               12:    7(ivec3) Load 11(gl_LaunchIDNV)
                               Store 9(v0) 12
               15:    7(ivec3) Load 14(gl_LaunchSizeNV)
@@ -139,25 +136,25 @@
                               Store 45(v9) 48
               51:   28(float) Load 50(gl_RayTmaxNV)
                               Store 49(v10) 51
-              54:   28(float) Load 53(gl_HitTNV)
-                              Store 52(v11) 54
-              59:      6(int) Load 58(gl_HitKindNV)
-                              Store 56(v12) 59
-              65:          60 Load 64(gl_ObjectToWorldNV)
-                              Store 62(v13) 65
-              68:          60 Load 67(gl_WorldToObjectNV)
-                              Store 66(v14) 68
-                              Store 71(incomingPayload) 73
-              74:     16(int) Load 18(v2)
-              77:    76(bool) IEqual 74 75
-                              SelectionMerge 79 None
-                              BranchConditional 77 78 80
-              78:               Label
+              53:   28(float) Load 50(gl_RayTmaxNV)
+                              Store 52(v11) 53
+              58:      6(int) Load 57(gl_HitKindNV)
+                              Store 55(v12) 58
+              64:          59 Load 63(gl_ObjectToWorldNV)
+                              Store 61(v13) 64
+              67:          59 Load 66(gl_WorldToObjectNV)
+                              Store 65(v14) 67
+                              Store 70(incomingPayload) 72
+              73:     16(int) Load 18(v2)
+              76:    75(bool) IEqual 73 74
+                              SelectionMerge 78 None
+                              BranchConditional 76 77 79
+              77:               Label
                                 IgnoreIntersectionNV
-                                Branch 79
-              80:               Label
+                                Branch 78
+              79:               Label
                                 TerminateRayNV
-                                Branch 79
-              79:             Label
+                                Branch 78
+              78:             Label
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.AofA.frag.out b/Test/baseResults/spv.AofA.frag.out
index b2df36a..9c5a014 100644
--- a/Test/baseResults/spv.AofA.frag.out
+++ b/Test/baseResults/spv.AofA.frag.out
@@ -41,10 +41,10 @@
                               Decorate 78(infloat) Location 0
                               Decorate 92 ArrayStride 16
                               Decorate 93 ArrayStride 64
-                              MemberDecorate 94(uAofA) 0 Offset 0
                               Decorate 94(uAofA) Block
-                              Decorate 98(nameAofA) DescriptorSet 0
+                              MemberDecorate 94(uAofA) 0 Offset 0
                               Decorate 98(nameAofA) Binding 0
+                              Decorate 98(nameAofA) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.ClosestHitShader.rchit.out b/Test/baseResults/spv.ClosestHitShader.rchit.out
index 80b5115..af0f80f 100644
--- a/Test/baseResults/spv.ClosestHitShader.rchit.out
+++ b/Test/baseResults/spv.ClosestHitShader.rchit.out
@@ -1,13 +1,13 @@
 spv.ClosestHitShader.rchit
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 88
+// Id's are bound by 87
 
                               Capability RayTracingNV
                               Extension  "SPV_NV_ray_tracing"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint ClosestHitKHR 4  "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67
+                              EntryPoint ClosestHitKHR 4  "main" 11 14 20 23 26 33 36 39 42 47 50 57 63 66
                               Source GLSL 460
                               SourceExtension  "GL_NV_ray_tracing"
                               Name 4  "main"
@@ -34,16 +34,15 @@
                               Name 49  "v10"
                               Name 50  "gl_RayTmaxNV"
                               Name 52  "v11"
-                              Name 53  "gl_HitTNV"
-                              Name 56  "v12"
-                              Name 58  "gl_HitKindNV"
-                              Name 62  "v13"
-                              Name 64  "gl_ObjectToWorldNV"
-                              Name 66  "v14"
-                              Name 67  "gl_WorldToObjectNV"
-                              Name 71  "accNV"
-                              Name 85  "localPayload"
-                              Name 87  "incomingPayload"
+                              Name 55  "v12"
+                              Name 57  "gl_HitKindNV"
+                              Name 61  "v13"
+                              Name 63  "gl_ObjectToWorldNV"
+                              Name 65  "v14"
+                              Name 66  "gl_WorldToObjectNV"
+                              Name 70  "accNV"
+                              Name 84  "localPayload"
+                              Name 86  "incomingPayload"
                               Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdKHR
                               Decorate 14(gl_LaunchSizeNV) BuiltIn LaunchSizeKHR
                               Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId
@@ -55,14 +54,13 @@
                               Decorate 42(gl_ObjectRayDirectionNV) BuiltIn ObjectRayDirectionKHR
                               Decorate 47(gl_RayTminNV) BuiltIn RayTminKHR
                               Decorate 50(gl_RayTmaxNV) BuiltIn RayTmaxKHR
-                              Decorate 53(gl_HitTNV) BuiltIn HitTNV
-                              Decorate 58(gl_HitKindNV) BuiltIn HitKindKHR
-                              Decorate 64(gl_ObjectToWorldNV) BuiltIn ObjectToWorldKHR
-                              Decorate 67(gl_WorldToObjectNV) BuiltIn WorldToObjectKHR
-                              Decorate 71(accNV) DescriptorSet 0
-                              Decorate 71(accNV) Binding 0
-                              Decorate 85(localPayload) Location 0
-                              Decorate 87(incomingPayload) Location 1
+                              Decorate 57(gl_HitKindNV) BuiltIn HitKindKHR
+                              Decorate 63(gl_ObjectToWorldNV) BuiltIn ObjectToWorldKHR
+                              Decorate 66(gl_WorldToObjectNV) BuiltIn WorldToObjectKHR
+                              Decorate 70(accNV) Binding 0
+                              Decorate 70(accNV) DescriptorSet 0
+                              Decorate 84(localPayload) Location 0
+                              Decorate 86(incomingPayload) Location 1
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
@@ -89,33 +87,32 @@
               46:             TypePointer Input 28(float)
 47(gl_RayTminNV):     46(ptr) Variable Input
 50(gl_RayTmaxNV):     46(ptr) Variable Input
-   53(gl_HitTNV):     46(ptr) Variable Input
-              55:             TypePointer Function 6(int)
-              57:             TypePointer Input 6(int)
-58(gl_HitKindNV):     57(ptr) Variable Input
-              60:             TypeMatrix 29(fvec3) 4
-              61:             TypePointer Function 60
-              63:             TypePointer Input 60
-64(gl_ObjectToWorldNV):     63(ptr) Variable Input
-67(gl_WorldToObjectNV):     63(ptr) Variable Input
-              69:             TypeAccelerationStructureKHR
-              70:             TypePointer UniformConstant 69
-       71(accNV):     70(ptr) Variable UniformConstant
-              73:      6(int) Constant 0
-              74:      6(int) Constant 1
-              75:      6(int) Constant 2
-              76:      6(int) Constant 3
-              77:   28(float) Constant 1056964608
-              78:   29(fvec3) ConstantComposite 77 77 77
-              79:   28(float) Constant 1065353216
-              80:   29(fvec3) ConstantComposite 79 79 79
-              81:   28(float) Constant 1061158912
-              82:     16(int) Constant 1
-              83:             TypeVector 28(float) 4
-              84:             TypePointer RayPayloadKHR 83(fvec4)
-85(localPayload):     84(ptr) Variable RayPayloadKHR
-              86:             TypePointer IncomingRayPayloadKHR 83(fvec4)
-87(incomingPayload):     86(ptr) Variable IncomingRayPayloadKHR
+              54:             TypePointer Function 6(int)
+              56:             TypePointer Input 6(int)
+57(gl_HitKindNV):     56(ptr) Variable Input
+              59:             TypeMatrix 29(fvec3) 4
+              60:             TypePointer Function 59
+              62:             TypePointer Input 59
+63(gl_ObjectToWorldNV):     62(ptr) Variable Input
+66(gl_WorldToObjectNV):     62(ptr) Variable Input
+              68:             TypeAccelerationStructureKHR
+              69:             TypePointer UniformConstant 68
+       70(accNV):     69(ptr) Variable UniformConstant
+              72:      6(int) Constant 0
+              73:      6(int) Constant 1
+              74:      6(int) Constant 2
+              75:      6(int) Constant 3
+              76:   28(float) Constant 1056964608
+              77:   29(fvec3) ConstantComposite 76 76 76
+              78:   28(float) Constant 1065353216
+              79:   29(fvec3) ConstantComposite 78 78 78
+              80:   28(float) Constant 1061158912
+              81:     16(int) Constant 1
+              82:             TypeVector 28(float) 4
+              83:             TypePointer RayPayloadKHR 82(fvec4)
+84(localPayload):     83(ptr) Variable RayPayloadKHR
+              85:             TypePointer IncomingRayPayloadKHR 82(fvec4)
+86(incomingPayload):     85(ptr) Variable IncomingRayPayloadKHR
          4(main):           2 Function None 3
                5:             Label
            9(v0):      8(ptr) Variable Function
@@ -130,9 +127,9 @@
           45(v9):     44(ptr) Variable Function
          49(v10):     44(ptr) Variable Function
          52(v11):     44(ptr) Variable Function
-         56(v12):     55(ptr) Variable Function
-         62(v13):     61(ptr) Variable Function
-         66(v14):     61(ptr) Variable Function
+         55(v12):     54(ptr) Variable Function
+         61(v13):     60(ptr) Variable Function
+         65(v14):     60(ptr) Variable Function
               12:    7(ivec3) Load 11(gl_LaunchIDNV)
                               Store 9(v0) 12
               15:    7(ivec3) Load 14(gl_LaunchSizeNV)
@@ -155,15 +152,15 @@
                               Store 45(v9) 48
               51:   28(float) Load 50(gl_RayTmaxNV)
                               Store 49(v10) 51
-              54:   28(float) Load 53(gl_HitTNV)
-                              Store 52(v11) 54
-              59:      6(int) Load 58(gl_HitKindNV)
-                              Store 56(v12) 59
-              65:          60 Load 64(gl_ObjectToWorldNV)
-                              Store 62(v13) 65
-              68:          60 Load 67(gl_WorldToObjectNV)
-                              Store 66(v14) 68
-              72:          69 Load 71(accNV)
-                              TraceNV 72 73 74 75 76 73 78 77 80 81 82
+              53:   28(float) Load 50(gl_RayTmaxNV)
+                              Store 52(v11) 53
+              58:      6(int) Load 57(gl_HitKindNV)
+                              Store 55(v12) 58
+              64:          59 Load 63(gl_ObjectToWorldNV)
+                              Store 61(v13) 64
+              67:          59 Load 66(gl_WorldToObjectNV)
+                              Store 65(v14) 67
+              71:          68 Load 70(accNV)
+                              TraceNV 71 72 73 74 75 72 77 76 79 80 81
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.ClosestHitShaderMotion.rchit.out b/Test/baseResults/spv.ClosestHitShaderMotion.rchit.out
index e20df80..846151f 100644
--- a/Test/baseResults/spv.ClosestHitShaderMotion.rchit.out
+++ b/Test/baseResults/spv.ClosestHitShaderMotion.rchit.out
@@ -19,8 +19,8 @@
                               Name 16  "accEXT"
                               Name 32  "incomingPayloadEXT"
                               Decorate 10(gl_CurrentRayTimeNV) BuiltIn CurrentRayTimeNV
-                              Decorate 16(accEXT) DescriptorSet 0
                               Decorate 16(accEXT) Binding 0
+                              Decorate 16(accEXT) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.GeometryShaderPassthrough.geom.out b/Test/baseResults/spv.GeometryShaderPassthrough.geom.out
index 57fa691..f4e1a9f 100644
--- a/Test/baseResults/spv.GeometryShaderPassthrough.geom.out
+++ b/Test/baseResults/spv.GeometryShaderPassthrough.geom.out
@@ -23,8 +23,8 @@
                               MemberName 12(Inputs) 0  "texcoord"
                               MemberName 12(Inputs) 1  "baseColor"
                               Name 14  ""
-                              MemberDecorate 8(gl_PerVertex) 0 BuiltIn Position
                               Decorate 8(gl_PerVertex) Block
+                              MemberDecorate 8(gl_PerVertex) 0 BuiltIn Position
                               Decorate 10 PassthroughNV
                               Decorate 12(Inputs) Block
                               Decorate 14 Location 0
diff --git a/Test/baseResults/spv.MissShader.rmiss.out b/Test/baseResults/spv.MissShader.rmiss.out
index 581c0c6..d0f381e 100644
--- a/Test/baseResults/spv.MissShader.rmiss.out
+++ b/Test/baseResults/spv.MissShader.rmiss.out
@@ -35,8 +35,8 @@
                               Decorate 29(gl_IncomingRayFlagsNV) BuiltIn IncomingRayFlagsKHR
                               Decorate 34(gl_RayTminNV) BuiltIn RayTminKHR
                               Decorate 37(gl_RayTmaxNV) BuiltIn RayTmaxKHR
-                              Decorate 41(accNV) DescriptorSet 0
                               Decorate 41(accNV) Binding 0
+                              Decorate 41(accNV) DescriptorSet 0
                               Decorate 56(localPayload) Location 0
                               Decorate 58(incomingPayload) Location 1
                2:             TypeVoid
diff --git a/Test/baseResults/spv.MissShaderMotion.rmiss.out b/Test/baseResults/spv.MissShaderMotion.rmiss.out
index 220dda9..455f343 100644
--- a/Test/baseResults/spv.MissShaderMotion.rmiss.out
+++ b/Test/baseResults/spv.MissShaderMotion.rmiss.out
@@ -19,8 +19,8 @@
                               Name 16  "accEXT"
                               Name 32  "localPayloadEXT"
                               Decorate 10(gl_CurrentRayTimeNV) BuiltIn CurrentRayTimeNV
-                              Decorate 16(accEXT) DescriptorSet 0
                               Decorate 16(accEXT) Binding 0
+                              Decorate 16(accEXT) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.OVR_multiview.vert.out b/Test/baseResults/spv.OVR_multiview.vert.out
index df7d949..1eeae2a 100644
--- a/Test/baseResults/spv.OVR_multiview.vert.out
+++ b/Test/baseResults/spv.OVR_multiview.vert.out
@@ -20,10 +20,10 @@
                               Name 17  "gl_ViewID_OVR"
                               Name 25  "gl_VertexID"
                               Name 26  "gl_InstanceID"
+                              Decorate 11(gl_PerVertex) Block
                               MemberDecorate 11(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 11(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 11(gl_PerVertex) 2 BuiltIn ClipDistance
-                              Decorate 11(gl_PerVertex) Block
                               Decorate 17(gl_ViewID_OVR) BuiltIn ViewIndex
                               Decorate 25(gl_VertexID) BuiltIn VertexId
                               Decorate 26(gl_InstanceID) BuiltIn InstanceId
diff --git a/Test/baseResults/spv.Operations.frag.out b/Test/baseResults/spv.Operations.frag.out
index f9059c6..9f24624 100644
--- a/Test/baseResults/spv.Operations.frag.out
+++ b/Test/baseResults/spv.Operations.frag.out
@@ -1,12 +1,12 @@
 spv.Operations.frag
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 591
+// Id's are bound by 596
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 11 22 220 296 314 547 588
+                              EntryPoint Fragment 4  "main" 11 22 225 301 319 552 593
                               ExecutionMode 4 OriginUpperLeft
                               Source GLSL 450
                               Name 4  "main"
@@ -14,36 +14,37 @@
                               Name 11  "uv4"
                               Name 20  "i"
                               Name 22  "ui"
-                              Name 155  "swizzleTemp"
-                              Name 189  "ub41"
-                              Name 196  "f"
-                              Name 220  "uf"
-                              Name 293  "u"
-                              Name 296  "uui"
-                              Name 314  "uuv4"
-                              Name 321  "msb"
-                              Name 323  "swizzleTemp"
-                              Name 324  "lsb"
-                              Name 325  "swizzleTemp"
-                              Name 326  "ResType"
-                              Name 367  "b"
-                              Name 404  "ub42"
-                              Name 547  "FragColor"
-                              Name 565  "m1"
-                              Name 572  "m2"
-                              Name 588  "uiv4"
-                              Name 590  "ub"
+                              Name 151  "ResType"
+                              Name 158  "swizzleTemp"
+                              Name 194  "ub41"
+                              Name 201  "f"
+                              Name 225  "uf"
+                              Name 298  "u"
+                              Name 301  "uui"
+                              Name 319  "uuv4"
+                              Name 326  "msb"
+                              Name 328  "swizzleTemp"
+                              Name 329  "lsb"
+                              Name 330  "swizzleTemp"
+                              Name 331  "ResType"
+                              Name 372  "b"
+                              Name 409  "ub42"
+                              Name 552  "FragColor"
+                              Name 570  "m1"
+                              Name 577  "m2"
+                              Name 593  "uiv4"
+                              Name 595  "ub"
                               Decorate 11(uv4) Location 1
                               Decorate 22(ui) Flat
                               Decorate 22(ui) Location 3
-                              Decorate 220(uf) Location 2
-                              Decorate 296(uui) Flat
-                              Decorate 296(uui) Location 5
-                              Decorate 314(uuv4) Flat
-                              Decorate 314(uuv4) Location 4
-                              Decorate 547(FragColor) Location 0
-                              Decorate 588(uiv4) Flat
-                              Decorate 588(uiv4) Location 0
+                              Decorate 225(uf) Location 2
+                              Decorate 301(uui) Flat
+                              Decorate 301(uui) Location 5
+                              Decorate 319(uuv4) Flat
+                              Decorate 319(uuv4) Location 4
+                              Decorate 552(FragColor) Location 0
+                              Decorate 593(uiv4) Flat
+                              Decorate 593(uiv4) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -58,66 +59,67 @@
              141:             TypeInt 32 0
              142:    141(int) Constant 0
              143:             TypePointer Function 6(float)
-             186:             TypeBool
-             187:             TypeVector 186(bool) 4
-             188:             TypePointer Private 187(bvec4)
-       189(ub41):    188(ptr) Variable Private
-             219:             TypePointer Input 6(float)
-         220(uf):    219(ptr) Variable Input
-             292:             TypePointer Function 141(int)
-             295:             TypePointer Input 141(int)
-        296(uui):    295(ptr) Variable Input
-             312:             TypeVector 141(int) 4
-             313:             TypePointer Input 312(ivec4)
-       314(uuv4):    313(ptr) Variable Input
-             315:             TypeVector 141(int) 3
-             320:             TypePointer Function 312(ivec4)
-             322:             TypePointer Function 315(ivec3)
-    326(ResType):             TypeStruct 315(ivec3) 315(ivec3)
-             333:    141(int) Constant 1
-             336:    141(int) Constant 2
-             366:             TypePointer Function 186(bool)
-       404(ub42):    188(ptr) Variable Private
-             460:     18(int) Constant 2
-             467:     18(int) Constant 1
-             497:             TypeVector 6(float) 3
-             516:    6(float) Constant 1073741824
-             523:    6(float) Constant 1065353216
-             528:     18(int) Constant 66
-             534:     18(int) Constant 17
-             546:             TypePointer Output 7(fvec4)
-  547(FragColor):    546(ptr) Variable Output
-             563:             TypeMatrix 7(fvec4) 4
-             564:             TypePointer Function 563
-             566:    6(float) Constant 0
-             567:    7(fvec4) ConstantComposite 523 566 566 566
-             568:    7(fvec4) ConstantComposite 566 523 566 566
-             569:    7(fvec4) ConstantComposite 566 566 523 566
-             570:    7(fvec4) ConstantComposite 566 566 566 523
-             571:         563 ConstantComposite 567 568 569 570
-             573:    7(fvec4) ConstantComposite 566 566 566 566
-             574:         563 ConstantComposite 573 573 573 573
-             586:             TypeVector 18(int) 4
-             587:             TypePointer Input 586(ivec4)
-       588(uiv4):    587(ptr) Variable Input
-             589:             TypePointer Private 186(bool)
-         590(ub):    589(ptr) Variable Private
+    151(ResType):             TypeStruct 7(fvec4) 7(fvec4)
+             191:             TypeBool
+             192:             TypeVector 191(bool) 4
+             193:             TypePointer Private 192(bvec4)
+       194(ub41):    193(ptr) Variable Private
+             224:             TypePointer Input 6(float)
+         225(uf):    224(ptr) Variable Input
+             297:             TypePointer Function 141(int)
+             300:             TypePointer Input 141(int)
+        301(uui):    300(ptr) Variable Input
+             317:             TypeVector 141(int) 4
+             318:             TypePointer Input 317(ivec4)
+       319(uuv4):    318(ptr) Variable Input
+             320:             TypeVector 141(int) 3
+             325:             TypePointer Function 317(ivec4)
+             327:             TypePointer Function 320(ivec3)
+    331(ResType):             TypeStruct 320(ivec3) 320(ivec3)
+             338:    141(int) Constant 1
+             341:    141(int) Constant 2
+             371:             TypePointer Function 191(bool)
+       409(ub42):    193(ptr) Variable Private
+             465:     18(int) Constant 2
+             472:     18(int) Constant 1
+             502:             TypeVector 6(float) 3
+             521:    6(float) Constant 1073741824
+             528:    6(float) Constant 1065353216
+             533:     18(int) Constant 66
+             539:     18(int) Constant 17
+             551:             TypePointer Output 7(fvec4)
+  552(FragColor):    551(ptr) Variable Output
+             568:             TypeMatrix 7(fvec4) 4
+             569:             TypePointer Function 568
+             571:    6(float) Constant 0
+             572:    7(fvec4) ConstantComposite 528 571 571 571
+             573:    7(fvec4) ConstantComposite 571 528 571 571
+             574:    7(fvec4) ConstantComposite 571 571 528 571
+             575:    7(fvec4) ConstantComposite 571 571 571 528
+             576:         568 ConstantComposite 572 573 574 575
+             578:    7(fvec4) ConstantComposite 571 571 571 571
+             579:         568 ConstantComposite 578 578 578 578
+             591:             TypeVector 18(int) 4
+             592:             TypePointer Input 591(ivec4)
+       593(uiv4):    592(ptr) Variable Input
+             594:             TypePointer Private 191(bool)
+         595(ub):    594(ptr) Variable Private
          4(main):           2 Function None 3
                5:             Label
             9(v):      8(ptr) Variable Function
            20(i):     19(ptr) Variable Function
-155(swizzleTemp):      8(ptr) Variable Function
-          196(f):    143(ptr) Variable Function
-          293(u):    292(ptr) Variable Function
-        321(msb):    320(ptr) Variable Function
-323(swizzleTemp):    322(ptr) Variable Function
-        324(lsb):    320(ptr) Variable Function
-325(swizzleTemp):    322(ptr) Variable Function
-          367(b):    366(ptr) Variable Function
-             549:      8(ptr) Variable Function
-         565(m1):    564(ptr) Variable Function
-         572(m2):    564(ptr) Variable Function
-             576:    564(ptr) Variable Function
+158(swizzleTemp):      8(ptr) Variable Function
+          201(f):    143(ptr) Variable Function
+          298(u):    297(ptr) Variable Function
+        326(msb):    325(ptr) Variable Function
+328(swizzleTemp):    327(ptr) Variable Function
+        329(lsb):    325(ptr) Variable Function
+330(swizzleTemp):    327(ptr) Variable Function
+          372(b):    371(ptr) Variable Function
+             554:      8(ptr) Variable Function
+         570(m1):    569(ptr) Variable Function
+         577(m2):    569(ptr) Variable Function
+             581:    569(ptr) Variable Function
               12:    7(fvec4) Load 11(uv4)
               13:    7(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 12
                               Store 9(v) 13
@@ -281,506 +283,512 @@
              149:    7(fvec4) FAdd 148 147
                               Store 9(v) 149
              150:    7(fvec4) Load 9(v)
-             151:    7(fvec4) ExtInst 1(GLSL.std.450) 35(Modf) 150 9(v)
-             152:    7(fvec4) Load 9(v)
-             153:    7(fvec4) FAdd 152 151
+             152:151(ResType) ExtInst 1(GLSL.std.450) 36(ModfStruct) 150
+             153:    7(fvec4) CompositeExtract 152 1
                               Store 9(v) 153
-             154:    7(fvec4) Load 9(v)
-             156:    7(fvec4) ExtInst 1(GLSL.std.450) 35(Modf) 154 155(swizzleTemp)
-             157:    7(fvec4) Load 155(swizzleTemp)
-             158:    7(fvec4) Load 9(v)
-             159:    7(fvec4) VectorShuffle 158 157 6 4 5 7
-                              Store 9(v) 159
-             160:    7(fvec4) Load 9(v)
-             161:    7(fvec4) FAdd 160 156
-                              Store 9(v) 161
-             162:    7(fvec4) Load 9(v)
-             163:    7(fvec4) Load 11(uv4)
-             164:    7(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 162 163
+             154:    7(fvec4) CompositeExtract 152 0
+             155:    7(fvec4) Load 9(v)
+             156:    7(fvec4) FAdd 155 154
+                              Store 9(v) 156
+             157:    7(fvec4) Load 9(v)
+             159:151(ResType) ExtInst 1(GLSL.std.450) 36(ModfStruct) 157
+             160:    7(fvec4) CompositeExtract 159 1
+                              Store 158(swizzleTemp) 160
+             161:    7(fvec4) CompositeExtract 159 0
+             162:    7(fvec4) Load 158(swizzleTemp)
+             163:    7(fvec4) Load 9(v)
+             164:    7(fvec4) VectorShuffle 163 162 6 4 5 7
+                              Store 9(v) 164
              165:    7(fvec4) Load 9(v)
-             166:    7(fvec4) FAdd 165 164
+             166:    7(fvec4) FAdd 165 161
                               Store 9(v) 166
              167:    7(fvec4) Load 9(v)
              168:    7(fvec4) Load 11(uv4)
-             169:    7(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 167 168
+             169:    7(fvec4) ExtInst 1(GLSL.std.450) 37(FMin) 167 168
              170:    7(fvec4) Load 9(v)
              171:    7(fvec4) FAdd 170 169
                               Store 9(v) 171
              172:    7(fvec4) Load 9(v)
              173:    7(fvec4) Load 11(uv4)
-             174:    7(fvec4) Load 11(uv4)
-             175:    7(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 172 173 174
-             176:    7(fvec4) Load 9(v)
-             177:    7(fvec4) FAdd 176 175
-                              Store 9(v) 177
-             178:    7(fvec4) Load 9(v)
-             179:    7(fvec4) Load 9(v)
-             180:    7(fvec4) Load 9(v)
-             181:    7(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 178 179 180
-             182:    7(fvec4) Load 9(v)
-             183:    7(fvec4) FAdd 182 181
-                              Store 9(v) 183
+             174:    7(fvec4) ExtInst 1(GLSL.std.450) 40(FMax) 172 173
+             175:    7(fvec4) Load 9(v)
+             176:    7(fvec4) FAdd 175 174
+                              Store 9(v) 176
+             177:    7(fvec4) Load 9(v)
+             178:    7(fvec4) Load 11(uv4)
+             179:    7(fvec4) Load 11(uv4)
+             180:    7(fvec4) ExtInst 1(GLSL.std.450) 43(FClamp) 177 178 179
+             181:    7(fvec4) Load 9(v)
+             182:    7(fvec4) FAdd 181 180
+                              Store 9(v) 182
+             183:    7(fvec4) Load 9(v)
              184:    7(fvec4) Load 9(v)
              185:    7(fvec4) Load 9(v)
-             190:  187(bvec4) Load 189(ub41)
-             191:    7(fvec4) Select 190 185 184
-             192:    7(fvec4) Load 9(v)
-             193:    7(fvec4) FAdd 192 191
-                              Store 9(v) 193
-             194:    7(fvec4) Load 9(v)
-             195:    7(fvec4) Load 9(v)
-             197:    6(float) Load 196(f)
-             198:    7(fvec4) CompositeConstruct 197 197 197 197
-             199:    7(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 194 195 198
+             186:    7(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 183 184 185
+             187:    7(fvec4) Load 9(v)
+             188:    7(fvec4) FAdd 187 186
+                              Store 9(v) 188
+             189:    7(fvec4) Load 9(v)
+             190:    7(fvec4) Load 9(v)
+             195:  192(bvec4) Load 194(ub41)
+             196:    7(fvec4) Select 195 190 189
+             197:    7(fvec4) Load 9(v)
+             198:    7(fvec4) FAdd 197 196
+                              Store 9(v) 198
+             199:    7(fvec4) Load 9(v)
              200:    7(fvec4) Load 9(v)
-             201:    7(fvec4) FAdd 200 199
-                              Store 9(v) 201
-             202:    7(fvec4) Load 9(v)
-             203:    7(fvec4) Load 11(uv4)
-             204:    7(fvec4) Load 9(v)
-             205:    7(fvec4) ExtInst 1(GLSL.std.450) 50(Fma) 202 203 204
-             206:    7(fvec4) Load 9(v)
-             207:    7(fvec4) FAdd 206 205
-                              Store 9(v) 207
-             208:    7(fvec4) Load 9(v)
+             202:    6(float) Load 201(f)
+             203:    7(fvec4) CompositeConstruct 202 202 202 202
+             204:    7(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 199 200 203
+             205:    7(fvec4) Load 9(v)
+             206:    7(fvec4) FAdd 205 204
+                              Store 9(v) 206
+             207:    7(fvec4) Load 9(v)
+             208:    7(fvec4) Load 11(uv4)
              209:    7(fvec4) Load 9(v)
-             210:    7(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 208 209
+             210:    7(fvec4) ExtInst 1(GLSL.std.450) 50(Fma) 207 208 209
              211:    7(fvec4) Load 9(v)
              212:    7(fvec4) FAdd 211 210
                               Store 9(v) 212
              213:    7(fvec4) Load 9(v)
              214:    7(fvec4) Load 9(v)
-             215:    7(fvec4) Load 9(v)
-             216:    7(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 213 214 215
-             217:    7(fvec4) Load 9(v)
-             218:    7(fvec4) FAdd 217 216
-                              Store 9(v) 218
-             221:    6(float) Load 220(uf)
+             215:    7(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 213 214
+             216:    7(fvec4) Load 9(v)
+             217:    7(fvec4) FAdd 216 215
+                              Store 9(v) 217
+             218:    7(fvec4) Load 9(v)
+             219:    7(fvec4) Load 9(v)
+             220:    7(fvec4) Load 9(v)
+             221:    7(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 218 219 220
              222:    7(fvec4) Load 9(v)
-             223:    7(fvec4) CompositeConstruct 221 221 221 221
-             224:    7(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 223 222
-             225:    7(fvec4) Load 9(v)
-             226:    7(fvec4) FAdd 225 224
-                              Store 9(v) 226
-             227:    6(float) Load 220(uf)
-             228:    6(float) Load 220(uf)
-             229:    7(fvec4) Load 9(v)
-             230:    7(fvec4) CompositeConstruct 227 227 227 227
-             231:    7(fvec4) CompositeConstruct 228 228 228 228
-             232:    7(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 230 231 229
-             233:    7(fvec4) Load 9(v)
-             234:    7(fvec4) FAdd 233 232
-                              Store 9(v) 234
-             235:    7(fvec4) Load 9(v)
-             236:    7(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 235
-             237:    7(fvec4) Load 9(v)
-             238:    7(fvec4) FAdd 237 236
-                              Store 9(v) 238
-             239:    7(fvec4) Load 9(v)
+             223:    7(fvec4) FAdd 222 221
+                              Store 9(v) 223
+             226:    6(float) Load 225(uf)
+             227:    7(fvec4) Load 9(v)
+             228:    7(fvec4) CompositeConstruct 226 226 226 226
+             229:    7(fvec4) ExtInst 1(GLSL.std.450) 48(Step) 228 227
+             230:    7(fvec4) Load 9(v)
+             231:    7(fvec4) FAdd 230 229
+                              Store 9(v) 231
+             232:    6(float) Load 225(uf)
+             233:    6(float) Load 225(uf)
+             234:    7(fvec4) Load 9(v)
+             235:    7(fvec4) CompositeConstruct 232 232 232 232
+             236:    7(fvec4) CompositeConstruct 233 233 233 233
+             237:    7(fvec4) ExtInst 1(GLSL.std.450) 49(SmoothStep) 235 236 234
+             238:    7(fvec4) Load 9(v)
+             239:    7(fvec4) FAdd 238 237
+                              Store 9(v) 239
              240:    7(fvec4) Load 9(v)
-             241:    7(fvec4) Load 9(v)
-             242:    7(fvec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 239 240 241
-             243:    7(fvec4) Load 9(v)
-             244:    7(fvec4) FAdd 243 242
-                              Store 9(v) 244
+             241:    7(fvec4) ExtInst 1(GLSL.std.450) 69(Normalize) 240
+             242:    7(fvec4) Load 9(v)
+             243:    7(fvec4) FAdd 242 241
+                              Store 9(v) 243
+             244:    7(fvec4) Load 9(v)
              245:    7(fvec4) Load 9(v)
              246:    7(fvec4) Load 9(v)
-             247:    7(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 245 246
+             247:    7(fvec4) ExtInst 1(GLSL.std.450) 70(FaceForward) 244 245 246
              248:    7(fvec4) Load 9(v)
              249:    7(fvec4) FAdd 248 247
                               Store 9(v) 249
              250:    7(fvec4) Load 9(v)
              251:    7(fvec4) Load 9(v)
-             252:    6(float) Load 220(uf)
-             253:    7(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 250 251 252
-             254:    7(fvec4) Load 9(v)
-             255:    7(fvec4) FAdd 254 253
-                              Store 9(v) 255
+             252:    7(fvec4) ExtInst 1(GLSL.std.450) 71(Reflect) 250 251
+             253:    7(fvec4) Load 9(v)
+             254:    7(fvec4) FAdd 253 252
+                              Store 9(v) 254
+             255:    7(fvec4) Load 9(v)
              256:    7(fvec4) Load 9(v)
-             257:    7(fvec4) DPdx 256
-             258:    7(fvec4) Load 9(v)
-             259:    7(fvec4) FAdd 258 257
-                              Store 9(v) 259
-             260:    7(fvec4) Load 9(v)
-             261:    7(fvec4) DPdy 260
-             262:    7(fvec4) Load 9(v)
-             263:    7(fvec4) FAdd 262 261
-                              Store 9(v) 263
-             264:    7(fvec4) Load 9(v)
-             265:    7(fvec4) Fwidth 264
-             266:    7(fvec4) Load 9(v)
-             267:    7(fvec4) FAdd 266 265
-                              Store 9(v) 267
-             268:     18(int) Load 22(ui)
-             269:     18(int) ExtInst 1(GLSL.std.450) 5(SAbs) 268
-             270:     18(int) Load 20(i)
-             271:     18(int) IAdd 270 269
-                              Store 20(i) 271
-             272:     18(int) Load 20(i)
-             273:     18(int) ExtInst 1(GLSL.std.450) 7(SSign) 272
-             274:     18(int) Load 20(i)
-             275:     18(int) IAdd 274 273
-                              Store 20(i) 275
-             276:     18(int) Load 20(i)
-             277:     18(int) Load 22(ui)
-             278:     18(int) ExtInst 1(GLSL.std.450) 39(SMin) 276 277
+             257:    6(float) Load 225(uf)
+             258:    7(fvec4) ExtInst 1(GLSL.std.450) 72(Refract) 255 256 257
+             259:    7(fvec4) Load 9(v)
+             260:    7(fvec4) FAdd 259 258
+                              Store 9(v) 260
+             261:    7(fvec4) Load 9(v)
+             262:    7(fvec4) DPdx 261
+             263:    7(fvec4) Load 9(v)
+             264:    7(fvec4) FAdd 263 262
+                              Store 9(v) 264
+             265:    7(fvec4) Load 9(v)
+             266:    7(fvec4) DPdy 265
+             267:    7(fvec4) Load 9(v)
+             268:    7(fvec4) FAdd 267 266
+                              Store 9(v) 268
+             269:    7(fvec4) Load 9(v)
+             270:    7(fvec4) Fwidth 269
+             271:    7(fvec4) Load 9(v)
+             272:    7(fvec4) FAdd 271 270
+                              Store 9(v) 272
+             273:     18(int) Load 22(ui)
+             274:     18(int) ExtInst 1(GLSL.std.450) 5(SAbs) 273
+             275:     18(int) Load 20(i)
+             276:     18(int) IAdd 275 274
+                              Store 20(i) 276
+             277:     18(int) Load 20(i)
+             278:     18(int) ExtInst 1(GLSL.std.450) 7(SSign) 277
              279:     18(int) Load 20(i)
              280:     18(int) IAdd 279 278
                               Store 20(i) 280
              281:     18(int) Load 20(i)
              282:     18(int) Load 22(ui)
-             283:     18(int) ExtInst 1(GLSL.std.450) 42(SMax) 281 282
+             283:     18(int) ExtInst 1(GLSL.std.450) 39(SMin) 281 282
              284:     18(int) Load 20(i)
              285:     18(int) IAdd 284 283
                               Store 20(i) 285
              286:     18(int) Load 20(i)
              287:     18(int) Load 22(ui)
-             288:     18(int) Load 22(ui)
-             289:     18(int) ExtInst 1(GLSL.std.450) 45(SClamp) 286 287 288
-             290:     18(int) Load 20(i)
-             291:     18(int) IAdd 290 289
-                              Store 20(i) 291
-             294:    141(int) Load 293(u)
-             297:    141(int) Load 296(uui)
-             298:    141(int) ExtInst 1(GLSL.std.450) 38(UMin) 294 297
-             299:    141(int) Load 293(u)
-             300:    141(int) IAdd 299 298
-                              Store 293(u) 300
-             301:    141(int) Load 293(u)
-             302:    141(int) Load 296(uui)
-             303:    141(int) ExtInst 1(GLSL.std.450) 41(UMax) 301 302
-             304:    141(int) Load 293(u)
+             288:     18(int) ExtInst 1(GLSL.std.450) 42(SMax) 286 287
+             289:     18(int) Load 20(i)
+             290:     18(int) IAdd 289 288
+                              Store 20(i) 290
+             291:     18(int) Load 20(i)
+             292:     18(int) Load 22(ui)
+             293:     18(int) Load 22(ui)
+             294:     18(int) ExtInst 1(GLSL.std.450) 45(SClamp) 291 292 293
+             295:     18(int) Load 20(i)
+             296:     18(int) IAdd 295 294
+                              Store 20(i) 296
+             299:    141(int) Load 298(u)
+             302:    141(int) Load 301(uui)
+             303:    141(int) ExtInst 1(GLSL.std.450) 38(UMin) 299 302
+             304:    141(int) Load 298(u)
              305:    141(int) IAdd 304 303
-                              Store 293(u) 305
-             306:    141(int) Load 293(u)
-             307:    141(int) Load 296(uui)
-             308:    141(int) Load 296(uui)
-             309:    141(int) ExtInst 1(GLSL.std.450) 44(UClamp) 306 307 308
-             310:    141(int) Load 293(u)
-             311:    141(int) IAdd 310 309
-                              Store 293(u) 311
-             316:  312(ivec4) Load 314(uuv4)
-             317:  315(ivec3) VectorShuffle 316 316 0 1 2
-             318:  312(ivec4) Load 314(uuv4)
-             319:  315(ivec3) VectorShuffle 318 318 0 1 2
-             327:326(ResType) UMulExtended 317 319
-             328:  315(ivec3) CompositeExtract 327 0
-                              Store 325(swizzleTemp) 328
-             329:  315(ivec3) CompositeExtract 327 1
-                              Store 323(swizzleTemp) 329
-             330:  315(ivec3) Load 323(swizzleTemp)
-             331:    292(ptr) AccessChain 321(msb) 142
-             332:    141(int) CompositeExtract 330 0
-                              Store 331 332
-             334:    292(ptr) AccessChain 321(msb) 333
-             335:    141(int) CompositeExtract 330 1
-                              Store 334 335
-             337:    292(ptr) AccessChain 321(msb) 336
-             338:    141(int) CompositeExtract 330 2
-                              Store 337 338
-             339:  315(ivec3) Load 325(swizzleTemp)
-             340:    292(ptr) AccessChain 324(lsb) 142
-             341:    141(int) CompositeExtract 339 0
-                              Store 340 341
-             342:    292(ptr) AccessChain 324(lsb) 333
-             343:    141(int) CompositeExtract 339 1
+                              Store 298(u) 305
+             306:    141(int) Load 298(u)
+             307:    141(int) Load 301(uui)
+             308:    141(int) ExtInst 1(GLSL.std.450) 41(UMax) 306 307
+             309:    141(int) Load 298(u)
+             310:    141(int) IAdd 309 308
+                              Store 298(u) 310
+             311:    141(int) Load 298(u)
+             312:    141(int) Load 301(uui)
+             313:    141(int) Load 301(uui)
+             314:    141(int) ExtInst 1(GLSL.std.450) 44(UClamp) 311 312 313
+             315:    141(int) Load 298(u)
+             316:    141(int) IAdd 315 314
+                              Store 298(u) 316
+             321:  317(ivec4) Load 319(uuv4)
+             322:  320(ivec3) VectorShuffle 321 321 0 1 2
+             323:  317(ivec4) Load 319(uuv4)
+             324:  320(ivec3) VectorShuffle 323 323 0 1 2
+             332:331(ResType) UMulExtended 322 324
+             333:  320(ivec3) CompositeExtract 332 0
+                              Store 330(swizzleTemp) 333
+             334:  320(ivec3) CompositeExtract 332 1
+                              Store 328(swizzleTemp) 334
+             335:  320(ivec3) Load 328(swizzleTemp)
+             336:    297(ptr) AccessChain 326(msb) 142
+             337:    141(int) CompositeExtract 335 0
+                              Store 336 337
+             339:    297(ptr) AccessChain 326(msb) 338
+             340:    141(int) CompositeExtract 335 1
+                              Store 339 340
+             342:    297(ptr) AccessChain 326(msb) 341
+             343:    141(int) CompositeExtract 335 2
                               Store 342 343
-             344:    292(ptr) AccessChain 324(lsb) 336
-             345:    141(int) CompositeExtract 339 2
-                              Store 344 345
-             346:    292(ptr) AccessChain 321(msb) 142
-             347:    141(int) Load 346
-             348:    292(ptr) AccessChain 321(msb) 333
-             349:    141(int) Load 348
-             350:    141(int) IAdd 347 349
-             351:    292(ptr) AccessChain 321(msb) 336
+             344:  320(ivec3) Load 330(swizzleTemp)
+             345:    297(ptr) AccessChain 329(lsb) 142
+             346:    141(int) CompositeExtract 344 0
+                              Store 345 346
+             347:    297(ptr) AccessChain 329(lsb) 338
+             348:    141(int) CompositeExtract 344 1
+                              Store 347 348
+             349:    297(ptr) AccessChain 329(lsb) 341
+             350:    141(int) CompositeExtract 344 2
+                              Store 349 350
+             351:    297(ptr) AccessChain 326(msb) 142
              352:    141(int) Load 351
-             353:    141(int) IAdd 350 352
-             354:    141(int) Load 293(u)
-             355:    141(int) IAdd 354 353
-                              Store 293(u) 355
-             356:    292(ptr) AccessChain 324(lsb) 142
+             353:    297(ptr) AccessChain 326(msb) 338
+             354:    141(int) Load 353
+             355:    141(int) IAdd 352 354
+             356:    297(ptr) AccessChain 326(msb) 341
              357:    141(int) Load 356
-             358:    292(ptr) AccessChain 324(lsb) 333
-             359:    141(int) Load 358
-             360:    141(int) IAdd 357 359
-             361:    292(ptr) AccessChain 324(lsb) 336
+             358:    141(int) IAdd 355 357
+             359:    141(int) Load 298(u)
+             360:    141(int) IAdd 359 358
+                              Store 298(u) 360
+             361:    297(ptr) AccessChain 329(lsb) 142
              362:    141(int) Load 361
-             363:    141(int) IAdd 360 362
-             364:    141(int) Load 293(u)
-             365:    141(int) IAdd 364 363
-                              Store 293(u) 365
-             368:    6(float) Load 220(uf)
-             369:   186(bool) IsNan 368
-                              Store 367(b) 369
-             370:    6(float) Load 196(f)
-             371:   186(bool) IsInf 370
-                              Store 367(b) 371
-             372:    7(fvec4) Load 9(v)
-             373:    7(fvec4) Load 11(uv4)
-             374:  187(bvec4) FOrdLessThan 372 373
-             375:   186(bool) Any 374
-                              Store 367(b) 375
-             376:   186(bool) Load 367(b)
-                              SelectionMerge 378 None
-                              BranchConditional 376 377 378
-             377:               Label
-             379:    7(fvec4)   Load 9(v)
-             380:    7(fvec4)   Load 11(uv4)
-             381:  187(bvec4)   FOrdLessThanEqual 379 380
-             382:   186(bool)   Any 381
-                                Branch 378
-             378:             Label
-             383:   186(bool) Phi 376 5 382 377
-                              Store 367(b) 383
-             384:   186(bool) Load 367(b)
-                              SelectionMerge 386 None
-                              BranchConditional 384 385 386
-             385:               Label
-             387:    7(fvec4)   Load 9(v)
-             388:    7(fvec4)   Load 11(uv4)
-             389:  187(bvec4)   FOrdGreaterThan 387 388
-             390:   186(bool)   Any 389
-                                Branch 386
-             386:             Label
-             391:   186(bool) Phi 384 378 390 385
-                              Store 367(b) 391
-             392:   186(bool) Load 367(b)
-                              SelectionMerge 394 None
-                              BranchConditional 392 393 394
-             393:               Label
-             395:    7(fvec4)   Load 9(v)
-             396:    7(fvec4)   Load 11(uv4)
-             397:  187(bvec4)   FOrdGreaterThanEqual 395 396
-             398:   186(bool)   Any 397
-                                Branch 394
-             394:             Label
-             399:   186(bool) Phi 392 386 398 393
-                              Store 367(b) 399
-             400:   186(bool) Load 367(b)
-                              SelectionMerge 402 None
-                              BranchConditional 400 401 402
-             401:               Label
-             403:  187(bvec4)   Load 189(ub41)
-             405:  187(bvec4)   Load 404(ub42)
-             406:  187(bvec4)   LogicalEqual 403 405
-             407:   186(bool)   Any 406
-                                Branch 402
-             402:             Label
-             408:   186(bool) Phi 400 394 407 401
-                              Store 367(b) 408
-             409:   186(bool) Load 367(b)
-                              SelectionMerge 411 None
-                              BranchConditional 409 410 411
-             410:               Label
-             412:  187(bvec4)   Load 189(ub41)
-             413:  187(bvec4)   Load 404(ub42)
-             414:  187(bvec4)   LogicalNotEqual 412 413
-             415:   186(bool)   Any 414
-                                Branch 411
-             411:             Label
-             416:   186(bool) Phi 409 402 415 410
-                              Store 367(b) 416
-             417:   186(bool) Load 367(b)
-             418:  187(bvec4) Load 189(ub41)
-             419:   186(bool) Any 418
-             420:   186(bool) LogicalAnd 417 419
-                              Store 367(b) 420
-             421:   186(bool) Load 367(b)
-             422:  187(bvec4) Load 189(ub41)
-             423:   186(bool) All 422
-             424:   186(bool) LogicalAnd 421 423
-                              Store 367(b) 424
-             425:   186(bool) Load 367(b)
-                              SelectionMerge 427 None
-                              BranchConditional 425 426 427
-             426:               Label
-             428:  187(bvec4)   Load 189(ub41)
-             429:  187(bvec4)   LogicalNot 428
-             430:   186(bool)   Any 429
-                                Branch 427
-             427:             Label
-             431:   186(bool) Phi 425 411 430 426
-                              Store 367(b) 431
-             432:     18(int) Load 20(i)
-             433:     18(int) Load 22(ui)
-             434:     18(int) IAdd 432 433
-             435:     18(int) Load 20(i)
-             436:     18(int) IMul 434 435
-             437:     18(int) Load 22(ui)
-             438:     18(int) ISub 436 437
-             439:     18(int) Load 20(i)
-             440:     18(int) SDiv 438 439
-                              Store 20(i) 440
-             441:     18(int) Load 20(i)
+             363:    297(ptr) AccessChain 329(lsb) 338
+             364:    141(int) Load 363
+             365:    141(int) IAdd 362 364
+             366:    297(ptr) AccessChain 329(lsb) 341
+             367:    141(int) Load 366
+             368:    141(int) IAdd 365 367
+             369:    141(int) Load 298(u)
+             370:    141(int) IAdd 369 368
+                              Store 298(u) 370
+             373:    6(float) Load 225(uf)
+             374:   191(bool) IsNan 373
+                              Store 372(b) 374
+             375:    6(float) Load 201(f)
+             376:   191(bool) IsInf 375
+                              Store 372(b) 376
+             377:    7(fvec4) Load 9(v)
+             378:    7(fvec4) Load 11(uv4)
+             379:  192(bvec4) FOrdLessThan 377 378
+             380:   191(bool) Any 379
+                              Store 372(b) 380
+             381:   191(bool) Load 372(b)
+                              SelectionMerge 383 None
+                              BranchConditional 381 382 383
+             382:               Label
+             384:    7(fvec4)   Load 9(v)
+             385:    7(fvec4)   Load 11(uv4)
+             386:  192(bvec4)   FOrdLessThanEqual 384 385
+             387:   191(bool)   Any 386
+                                Branch 383
+             383:             Label
+             388:   191(bool) Phi 381 5 387 382
+                              Store 372(b) 388
+             389:   191(bool) Load 372(b)
+                              SelectionMerge 391 None
+                              BranchConditional 389 390 391
+             390:               Label
+             392:    7(fvec4)   Load 9(v)
+             393:    7(fvec4)   Load 11(uv4)
+             394:  192(bvec4)   FOrdGreaterThan 392 393
+             395:   191(bool)   Any 394
+                                Branch 391
+             391:             Label
+             396:   191(bool) Phi 389 383 395 390
+                              Store 372(b) 396
+             397:   191(bool) Load 372(b)
+                              SelectionMerge 399 None
+                              BranchConditional 397 398 399
+             398:               Label
+             400:    7(fvec4)   Load 9(v)
+             401:    7(fvec4)   Load 11(uv4)
+             402:  192(bvec4)   FOrdGreaterThanEqual 400 401
+             403:   191(bool)   Any 402
+                                Branch 399
+             399:             Label
+             404:   191(bool) Phi 397 391 403 398
+                              Store 372(b) 404
+             405:   191(bool) Load 372(b)
+                              SelectionMerge 407 None
+                              BranchConditional 405 406 407
+             406:               Label
+             408:  192(bvec4)   Load 194(ub41)
+             410:  192(bvec4)   Load 409(ub42)
+             411:  192(bvec4)   LogicalEqual 408 410
+             412:   191(bool)   Any 411
+                                Branch 407
+             407:             Label
+             413:   191(bool) Phi 405 399 412 406
+                              Store 372(b) 413
+             414:   191(bool) Load 372(b)
+                              SelectionMerge 416 None
+                              BranchConditional 414 415 416
+             415:               Label
+             417:  192(bvec4)   Load 194(ub41)
+             418:  192(bvec4)   Load 409(ub42)
+             419:  192(bvec4)   LogicalNotEqual 417 418
+             420:   191(bool)   Any 419
+                                Branch 416
+             416:             Label
+             421:   191(bool) Phi 414 407 420 415
+                              Store 372(b) 421
+             422:   191(bool) Load 372(b)
+             423:  192(bvec4) Load 194(ub41)
+             424:   191(bool) Any 423
+             425:   191(bool) LogicalAnd 422 424
+                              Store 372(b) 425
+             426:   191(bool) Load 372(b)
+             427:  192(bvec4) Load 194(ub41)
+             428:   191(bool) All 427
+             429:   191(bool) LogicalAnd 426 428
+                              Store 372(b) 429
+             430:   191(bool) Load 372(b)
+                              SelectionMerge 432 None
+                              BranchConditional 430 431 432
+             431:               Label
+             433:  192(bvec4)   Load 194(ub41)
+             434:  192(bvec4)   LogicalNot 433
+             435:   191(bool)   Any 434
+                                Branch 432
+             432:             Label
+             436:   191(bool) Phi 430 416 435 431
+                              Store 372(b) 436
+             437:     18(int) Load 20(i)
+             438:     18(int) Load 22(ui)
+             439:     18(int) IAdd 437 438
+             440:     18(int) Load 20(i)
+             441:     18(int) IMul 439 440
              442:     18(int) Load 22(ui)
-             443:     18(int) SMod 441 442
-                              Store 20(i) 443
+             443:     18(int) ISub 441 442
              444:     18(int) Load 20(i)
-             445:     18(int) Load 22(ui)
-             446:   186(bool) IEqual 444 445
-             447:   186(bool) LogicalNot 446
-                              SelectionMerge 449 None
-                              BranchConditional 447 448 449
-             448:               Label
-             450:     18(int)   Load 20(i)
-             451:     18(int)   Load 22(ui)
-             452:   186(bool)   INotEqual 450 451
-                                SelectionMerge 454 None
-                                BranchConditional 452 453 454
-             453:                 Label
-             455:     18(int)     Load 20(i)
-             456:     18(int)     Load 22(ui)
-             457:   186(bool)     IEqual 455 456
-                                  Branch 454
-             454:               Label
-             458:   186(bool)   Phi 452 448 457 453
-             459:     18(int)   Load 20(i)
-             461:   186(bool)   INotEqual 459 460
-             462:   186(bool)   LogicalNotEqual 458 461
-                                Branch 449
-             449:             Label
-             463:   186(bool) Phi 446 427 462 454
-                              SelectionMerge 465 None
-                              BranchConditional 463 464 465
-             464:               Label
-             466:     18(int)   Load 20(i)
-             468:     18(int)   IAdd 466 467
-                                Store 20(i) 468
-                                Branch 465
-             465:             Label
-             469:    6(float) Load 220(uf)
-             470:    6(float) Load 220(uf)
-             471:    6(float) FAdd 469 470
-             472:    6(float) Load 220(uf)
-             473:    6(float) FMul 471 472
-             474:    6(float) Load 220(uf)
-             475:    6(float) FSub 473 474
-             476:    6(float) Load 220(uf)
-             477:    6(float) FDiv 475 476
-                              Store 196(f) 477
-             478:    7(fvec4) Load 9(v)
-             479:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 478
-             480:    6(float) Load 196(f)
-             481:    6(float) FAdd 480 479
-                              Store 196(f) 481
-             482:    7(fvec4) Load 9(v)
+             445:     18(int) SDiv 443 444
+                              Store 20(i) 445
+             446:     18(int) Load 20(i)
+             447:     18(int) Load 22(ui)
+             448:     18(int) SMod 446 447
+                              Store 20(i) 448
+             449:     18(int) Load 20(i)
+             450:     18(int) Load 22(ui)
+             451:   191(bool) IEqual 449 450
+             452:   191(bool) LogicalNot 451
+                              SelectionMerge 454 None
+                              BranchConditional 452 453 454
+             453:               Label
+             455:     18(int)   Load 20(i)
+             456:     18(int)   Load 22(ui)
+             457:   191(bool)   INotEqual 455 456
+                                SelectionMerge 459 None
+                                BranchConditional 457 458 459
+             458:                 Label
+             460:     18(int)     Load 20(i)
+             461:     18(int)     Load 22(ui)
+             462:   191(bool)     IEqual 460 461
+                                  Branch 459
+             459:               Label
+             463:   191(bool)   Phi 457 453 462 458
+             464:     18(int)   Load 20(i)
+             466:   191(bool)   INotEqual 464 465
+             467:   191(bool)   LogicalNotEqual 463 466
+                                Branch 454
+             454:             Label
+             468:   191(bool) Phi 451 432 467 459
+                              SelectionMerge 470 None
+                              BranchConditional 468 469 470
+             469:               Label
+             471:     18(int)   Load 20(i)
+             473:     18(int)   IAdd 471 472
+                                Store 20(i) 473
+                                Branch 470
+             470:             Label
+             474:    6(float) Load 225(uf)
+             475:    6(float) Load 225(uf)
+             476:    6(float) FAdd 474 475
+             477:    6(float) Load 225(uf)
+             478:    6(float) FMul 476 477
+             479:    6(float) Load 225(uf)
+             480:    6(float) FSub 478 479
+             481:    6(float) Load 225(uf)
+             482:    6(float) FDiv 480 481
+                              Store 201(f) 482
              483:    7(fvec4) Load 9(v)
-             484:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 482 483
-             485:    6(float) Load 196(f)
+             484:    6(float) ExtInst 1(GLSL.std.450) 66(Length) 483
+             485:    6(float) Load 201(f)
              486:    6(float) FAdd 485 484
-                              Store 196(f) 486
+                              Store 201(f) 486
              487:    7(fvec4) Load 9(v)
              488:    7(fvec4) Load 9(v)
-             489:    6(float) Dot 487 488
-             490:    6(float) Load 196(f)
+             489:    6(float) ExtInst 1(GLSL.std.450) 67(Distance) 487 488
+             490:    6(float) Load 201(f)
              491:    6(float) FAdd 490 489
-                              Store 196(f) 491
-             492:    6(float) Load 196(f)
-             493:    6(float) Load 220(uf)
-             494:    6(float) FMul 492 493
-             495:    6(float) Load 196(f)
+                              Store 201(f) 491
+             492:    7(fvec4) Load 9(v)
+             493:    7(fvec4) Load 9(v)
+             494:    6(float) Dot 492 493
+             495:    6(float) Load 201(f)
              496:    6(float) FAdd 495 494
-                              Store 196(f) 496
-             498:    7(fvec4) Load 9(v)
-             499:  497(fvec3) VectorShuffle 498 498 0 1 2
-             500:    7(fvec4) Load 9(v)
-             501:  497(fvec3) VectorShuffle 500 500 0 1 2
-             502:  497(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 499 501
-             503:    6(float) CompositeExtract 502 0
-             504:    6(float) Load 196(f)
-             505:    6(float) FAdd 504 503
-                              Store 196(f) 505
-             506:    6(float) Load 196(f)
-             507:    6(float) Load 220(uf)
-             508:   186(bool) FOrdEqual 506 507
-             509:   186(bool) LogicalNot 508
-                              SelectionMerge 511 None
-                              BranchConditional 509 510 511
-             510:               Label
-             512:    6(float)   Load 196(f)
-             513:    6(float)   Load 220(uf)
-             514:   186(bool)   FUnordNotEqual 512 513
-             515:    6(float)   Load 196(f)
-             517:   186(bool)   FUnordNotEqual 515 516
-             518:   186(bool)   LogicalAnd 514 517
-                                Branch 511
-             511:             Label
-             519:   186(bool) Phi 508 465 518 510
-                              SelectionMerge 521 None
-                              BranchConditional 519 520 521
-             520:               Label
-             522:    6(float)   Load 196(f)
-             524:    6(float)   FAdd 522 523
-                                Store 196(f) 524
-                                Branch 521
-             521:             Label
-             525:     18(int) Load 22(ui)
-             526:     18(int) Load 20(i)
-             527:     18(int) BitwiseAnd 526 525
-                              Store 20(i) 527
-             529:     18(int) Load 20(i)
-             530:     18(int) BitwiseOr 529 528
-                              Store 20(i) 530
-             531:     18(int) Load 22(ui)
-             532:     18(int) Load 20(i)
-             533:     18(int) BitwiseXor 532 531
-                              Store 20(i) 533
-             535:     18(int) Load 20(i)
-             536:     18(int) SMod 535 534
-                              Store 20(i) 536
+                              Store 201(f) 496
+             497:    6(float) Load 201(f)
+             498:    6(float) Load 225(uf)
+             499:    6(float) FMul 497 498
+             500:    6(float) Load 201(f)
+             501:    6(float) FAdd 500 499
+                              Store 201(f) 501
+             503:    7(fvec4) Load 9(v)
+             504:  502(fvec3) VectorShuffle 503 503 0 1 2
+             505:    7(fvec4) Load 9(v)
+             506:  502(fvec3) VectorShuffle 505 505 0 1 2
+             507:  502(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 504 506
+             508:    6(float) CompositeExtract 507 0
+             509:    6(float) Load 201(f)
+             510:    6(float) FAdd 509 508
+                              Store 201(f) 510
+             511:    6(float) Load 201(f)
+             512:    6(float) Load 225(uf)
+             513:   191(bool) FOrdEqual 511 512
+             514:   191(bool) LogicalNot 513
+                              SelectionMerge 516 None
+                              BranchConditional 514 515 516
+             515:               Label
+             517:    6(float)   Load 201(f)
+             518:    6(float)   Load 225(uf)
+             519:   191(bool)   FUnordNotEqual 517 518
+             520:    6(float)   Load 201(f)
+             522:   191(bool)   FUnordNotEqual 520 521
+             523:   191(bool)   LogicalAnd 519 522
+                                Branch 516
+             516:             Label
+             524:   191(bool) Phi 513 470 523 515
+                              SelectionMerge 526 None
+                              BranchConditional 524 525 526
+             525:               Label
+             527:    6(float)   Load 201(f)
+             529:    6(float)   FAdd 527 528
+                                Store 201(f) 529
+                                Branch 526
+             526:             Label
+             530:     18(int) Load 22(ui)
+             531:     18(int) Load 20(i)
+             532:     18(int) BitwiseAnd 531 530
+                              Store 20(i) 532
+             534:     18(int) Load 20(i)
+             535:     18(int) BitwiseOr 534 533
+                              Store 20(i) 535
+             536:     18(int) Load 22(ui)
              537:     18(int) Load 20(i)
-             538:     18(int) ShiftRightArithmetic 537 460
+             538:     18(int) BitwiseXor 537 536
                               Store 20(i) 538
-             539:     18(int) Load 22(ui)
              540:     18(int) Load 20(i)
-             541:     18(int) ShiftLeftLogical 540 539
+             541:     18(int) SMod 540 539
                               Store 20(i) 541
              542:     18(int) Load 20(i)
-             543:     18(int) Not 542
+             543:     18(int) ShiftRightArithmetic 542 465
                               Store 20(i) 543
-             544:   186(bool) Load 367(b)
-             545:   186(bool) LogicalNot 544
-                              Store 367(b) 545
-             548:   186(bool) Load 367(b)
-                              SelectionMerge 551 None
-                              BranchConditional 548 550 560
-             550:               Label
-             552:     18(int)   Load 20(i)
-             553:    6(float)   ConvertSToF 552
-             554:    7(fvec4)   CompositeConstruct 553 553 553 553
-             555:    6(float)   Load 196(f)
-             556:    7(fvec4)   CompositeConstruct 555 555 555 555
-             557:    7(fvec4)   FAdd 554 556
-             558:    7(fvec4)   Load 9(v)
-             559:    7(fvec4)   FAdd 557 558
-                                Store 549 559
-                                Branch 551
-             560:               Label
-             561:    7(fvec4)   Load 9(v)
-                                Store 549 561
-                                Branch 551
-             551:             Label
-             562:    7(fvec4) Load 549
-                              Store 547(FragColor) 562
-                              Store 565(m1) 571
-                              Store 572(m2) 574
-             575:   186(bool) Load 367(b)
-                              SelectionMerge 578 None
-                              BranchConditional 575 577 580
-             577:               Label
-             579:         563   Load 565(m1)
-                                Store 576 579
-                                Branch 578
-             580:               Label
-             581:         563   Load 572(m2)
-                                Store 576 581
-                                Branch 578
-             578:             Label
-             582:      8(ptr) AccessChain 576 467
-             583:    7(fvec4) Load 582
-             584:    7(fvec4) Load 547(FragColor)
-             585:    7(fvec4) FAdd 584 583
-                              Store 547(FragColor) 585
+             544:     18(int) Load 22(ui)
+             545:     18(int) Load 20(i)
+             546:     18(int) ShiftLeftLogical 545 544
+                              Store 20(i) 546
+             547:     18(int) Load 20(i)
+             548:     18(int) Not 547
+                              Store 20(i) 548
+             549:   191(bool) Load 372(b)
+             550:   191(bool) LogicalNot 549
+                              Store 372(b) 550
+             553:   191(bool) Load 372(b)
+                              SelectionMerge 556 None
+                              BranchConditional 553 555 565
+             555:               Label
+             557:     18(int)   Load 20(i)
+             558:    6(float)   ConvertSToF 557
+             559:    7(fvec4)   CompositeConstruct 558 558 558 558
+             560:    6(float)   Load 201(f)
+             561:    7(fvec4)   CompositeConstruct 560 560 560 560
+             562:    7(fvec4)   FAdd 559 561
+             563:    7(fvec4)   Load 9(v)
+             564:    7(fvec4)   FAdd 562 563
+                                Store 554 564
+                                Branch 556
+             565:               Label
+             566:    7(fvec4)   Load 9(v)
+                                Store 554 566
+                                Branch 556
+             556:             Label
+             567:    7(fvec4) Load 554
+                              Store 552(FragColor) 567
+                              Store 570(m1) 576
+                              Store 577(m2) 579
+             580:   191(bool) Load 372(b)
+                              SelectionMerge 583 None
+                              BranchConditional 580 582 585
+             582:               Label
+             584:         568   Load 570(m1)
+                                Store 581 584
+                                Branch 583
+             585:               Label
+             586:         568   Load 577(m2)
+                                Store 581 586
+                                Branch 583
+             583:             Label
+             587:      8(ptr) AccessChain 581 472
+             588:    7(fvec4) Load 587
+             589:    7(fvec4) Load 552(FragColor)
+             590:    7(fvec4) FAdd 589 588
+                              Store 552(FragColor) 590
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.RayConstants.rgen.out b/Test/baseResults/spv.RayConstants.rgen.out
index ebdcb50..fb503c9 100644
--- a/Test/baseResults/spv.RayConstants.rgen.out
+++ b/Test/baseResults/spv.RayConstants.rgen.out
@@ -13,8 +13,8 @@
                               Name 4  "main"
                               Name 8  "accNV"
                               Name 26  "payload"
-                              Decorate 8(accNV) DescriptorSet 0
                               Decorate 8(accNV) Binding 0
+                              Decorate 8(accNV) DescriptorSet 0
                               Decorate 26(payload) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.RayGenShader.rgen.out b/Test/baseResults/spv.RayGenShader.rgen.out
index 01fdbf0..76bc1f6 100644
--- a/Test/baseResults/spv.RayGenShader.rgen.out
+++ b/Test/baseResults/spv.RayGenShader.rgen.out
@@ -26,13 +26,13 @@
                               Name 53  "payload"
                               Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdKHR
                               Decorate 21(gl_LaunchSizeNV) BuiltIn LaunchSizeKHR
-                              Decorate 29(accNV0) DescriptorSet 0
                               Decorate 29(accNV0) Binding 0
+                              Decorate 29(accNV0) DescriptorSet 0
+                              Decorate 37(block) BufferBlock
                               MemberDecorate 37(block) 0 Offset 0
                               MemberDecorate 37(block) 1 Offset 16
-                              Decorate 37(block) BufferBlock
-                              Decorate 50(accNV1) DescriptorSet 0
                               Decorate 50(accNV1) Binding 1
+                              Decorate 50(accNV1) DescriptorSet 0
                               Decorate 53(payload) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.RayGenShader11.rgen.out b/Test/baseResults/spv.RayGenShader11.rgen.out
index ae55e65..3709388 100644
--- a/Test/baseResults/spv.RayGenShader11.rgen.out
+++ b/Test/baseResults/spv.RayGenShader11.rgen.out
@@ -25,11 +25,11 @@
                               Name 52  "payload"
                               Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdKHR
                               Decorate 21(gl_LaunchSizeNV) BuiltIn LaunchSizeKHR
-                              Decorate 29(accNV) DescriptorSet 0
                               Decorate 29(accNV) Binding 0
+                              Decorate 29(accNV) DescriptorSet 0
+                              Decorate 37(block) Block
                               MemberDecorate 37(block) 0 Offset 0
                               MemberDecorate 37(block) 1 Offset 16
-                              Decorate 37(block) Block
                               Decorate 52(payload) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.RayGenShaderArray.rgen.out b/Test/baseResults/spv.RayGenShaderArray.rgen.out
index c3bd191..ddb2f6b 100644
--- a/Test/baseResults/spv.RayGenShaderArray.rgen.out
+++ b/Test/baseResults/spv.RayGenShaderArray.rgen.out
@@ -31,14 +31,14 @@
                               Name 88  "payload"
                               Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdKHR
                               Decorate 21(gl_LaunchSizeNV) BuiltIn LaunchSizeKHR
-                              Decorate 30(accNV0) DescriptorSet 0
                               Decorate 30(accNV0) Binding 0
+                              Decorate 30(accNV0) DescriptorSet 0
+                              Decorate 34(block) BufferBlock
                               MemberDecorate 34(block) 0 Offset 0
                               MemberDecorate 34(block) 1 Offset 16
                               MemberDecorate 34(block) 2 Offset 28
-                              Decorate 34(block) BufferBlock
-                              Decorate 60(accNV1) DescriptorSet 0
                               Decorate 60(accNV1) Binding 1
+                              Decorate 60(accNV1) DescriptorSet 0
                               Decorate 75 DecorationNonUniformEXT
                               Decorate 76 DecorationNonUniformEXT
                               Decorate 77 DecorationNonUniformEXT
diff --git a/Test/baseResults/spv.RayGenShaderMotion.rgen.out b/Test/baseResults/spv.RayGenShaderMotion.rgen.out
index 9a3421c..0950675 100644
--- a/Test/baseResults/spv.RayGenShaderMotion.rgen.out
+++ b/Test/baseResults/spv.RayGenShaderMotion.rgen.out
@@ -24,8 +24,8 @@
                               Name 46  "payloadEXT"
                               Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
                               Decorate 21(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
-                              Decorate 29(accEXT) DescriptorSet 0
                               Decorate 29(accEXT) Binding 0
+                              Decorate 29(accEXT) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
diff --git a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.16BitAccess.comp.out b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.16BitAccess.comp.out
index 4001462..e5496d3 100644
--- a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.16BitAccess.comp.out
+++ b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.16BitAccess.comp.out
@@ -21,9 +21,9 @@
                               MemberName 8(first) 0  "a"
                               MemberName 8(first) 1  "f"
                               Name 10  ""
+                              Decorate 8(first) Block
                               MemberDecorate 8(first) 0 Offset 0
                               MemberDecorate 8(first) 1 Offset 2
-                              Decorate 8(first) Block
                               Decorate 24 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.8BitAccess.comp.out b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.8BitAccess.comp.out
index d0906a4..a3f1695 100644
--- a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.8BitAccess.comp.out
+++ b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.8BitAccess.comp.out
@@ -19,8 +19,8 @@
                               Name 7  "first"
                               MemberName 7(first) 0  "a"
                               Name 9  ""
-                              MemberDecorate 7(first) 0 Offset 0
                               Decorate 7(first) Block
+                              MemberDecorate 7(first) 0 Offset 0
                               Decorate 19 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.MultiBlock.comp.out b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.MultiBlock.comp.out
index 2a15286..33cae8b 100644
--- a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.MultiBlock.comp.out
+++ b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.MultiBlock.comp.out
@@ -19,13 +19,13 @@
                               Name 14  "second"
                               MemberName 14(second) 0  "b"
                               Name 16  ""
-                              MemberDecorate 7(first) 0 Offset 0
                               Decorate 7(first) Block
-                              MemberDecorate 14(second) 0 Offset 0
-                              Decorate 14(second) Block
-                              Decorate 23 BuiltIn WorkgroupSize
+                              MemberDecorate 7(first) 0 Offset 0
                               Decorate 9 Aliased
+                              Decorate 14(second) Block
+                              MemberDecorate 14(second) 0 Offset 0
                               Decorate 16 Aliased
+                              Decorate 23 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
diff --git a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.SingleBlock.comp.out b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.SingleBlock.comp.out
index cb3bd31..2d48477 100644
--- a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.SingleBlock.comp.out
+++ b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.SingleBlock.comp.out
@@ -16,8 +16,8 @@
                               Name 7  "first"
                               MemberName 7(first) 0  "a"
                               Name 9  ""
-                              MemberDecorate 7(first) 0 Offset 0
                               Decorate 7(first) Block
+                              MemberDecorate 7(first) 0 Offset 0
                               Decorate 18 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.scalar.comp.out b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.scalar.comp.out
index 3d7ece1..a651b63 100644
--- a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.scalar.comp.out
+++ b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.scalar.comp.out
@@ -50,9 +50,9 @@
                               MemberDecorate 24(S) 8 Offset 196
                               MemberDecorate 24(S) 9 Offset 292
                               Decorate 25 ArrayStride 364
+                              Decorate 26(Block) Block
                               MemberDecorate 26(Block) 0 Offset 0
                               MemberDecorate 26(Block) 1 Offset 364
-                              Decorate 26(Block) Block
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
diff --git a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.std140.comp.out b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.std140.comp.out
index 5c8f86d..bc8a5f6 100644
--- a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.std140.comp.out
+++ b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.std140.comp.out
@@ -49,9 +49,9 @@
                               MemberDecorate 24(S) 8 Offset 384
                               MemberDecorate 24(S) 9 Offset 480
                               Decorate 25 ArrayStride 768
+                              Decorate 26(Block) Block
                               MemberDecorate 26(Block) 0 Offset 0
                               MemberDecorate 26(Block) 1 Offset 768
-                              Decorate 26(Block) Block
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
diff --git a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.std430.comp.out b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.std430.comp.out
index bfc35e9..a60209d 100644
--- a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.std430.comp.out
+++ b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.std430.comp.out
@@ -49,9 +49,9 @@
                               MemberDecorate 24(S) 8 Offset 240
                               MemberDecorate 24(S) 9 Offset 336
                               Decorate 25 ArrayStride 416
+                              Decorate 26(Block) Block
                               MemberDecorate 26(Block) 0 Offset 0
                               MemberDecorate 26(Block) 1 Offset 416
-                              Decorate 26(Block) Block
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
diff --git a/Test/baseResults/spv.aggOps.frag.out b/Test/baseResults/spv.aggOps.frag.out
index bc19f23..4752799 100644
--- a/Test/baseResults/spv.aggOps.frag.out
+++ b/Test/baseResults/spv.aggOps.frag.out
@@ -51,21 +51,21 @@
                               MemberDecorate 56(s2) 0 Offset 0
                               MemberDecorate 56(s2) 1 Offset 4
                               MemberDecorate 56(s2) 2 Offset 16
-                              MemberDecorate 57(ub1) 0 Offset 0
                               Decorate 57(ub1) Block
-                              Decorate 59(uName1) DescriptorSet 0
+                              MemberDecorate 57(ub1) 0 Offset 0
                               Decorate 59(uName1) Binding 1
+                              Decorate 59(uName1) DescriptorSet 0
                               MemberDecorate 64(s1) 0 Offset 0
                               MemberDecorate 64(s1) 1 Offset 4
                               MemberDecorate 65(s2) 0 Offset 0
                               MemberDecorate 65(s2) 1 Offset 4
                               MemberDecorate 65(s2) 2 Offset 8
-                              MemberDecorate 66(ub2) 0 Offset 0
                               Decorate 66(ub2) BufferBlock
-                              Decorate 68(uName2) DescriptorSet 0
+                              MemberDecorate 66(ub2) 0 Offset 0
                               Decorate 68(uName2) Binding 2
-                              Decorate 97(samp2D) DescriptorSet 0
+                              Decorate 68(uName2) DescriptorSet 0
                               Decorate 97(samp2D) Binding 0
+                              Decorate 97(samp2D) DescriptorSet 0
                               Decorate 101(coord) RelaxedPrecision
                               Decorate 101(coord) Location 0
                               Decorate 102 RelaxedPrecision
diff --git a/Test/baseResults/spv.arbPostDepthCoverage.frag.out b/Test/baseResults/spv.arbPostDepthCoverage.frag.out
index 5daa156..a36b9ee 100644
--- a/Test/baseResults/spv.arbPostDepthCoverage.frag.out
+++ b/Test/baseResults/spv.arbPostDepthCoverage.frag.out
@@ -19,8 +19,8 @@
                               Name 8  "readSampleMaskIn"
                               Name 13  "gl_SampleMaskIn"
                               Decorate 8(readSampleMaskIn) Location 0
-                              Decorate 13(gl_SampleMaskIn) Flat
                               Decorate 13(gl_SampleMaskIn) BuiltIn SampleMask
+                              Decorate 13(gl_SampleMaskIn) Flat
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
diff --git a/Test/baseResults/spv.atomiAddEXT.task.out b/Test/baseResults/spv.atomiAddEXT.task.out
index 9ff35aa..22848ad 100644
--- a/Test/baseResults/spv.atomiAddEXT.task.out
+++ b/Test/baseResults/spv.atomiAddEXT.task.out
@@ -23,17 +23,18 @@
                               Name 26  "taskBlock"
                               MemberName 26(taskBlock) 0  "atom1"
                               Name 28  "mytask"
+                              Decorate 7(Buffer) Block
                               MemberDecorate 7(Buffer) 0 Coherent
                               MemberDecorate 7(Buffer) 0 Offset 0
-                              Decorate 7(Buffer) Block
-                              Decorate 9 DescriptorSet 0
+                              Decorate 9 Coherent
                               Decorate 9 Binding 1
+                              Decorate 9 DescriptorSet 0
                               Decorate 19 ArrayStride 4
                               MemberDecorate 20(structType) 0 Offset 0
-                              MemberDecorate 21(t2) 0 Offset 0
                               Decorate 21(t2) Block
-                              Decorate 23(t) DescriptorSet 0
+                              MemberDecorate 21(t2) 0 Offset 0
                               Decorate 23(t) Binding 0
+                              Decorate 23(t) DescriptorSet 0
                               Decorate 33 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.atomic.comp.out b/Test/baseResults/spv.atomic.comp.out
index 7c001ae..22b297f 100644
--- a/Test/baseResults/spv.atomic.comp.out
+++ b/Test/baseResults/spv.atomic.comp.out
@@ -29,19 +29,20 @@
                               Name 71  "arrX"
                               Name 72  "arrY"
                               Name 73  "arrZ"
-                              Decorate 20(counter) Offset 0
-                              Decorate 20(counter) DescriptorSet 0
                               Decorate 20(counter) Binding 0
-                              Decorate 27(countArr) Offset 4
-                              Decorate 27(countArr) DescriptorSet 0
+                              Decorate 20(counter) DescriptorSet 0
+                              Decorate 20(counter) Offset 0
                               Decorate 27(countArr) Binding 0
+                              Decorate 27(countArr) DescriptorSet 0
+                              Decorate 27(countArr) Offset 4
+                              Decorate 62(dataSSB) BufferBlock
                               MemberDecorate 62(dataSSB) 0 Restrict
                               MemberDecorate 62(dataSSB) 0 Offset 0
                               MemberDecorate 62(dataSSB) 1 Restrict
                               MemberDecorate 62(dataSSB) 1 Offset 16
-                              Decorate 62(dataSSB) BufferBlock
-                              Decorate 64(result) DescriptorSet 0
+                              Decorate 64(result) Restrict
                               Decorate 64(result) Binding 0
+                              Decorate 64(result) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
diff --git a/Test/baseResults/spv.atomicAdd.bufferReference.comp.out b/Test/baseResults/spv.atomicAdd.bufferReference.comp.out
index a00c45a..31edb5e 100644
--- a/Test/baseResults/spv.atomicAdd.bufferReference.comp.out
+++ b/Test/baseResults/spv.atomicAdd.bufferReference.comp.out
@@ -56,25 +56,25 @@
                               MemberName 179(Fail) 0  "x"
                               Name 181  "fail"
                               Decorate 17 ArrayStride 4
-                              MemberDecorate 18(PayloadRef) 0 Offset 0
                               Decorate 18(PayloadRef) Block
+                              MemberDecorate 18(PayloadRef) 0 Offset 0
                               Decorate 20(payload) DecorationAliasedPointerEXT
+                              Decorate 22(PC) Block
                               MemberDecorate 22(PC) 0 Offset 0
                               MemberDecorate 22(PC) 1 Offset 8
-                              Decorate 22(PC) Block
                               Decorate 23 ArrayStride 4
-                              MemberDecorate 24(GuardRef) 0 Offset 0
                               Decorate 24(GuardRef) Block
+                              MemberDecorate 24(GuardRef) 0 Offset 0
                               Decorate 37(gl_GlobalInvocationID) BuiltIn GlobalInvocationId
                               Decorate 43(DIM) SpecId 0
                               Decorate 44(NUM_WORKGROUP_EACH_DIM) SpecId 1
                               Decorate 81(gl_WorkGroupID) BuiltIn WorkgroupId
                               Decorate 133(gl_LocalInvocationID) BuiltIn LocalInvocationId
                               Decorate 178 ArrayStride 4
-                              MemberDecorate 179(Fail) 0 Offset 0
                               Decorate 179(Fail) Block
-                              Decorate 181(fail) DescriptorSet 0
+                              MemberDecorate 179(Fail) 0 Offset 0
                               Decorate 181(fail) Binding 2
+                              Decorate 181(fail) DescriptorSet 0
                               Decorate 185 SpecId 0
                               Decorate 186 SpecId 0
                               Decorate 187 BuiltIn WorkgroupSize
diff --git a/Test/baseResults/spv.atomicFloat.comp.out b/Test/baseResults/spv.atomicFloat.comp.out
index acb5d81..c7b8f48 100644
--- a/Test/baseResults/spv.atomicFloat.comp.out
+++ b/Test/baseResults/spv.atomicFloat.comp.out
@@ -38,35 +38,35 @@
                               Name 352  "fimageCube"
                               Name 392  "fimageCubeArray"
                               Name 430  "fimage3D"
+                              Decorate 25(Buffer) BufferBlock
                               MemberDecorate 25(Buffer) 0 Offset 0
                               MemberDecorate 25(Buffer) 1 Offset 8
-                              Decorate 25(Buffer) BufferBlock
-                              Decorate 27(buf) DescriptorSet 0
                               Decorate 27(buf) Binding 0
+                              Decorate 27(buf) DescriptorSet 0
                               Decorate 143(fimage1D) Location 0
-                              Decorate 143(fimage1D) DescriptorSet 0
                               Decorate 143(fimage1D) Binding 0
+                              Decorate 143(fimage1D) DescriptorSet 0
                               Decorate 189(fimage1DArray) Location 1
-                              Decorate 189(fimage1DArray) DescriptorSet 0
                               Decorate 189(fimage1DArray) Binding 1
+                              Decorate 189(fimage1DArray) DescriptorSet 0
                               Decorate 232(fimage2D) Location 2
-                              Decorate 232(fimage2D) DescriptorSet 0
                               Decorate 232(fimage2D) Binding 2
+                              Decorate 232(fimage2D) DescriptorSet 0
                               Decorate 270(fimage2DRect) Location 4
-                              Decorate 270(fimage2DRect) DescriptorSet 0
                               Decorate 270(fimage2DRect) Binding 4
+                              Decorate 270(fimage2DRect) DescriptorSet 0
                               Decorate 308(fimage2DArray) Location 3
-                              Decorate 308(fimage2DArray) DescriptorSet 0
                               Decorate 308(fimage2DArray) Binding 3
+                              Decorate 308(fimage2DArray) DescriptorSet 0
                               Decorate 352(fimageCube) Location 5
-                              Decorate 352(fimageCube) DescriptorSet 0
                               Decorate 352(fimageCube) Binding 5
+                              Decorate 352(fimageCube) DescriptorSet 0
                               Decorate 392(fimageCubeArray) Location 6
-                              Decorate 392(fimageCubeArray) DescriptorSet 0
                               Decorate 392(fimageCubeArray) Binding 6
+                              Decorate 392(fimageCubeArray) DescriptorSet 0
                               Decorate 430(fimage3D) Location 7
-                              Decorate 430(fimage3D) DescriptorSet 0
                               Decorate 430(fimage3D) Binding 9
+                              Decorate 430(fimage3D) DescriptorSet 0
                               Decorate 469 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.atomicInt64.comp.out b/Test/baseResults/spv.atomicInt64.comp.out
index 24805cc..2464e50 100644
--- a/Test/baseResults/spv.atomicInt64.comp.out
+++ b/Test/baseResults/spv.atomicInt64.comp.out
@@ -24,11 +24,11 @@
                               MemberName 84(Struct) 0  "i64"
                               MemberName 84(Struct) 1  "u64"
                               Name 86  "s"
+                              Decorate 14(Buffer) BufferBlock
                               MemberDecorate 14(Buffer) 0 Offset 0
                               MemberDecorate 14(Buffer) 1 Offset 8
-                              Decorate 14(Buffer) BufferBlock
-                              Decorate 16(buf) DescriptorSet 0
                               Decorate 16(buf) Binding 0
+                              Decorate 16(buf) DescriptorSet 0
                               Decorate 148 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.atomicStoreInt64.comp.out b/Test/baseResults/spv.atomicStoreInt64.comp.out
index c2b3f30..9114bc3 100644
--- a/Test/baseResults/spv.atomicStoreInt64.comp.out
+++ b/Test/baseResults/spv.atomicStoreInt64.comp.out
@@ -21,14 +21,14 @@
                               Name 14  "ubo"
                               MemberName 14(ubo) 0  "z"
                               Name 16  ""
-                              MemberDecorate 7(ssbo) 0 Offset 0
                               Decorate 7(ssbo) BufferBlock
-                              Decorate 9 DescriptorSet 0
+                              MemberDecorate 7(ssbo) 0 Offset 0
                               Decorate 9 Binding 0
-                              MemberDecorate 14(ubo) 0 Offset 0
+                              Decorate 9 DescriptorSet 0
                               Decorate 14(ubo) Block
-                              Decorate 16 DescriptorSet 0
+                              MemberDecorate 14(ubo) 0 Offset 0
                               Decorate 16 Binding 1
+                              Decorate 16 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 64 0
diff --git a/Test/baseResults/spv.bool.vert.out b/Test/baseResults/spv.bool.vert.out
index 265d900..dbab698 100644
--- a/Test/baseResults/spv.bool.vert.out
+++ b/Test/baseResults/spv.bool.vert.out
@@ -21,15 +21,15 @@
                               MemberName 27(ubname) 0  "b"
                               Name 29  "ubinst"
                               Name 30  "param"
+                              Decorate 22(gl_PerVertex) Block
                               MemberDecorate 22(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 22(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 22(gl_PerVertex) 2 BuiltIn ClipDistance
                               MemberDecorate 22(gl_PerVertex) 3 BuiltIn CullDistance
-                              Decorate 22(gl_PerVertex) Block
-                              MemberDecorate 27(ubname) 0 Offset 0
                               Decorate 27(ubname) Block
-                              Decorate 29(ubinst) DescriptorSet 0
+                              MemberDecorate 27(ubname) 0 Offset 0
                               Decorate 29(ubinst) Binding 0
+                              Decorate 29(ubinst) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeBool
diff --git a/Test/baseResults/spv.boolInBlock.frag.out b/Test/baseResults/spv.boolInBlock.frag.out
index c234cb4..9db304a 100644
--- a/Test/baseResults/spv.boolInBlock.frag.out
+++ b/Test/baseResults/spv.boolInBlock.frag.out
@@ -23,14 +23,14 @@
                               Name 60  "param"
                               Name 66  "param"
                               Name 74  "fragColor"
-                              MemberDecorate 25(Buffer) 0 Offset 0
                               Decorate 25(Buffer) BufferBlock
-                              Decorate 27 DescriptorSet 0
+                              MemberDecorate 25(Buffer) 0 Offset 0
                               Decorate 27 Binding 1
-                              MemberDecorate 40(Uniform) 0 Offset 0
+                              Decorate 27 DescriptorSet 0
                               Decorate 40(Uniform) Block
-                              Decorate 42 DescriptorSet 0
+                              MemberDecorate 40(Uniform) 0 Offset 0
                               Decorate 42 Binding 0
+                              Decorate 42 DescriptorSet 0
                               Decorate 74(fragColor) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.branch-return.vert.out b/Test/baseResults/spv.branch-return.vert.out
index 53ef876..86df58a 100644
--- a/Test/baseResults/spv.branch-return.vert.out
+++ b/Test/baseResults/spv.branch-return.vert.out
@@ -15,9 +15,9 @@
                               MemberName 18(gl_PerVertex) 1  "gl_PointSize"
                               Name 20  ""
                               Decorate 8(gl_InstanceIndex) BuiltIn InstanceIndex
+                              Decorate 18(gl_PerVertex) Block
                               MemberDecorate 18(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 18(gl_PerVertex) 1 BuiltIn PointSize
-                              Decorate 18(gl_PerVertex) Block
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
diff --git a/Test/baseResults/spv.buffer.autoassign.frag.out b/Test/baseResults/spv.buffer.autoassign.frag.out
index 3afe643..0ccd840 100644
--- a/Test/baseResults/spv.buffer.autoassign.frag.out
+++ b/Test/baseResults/spv.buffer.autoassign.frag.out
@@ -25,19 +25,19 @@
                               MemberName 34(MyUB3) 0  "g_d"
                               Name 36  ""
                               Name 47  "@entryPointOutput.Color"
+                              Decorate 16(MyUB1) Block
                               MemberDecorate 16(MyUB1) 0 Offset 0
                               MemberDecorate 16(MyUB1) 1 Offset 4
-                              Decorate 16(MyUB1) Block
-                              Decorate 18 DescriptorSet 0
                               Decorate 18 Binding 20
-                              MemberDecorate 28(MyUB2) 0 Offset 0
+                              Decorate 18 DescriptorSet 0
                               Decorate 28(MyUB2) Block
-                              Decorate 30 DescriptorSet 0
+                              MemberDecorate 28(MyUB2) 0 Offset 0
                               Decorate 30 Binding 15
-                              MemberDecorate 34(MyUB3) 0 Offset 0
+                              Decorate 30 DescriptorSet 0
                               Decorate 34(MyUB3) Block
-                              Decorate 36 DescriptorSet 0
+                              MemberDecorate 34(MyUB3) 0 Offset 0
                               Decorate 36 Binding 16
+                              Decorate 36 DescriptorSet 0
                               Decorate 47(@entryPointOutput.Color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.bufferhandle1.frag.out b/Test/baseResults/spv.bufferhandle1.frag.out
index c44ad2a..6fb4dcc 100644
--- a/Test/baseResults/spv.bufferhandle1.frag.out
+++ b/Test/baseResults/spv.bufferhandle1.frag.out
@@ -29,10 +29,11 @@
                               MemberName 13(blockType) 6  "g"
                               Name 15  "t"
                               Name 28  "j"
+                              Decorate 7(t2) Block
                               MemberDecorate 7(t2) 0 Offset 0
                               MemberDecorate 7(t2) 1 Offset 8
-                              Decorate 7(t2) Block
                               Decorate 11 ArrayStride 4
+                              Decorate 13(blockType) Block
                               MemberDecorate 13(blockType) 0 Offset 0
                               MemberDecorate 13(blockType) 1 Offset 4
                               MemberDecorate 13(blockType) 2 Offset 8
@@ -40,9 +41,8 @@
                               MemberDecorate 13(blockType) 4 Offset 16
                               MemberDecorate 13(blockType) 5 Offset 32
                               MemberDecorate 13(blockType) 6 Offset 48
-                              Decorate 13(blockType) Block
-                              Decorate 15(t) DescriptorSet 0
                               Decorate 15(t) Binding 0
+                              Decorate 15(t) DescriptorSet 0
                               Decorate 28(j) DecorationAliasedPointerEXT
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.bufferhandle10.frag.out b/Test/baseResults/spv.bufferhandle10.frag.out
index 93c3f70..d2b8719 100644
--- a/Test/baseResults/spv.bufferhandle10.frag.out
+++ b/Test/baseResults/spv.bufferhandle10.frag.out
@@ -25,13 +25,13 @@
                               Name 19  "i"
                               Name 28  "b"
                               Name 34  "b2"
-                              MemberDecorate 7(t2) 0 Offset 0
                               Decorate 7(t2) Block
+                              MemberDecorate 7(t2) 0 Offset 0
                               Decorate 9 ArrayStride 4
-                              MemberDecorate 10(blockType) 0 Offset 0
                               Decorate 10(blockType) Block
-                              Decorate 12(t) DescriptorSet 0
+                              MemberDecorate 10(blockType) 0 Offset 0
                               Decorate 12(t) Binding 0
+                              Decorate 12(t) DescriptorSet 0
                               Decorate 19(i) Flat
                               Decorate 19(i) Location 0
                               Decorate 28(b) DecorationAliasedPointerEXT
diff --git a/Test/baseResults/spv.bufferhandle11.frag.out b/Test/baseResults/spv.bufferhandle11.frag.out
index eec3cf3..a24406b 100644
--- a/Test/baseResults/spv.bufferhandle11.frag.out
+++ b/Test/baseResults/spv.bufferhandle11.frag.out
@@ -35,14 +35,14 @@
                               Name 48  "AcBlock"
                               MemberName 48(AcBlock) 0  "ac_numPassed"
                               Name 50  ""
-                              MemberDecorate 26(PC) 0 Offset 0
                               Decorate 26(PC) Block
-                              MemberDecorate 28(Block) 0 Offset 0
+                              MemberDecorate 26(PC) 0 Offset 0
                               Decorate 28(Block) Block
-                              MemberDecorate 48(AcBlock) 0 Offset 0
+                              MemberDecorate 28(Block) 0 Offset 0
                               Decorate 48(AcBlock) Block
-                              Decorate 50 DescriptorSet 0
+                              MemberDecorate 48(AcBlock) 0 Offset 0
                               Decorate 50 Binding 0
+                              Decorate 50 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
diff --git a/Test/baseResults/spv.bufferhandle12.frag.out b/Test/baseResults/spv.bufferhandle12.frag.out
index 319684f..66ba75a 100644
--- a/Test/baseResults/spv.bufferhandle12.frag.out
+++ b/Test/baseResults/spv.bufferhandle12.frag.out
@@ -67,26 +67,26 @@
                               Name 167  "AcBlock"
                               MemberName 167(AcBlock) 0  "ac_numPassed"
                               Name 169  ""
+                              Decorate 139(PC) Block
                               MemberDecorate 139(PC) 0 Offset 0
                               MemberDecorate 139(PC) 1 Offset 8
                               MemberDecorate 139(PC) 2 Offset 16
-                              Decorate 139(PC) Block
+                              Decorate 141(BlockB) Block
                               MemberDecorate 141(BlockB) 0 Offset 0
                               MemberDecorate 141(BlockB) 1 Offset 8
-                              Decorate 141(BlockB) Block
-                              MemberDecorate 142(BlockC) 0 ColMajor
-                              MemberDecorate 142(BlockC) 0 RelaxedPrecision
-                              MemberDecorate 142(BlockC) 0 Offset 0
-                              MemberDecorate 142(BlockC) 0 MatrixStride 16
                               Decorate 142(BlockC) Block
+                              MemberDecorate 142(BlockC) 0 RelaxedPrecision
+                              MemberDecorate 142(BlockC) 0 ColMajor
+                              MemberDecorate 142(BlockC) 0 MatrixStride 16
+                              MemberDecorate 142(BlockC) 0 Offset 0
+                              Decorate 143(BlockD) Block
                               MemberDecorate 143(BlockD) 0 RelaxedPrecision
                               MemberDecorate 143(BlockD) 0 Offset 0
-                              Decorate 143(BlockD) Block
                               Decorate 160 RelaxedPrecision
-                              MemberDecorate 167(AcBlock) 0 Offset 0
                               Decorate 167(AcBlock) Block
-                              Decorate 169 DescriptorSet 0
+                              MemberDecorate 167(AcBlock) 0 Offset 0
                               Decorate 169 Binding 0
+                              Decorate 169 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.bufferhandle13.frag.out b/Test/baseResults/spv.bufferhandle13.frag.out
index dd43089..90e715a 100644
--- a/Test/baseResults/spv.bufferhandle13.frag.out
+++ b/Test/baseResults/spv.bufferhandle13.frag.out
@@ -33,24 +33,25 @@
                               Name 52  "param"
                               Name 56  "g1"
                               Name 57  "g2"
-                              MemberDecorate 8(t4) 0 Offset 0
                               Decorate 8(t4) Block
+                              MemberDecorate 8(t4) 0 Offset 0
                               Decorate 10(y) Aliased
                               Decorate 15(y) DecorationAliasedPointerEXT
                               Decorate 18(y) Restrict
-                              Decorate 18(y) Restrict
                               Decorate 21(y) Restrict
                               Decorate 21(y) DecorationRestrictPointerEXT
                               Decorate 34(a) DecorationAliasedPointerEXT
-                              MemberDecorate 35(t5) 0 Offset 0
                               Decorate 35(t5) Block
-                              Decorate 37(s5) DescriptorSet 0
+                              MemberDecorate 35(t5) 0 Offset 0
                               Decorate 37(s5) Binding 0
+                              Decorate 37(s5) DescriptorSet 0
+                              Decorate 42(b) Restrict
                               Decorate 42(b) DecorationRestrictPointerEXT
-                              Decorate 56(g1) DecorationAliasedPointerEXT
-                              Decorate 57(g2) DecorationRestrictPointerEXT
                               Decorate 47(param) DecorationAliasedPointerEXT
                               Decorate 52(param) DecorationAliasedPointerEXT
+                              Decorate 56(g1) DecorationAliasedPointerEXT
+                              Decorate 57(g2) Restrict
+                              Decorate 57(g2) DecorationRestrictPointerEXT
                2:             TypeVoid
                3:             TypeFunction 2
                               TypeForwardPointer 6 PhysicalStorageBufferEXT
diff --git a/Test/baseResults/spv.bufferhandle14.frag.out b/Test/baseResults/spv.bufferhandle14.frag.out
index 4f994e1..c106924 100644
--- a/Test/baseResults/spv.bufferhandle14.frag.out
+++ b/Test/baseResults/spv.bufferhandle14.frag.out
@@ -33,25 +33,25 @@
                               MemberName 38(T4) 1  "j"
                               MemberName 38(T4) 2  "k"
                               Name 40  "t4"
+                              Decorate 8(T1) Block
                               MemberDecorate 8(T1) 0 Offset 0
                               MemberDecorate 8(T1) 1 Offset 4
                               MemberDecorate 8(T1) 2 Offset 8
-                              Decorate 8(T1) Block
                               Decorate 10(t1) DecorationAliasedPointerEXT
+                              Decorate 20(T2) Block
                               MemberDecorate 20(T2) 0 Offset 0
                               MemberDecorate 20(T2) 1 Offset 4
                               MemberDecorate 20(T2) 2 Offset 8
-                              Decorate 20(T2) Block
                               Decorate 22(t2) DecorationAliasedPointerEXT
+                              Decorate 29(T3) Block
                               MemberDecorate 29(T3) 0 Offset 0
                               MemberDecorate 29(T3) 1 Offset 4
                               MemberDecorate 29(T3) 2 Offset 8
-                              Decorate 29(T3) Block
                               Decorate 31(t3) DecorationAliasedPointerEXT
+                              Decorate 38(T4) Block
                               MemberDecorate 38(T4) 0 Offset 0
                               MemberDecorate 38(T4) 1 Offset 4
                               MemberDecorate 38(T4) 2 Offset 8
-                              Decorate 38(T4) Block
                               Decorate 40(t4) DecorationAliasedPointerEXT
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.bufferhandle15.frag.out b/Test/baseResults/spv.bufferhandle15.frag.out
index 34d3d59..6bd429a 100644
--- a/Test/baseResults/spv.bufferhandle15.frag.out
+++ b/Test/baseResults/spv.bufferhandle15.frag.out
@@ -36,29 +36,29 @@
                               Name 31  "t4"
                               Name 37  "i"
                               Name 52  "z"
+                              Decorate 13(T4) Block
                               MemberDecorate 13(T4) 0 Offset 0
                               MemberDecorate 13(T4) 1 Offset 8
                               MemberDecorate 13(T4) 2 Offset 16
-                              Decorate 13(T4) Block
                               Decorate 14 ArrayStride 12
-                              MemberDecorate 15(T1) 0 Offset 0
                               Decorate 15(T1) Block
+                              MemberDecorate 15(T1) 0 Offset 0
                               Decorate 18 ArrayStride 12
                               Decorate 20 ArrayStride 24
                               Decorate 21 ArrayStride 96
-                              MemberDecorate 22(T2) 0 Offset 0
                               Decorate 22(T2) Block
+                              MemberDecorate 22(T2) 0 Offset 0
                               Decorate 26 ArrayStride 36
                               MemberDecorate 28(S) 0 Offset 0
-                              MemberDecorate 28(S) 1 ColMajor
                               MemberDecorate 28(S) 1 RelaxedPrecision
-                              MemberDecorate 28(S) 1 Offset 12
+                              MemberDecorate 28(S) 1 ColMajor
                               MemberDecorate 28(S) 1 MatrixStride 12
+                              MemberDecorate 28(S) 1 Offset 12
                               MemberDecorate 28(S) 2 Offset 156
-                              MemberDecorate 29(T3) 0 Offset 0
                               Decorate 29(T3) Block
-                              Decorate 31(t4) DescriptorSet 0
+                              MemberDecorate 29(T3) 0 Offset 0
                               Decorate 31(t4) Binding 0
+                              Decorate 31(t4) DescriptorSet 0
                               Decorate 37(i) Flat
                               Decorate 37(i) Location 0
                               Decorate 59 RelaxedPrecision
diff --git a/Test/baseResults/spv.bufferhandle16.frag.out b/Test/baseResults/spv.bufferhandle16.frag.out
index ee04d36..4952b3d 100644
--- a/Test/baseResults/spv.bufferhandle16.frag.out
+++ b/Test/baseResults/spv.bufferhandle16.frag.out
@@ -26,9 +26,9 @@
                               Name 26  "e"
                               Name 29  "f"
                               Name 46  "x"
+                              Decorate 9(T1) Block
                               MemberDecorate 9(T1) 0 Offset 0
                               MemberDecorate 9(T1) 1 Offset 4
-                              Decorate 9(T1) Block
                               Decorate 11(a) DecorationAliasedPointerEXT
                               Decorate 15(b) DecorationAliasedPointerEXT
                               Decorate 18(c) DecorationAliasedPointerEXT
diff --git a/Test/baseResults/spv.bufferhandle18.frag.out b/Test/baseResults/spv.bufferhandle18.frag.out
index 97c961a..981a50e 100644
--- a/Test/baseResults/spv.bufferhandle18.frag.out
+++ b/Test/baseResults/spv.bufferhandle18.frag.out
@@ -37,9 +37,9 @@
                               Name 180  "m"
                               Name 190  "x"
                               Name 195  "buf"
+                              Decorate 9(T1) Block
                               MemberDecorate 9(T1) 0 Offset 0
                               MemberDecorate 9(T1) 1 Offset 4
-                              Decorate 9(T1) Block
                               Decorate 11(a) DecorationAliasedPointerEXT
                               Decorate 15(b) DecorationAliasedPointerEXT
                               Decorate 18(c) DecorationAliasedPointerEXT
@@ -49,8 +49,8 @@
                               Decorate 59(arr) DecorationAliasedPointerEXT
                               Decorate 130(j) DecorationAliasedPointerEXT
                               Decorate 153(k) DecorationAliasedPointerEXT
-                              MemberDecorate 178(T2) 0 Offset 0
                               Decorate 178(T2) Block
+                              MemberDecorate 178(T2) 0 Offset 0
                               Decorate 180(m) DecorationAliasedPointerEXT
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.bufferhandle2.frag.out b/Test/baseResults/spv.bufferhandle2.frag.out
index 31a39f2..78bcfc0 100644
--- a/Test/baseResults/spv.bufferhandle2.frag.out
+++ b/Test/baseResults/spv.bufferhandle2.frag.out
@@ -27,18 +27,18 @@
                               Name 16  "t"
                               Name 34  "b2"
                               Name 37  "b3"
+                              Decorate 8(blockType) Block
                               MemberDecorate 8(blockType) 0 Offset 0
                               MemberDecorate 8(blockType) 1 Offset 4
                               MemberDecorate 8(blockType) 2 Offset 8
                               MemberDecorate 8(blockType) 3 Offset 12
                               MemberDecorate 8(blockType) 4 Offset 16
-                              Decorate 8(blockType) Block
                               Decorate 13(b1) DecorationAliasedPointerEXT
+                              Decorate 14(t2) Block
                               MemberDecorate 14(t2) 0 Offset 0
                               MemberDecorate 14(t2) 1 Offset 8
-                              Decorate 14(t2) Block
-                              Decorate 16(t) DescriptorSet 0
                               Decorate 16(t) Binding 0
+                              Decorate 16(t) DescriptorSet 0
                               Decorate 34(b2) DecorationAliasedPointerEXT
                               Decorate 37(b3) DecorationAliasedPointerEXT
                2:             TypeVoid
diff --git a/Test/baseResults/spv.bufferhandle3.frag.out b/Test/baseResults/spv.bufferhandle3.frag.out
index 9f66b5c..0a2ab45 100644
--- a/Test/baseResults/spv.bufferhandle3.frag.out
+++ b/Test/baseResults/spv.bufferhandle3.frag.out
@@ -30,25 +30,25 @@
                               MemberName 38(t4) 1  "k"
                               Name 40  "x"
                               Name 42  "k"
+                              Decorate 9(t4) Block
                               MemberDecorate 9(t4) 0 Offset 0
                               MemberDecorate 9(t4) 1 Offset 8
-                              Decorate 9(t4) Block
-                              MemberDecorate 10(t3) 0 Offset 0
                               Decorate 10(t3) Block
+                              MemberDecorate 10(t3) 0 Offset 0
                               Decorate 13(y) DecorationAliasedPointerEXT
-                              MemberDecorate 19(t5) 0 Offset 0
                               Decorate 19(t5) Block
-                              Decorate 21(s5) DescriptorSet 0
+                              MemberDecorate 19(t5) 0 Offset 0
                               Decorate 21(s5) Binding 0
+                              Decorate 21(s5) DescriptorSet 0
+                              Decorate 23(param) DecorationAliasedPointerEXT
+                              Decorate 38(t4) Block
                               MemberDecorate 38(t4) 0 Offset 0
                               MemberDecorate 38(t4) 1 Offset 8
-                              Decorate 38(t4) Block
-                              Decorate 40(x) DescriptorSet 1
                               Decorate 40(x) Binding 2
+                              Decorate 40(x) DescriptorSet 1
                               Decorate 42(k) Flat
                               Decorate 42(k) Location 0
                               Decorate 42(k) DecorationAliasedPointerEXT
-                              Decorate 23(param) DecorationAliasedPointerEXT
                2:             TypeVoid
                3:             TypeFunction 2
                               TypeForwardPointer 6 PhysicalStorageBufferEXT
diff --git a/Test/baseResults/spv.bufferhandle4.frag.out b/Test/baseResults/spv.bufferhandle4.frag.out
index 1ccb609..42b34b7 100644
--- a/Test/baseResults/spv.bufferhandle4.frag.out
+++ b/Test/baseResults/spv.bufferhandle4.frag.out
@@ -28,21 +28,21 @@
                               MemberName 19(t5) 0  "m"
                               Name 21  "s5"
                               Name 43  "b"
+                              Decorate 8(t4) Block
                               MemberDecorate 8(t4) 0 Offset 0
                               MemberDecorate 8(t4) 1 Offset 8
-                              Decorate 8(t4) Block
+                              Decorate 10(t3) Block
                               MemberDecorate 10(t3) 0 Offset 0
                               MemberDecorate 10(t3) 1 Offset 8
-                              Decorate 10(t3) Block
+                              Decorate 11(t4) Block
                               MemberDecorate 11(t4) 0 Offset 0
                               MemberDecorate 11(t4) 1 Offset 8
-                              Decorate 11(t4) Block
-                              Decorate 13(x) DescriptorSet 1
                               Decorate 13(x) Binding 2
-                              MemberDecorate 19(t5) 0 Offset 0
+                              Decorate 13(x) DescriptorSet 1
                               Decorate 19(t5) Block
-                              Decorate 21(s5) DescriptorSet 0
+                              MemberDecorate 19(t5) 0 Offset 0
                               Decorate 21(s5) Binding 0
+                              Decorate 21(s5) DescriptorSet 0
                               Decorate 47 DecorationAliasedPointerEXT
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.bufferhandle5.frag.out b/Test/baseResults/spv.bufferhandle5.frag.out
index 0bcb34b..cce131d 100644
--- a/Test/baseResults/spv.bufferhandle5.frag.out
+++ b/Test/baseResults/spv.bufferhandle5.frag.out
@@ -19,13 +19,13 @@
                               Name 9  "t3"
                               MemberName 9(t3) 0  "h"
                               Name 11  "x"
+                              Decorate 8(t4) Block
                               MemberDecorate 8(t4) 0 Offset 0
                               MemberDecorate 8(t4) 1 Offset 8
-                              Decorate 8(t4) Block
-                              MemberDecorate 9(t3) 0 Offset 0
                               Decorate 9(t3) Block
-                              Decorate 11(x) DescriptorSet 1
+                              MemberDecorate 9(t3) 0 Offset 0
                               Decorate 11(x) Binding 2
+                              Decorate 11(x) DescriptorSet 1
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
diff --git a/Test/baseResults/spv.bufferhandle6.frag.out b/Test/baseResults/spv.bufferhandle6.frag.out
index 758a30b..89749cd 100644
--- a/Test/baseResults/spv.bufferhandle6.frag.out
+++ b/Test/baseResults/spv.bufferhandle6.frag.out
@@ -34,26 +34,26 @@
                               Name 154  "gl_FragCoord"
                               Decorate 12 ArrayStride 4
                               Decorate 14 ArrayStride 8
+                              Decorate 15(T1) Block
                               MemberDecorate 15(T1) 0 Offset 0
                               MemberDecorate 15(T1) 1 Offset 32
                               MemberDecorate 15(T1) 2 Offset 48
                               MemberDecorate 15(T1) 3 Offset 80
-                              Decorate 15(T1) Block
                               Decorate 16 ArrayStride 4
                               Decorate 17 ArrayStride 8
+                              Decorate 18(T1) Block
                               MemberDecorate 18(T1) 0 Offset 0
                               MemberDecorate 18(T1) 1 Offset 32
                               MemberDecorate 18(T1) 2 Offset 48
                               MemberDecorate 18(T1) 3 Offset 80
-                              Decorate 18(T1) Block
                               Decorate 19 ArrayStride 8
-                              Decorate 21(x) DescriptorSet 3
                               Decorate 21(x) Binding 1
+                              Decorate 21(x) DescriptorSet 3
                               Decorate 29 ArrayStride 4
-                              MemberDecorate 30(Block) 0 Offset 0
                               Decorate 30(Block) Block
-                              Decorate 149(image0_0) DescriptorSet 3
+                              MemberDecorate 30(Block) 0 Offset 0
                               Decorate 149(image0_0) Binding 0
+                              Decorate 149(image0_0) DescriptorSet 3
                               Decorate 154(gl_FragCoord) BuiltIn FragCoord
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.bufferhandle7.frag.out b/Test/baseResults/spv.bufferhandle7.frag.out
index 070adb7..6af3efb 100644
--- a/Test/baseResults/spv.bufferhandle7.frag.out
+++ b/Test/baseResults/spv.bufferhandle7.frag.out
@@ -30,24 +30,24 @@
                               MemberName 15(t2) 0  "f"
                               MemberName 15(t2) 1  "g"
                               Name 17  "u"
+                              Decorate 7(t2) Block
                               MemberDecorate 7(t2) 0 Offset 0
                               MemberDecorate 7(t2) 1 Offset 8
-                              Decorate 7(t2) Block
+                              Decorate 9(blockType) Block
                               MemberDecorate 9(blockType) 0 Offset 0
                               MemberDecorate 9(blockType) 1 Offset 4
                               MemberDecorate 9(blockType) 2 Offset 8
                               MemberDecorate 9(blockType) 3 Offset 12
                               MemberDecorate 9(blockType) 4 Offset 16
-                              Decorate 9(blockType) Block
-                              Decorate 11(t) DescriptorSet 0
                               Decorate 11(t) Binding 0
-                              MemberDecorate 14(t3) 0 Offset 0
+                              Decorate 11(t) DescriptorSet 0
                               Decorate 14(t3) Block
+                              MemberDecorate 14(t3) 0 Offset 0
+                              Decorate 15(t2) Block
                               MemberDecorate 15(t2) 0 Offset 0
                               MemberDecorate 15(t2) 1 Offset 8
-                              Decorate 15(t2) Block
-                              Decorate 17(u) DescriptorSet 0
                               Decorate 17(u) Binding 1
+                              Decorate 17(u) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                               TypeForwardPointer 6 PhysicalStorageBufferEXT
diff --git a/Test/baseResults/spv.bufferhandle8.frag.out b/Test/baseResults/spv.bufferhandle8.frag.out
index 52eec11..7a717b0 100644
--- a/Test/baseResults/spv.bufferhandle8.frag.out
+++ b/Test/baseResults/spv.bufferhandle8.frag.out
@@ -38,29 +38,29 @@
                               MemberName 36(blockType) 3  "d"
                               MemberName 36(blockType) 4  "e"
                               Name 38  "t"
-                              MemberDecorate 10(T1) 0 Offset 0
                               Decorate 10(T1) Block
-                              MemberDecorate 11(T2) 0 Offset 0
+                              MemberDecorate 10(T1) 0 Offset 0
                               Decorate 11(T2) Block
+                              MemberDecorate 11(T2) 0 Offset 0
+                              Decorate 13(x) DecorationAliasedPointerEXT
                               MemberDecorate 14(Blah) 0 Offset 0
                               MemberDecorate 14(Blah) 1 Offset 8
                               Decorate 15 ArrayStride 16
-                              MemberDecorate 16(T3) 0 Offset 0
                               Decorate 16(T3) Block
-                              Decorate 18(t3) DescriptorSet 0
+                              MemberDecorate 16(T3) 0 Offset 0
                               Decorate 18(t3) Binding 0
+                              Decorate 18(t3) DescriptorSet 0
+                              Decorate 35(t2) Block
                               MemberDecorate 35(t2) 0 Offset 0
                               MemberDecorate 35(t2) 1 Offset 8
-                              Decorate 35(t2) Block
+                              Decorate 36(blockType) Block
                               MemberDecorate 36(blockType) 0 Offset 0
                               MemberDecorate 36(blockType) 1 Offset 4
                               MemberDecorate 36(blockType) 2 Offset 8
                               MemberDecorate 36(blockType) 3 Offset 12
                               MemberDecorate 36(blockType) 4 Offset 16
-                              Decorate 36(blockType) Block
-                              Decorate 38(t) DescriptorSet 0
                               Decorate 38(t) Binding 0
-                              Decorate 13(x) DecorationAliasedPointerEXT
+                              Decorate 38(t) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                               TypeForwardPointer 6 PhysicalStorageBufferEXT
diff --git a/Test/baseResults/spv.bufferhandle9.frag.out b/Test/baseResults/spv.bufferhandle9.frag.out
index ff7ede7..e094605 100644
--- a/Test/baseResults/spv.bufferhandle9.frag.out
+++ b/Test/baseResults/spv.bufferhandle9.frag.out
@@ -32,12 +32,12 @@
                               MemberName 53(t2) 0  "f"
                               MemberName 53(t2) 1  "g"
                               Name 55  "t"
+                              Decorate 8(blockType) Block
                               MemberDecorate 8(blockType) 0 Offset 0
                               MemberDecorate 8(blockType) 1 Offset 4
                               MemberDecorate 8(blockType) 2 Offset 8
                               MemberDecorate 8(blockType) 3 Offset 12
                               MemberDecorate 8(blockType) 4 Offset 16
-                              Decorate 8(blockType) Block
                               Decorate 13(b1) DecorationAliasedPointerEXT
                               Decorate 16(h) Flat
                               Decorate 16(h) Location 0
@@ -45,11 +45,11 @@
                               Decorate 19(i) Location 1
                               Decorate 34(b2) DecorationAliasedPointerEXT
                               Decorate 37(b3) DecorationAliasedPointerEXT
+                              Decorate 53(t2) Block
                               MemberDecorate 53(t2) 0 Offset 0
                               MemberDecorate 53(t2) 1 Offset 8
-                              Decorate 53(t2) Block
-                              Decorate 55(t) DescriptorSet 0
                               Decorate 55(t) Binding 0
+                              Decorate 55(t) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                               TypeForwardPointer 6 PhysicalStorageBufferEXT
diff --git a/Test/baseResults/spv.bufferhandleUvec2.frag.out b/Test/baseResults/spv.bufferhandleUvec2.frag.out
index 133190e..0ee138b 100644
--- a/Test/baseResults/spv.bufferhandleUvec2.frag.out
+++ b/Test/baseResults/spv.bufferhandleUvec2.frag.out
@@ -33,12 +33,12 @@
                               MemberName 68(t2) 0  "f"
                               MemberName 68(t2) 1  "g"
                               Name 70  "t"
+                              Decorate 8(blockType) Block
                               MemberDecorate 8(blockType) 0 Offset 0
                               MemberDecorate 8(blockType) 1 Offset 4
                               MemberDecorate 8(blockType) 2 Offset 8
                               MemberDecorate 8(blockType) 3 Offset 12
                               MemberDecorate 8(blockType) 4 Offset 16
-                              Decorate 8(blockType) Block
                               Decorate 13(b1) DecorationAliasedPointerEXT
                               Decorate 16(h) Flat
                               Decorate 16(h) Location 0
@@ -46,11 +46,11 @@
                               Decorate 19(i) Location 1
                               Decorate 34(b2) DecorationAliasedPointerEXT
                               Decorate 37(b3) DecorationAliasedPointerEXT
+                              Decorate 68(t2) Block
                               MemberDecorate 68(t2) 0 Offset 0
                               MemberDecorate 68(t2) 1 Offset 8
-                              Decorate 68(t2) Block
-                              Decorate 70(t) DescriptorSet 0
                               Decorate 70(t) Binding 0
+                              Decorate 70(t) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                               TypeForwardPointer 6 PhysicalStorageBufferEXT
diff --git a/Test/baseResults/spv.bufferhandle_Error.frag.out b/Test/baseResults/spv.bufferhandle_Error.frag.out
index 345bfa5..d2203b0 100644
--- a/Test/baseResults/spv.bufferhandle_Error.frag.out
+++ b/Test/baseResults/spv.bufferhandle_Error.frag.out
@@ -12,16 +12,18 @@
 ERROR: 0:14: 'output block' : not supported in this stage: fragment
 ERROR: 0:14: 'buffer_reference' : can only be used with buffer 
 ERROR: 0:14: 'buffer_reference' : can only be used with buffer 
-ERROR: 0:30: 'length' :  array must be declared with a size before using this method
-ERROR: 0:31: 'length' :  array must be declared with a size before using this method
-ERROR: 0:32: 'buffer reference indexing' : required extension not requested: GL_EXT_buffer_reference2
-ERROR: 0:32: '' : cannot index reference to buffer containing an unsized array 
-ERROR: 0:32: '' : cannot index buffer reference 
-ERROR: 0:36: '=' :  cannot convert from 'layout( column_major std430) buffer reference' to ' temp reference'
-ERROR: 0:41: 'assign' :  cannot convert from 'layout( column_major std430) buffer reference' to 'layout( column_major std430) buffer reference'
-ERROR: 0:42: 'assign' :  cannot convert from 'layout( column_major std430) buffer reference' to 'layout( column_major std430) buffer reference'
-ERROR: 0:43: 'assign' :  cannot convert from 'layout( column_major std430) buffer reference' to 'layout( column_major std430) buffer reference'
-ERROR: 0:46: '' :  syntax error, unexpected LEFT_BRACE, expecting COMMA or SEMICOLON
+WARNING: 0:20: 'bufType7' : the buffer_reference_align layout is ignored when defined in forward declaration 
+WARNING: 0:20: 'bufType7' : the packing layout (scalar, std430, etc) is ignored when defined in forward declaration 
+ERROR: 0:34: 'length' :  array must be declared with a size before using this method
+ERROR: 0:35: 'length' :  array must be declared with a size before using this method
+ERROR: 0:36: 'buffer reference indexing' : required extension not requested: GL_EXT_buffer_reference2
+ERROR: 0:36: '' : cannot index reference to buffer containing an unsized array 
+ERROR: 0:36: '' : cannot index buffer reference 
+ERROR: 0:40: '=' :  cannot convert from 'layout( column_major std430) buffer reference' to ' temp reference'
+ERROR: 0:45: 'assign' :  cannot convert from 'layout( column_major std430) buffer reference' to 'layout( column_major std430) buffer reference'
+ERROR: 0:46: 'assign' :  cannot convert from 'layout( column_major std430) buffer reference' to 'layout( column_major std430) buffer reference'
+ERROR: 0:47: 'assign' :  cannot convert from 'layout( column_major std430) buffer reference' to 'layout( column_major std430) buffer reference'
+ERROR: 0:50: '' :  syntax error, unexpected LEFT_BRACE, expecting COMMA or SEMICOLON
 ERROR: 23 compilation errors.  No code generated.
 
 
diff --git a/Test/baseResults/spv.builtInXFB.vert.out b/Test/baseResults/spv.builtInXFB.vert.out
index b3a3e12..68e5a7d 100644
--- a/Test/baseResults/spv.builtInXFB.vert.out
+++ b/Test/baseResults/spv.builtInXFB.vert.out
@@ -15,11 +15,11 @@
                               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
+                              MemberDecorate 8(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 8(gl_PerVertex) 0 Offset 20
+                              MemberDecorate 8(gl_PerVertex) 1 BuiltIn PointSize
+                              MemberDecorate 8(gl_PerVertex) 1 Offset 16
                               Decorate 10 XfbBuffer 1
                               Decorate 10 XfbStride 64
                2:             TypeVoid
diff --git a/Test/baseResults/spv.builtin.ShadingRateEXT.frag.out b/Test/baseResults/spv.builtin.ShadingRateEXT.frag.out
index 5707fb9..1729a16 100644
--- a/Test/baseResults/spv.builtin.ShadingRateEXT.frag.out
+++ b/Test/baseResults/spv.builtin.ShadingRateEXT.frag.out
@@ -19,8 +19,8 @@
                               Name 8  "val"
                               Name 10  "gl_ShadingRateEXT"
                               Decorate 8(val) Location 0
-                              Decorate 10(gl_ShadingRateEXT) Flat
                               Decorate 10(gl_ShadingRateEXT) BuiltIn ShadingRateKHR
+                              Decorate 10(gl_ShadingRateEXT) Flat
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
diff --git a/Test/baseResults/spv.computeShaderDerivatives.comp.out b/Test/baseResults/spv.computeShaderDerivatives.comp.out
index 4761078..789e05e 100644
--- a/Test/baseResults/spv.computeShaderDerivatives.comp.out
+++ b/Test/baseResults/spv.computeShaderDerivatives.comp.out
@@ -61,6 +61,7 @@
                               MemberName 10(block) 42  "v4X"
                               MemberName 10(block) 43  "v4Y"
                               Name 12  ""
+                              Decorate 10(block) BufferBlock
                               MemberDecorate 10(block) 0 Offset 0
                               MemberDecorate 10(block) 1 Offset 4
                               MemberDecorate 10(block) 2 Offset 8
@@ -105,9 +106,8 @@
                               MemberDecorate 10(block) 41 Offset 448
                               MemberDecorate 10(block) 42 Offset 464
                               MemberDecorate 10(block) 43 Offset 480
-                              Decorate 10(block) BufferBlock
-                              Decorate 12 DescriptorSet 0
                               Decorate 12 Binding 0
+                              Decorate 12 DescriptorSet 0
                               Decorate 211 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.computeShaderDerivatives2.comp.out b/Test/baseResults/spv.computeShaderDerivatives2.comp.out
index 52b5474..a520fc3 100644
--- a/Test/baseResults/spv.computeShaderDerivatives2.comp.out
+++ b/Test/baseResults/spv.computeShaderDerivatives2.comp.out
@@ -61,6 +61,7 @@
                               MemberName 10(block) 42  "v4X"
                               MemberName 10(block) 43  "v4Y"
                               Name 12  ""
+                              Decorate 10(block) BufferBlock
                               MemberDecorate 10(block) 0 Offset 0
                               MemberDecorate 10(block) 1 Offset 4
                               MemberDecorate 10(block) 2 Offset 8
@@ -105,9 +106,8 @@
                               MemberDecorate 10(block) 41 Offset 448
                               MemberDecorate 10(block) 42 Offset 464
                               MemberDecorate 10(block) 43 Offset 480
-                              Decorate 10(block) BufferBlock
-                              Decorate 12 DescriptorSet 0
                               Decorate 12 Binding 0
+                              Decorate 12 DescriptorSet 0
                               Decorate 211 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.computeShaderDerivativesSpec.comp.out b/Test/baseResults/spv.computeShaderDerivativesSpec.comp.out
new file mode 100644
index 0000000..e4afc6f
--- /dev/null
+++ b/Test/baseResults/spv.computeShaderDerivativesSpec.comp.out
@@ -0,0 +1,31 @@
+spv.computeShaderDerivativesSpec.comp
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 12
+
+                              Capability Shader
+                              Capability ComputeDerivativeGroupQuadsNV
+                              Extension  "SPV_NV_compute_shader_derivatives"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 1 1 1
+                              ExecutionMode 4 DerivativeGroupQuadsNV
+                              Source GLSL 450
+                              SourceExtension  "GL_NV_compute_shader_derivatives"
+                              Name 4  "main"
+                              Decorate 7 SpecId 0
+                              Decorate 8 SpecId 1
+                              Decorate 11 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:      6(int) SpecConstant 1
+               8:      6(int) SpecConstant 1
+               9:      6(int) Constant 1
+              10:             TypeVector 6(int) 3
+              11:   10(ivec3) SpecConstantComposite 7 8 9
+         4(main):           2 Function None 3
+               5:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.computeShaderDerivativesSpec2.comp.out b/Test/baseResults/spv.computeShaderDerivativesSpec2.comp.out
new file mode 100644
index 0000000..a3b38ca
--- /dev/null
+++ b/Test/baseResults/spv.computeShaderDerivativesSpec2.comp.out
@@ -0,0 +1,31 @@
+spv.computeShaderDerivativesSpec2.comp
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 12
+
+                              Capability Shader
+                              Capability ComputeDerivativeGroupLinearNV
+                              Extension  "SPV_NV_compute_shader_derivatives"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 1 1 1
+                              ExecutionMode 4 DerivativeGroupLinearNV
+                              Source ESSL 320
+                              SourceExtension  "GL_NV_compute_shader_derivatives"
+                              Name 4  "main"
+                              Decorate 7 SpecId 0
+                              Decorate 8 SpecId 1
+                              Decorate 11 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:      6(int) SpecConstant 1
+               8:      6(int) SpecConstant 1
+               9:      6(int) Constant 1
+              10:             TypeVector 6(int) 3
+              11:   10(ivec3) SpecConstantComposite 7 8 9
+         4(main):           2 Function None 3
+               5:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.conditionalDemote.frag.out b/Test/baseResults/spv.conditionalDemote.frag.out
index 84c816b..fb789db 100644
--- a/Test/baseResults/spv.conditionalDemote.frag.out
+++ b/Test/baseResults/spv.conditionalDemote.frag.out
@@ -18,8 +18,8 @@
                               Name 17  "coord"
                               Name 33  "x"
                               Name 36  "o"
-                              Decorate 13(tex) DescriptorSet 0
                               Decorate 13(tex) Binding 0
+                              Decorate 13(tex) DescriptorSet 0
                               Decorate 17(coord) Location 0
                               Decorate 36(o) Location 0
                2:             TypeVoid
diff --git a/Test/baseResults/spv.conditionalDiscard.frag.out b/Test/baseResults/spv.conditionalDiscard.frag.out
index f31fa85..3d7cca8 100644
--- a/Test/baseResults/spv.conditionalDiscard.frag.out
+++ b/Test/baseResults/spv.conditionalDiscard.frag.out
@@ -14,8 +14,8 @@
                               Name 13  "tex"
                               Name 17  "coord"
                               Name 34  "gl_FragColor"
-                              Decorate 13(tex) DescriptorSet 0
                               Decorate 13(tex) Binding 0
+                              Decorate 13(tex) DescriptorSet 0
                               Decorate 17(coord) Location 0
                               Decorate 34(gl_FragColor) Location 0
                2:             TypeVoid
diff --git a/Test/baseResults/spv.constructComposite.comp.out b/Test/baseResults/spv.constructComposite.comp.out
index 491a33f..c2688ca 100644
--- a/Test/baseResults/spv.constructComposite.comp.out
+++ b/Test/baseResults/spv.constructComposite.comp.out
@@ -27,10 +27,10 @@
                               MemberDecorate 11(sA) 0 Offset 0
                               MemberDecorate 11(sA) 1 Offset 4
                               MemberDecorate 12(sB) 0 Offset 0
-                              MemberDecorate 13(ubo) 0 Offset 0
                               Decorate 13(ubo) Block
-                              Decorate 15 DescriptorSet 0
+                              MemberDecorate 13(ubo) 0 Offset 0
                               Decorate 15 Binding 0
+                              Decorate 15 DescriptorSet 0
                               Decorate 28 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.coopmat.comp.out b/Test/baseResults/spv.coopmat.comp.out
index b594af2..b14ad59 100644
--- a/Test/baseResults/spv.coopmat.comp.out
+++ b/Test/baseResults/spv.coopmat.comp.out
@@ -78,24 +78,24 @@
                               Name 227  "scm"
                               Decorate 66 ArrayStride 4
                               Decorate 67 ArrayStride 4
+                              Decorate 68(Block) Block
                               MemberDecorate 68(Block) 0 Offset 0
                               MemberDecorate 68(Block) 1 Offset 4194304
-                              Decorate 68(Block) Block
-                              Decorate 70(block) DescriptorSet 0
                               Decorate 70(block) Binding 0
+                              Decorate 70(block) DescriptorSet 0
                               Decorate 82 ArrayStride 2
                               Decorate 84 ArrayStride 2
+                              Decorate 86(Block16) Block
                               MemberDecorate 86(Block16) 0 Offset 0
                               MemberDecorate 86(Block16) 1 Offset 2097152
                               MemberDecorate 86(Block16) 2 Offset 2097160
-                              Decorate 86(Block16) Block
                               Decorate 87 ArrayStride 4
                               Decorate 88 ArrayStride 4
+                              Decorate 89(Block) Block
                               MemberDecorate 89(Block) 0 Offset 0
                               MemberDecorate 89(Block) 1 Offset 4194304
-                              Decorate 89(Block) Block
-                              Decorate 91(block16) DescriptorSet 0
                               Decorate 91(block16) Binding 0
+                              Decorate 91(block16) DescriptorSet 0
                               Decorate 124(Y) SpecId 0
                               Decorate 200 BuiltIn WorkgroupSize
                               Decorate 212(F) SpecId 1
diff --git a/Test/baseResults/spv.coopmat2_constructor.comp.out b/Test/baseResults/spv.coopmat2_constructor.comp.out
new file mode 100644
index 0000000..9cb0670
--- /dev/null
+++ b/Test/baseResults/spv.coopmat2_constructor.comp.out
@@ -0,0 +1,251 @@
+spv.coopmat2_constructor.comp
+// Module Version 10600
+// Generated by (magic number): 8000b
+// Id's are bound by 166
+
+                              Capability Shader
+                              Capability Float16
+                              Capability Int8
+                              Capability StorageUniformBufferBlock16
+                              Capability VulkanMemoryModelKHR
+                              Capability CooperativeMatrixReductionsNV
+                              Capability CooperativeMatrixConversionsNV
+                              Capability CooperativeMatrixPerElementOperationsNV
+                              Capability CooperativeMatrixKHR
+                              Extension  "SPV_KHR_cooperative_matrix"
+                              Extension  "SPV_NV_cooperative_matrix2"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical VulkanKHR
+                              EntryPoint GLCompute 4  "main" 165
+                              ExecutionMode 4 LocalSize 64 1 1
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types"
+                              SourceExtension  "GL_KHR_cooperative_matrix"
+                              SourceExtension  "GL_KHR_memory_scope_semantics"
+                              SourceExtension  "GL_NV_cooperative_matrix2"
+                              Name 4  "main"
+                              Name 10  "addr(u1;u1;"
+                              Name 8  "x"
+                              Name 9  "y"
+                              Name 13  "foo("
+                              Name 20  "relu(u1;u1;f161;"
+                              Name 17  "row"
+                              Name 18  "col"
+                              Name 19  "x"
+                              Name 27  "add(u1;u1;f161;f161;"
+                              Name 23  "row"
+                              Name 24  "col"
+                              Name 25  "x"
+                              Name 26  "y"
+                              Name 32  "combineSum(f161;f161;"
+                              Name 30  "a"
+                              Name 31  "b"
+                              Name 36  "combineMax(f161;f161;"
+                              Name 34  "a"
+                              Name 35  "b"
+                              Name 64  "A"
+                              Name 67  "Acc"
+                              Name 73  "B"
+                              Name 78  "tempArg"
+                              Name 81  "tr"
+                              Name 83  "tempArg"
+                              Name 89  "tempArg"
+                              Name 94  "tempArg"
+                              Name 102  "tempArg"
+                              Name 106  "Acc2x2"
+                              Name 115  "Accu32"
+                              Name 129  "Accs32"
+                              Name 137  "Accf16"
+                              Name 147  "Accf32"
+                              Name 154  "Dim"
+                              Name 157  "mijm1"
+                              Name 163  "BufType"
+                              MemberName 163(BufType) 0  "x"
+                              Name 165  "Buf"
+                              Decorate 154(Dim) SpecId 0
+                              Decorate 162 ArrayStride 2
+                              Decorate 163(BufType) Block
+                              MemberDecorate 163(BufType) 0 Offset 0
+                              Decorate 165(Buf) Binding 0
+                              Decorate 165(Buf) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeFunction 6(int) 6(int) 6(int)
+              12:             TypeFunction 6(int)
+              15:             TypeFloat 16
+              16:             TypeFunction 15(float16_t) 6(int) 6(int) 15(float16_t)
+              22:             TypeFunction 15(float16_t) 6(int) 6(int) 15(float16_t) 15(float16_t)
+              29:             TypeFunction 15(float16_t) 15(float16_t) 15(float16_t)
+              38:      6(int) Constant 64
+              43:      6(int) Constant 124
+              46:15(float16_t) Constant 0
+              59:      6(int) Constant 2
+              60:      6(int) Constant 32
+              61:      6(int) Constant 0
+              62:             TypeCooperativeMatrixKHR 15(float16_t) 59 38 60 61
+              63:             TypePointer Function 62
+              65:             TypeCooperativeMatrixKHR 15(float16_t) 59 38 60 59
+              66:             TypePointer Function 65
+              70:      6(int) Constant 1
+              71:             TypeCooperativeMatrixKHR 15(float16_t) 59 38 60 70
+              72:             TypePointer Function 71
+              76:             TypeCooperativeMatrixKHR 15(float16_t) 59 60 38 70
+              77:             TypePointer Function 76
+              85:             TypeInt 32 1
+              86:     85(int) Constant 1
+              91:     85(int) Constant 2
+              96:     85(int) Constant 3
+              99:      6(int) Constant 16
+             100:             TypeCooperativeMatrixKHR 15(float16_t) 59 60 99 59
+             101:             TypePointer Function 100
+             104:     85(int) Constant 4
+             111:15(float16_t) Constant 15360
+             113:             TypeCooperativeMatrixKHR 6(int) 59 38 60 59
+             114:             TypePointer Function 113
+             117:             TypeInt 8 0
+             118:             TypeCooperativeMatrixKHR 117(int8_t) 59 38 60 61
+             121:             TypeInt 8 1
+             122:             TypeCooperativeMatrixKHR 121(int8_t) 59 38 60 61
+             127:             TypeCooperativeMatrixKHR 85(int) 59 38 60 59
+             128:             TypePointer Function 127
+             144:             TypeFloat 32
+             145:             TypeCooperativeMatrixKHR 144(float) 59 38 60 59
+             146:             TypePointer Function 145
+        154(Dim):      6(int) SpecConstant 32
+             155:             TypeCooperativeMatrixKHR 144(float) 59 154(Dim) 154(Dim) 59
+             156:             TypePointer Function 155
+             158:  144(float) Constant 4286578688
+             159:         155 ConstantComposite 158
+             160:             TypeVector 6(int) 3
+             161:  160(ivec3) ConstantComposite 38 70 70
+             162:             TypeRuntimeArray 15(float16_t)
+    163(BufType):             TypeStruct 162
+             164:             TypePointer StorageBuffer 163(BufType)
+        165(Buf):    164(ptr) Variable StorageBuffer
+         4(main):           2 Function None 3
+               5:             Label
+           64(A):     63(ptr) Variable Function
+         67(Acc):     66(ptr) Variable Function
+           73(B):     72(ptr) Variable Function
+     78(tempArg):     77(ptr) Variable Function
+          81(tr):     77(ptr) Variable Function
+     83(tempArg):     66(ptr) Variable Function
+     89(tempArg):     66(ptr) Variable Function
+     94(tempArg):     66(ptr) Variable Function
+    102(tempArg):    101(ptr) Variable Function
+     106(Acc2x2):    101(ptr) Variable Function
+     115(Accu32):    114(ptr) Variable Function
+     129(Accs32):    128(ptr) Variable Function
+     137(Accf16):     66(ptr) Variable Function
+     147(Accf32):    146(ptr) Variable Function
+      157(mijm1):    156(ptr) Variable Function
+              68:          65 Load 67(Acc)
+              69:          62 CooperativeMatrixConvertNV 68
+                              Store 64(A) 69
+              74:          65 Load 67(Acc)
+              75:          71 CooperativeMatrixConvertNV 74
+                              Store 73(B) 75
+              79:          65 Load 67(Acc)
+              80:          76 CooperativeMatrixTransposeNV 79
+                              Store 78(tempArg) 80
+              82:          76 Load 78(tempArg)
+                              Store 81(tr) 82
+              84:          65 Load 67(Acc)
+              87:          65 CooperativeMatrixReduceNV 84 1 32(combineSum(f161;f161;)
+                              Store 83(tempArg) 87
+              88:          65 Load 83(tempArg)
+                              Store 67(Acc) 88
+              90:          65 Load 67(Acc)
+              92:          65 CooperativeMatrixReduceNV 90 2 32(combineSum(f161;f161;)
+                              Store 89(tempArg) 92
+              93:          65 Load 89(tempArg)
+                              Store 67(Acc) 93
+              95:          65 Load 67(Acc)
+              97:          65 CooperativeMatrixReduceNV 95 3 32(combineSum(f161;f161;)
+                              Store 94(tempArg) 97
+              98:          65 Load 94(tempArg)
+                              Store 67(Acc) 98
+             103:          65 Load 67(Acc)
+             105:         100 CooperativeMatrixReduceNV 103 4 36(combineMax(f161;f161;)
+                              Store 102(tempArg) 105
+             107:         100 Load 102(tempArg)
+                              Store 106(Acc2x2) 107
+             108:          65 Load 67(Acc)
+             109:          65 CooperativeMatrixPerElementOpNV 108 20(relu(u1;u1;f161;)
+                              Store 67(Acc) 109
+             110:          65 Load 67(Acc)
+             112:          65 CooperativeMatrixPerElementOpNV 110 27(add(u1;u1;f161;f161;) 111
+                              Store 67(Acc) 112
+             116:         113 Load 115(Accu32)
+             119:         118 UConvert 116
+             120:         113 Load 115(Accu32)
+             123:         118 UConvert 120
+             124:         122 Bitcast 123
+             125:         113 Load 115(Accu32)
+             126:          62 ConvertUToF 125
+             130:         127 Load 129(Accs32)
+             131:         122 SConvert 130
+             132:         118 Bitcast 131
+             133:         127 Load 129(Accs32)
+             134:         122 SConvert 133
+             135:         127 Load 129(Accs32)
+             136:          62 ConvertSToF 135
+             138:          65 Load 137(Accf16)
+             139:         118 ConvertFToU 138
+             140:          65 Load 137(Accf16)
+             141:         122 ConvertFToS 140
+             142:          65 Load 137(Accf16)
+             143:          62 CooperativeMatrixConvertNV 142
+             148:         145 Load 147(Accf32)
+             149:         118 ConvertFToU 148
+             150:         145 Load 147(Accf32)
+             151:         122 ConvertFToS 150
+             152:         145 Load 147(Accf32)
+             153:          62 FConvert 152
+                              Store 157(mijm1) 159
+                              Return
+                              FunctionEnd
+ 10(addr(u1;u1;):      6(int) Function None 7
+            8(x):      6(int) FunctionParameter
+            9(y):      6(int) FunctionParameter
+              11:             Label
+              39:      6(int) IMul 9(y) 38
+              40:      6(int) IAdd 39 8(x)
+                              ReturnValue 40
+                              FunctionEnd
+        13(foo():      6(int) Function None 12
+              14:             Label
+                              ReturnValue 43
+                              FunctionEnd
+20(relu(u1;u1;f161;):15(float16_t) Function None 16
+         17(row):      6(int) FunctionParameter
+         18(col):      6(int) FunctionParameter
+           19(x):15(float16_t) FunctionParameter
+              21:             Label
+              47:15(float16_t) ExtInst 1(GLSL.std.450) 40(FMax) 19(x) 46
+                              ReturnValue 47
+                              FunctionEnd
+27(add(u1;u1;f161;f161;):15(float16_t) Function None 22
+         23(row):      6(int) FunctionParameter
+         24(col):      6(int) FunctionParameter
+           25(x):15(float16_t) FunctionParameter
+           26(y):15(float16_t) FunctionParameter
+              28:             Label
+              50:15(float16_t) FAdd 25(x) 26(y)
+                              ReturnValue 50
+                              FunctionEnd
+32(combineSum(f161;f161;):15(float16_t) Function None 29
+           30(a):15(float16_t) FunctionParameter
+           31(b):15(float16_t) FunctionParameter
+              33:             Label
+              53:15(float16_t) FAdd 30(a) 31(b)
+                              ReturnValue 53
+                              FunctionEnd
+36(combineMax(f161;f161;):15(float16_t) Function None 29
+           34(a):15(float16_t) FunctionParameter
+           35(b):15(float16_t) FunctionParameter
+              37:             Label
+              56:15(float16_t) ExtInst 1(GLSL.std.450) 40(FMax) 34(a) 35(b)
+                              ReturnValue 56
+                              FunctionEnd
diff --git a/Test/baseResults/spv.coopmat2_error.comp.out b/Test/baseResults/spv.coopmat2_error.comp.out
new file mode 100644
index 0000000..8f57496
--- /dev/null
+++ b/Test/baseResults/spv.coopmat2_error.comp.out
@@ -0,0 +1,26 @@
+spv.coopmat2_error.comp
+ERROR: 0:53: 'decode2(1;u1[2];u1[2];' : function parameters must all be qualified 'const in' 
+ERROR: 0:54: 'decode3(1;u1[2];u1[2];' : function parameters must all be qualified 'const in' 
+ERROR: 0:56: 'decode5(1;u1[2];u1[2];' : function parameters must all be qualified 'const in' 
+ERROR: 0:57: 'decode6(1;u1[2];u1[2];' : function parameters must all be qualified 'const in' 
+ERROR: 0:59: 'decode8(1;u1[2];u1[2];' : function parameters must all be qualified 'const in' 
+ERROR: 0:60: 'decode9(1;u1[2];u1[2];' : function parameters must all be qualified 'const in' 
+ERROR: 0:61: 'decode10(u1;u161[2];u161[2];' : first parameter must be buffer reference type 
+ERROR: 0:61: 'decode10(u1;u161[2];u161[2];' : coordinate parameters must be uint32_t 
+ERROR: 0:62: 'decode11(1;u1;u1;' : coordinate parameters must be uint32_t 
+ERROR: 0:67: 'combineSum2(f161;f161;' : function parameters must all be qualified 'const in' 
+ERROR: 0:67: 'combineSum2(f161;f161;' : function parameters must all be qualified 'const in' 
+ERROR: 0:68: 'combineSum(f161;f161;' : parameter types must match cooperative matrix component type 
+ERROR: 0:68: 'combineSum(f161;f161;' : parameter types must match cooperative matrix component type 
+ERROR: 0:68: 'combineSum(f161;f161;' : return type must match cooperative matrix component type 
+ERROR: 0:73: 'add(u1;u1;f161;f161;' : parameter types must match or be cooperative matrix component type 
+ERROR: 0:74: 'add(u1;u1;f161;f161;' : parameter types must match or be cooperative matrix component type 
+ERROR: 0:75: 'add(u1;u1;f161;f161;' : number of parameters must match call to coopMatPerElementNV 
+ERROR: 0:76: 'add(u1;u1;f161;f161;' : number of parameters must match call to coopMatPerElementNV 
+ERROR: 0:77: '' : cooperative matrix input and result types must match 
+ERROR: 0:77: 'perelemf32(u1;u1;f161;' : return type must match cooperative matrix component type 
+ERROR: 0:78: '' : cooperative matrix input and result types must match 
+ERROR: 21 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.coopmat2_tensor.comp.out b/Test/baseResults/spv.coopmat2_tensor.comp.out
new file mode 100644
index 0000000..468c8ad
--- /dev/null
+++ b/Test/baseResults/spv.coopmat2_tensor.comp.out
@@ -0,0 +1,245 @@
+spv.coopmat2_tensor.comp
+// Module Version 10600
+// Generated by (magic number): 8000b
+// Id's are bound by 145
+
+                              Capability Shader
+                              Capability Float16
+                              Capability StorageUniformBufferBlock16
+                              Capability VulkanMemoryModelKHR
+                              Capability PhysicalStorageBufferAddressesEXT
+                              Capability CooperativeMatrixTensorAddressingNV
+                              Capability CooperativeMatrixBlockLoadsNV
+                              Capability TensorAddressingNV
+                              Capability CooperativeMatrixKHR
+                              Extension  "SPV_KHR_cooperative_matrix"
+                              Extension  "SPV_NV_cooperative_matrix2"
+                              Extension  "SPV_NV_tensor_addressing"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel PhysicalStorageBuffer64EXT VulkanKHR
+                              EntryPoint GLCompute 4  "main" 86 130
+                              ExecutionMode 4 LocalSize 64 1 1
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_buffer_reference"
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types"
+                              SourceExtension  "GL_KHR_cooperative_matrix"
+                              SourceExtension  "GL_KHR_memory_scope_semantics"
+                              SourceExtension  "GL_NV_cooperative_matrix2"
+                              Name 4  "main"
+                              Name 8  "fp16Buf"
+                              MemberName 8(fp16Buf) 0  "f"
+                              Name 16  "decode(1;u1[2];u1[2];"
+                              Name 13  "b"
+                              Name 14  "blockCoords"
+                              Name 15  "coordInBlock"
+                              Name 28  "t"
+                              Name 34  "t2"
+                              Name 53  "v"
+                              Name 71  "v2"
+                              Name 75  "v3"
+                              Name 80  "tempArg"
+                              Name 81  "A"
+                              Name 84  "BufType"
+                              MemberName 84(BufType) 0  "x"
+                              Name 86  "Buf"
+                              Name 96  "tempArg"
+                              Name 108  "tempArg"
+                              Name 115  "tempArg"
+                              Name 123  "tempArg"
+                              Name 126  "S"
+                              MemberName 126(S) 0  "x"
+                              Name 128  "SBuf"
+                              MemberName 128(SBuf) 0  "s"
+                              Name 130  "sbuf"
+                              Name 138  "Clamp"
+                              Name 141  "tc"
+                              Decorate 8(fp16Buf) Block
+                              MemberDecorate 8(fp16Buf) 0 Offset 0
+                              Decorate 13(b) Aliased
+                              Decorate 83 ArrayStride 2
+                              Decorate 84(BufType) Block
+                              MemberDecorate 84(BufType) 0 Offset 0
+                              Decorate 86(Buf) Binding 1
+                              Decorate 86(Buf) DescriptorSet 0
+                              MemberDecorate 126(S) 0 Offset 0
+                              Decorate 127 ArrayStride 4
+                              Decorate 128(SBuf) Block
+                              MemberDecorate 128(SBuf) 0 Offset 0
+                              Decorate 130(sbuf) Binding 0
+                              Decorate 130(sbuf) DescriptorSet 0
+                              Decorate 138(Clamp) SpecId 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+                              TypeForwardPointer 6 PhysicalStorageBufferEXT
+               7:             TypeFloat 16
+      8(fp16Buf):             TypeStruct 7(float16_t)
+               6:             TypePointer PhysicalStorageBufferEXT 8(fp16Buf)
+               9:             TypeInt 32 0
+              10:      9(int) Constant 2
+              11:             TypeArray 9(int) 10
+              12:             TypeFunction 7(float16_t) 6(ptr) 11 11
+              18:             TypeInt 32 1
+              19:     18(int) Constant 0
+              20:             TypePointer PhysicalStorageBufferEXT 7(float16_t)
+              25:      9(int) Constant 0
+              26:             TypeTensorLayoutNV 10 25
+              27:             TypePointer Function 26
+              30:      9(int) Constant 3
+              31:      9(int) Constant 1
+              32:             TypeTensorLayoutNV 30 31
+              33:             TypePointer Function 32
+              37:      9(int) Constant 4
+              38:      9(int) Constant 8
+              41:      9(int) Constant 256
+              42:      9(int) Constant 512
+              45:      9(int) Constant 128
+              46:      9(int) Constant 32
+              48:      9(int) Constant 5
+              49:             TypeBool
+              50:    49(bool) ConstantFalse
+              51:             TypeTensorViewNV 48 50 25 31 10 30 37
+              52:             TypePointer Function 51
+              56:      9(int) Constant 10
+              57:      9(int) Constant 11
+              58:      9(int) Constant 12
+              59:      9(int) Constant 13
+              60:      9(int) Constant 14
+              63:      9(int) Constant 15
+              66:      9(int) Constant 16
+              68:    49(bool) ConstantTrue
+              69:             TypeTensorViewNV 48 68 25 31 10 30 37
+              70:             TypePointer Function 69
+              73:             TypeTensorViewNV 10 68 31 25
+              74:             TypePointer Function 73
+              77:      9(int) Constant 64
+              78:             TypeCooperativeMatrixKHR 7(float16_t) 10 77 46 25
+              79:             TypePointer Function 78
+              83:             TypeRuntimeArray 7(float16_t)
+     84(BufType):             TypeStruct 83
+              85:             TypePointer StorageBuffer 84(BufType)
+         86(Buf):     85(ptr) Variable StorageBuffer
+              87:             TypePointer StorageBuffer 7(float16_t)
+             125:             TypeVector 7(float16_t) 2
+          126(S):             TypeStruct 125(f16vec2)
+             127:             TypeRuntimeArray 126(S)
+       128(SBuf):             TypeStruct 127
+             129:             TypePointer StorageBuffer 128(SBuf)
+       130(sbuf):    129(ptr) Variable StorageBuffer
+             131:             TypePointer StorageBuffer 126(S)
+      138(Clamp):      9(int) SpecConstant 1
+             139:             TypeTensorLayoutNV 10 138(Clamp)
+             140:             TypePointer Function 139
+             143:             TypeVector 9(int) 3
+             144:  143(ivec3) ConstantComposite 77 31 31
+         4(main):           2 Function None 3
+               5:             Label
+           28(t):     27(ptr) Variable Function
+          34(t2):     33(ptr) Variable Function
+           53(v):     52(ptr) Variable Function
+          71(v2):     70(ptr) Variable Function
+          75(v3):     74(ptr) Variable Function
+     80(tempArg):     79(ptr) Variable Function
+           81(A):     79(ptr) Variable Function
+     96(tempArg):     79(ptr) Variable Function
+    108(tempArg):     79(ptr) Variable Function
+    115(tempArg):     79(ptr) Variable Function
+    123(tempArg):     79(ptr) Variable Function
+         141(tc):    140(ptr) Variable Function
+              29:          26 CreateTensorLayoutNV
+                              Store 28(t) 29
+              35:          32 CreateTensorLayoutNV
+                              Store 34(t2) 35
+              36:          26 Load 28(t)
+              39:          26 TensorLayoutSetBlockSizeNV 36 37 38
+                              Store 28(t) 39
+              40:          26 Load 28(t)
+              43:          26 TensorLayoutSetDimensionNV 40 41 42
+                              Store 28(t) 43
+              44:          26 Load 28(t)
+              47:          26 TensorLayoutSliceNV 44 45 46 41 46
+                              Store 28(t) 47
+              54:          51 CreateTensorViewNV
+                              Store 53(v) 54
+              55:          51 Load 53(v)
+              61:          51 TensorViewSetDimensionNV 55 56 57 58 59 60
+                              Store 53(v) 61
+              62:          51 Load 53(v)
+              64:          51 TensorViewSetStrideNV 62 56 57 58 59 63
+                              Store 53(v) 64
+              65:          51 Load 53(v)
+              67:          51 TensorViewSetClipNV 65 25 66 25 66
+                              Store 53(v) 67
+              72:          69 CreateTensorViewNV
+                              Store 71(v2) 72
+              76:          73 CreateTensorViewNV
+                              Store 75(v3) 76
+              82:          78 Load 81(A)
+                              Store 80(tempArg) 82
+              88:     87(ptr) AccessChain 86(Buf) 19 25
+              89:          26 Load 28(t)
+              90:          78 Load 80(tempArg)
+              91:          78 CooperativeMatrixLoadTensorNV 88 90 89 None  None
+                              Store 80(tempArg) 91
+              92:          78 Load 80(tempArg)
+                              Store 81(A) 92
+              93:          78 Load 81(A)
+              94:     87(ptr) AccessChain 86(Buf) 19 25
+              95:          26 Load 28(t)
+                              CooperativeMatrixStoreTensorNV 94 93 95 None  None
+              97:          78 Load 81(A)
+                              Store 96(tempArg) 97
+              98:     87(ptr) AccessChain 86(Buf) 19 25
+              99:          26 Load 28(t)
+             100:          51 Load 53(v)
+             101:          78 Load 96(tempArg)
+             102:          78 CooperativeMatrixLoadTensorNV 98 101 99 None  TensorView 100
+                              Store 96(tempArg) 102
+             103:          78 Load 96(tempArg)
+                              Store 81(A) 103
+             104:          78 Load 81(A)
+             105:     87(ptr) AccessChain 86(Buf) 19 25
+             106:          26 Load 28(t)
+             107:          51 Load 53(v)
+                              CooperativeMatrixStoreTensorNV 105 104 106 None  TensorView 107
+             109:          78 Load 81(A)
+                              Store 108(tempArg) 109
+             110:     87(ptr) AccessChain 86(Buf) 19 25
+             111:          26 Load 28(t)
+             112:          78 Load 108(tempArg)
+             113:          78 CooperativeMatrixLoadTensorNV 110 112 111 None  DecodeFunc 16(decode(1;u1[2];u1[2];)
+                              Store 108(tempArg) 113
+             114:          78 Load 108(tempArg)
+                              Store 81(A) 114
+             116:          78 Load 81(A)
+                              Store 115(tempArg) 116
+             117:     87(ptr) AccessChain 86(Buf) 19 25
+             118:          26 Load 28(t)
+             119:          51 Load 53(v)
+             120:          78 Load 115(tempArg)
+             121:          78 CooperativeMatrixLoadTensorNV 117 120 118 None  TensorView DecodeFunc 119 16(decode(1;u1[2];u1[2];)
+                              Store 115(tempArg) 121
+             122:          78 Load 115(tempArg)
+                              Store 81(A) 122
+             124:          78 Load 81(A)
+                              Store 123(tempArg) 124
+             132:    131(ptr) AccessChain 130(sbuf) 19 31
+             133:          26 Load 28(t)
+             134:          51 Load 53(v)
+             135:          78 Load 123(tempArg)
+             136:          78 CooperativeMatrixLoadTensorNV 132 135 133 None  TensorView DecodeFunc 134 16(decode(1;u1[2];u1[2];)
+                              Store 123(tempArg) 136
+             137:          78 Load 123(tempArg)
+                              Store 81(A) 137
+             142:         139 CreateTensorLayoutNV
+                              Store 141(tc) 142
+                              Return
+                              FunctionEnd
+16(decode(1;u1[2];u1[2];):7(float16_t) Function None 12
+           13(b):      6(ptr) FunctionParameter
+ 14(blockCoords):          11 FunctionParameter
+15(coordInBlock):          11 FunctionParameter
+              17:             Label
+              21:     20(ptr) AccessChain 13(b) 19
+              22:7(float16_t) Load 21 Aligned 2
+                              ReturnValue 22
+                              FunctionEnd
diff --git a/Test/baseResults/spv.coopmatKHR.comp.out b/Test/baseResults/spv.coopmatKHR.comp.out
index d72b067..4d87d70 100644
--- a/Test/baseResults/spv.coopmatKHR.comp.out
+++ b/Test/baseResults/spv.coopmatKHR.comp.out
@@ -82,24 +82,24 @@
                               Name 249  "scm"
                               Decorate 67 ArrayStride 4
                               Decorate 68 ArrayStride 4
+                              Decorate 69(Block) Block
                               MemberDecorate 69(Block) 0 Offset 0
                               MemberDecorate 69(Block) 1 Offset 4194304
-                              Decorate 69(Block) Block
-                              Decorate 71(block) DescriptorSet 0
                               Decorate 71(block) Binding 0
+                              Decorate 71(block) DescriptorSet 0
                               Decorate 81 ArrayStride 2
                               Decorate 83 ArrayStride 2
+                              Decorate 85(Block16) Block
                               MemberDecorate 85(Block16) 0 Offset 0
                               MemberDecorate 85(Block16) 1 Offset 2097152
                               MemberDecorate 85(Block16) 2 Offset 2097160
-                              Decorate 85(Block16) Block
                               Decorate 86 ArrayStride 4
                               Decorate 87 ArrayStride 4
+                              Decorate 88(Block) Block
                               MemberDecorate 88(Block) 0 Offset 0
                               MemberDecorate 88(Block) 1 Offset 4194304
-                              Decorate 88(Block) Block
-                              Decorate 90(block16) DescriptorSet 0
                               Decorate 90(block16) Binding 0
+                              Decorate 90(block16) DescriptorSet 0
                               Decorate 128(Y) SpecId 0
                               Decorate 232 BuiltIn WorkgroupSize
                               Decorate 234(F) SpecId 1
@@ -372,15 +372,15 @@
              205:         202 Load 204(ms8A)
              209:         206 Load 208(ms8B)
              213:         210 Load 212(ms8C)
-             214:         210 CooperativeMatrixMulAddKHR 205 209 213 ASignedComponents BSignedComponents CSignedComponents ResultSignedComponents 
+             214:         210 CooperativeMatrixMulAddKHR 205 209 213 ASignedComponentsKHR BSignedComponentsKHR CSignedComponentsKHR ResultSignedComponentsKHR 
              215:         202 Load 204(ms8A)
              216:         206 Load 208(ms8B)
              217:         210 Load 212(ms8C)
-             218:         210 CooperativeMatrixMulAddKHR 215 216 217 ASignedComponents BSignedComponents CSignedComponents ResultSignedComponents 
+             218:         210 CooperativeMatrixMulAddKHR 215 216 217 ASignedComponentsKHR BSignedComponentsKHR CSignedComponentsKHR ResultSignedComponentsKHR 
              219:         202 Load 204(ms8A)
              220:         206 Load 208(ms8B)
              221:         210 Load 212(ms8C)
-             223:         210 CooperativeMatrixMulAddKHR 219 220 221 ASignedComponents BSignedComponents CSignedComponents ResultSignedComponents SaturatingAccumulation 
+             223:         210 CooperativeMatrixMulAddKHR 219 220 221 ASignedComponentsKHR BSignedComponentsKHR CSignedComponentsKHR ResultSignedComponentsKHR SaturatingAccumulationKHR 
              228:         225 Load 227(m16)
              229:    194(ptr) AccessChain 193(shmatrix) 82
                               CooperativeMatrixStoreKHR 229 228 62 10 MakePointerAvailableKHR NonPrivatePointerKHR 10
diff --git a/Test/baseResults/spv.coopmatKHR_Error.comp.out b/Test/baseResults/spv.coopmatKHR_Error.comp.out
index 82c302b..cfe6d33 100644
--- a/Test/baseResults/spv.coopmatKHR_Error.comp.out
+++ b/Test/baseResults/spv.coopmatKHR_Error.comp.out
@@ -17,8 +17,10 @@
 ERROR: 0:19: 'fbadtype3' : expected 8, 16, 32, or 64 bit signed or unsigned integer or 16, 32, or 64 bit float type 
 ERROR: 0:19: 'fbadtype3' : illegal use of type 'void' 
 ERROR: 0:21: '' : coopmat incorrect number of type parameters 
+ERROR: 0:21: 'fbadnumparams' : unexpected number type parameters 
 ERROR: 0:25: '' : type parameter must be a constant integer expression
 ERROR: 0:29: '' : coopmat incorrect number of type parameters 
+ERROR: 0:29: 'sharedmat' : unexpected number type parameters 
 ERROR: 0:29: 'Cooperative matrix types must not be used in shared memory' : qualifier 
 ERROR: 0:32: 'bufmat' : member of block cannot be or contain a cooperative matrix type 
 ERROR: 0:41: 'assign' :  cannot convert from ' temp coopmat<3, 16, 8, 0> float16_t' to ' temp coopmat<3, 16, 8, 0> float'
@@ -32,7 +34,7 @@
 ERROR: 0:63: 'expression' :  left of '[' is not of type array, matrix, or vector  
 ERROR: 0:66: '.' : cannot apply to a cooperative matrix type: x
 ERROR: 0:68: 'transpose' : no matching overloaded function found 
-ERROR: 33 compilation errors.  No code generated.
+ERROR: 35 compilation errors.  No code generated.
 
 
 SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.coopmat_armlayout.comp.out b/Test/baseResults/spv.coopmat_armlayout.comp.out
new file mode 100644
index 0000000..8566f6e
--- /dev/null
+++ b/Test/baseResults/spv.coopmat_armlayout.comp.out
@@ -0,0 +1,405 @@
+spv.coopmat_armlayout.comp
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 251
+
+                              Capability Shader
+                              Capability Float16
+                              Capability Int16
+                              Capability Int8
+                              Capability CooperativeMatrixLayoutsARM
+                              Capability StorageUniformBufferBlock16
+                              Capability VulkanMemoryModelKHR
+                              Capability PhysicalStorageBufferAddressesEXT
+                              Capability CooperativeMatrixKHR
+                              Extension  "SPV_ARM_cooperative_matrix_layouts"
+                              Extension  "SPV_KHR_16bit_storage"
+                              Extension  "SPV_KHR_cooperative_matrix"
+                              Extension  "SPV_KHR_physical_storage_buffer"
+                              Extension  "SPV_KHR_storage_buffer_storage_class"
+                              Extension  "SPV_KHR_vulkan_memory_model"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel PhysicalStorageBuffer64EXT VulkanKHR
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 64 1 1
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_buffer_reference"
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types"
+                              SourceExtension  "GL_KHR_cooperative_matrix"
+                              SourceExtension  "GL_KHR_memory_scope_semantics"
+                              Name 4  "main"
+                              Name 15  "f16(f161;"
+                              Name 14  "m"
+                              Name 22  "f32(f1;"
+                              Name 21  "m"
+                              Name 35  "m"
+                              Name 53  "m2"
+                              Name 57  "x"
+                              Name 65  "tempArg"
+                              Name 69  "Block"
+                              MemberName 69(Block) 0  "y"
+                              MemberName 69(Block) 1  "x"
+                              Name 71  "block"
+                              Name 81  "tempArg"
+                              Name 86  "Block16"
+                              MemberName 86(Block16) 0  "y"
+                              MemberName 86(Block16) 1  "x"
+                              MemberName 86(Block16) 2  "b"
+                              Name 89  "Block"
+                              MemberName 89(Block) 0  "y"
+                              MemberName 89(Block) 1  "x"
+                              Name 91  "block16"
+                              Name 98  "tempArg"
+                              Name 111  "D"
+                              Name 115  "A"
+                              Name 119  "B"
+                              Name 121  "C"
+                              Name 125  "l"
+                              Name 129  "Y"
+                              Name 130  "Z"
+                              Name 133  "F"
+                              Name 138  "a"
+                              Name 142  "md1"
+                              Name 153  "mC2"
+                              Name 158  "tempArg"
+                              Name 164  "tempArg"
+                              Name 170  "p1"
+                              Name 171  "param"
+                              Name 174  "p2"
+                              Name 175  "param"
+                              Name 189  "tempArg"
+                              Name 194  "shmatrix"
+                              Name 198  "ms"
+                              Name 205  "ms8A"
+                              Name 209  "ms8B"
+                              Name 213  "ms8C"
+                              Name 228  "m16"
+                              Name 234  "mC"
+                              Name 235  "F"
+                              Name 240  "S"
+                              MemberName 240(S) 0  "a"
+                              MemberName 240(S) 1  "b"
+                              MemberName 240(S) 2  "c"
+                              Name 245  "SC"
+                              Name 250  "scm"
+                              Decorate 67 ArrayStride 4
+                              Decorate 68 ArrayStride 4
+                              Decorate 69(Block) Block
+                              MemberDecorate 69(Block) 0 Offset 0
+                              MemberDecorate 69(Block) 1 Offset 4194304
+                              Decorate 71(block) Binding 0
+                              Decorate 71(block) DescriptorSet 0
+                              Decorate 82 ArrayStride 2
+                              Decorate 84 ArrayStride 2
+                              Decorate 86(Block16) Block
+                              MemberDecorate 86(Block16) 0 Offset 0
+                              MemberDecorate 86(Block16) 1 Offset 2097152
+                              MemberDecorate 86(Block16) 2 Offset 2097160
+                              Decorate 87 ArrayStride 4
+                              Decorate 88 ArrayStride 4
+                              Decorate 89(Block) Block
+                              MemberDecorate 89(Block) 0 Offset 0
+                              MemberDecorate 89(Block) 1 Offset 4194304
+                              Decorate 91(block16) Binding 0
+                              Decorate 91(block16) DescriptorSet 0
+                              Decorate 129(Y) SpecId 0
+                              Decorate 233 BuiltIn WorkgroupSize
+                              Decorate 235(F) SpecId 1
+                              Decorate 245(SC) SpecId 2
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 16
+               7:             TypeInt 32 0
+               8:      7(int) Constant 3
+               9:      7(int) Constant 8
+              10:      7(int) Constant 2
+              11:             TypeCooperativeMatrixKHR 6(float16_t) 8 9 9 10
+              12:             TypePointer Function 11
+              13:             TypeFunction 11 12(ptr)
+              17:             TypeFloat 32
+              18:             TypeCooperativeMatrixKHR 17(float) 8 9 9 10
+              19:             TypePointer Function 18
+              20:             TypeFunction 18 19(ptr)
+              32:      7(int) Constant 16
+              33:             TypeCooperativeMatrixKHR 17(float) 8 32 9 10
+              34:             TypePointer Function 33
+              36:   17(float) Constant 0
+              37:          33 ConstantComposite 36
+              46:   17(float) Constant 1073741824
+              51:             TypeCooperativeMatrixKHR 6(float16_t) 8 32 9 10
+              52:             TypePointer Function 51
+              56:             TypePointer Function 17(float)
+              58:             TypeInt 32 1
+              59:     58(int) Constant 1
+              62:     58(int) Constant 0
+              66:      7(int) Constant 1048576
+              67:             TypeArray 17(float) 66
+              68:             TypeRuntimeArray 17(float)
+       69(Block):             TypeStruct 67 68
+              70:             TypePointer StorageBuffer 69(Block)
+       71(block):     70(ptr) Variable StorageBuffer
+              72:      7(int) Constant 5
+              73:             TypePointer StorageBuffer 17(float)
+              75:      7(int) Constant 128
+              76:     58(int) Constant 4202
+              82:             TypeArray 6(float16_t) 66
+              83:      7(int) Constant 1
+              84:             TypeArray 6(float16_t) 83
+                              TypeForwardPointer 85 PhysicalStorageBufferEXT
+     86(Block16):             TypeStruct 82 84 85
+              87:             TypeArray 17(float) 66
+              88:             TypeRuntimeArray 17(float)
+       89(Block):             TypeStruct 87 88
+              85:             TypePointer PhysicalStorageBufferEXT 89(Block)
+              90:             TypePointer StorageBuffer 86(Block16)
+     91(block16):     90(ptr) Variable StorageBuffer
+              92:             TypePointer StorageBuffer 6(float16_t)
+              99:     58(int) Constant 2
+             100:             TypePointer StorageBuffer 85(ptr)
+             103:             TypePointer PhysicalStorageBufferEXT 17(float)
+             112:      7(int) Constant 0
+             113:             TypeCooperativeMatrixKHR 6(float16_t) 8 32 9 112
+             114:             TypePointer Function 113
+             117:             TypeCooperativeMatrixKHR 6(float16_t) 8 9 9 83
+             118:             TypePointer Function 117
+             124:             TypePointer Function 58(int)
+             128:     58(int) Constant 8
+          129(Y):     58(int) SpecConstant 2
+          130(Z):     58(int) SpecConstantOp 132 128 129(Y)
+             131:             TypeCooperativeMatrixKHR 6(float16_t) 8 130(Z) 130(Z) 10
+             132:             TypePointer Function 131
+             134:6(float16_t) Constant 0
+             135:         131 ConstantComposite 134
+             136:             TypeArray 33 72
+             137:             TypePointer Function 136
+             139:     58(int) Constant 3
+             140:   17(float) Constant 1065353216
+             146:     58(int) Constant 1234
+             150:             TypeCooperativeMatrixKHR 6(float16_t) 8 130(Z) 9 10
+             151:             TypeArray 150 8
+             152:             TypePointer Private 151
+        153(mC2):    152(ptr) Variable Private
+             154:             TypePointer Private 150
+             178:          11 ConstantComposite 134
+             179:          18 ConstantComposite 36
+             183:6(float16_t) Constant 16384
+             186:   17(float) Constant 1082130432
+             190:             TypeVector 7(int) 4
+             191:      7(int) Constant 32
+             192:             TypeArray 190(ivec4) 191
+             193:             TypePointer Workgroup 192
+   194(shmatrix):    193(ptr) Variable Workgroup
+             195:             TypePointer Workgroup 190(ivec4)
+             202:             TypeInt 8 1
+             203:             TypeCooperativeMatrixKHR 202(int8_t) 8 9 9 112
+             204:             TypePointer Function 203
+             207:             TypeCooperativeMatrixKHR 202(int8_t) 8 9 9 83
+             208:             TypePointer Function 207
+             211:             TypeCooperativeMatrixKHR 202(int8_t) 8 9 9 10
+             212:             TypePointer Function 211
+             223:     58(int) Constant 16
+             225:             TypeInt 16 1
+             226:             TypeCooperativeMatrixKHR 225(int16_t) 8 9 9 112
+             227:             TypePointer Function 226
+             231:             TypeVector 7(int) 3
+             232:      7(int) Constant 64
+             233:  231(ivec3) ConstantComposite 232 83 83
+         234(mC):    154(ptr) Variable Private
+          235(F):   17(float) SpecConstant 1077936128
+             236:             TypeCooperativeMatrixKHR 17(float) 8 130(Z) 9 10
+             237:         236 ConstantComposite 36
+             238:6(float16_t) Constant 15360
+             239:          11 ConstantComposite 238
+          240(S):             TypeStruct 58(int) 58(int) 58(int)
+             241:     58(int) Constant 12
+             242:     58(int) Constant 23
+             243:     58(int) Constant 34
+             244:      240(S) ConstantComposite 241 242 243
+         245(SC):     58(int) SpecConstant 1
+             246:             TypeCooperativeMatrixKHR 6(float16_t) 8 245(SC) 245(SC) 10
+             247:             TypeArray 246 245(SC)
+             248:             TypeArray 247 245(SC)
+             249:             TypePointer Private 248
+        250(scm):    249(ptr) Variable Private
+         4(main):           2 Function None 3
+               5:             Label
+           35(m):     34(ptr) Variable Function
+          53(m2):     52(ptr) Variable Function
+           57(x):     56(ptr) Variable Function
+     65(tempArg):     34(ptr) Variable Function
+     81(tempArg):     52(ptr) Variable Function
+     98(tempArg):     34(ptr) Variable Function
+          111(D):     34(ptr) Variable Function
+          115(A):    114(ptr) Variable Function
+          119(B):    118(ptr) Variable Function
+          121(C):     34(ptr) Variable Function
+          125(l):    124(ptr) Variable Function
+          133(F):    132(ptr) Variable Function
+          138(a):    137(ptr) Variable Function
+        142(md1):     56(ptr) Variable Function
+    158(tempArg):     34(ptr) Variable Function
+    164(tempArg):     52(ptr) Variable Function
+         170(p1):     12(ptr) Variable Function
+      171(param):     12(ptr) Variable Function
+         174(p2):     19(ptr) Variable Function
+      175(param):     19(ptr) Variable Function
+    189(tempArg):     52(ptr) Variable Function
+         198(ms):     52(ptr) Variable Function
+       205(ms8A):    204(ptr) Variable Function
+       209(ms8B):    208(ptr) Variable Function
+       213(ms8C):    212(ptr) Variable Function
+        228(m16):    227(ptr) Variable Function
+                              Store 35(m) 37
+              38:          33 Load 35(m)
+              39:          33 Load 35(m)
+              40:          33 FAdd 38 39
+                              Store 35(m) 40
+              41:          33 Load 35(m)
+              42:          33 Load 35(m)
+              43:          33 FSub 41 42
+                              Store 35(m) 43
+              44:          33 Load 35(m)
+              45:          33 FNegate 44
+                              Store 35(m) 45
+              47:          33 Load 35(m)
+              48:          33 MatrixTimesScalar 47 46
+                              Store 35(m) 48
+              49:          33 Load 35(m)
+              50:          33 MatrixTimesScalar 49 46
+                              Store 35(m) 50
+              54:          33 Load 35(m)
+              55:          51 FConvert 54
+                              Store 53(m2) 55
+              60:     56(ptr) AccessChain 35(m) 59
+              61:   17(float) Load 60
+                              Store 57(x) 61
+              63:   17(float) Load 57(x)
+              64:     56(ptr) AccessChain 35(m) 62
+                              Store 64 63
+              74:     73(ptr) AccessChain 71(block) 59 32
+              77:          33 CooperativeMatrixLoadKHR 74 76 75 MakePointerVisibleKHR NonPrivatePointerKHR 72
+                              Store 65(tempArg) 77
+              78:          33 Load 65(tempArg)
+                              Store 35(m) 78
+              79:          33 Load 35(m)
+              80:     73(ptr) AccessChain 71(block) 59 32
+                              CooperativeMatrixStoreKHR 80 79 76 75 MakePointerAvailableKHR NonPrivatePointerKHR 72
+              93:     92(ptr) AccessChain 91(block16) 59 32
+              94:          51 CooperativeMatrixLoadKHR 93 76 75 MakePointerVisibleKHR NonPrivatePointerKHR 72
+                              Store 81(tempArg) 94
+              95:          51 Load 81(tempArg)
+                              Store 53(m2) 95
+              96:          51 Load 53(m2)
+              97:     92(ptr) AccessChain 91(block16) 59 32
+                              CooperativeMatrixStoreKHR 97 96 76 75 MakePointerAvailableKHR NonPrivatePointerKHR 72
+             101:    100(ptr) AccessChain 91(block16) 99
+             102:     85(ptr) Load 101 MakePointerVisibleKHR NonPrivatePointerKHR 72
+             104:    103(ptr) AccessChain 102 59 32
+             105:          33 CooperativeMatrixLoadKHR 104 76 75 Aligned MakePointerVisibleKHR NonPrivatePointerKHR 16 72
+                              Store 98(tempArg) 105
+             106:          33 Load 98(tempArg)
+                              Store 35(m) 106
+             107:          33 Load 35(m)
+             108:    100(ptr) AccessChain 91(block16) 99
+             109:     85(ptr) Load 108 MakePointerVisibleKHR NonPrivatePointerKHR 72
+             110:    103(ptr) AccessChain 109 59 32
+                              CooperativeMatrixStoreKHR 110 107 76 75 Aligned MakePointerAvailableKHR NonPrivatePointerKHR 16 72
+             116:         113 Load 115(A)
+             120:         117 Load 119(B)
+             122:          33 Load 121(C)
+             123:          33 CooperativeMatrixMulAddKHR 116 120 122
+                              Store 111(D) 123
+             126:      7(int) CooperativeMatrixLengthKHR 33
+             127:     58(int) Bitcast 126
+                              Store 125(l) 127
+                              Store 133(F) 135
+             141:     56(ptr) AccessChain 138(a) 139 62
+                              Store 141 140
+                              Store 142(md1) 36
+             143:          33 Load 35(m)
+             144:          33 Load 35(m)
+             145:          33 FAdd 144 143
+                              Store 35(m) 145
+             147:   17(float) CompositeExtract 145 1234
+             148:   17(float) Load 142(md1)
+             149:   17(float) FAdd 148 147
+                              Store 142(md1) 149
+             155:    154(ptr) AccessChain 153(mC2) 99
+             156:         150 Load 155
+             157:    154(ptr) AccessChain 153(mC2) 59
+                              Store 157 156
+             159:     73(ptr) AccessChain 71(block) 62 32
+             160:          33 CooperativeMatrixLoadKHR 159 76 75 MakePointerVisibleKHR NonPrivatePointerKHR 72
+                              Store 158(tempArg) 160
+             161:          33 Load 158(tempArg)
+                              Store 35(m) 161
+             162:          33 Load 35(m)
+             163:     73(ptr) AccessChain 71(block) 62 32
+                              CooperativeMatrixStoreKHR 163 162 76 75 MakePointerAvailableKHR NonPrivatePointerKHR 72
+             165:     92(ptr) AccessChain 91(block16) 62 32
+             166:          51 CooperativeMatrixLoadKHR 165 76 75 MakePointerVisibleKHR NonPrivatePointerKHR 72
+                              Store 164(tempArg) 166
+             167:          51 Load 164(tempArg)
+                              Store 53(m2) 167
+             168:          51 Load 53(m2)
+             169:     92(ptr) AccessChain 91(block16) 62 32
+                              CooperativeMatrixStoreKHR 169 168 76 75 MakePointerAvailableKHR NonPrivatePointerKHR 72
+             172:          11 Load 170(p1)
+                              Store 171(param) 172
+             173:          11 FunctionCall 15(f16(f161;) 171(param)
+                              Store 170(p1) 173
+             176:          18 Load 174(p2)
+                              Store 175(param) 176
+             177:          18 FunctionCall 22(f32(f1;) 175(param)
+                              Store 174(p2) 177
+                              Store 170(p1) 178
+                              Store 174(p2) 179
+             180:          11 Load 170(p1)
+             181:          11 Load 170(p1)
+             182:          11 FDiv 181 180
+                              Store 170(p1) 182
+             184:          11 Load 170(p1)
+             185:          11 MatrixTimesScalar 184 183
+                              Store 170(p1) 185
+             187:          18 Load 174(p2)
+             188:          18 MatrixTimesScalar 187 186
+                              Store 174(p2) 188
+             196:    195(ptr) AccessChain 194(shmatrix) 83
+             197:          51 CooperativeMatrixLoadKHR 196 76 10 MakePointerVisibleKHR NonPrivatePointerKHR 10
+                              Store 189(tempArg) 197
+             199:          51 Load 189(tempArg)
+                              Store 198(ms) 199
+             200:          51 Load 198(ms)
+             201:    195(ptr) AccessChain 194(shmatrix) 83
+                              CooperativeMatrixStoreKHR 201 200 76 10 MakePointerAvailableKHR NonPrivatePointerKHR 10
+             206:         203 Load 205(ms8A)
+             210:         207 Load 209(ms8B)
+             214:         211 Load 213(ms8C)
+             215:         211 CooperativeMatrixMulAddKHR 206 210 214 ASignedComponentsKHR BSignedComponentsKHR CSignedComponentsKHR ResultSignedComponentsKHR 
+             216:         203 Load 205(ms8A)
+             217:         207 Load 209(ms8B)
+             218:         211 Load 213(ms8C)
+             219:         211 CooperativeMatrixMulAddKHR 216 217 218 ASignedComponentsKHR BSignedComponentsKHR CSignedComponentsKHR ResultSignedComponentsKHR 
+             220:         203 Load 205(ms8A)
+             221:         207 Load 209(ms8B)
+             222:         211 Load 213(ms8C)
+             224:         211 CooperativeMatrixMulAddKHR 220 221 222 ASignedComponentsKHR BSignedComponentsKHR CSignedComponentsKHR ResultSignedComponentsKHR SaturatingAccumulationKHR 
+             229:         226 Load 228(m16)
+             230:    195(ptr) AccessChain 194(shmatrix) 83
+                              CooperativeMatrixStoreKHR 230 229 76 10 MakePointerAvailableKHR NonPrivatePointerKHR 10
+                              Return
+                              FunctionEnd
+   15(f16(f161;):          11 Function None 13
+           14(m):     12(ptr) FunctionParameter
+              16:             Label
+              24:          11 Load 14(m)
+              25:          11 FNegate 24
+                              ReturnValue 25
+                              FunctionEnd
+     22(f32(f1;):          18 Function None 20
+           21(m):     19(ptr) FunctionParameter
+              23:             Label
+              28:          18 Load 21(m)
+              29:          18 FNegate 28
+                              ReturnValue 29
+                              FunctionEnd
diff --git a/Test/baseResults/spv.dataOutIndirect.frag.out b/Test/baseResults/spv.dataOutIndirect.frag.out
index d07cfe9..e699d40 100644
--- a/Test/baseResults/spv.dataOutIndirect.frag.out
+++ b/Test/baseResults/spv.dataOutIndirect.frag.out
@@ -16,10 +16,10 @@
                               Name 16  "bName"
                               Name 22  "Color"
                               Decorate 12(fcolor) Location 0
-                              MemberDecorate 14(b) 0 Offset 0
                               Decorate 14(b) Block
-                              Decorate 16(bName) DescriptorSet 0
+                              MemberDecorate 14(b) 0 Offset 0
                               Decorate 16(bName) Binding 0
+                              Decorate 16(bName) DescriptorSet 0
                               Decorate 22(Color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.debugInfo.1.1.frag.out b/Test/baseResults/spv.debugInfo.1.1.frag.out
index 1272675..30543d6 100644
--- a/Test/baseResults/spv.debugInfo.1.1.frag.out
+++ b/Test/baseResults/spv.debugInfo.1.1.frag.out
@@ -129,12 +129,12 @@
                               Decorate 30(inv) Location 0
                               Decorate 104(outv) Location 0
                               MemberDecorate 105(S) 0 Offset 0
-                              MemberDecorate 106(ubuf) 0 Offset 0
                               Decorate 106(ubuf) Block
-                              Decorate 108 DescriptorSet 3
+                              MemberDecorate 106(ubuf) 0 Offset 0
                               Decorate 108 Binding 0
-                              Decorate 131(s2d) DescriptorSet 3
+                              Decorate 108 DescriptorSet 3
                               Decorate 131(s2d) Binding 1
+                              Decorate 131(s2d) DescriptorSet 3
                3:             TypeVoid
                4:             TypeFunction 3
                7:             TypeInt 32 1
@@ -296,6 +296,7 @@
                                 Store 179 186
                                 Branch 181
              181:             Label
+                              Line 1 83 0
                               Return
                               FunctionEnd
                               Line 1 16 13
@@ -411,6 +412,7 @@
                                 Store 90 96
                                 Branch 92
               92:             Label
+                              Line 1 53 0
               97:   10(float) Load 90
                               Line 1 51 0
               98:   10(float) Load 56(result)
diff --git a/Test/baseResults/spv.debugInfo.frag.out b/Test/baseResults/spv.debugInfo.frag.out
index 8bacd74..05621a6 100644
--- a/Test/baseResults/spv.debugInfo.frag.out
+++ b/Test/baseResults/spv.debugInfo.frag.out
@@ -129,13 +129,13 @@
                               Decorate 30(inv) Location 0
                               Decorate 104(outv) Location 0
                               MemberDecorate 105(S) 0 Offset 0
-                              MemberDecorate 106(ubuf) 0 Offset 0
                               Decorate 106(ubuf) Block
-                              Decorate 108 DescriptorSet 3
+                              MemberDecorate 106(ubuf) 0 Offset 0
                               Decorate 108 Binding 0
+                              Decorate 108 DescriptorSet 3
                               Decorate 131(s2d) Location 0
-                              Decorate 131(s2d) DescriptorSet 3
                               Decorate 131(s2d) Binding 1
+                              Decorate 131(s2d) DescriptorSet 3
                3:             TypeVoid
                4:             TypeFunction 3
                7:             TypeInt 32 1
@@ -297,6 +297,7 @@
                                 Store 179 186
                                 Branch 181
              181:             Label
+                              Line 1 83 0
                               Return
                               FunctionEnd
                               Line 1 16 13
@@ -412,6 +413,7 @@
                                 Store 90 96
                                 Branch 92
               92:             Label
+                              Line 1 53 0
               97:   10(float) Load 90
                               Line 1 51 0
               98:   10(float) Load 56(result)
diff --git a/Test/baseResults/spv.debuginfo.bufferref.glsl.frag.out b/Test/baseResults/spv.debuginfo.bufferref.glsl.frag.out
index f52e001..a117fd7 100644
--- a/Test/baseResults/spv.debuginfo.bufferref.glsl.frag.out
+++ b/Test/baseResults/spv.debuginfo.bufferref.glsl.frag.out
@@ -1,186 +1,232 @@
 spv.debuginfo.bufferref.glsl.frag
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 131
+// Id's are bound by 148
 
                               Capability Shader
                               Capability PhysicalStorageBufferAddressesEXT
                               Extension  "SPV_KHR_non_semantic_info"
                               Extension  "SPV_KHR_physical_storage_buffer"
+                              Extension  "SPV_KHR_relaxed_extended_instruction"
                               Extension  "SPV_KHR_storage_buffer_storage_class"
-               2:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
                3:             ExtInstImport  "GLSL.std.450"
                               MemoryModel PhysicalStorageBuffer64EXT GLSL450
-                              EntryPoint Fragment 14  "main" 69 122
+                              EntryPoint Fragment 14  "main" 82 135
                               ExecutionMode 14 OriginUpperLeft
-               1:             String  ""
+               2:             String  "spv.debuginfo.bufferref.glsl.frag"
                8:             String  "uint"
-              15:             String  "main"
-              18:             String  "// OpModuleProcessed auto-map-locations
+              16:             String  "main"
+              19:             String  "// OpModuleProcessed auto-map-locations
 // OpModuleProcessed auto-map-bindings
 // OpModuleProcessed client vulkan100
 // OpModuleProcessed target-env vulkan1.0
 // OpModuleProcessed keep-uncalled
 // OpModuleProcessed entry-point main
 #line 1
+#version 450 core
+#extension GL_EXT_buffer_reference : enable
+
+layout(buffer_reference, std430) buffer MeshVertexPositions {
+  float data[];
+};
+
+struct Mesh {
+  MeshVertexPositions positions;
+};
+
+layout(set = 0, binding = 0) readonly buffer PerPass_meshes {
+  Mesh data[];
+} perPass_meshes;
+
+layout(location = 0) out vec4 out_fragColor;
+
+layout(location = 0) in flat uint tri_idx0;
+
+void main() {
+    Mesh meshData = perPass_meshes.data[tri_idx0];
+
+    vec3 vertex_pos0 = vec3(meshData.positions.data[3 * tri_idx0],
+                            meshData.positions.data[3 * tri_idx0 + 1],
+                            meshData.positions.data[3 * tri_idx0 + 2]);
+    
+    out_fragColor = vec4(vertex_pos0, 1.0);
+}
 "
-              31:             String  "Mesh"
-              33:             String  "float"
-              39:             String  "data"
-              43:             String  "MeshVertexPositions"
-              47:             String  "meshData"
-              59:             String  "PerPass_meshes"
-              63:             String  "perPass_meshes"
-              65:             String  "int"
-              71:             String  "tri_idx0"
-              86:             String  "vertex_pos0"
-             124:             String  "out_fragColor"
+              33:             String  "positions"
+              37:             String  "Mesh"
+              40:             String  "float"
+              46:             String  "data"
+              49:             String  "MeshVertexPositions"
+              55:             String  "meshData"
+              69:             String  "PerPass_meshes"
+              75:             String  "perPass_meshes"
+              77:             String  "int"
+              84:             String  "tri_idx0"
+             100:             String  "vertex_pos0"
+             137:             String  "out_fragColor"
                               SourceExtension  "GL_EXT_buffer_reference"
                               Name 14  "main"
-                              Name 29  "Mesh"
-                              MemberName 29(Mesh) 0  "positions"
-                              Name 37  "MeshVertexPositions"
-                              MemberName 37(MeshVertexPositions) 0  "data"
-                              Name 45  "meshData"
-                              Name 50  "Mesh"
-                              MemberName 50(Mesh) 0  "positions"
-                              Name 54  "PerPass_meshes"
-                              MemberName 54(PerPass_meshes) 0  "data"
-                              Name 61  "perPass_meshes"
-                              Name 69  "tri_idx0"
-                              Name 84  "vertex_pos0"
-                              Name 122  "out_fragColor"
-                              Decorate 35 ArrayStride 4
-                              MemberDecorate 37(MeshVertexPositions) 0 Offset 0
-                              Decorate 37(MeshVertexPositions) Block
-                              MemberDecorate 50(Mesh) 0 Offset 0
-                              Decorate 52 ArrayStride 8
-                              MemberDecorate 54(PerPass_meshes) 0 NonWritable
-                              MemberDecorate 54(PerPass_meshes) 0 Offset 0
-                              Decorate 54(PerPass_meshes) Block
-                              Decorate 61(perPass_meshes) DescriptorSet 0
-                              Decorate 61(perPass_meshes) Binding 0
-                              Decorate 69(tri_idx0) Flat
-                              Decorate 69(tri_idx0) Location 0
-                              Decorate 122(out_fragColor) Location 0
-                              Decorate 45(meshData) DecorationAliasedPointerEXT
+                              Name 31  "Mesh"
+                              MemberName 31(Mesh) 0  "positions"
+                              Name 44  "MeshVertexPositions"
+                              MemberName 44(MeshVertexPositions) 0  "data"
+                              Name 53  "meshData"
+                              Name 59  "Mesh"
+                              MemberName 59(Mesh) 0  "positions"
+                              Name 64  "PerPass_meshes"
+                              MemberName 64(PerPass_meshes) 0  "data"
+                              Name 73  "perPass_meshes"
+                              Name 82  "tri_idx0"
+                              Name 98  "vertex_pos0"
+                              Name 135  "out_fragColor"
+                              Decorate 42 ArrayStride 4
+                              Decorate 44(MeshVertexPositions) Block
+                              MemberDecorate 44(MeshVertexPositions) 0 Offset 0
+                              Decorate 53(meshData) DecorationAliasedPointerEXT
+                              MemberDecorate 59(Mesh) 0 Offset 0
+                              Decorate 62 ArrayStride 8
+                              Decorate 64(PerPass_meshes) Block
+                              MemberDecorate 64(PerPass_meshes) 0 NonWritable
+                              MemberDecorate 64(PerPass_meshes) 0 Offset 0
+                              Decorate 73(perPass_meshes) NonWritable
+                              Decorate 73(perPass_meshes) Binding 0
+                              Decorate 73(perPass_meshes) DescriptorSet 0
+                              Decorate 82(tri_idx0) Flat
+                              Decorate 82(tri_idx0) Location 0
+                              Decorate 135(out_fragColor) Location 0
                4:             TypeVoid
                5:             TypeFunction 4
                7:             TypeInt 32 0
               10:      7(int) Constant 32
               11:      7(int) Constant 6
               12:      7(int) Constant 0
-               9:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 8 10 11 12
+               9:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 8 10 11 12
               13:      7(int) Constant 3
-               6:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4
-              17:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 1 18
-              20:      7(int) Constant 1
-              21:      7(int) Constant 4
-              22:      7(int) Constant 2
-              19:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 20 21 17 22
-              16:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 15 6 17 12 12 19 15 13 12
-              27:      7(int) Constant 21
+               6:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4
+              18:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 2 19
+              20:      7(int) Constant 20
+              22:      7(int) Constant 1
+              23:      7(int) Constant 4
+              24:      7(int) Constant 2
+              21:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 22 23 18 24
+              17:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 16 6 18 20 12 21 16 13 20
                               TypeForwardPointer 28 PhysicalStorageBufferEXT
-        29(Mesh):             TypeStruct 28
-              30:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 31 20 17 27 12 19 31 12 13
-              32:             TypeFloat 32
-              34:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 33 10 13 12
-              35:             TypeRuntimeArray 32(float)
-              36:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 34 12
-37(MeshVertexPositions):             TypeStruct 35
-              40:      7(int) Constant 5
-              41:      7(int) Constant 9
-              38:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 39 36 17 40 41 12 12 13
-              42:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 43 20 17 27 12 19 43 12 13 38
-              28:             TypePointer PhysicalStorageBufferEXT 37(MeshVertexPositions)
-              44:             TypePointer Function 29(Mesh)
-              46:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 47 30 17 27 12 16 21
-              49:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
-        50(Mesh):             TypeStruct 28(ptr)
-              51:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 31 20 17 27 12 19 31 12 13
-              52:             TypeRuntimeArray 50(Mesh)
-              53:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 51 12
-54(PerPass_meshes):             TypeStruct 52
-              56:      7(int) Constant 13
-              57:      7(int) Constant 8
-              55:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 39 53 17 56 57 12 12 13
-              58:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 59 20 17 27 12 19 59 12 13 55
-              60:             TypePointer StorageBuffer 54(PerPass_meshes)
-61(perPass_meshes):     60(ptr) Variable StorageBuffer
-              62:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 63 58 17 27 12 19 63 61(perPass_meshes) 57
-              64:             TypeInt 32 1
-              66:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 65 10 21 12
-              67:     64(int) Constant 0
-              68:             TypePointer Input 7(int)
-    69(tri_idx0):     68(ptr) Variable Input
-              70:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 71 9 17 27 12 19 71 69(tri_idx0) 57
-              73:             TypePointer StorageBuffer 50(Mesh)
-              77:             TypePointer Function 28(ptr)
-              80:      7(int) Constant 23
-              81:             TypeVector 32(float) 3
-              82:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 34 13
-              83:             TypePointer Function 81(fvec3)
-              85:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 86 82 17 80 12 16 21
-              89:      7(int) Constant 25
-              95:             TypePointer PhysicalStorageBufferEXT 32(float)
-              99:      7(int) Constant 24
-             118:      7(int) Constant 27
-             119:             TypeVector 32(float) 4
-             120:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 34 21
-             121:             TypePointer Output 119(fvec4)
-122(out_fragColor):    121(ptr) Variable Output
-             123:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 124 120 17 118 12 19 124 122(out_fragColor) 57
-             126:   32(float) Constant 1065353216
-                              Line 1 20 11
+              29:      7(int) Constant 5349
+              30:           4 ExtInstWithForwardRefsKHR 1(NonSemantic.Shader.DebugInfo.100) 3 48 29 12
+        31(Mesh):             TypeStruct 28
+              34:      7(int) Constant 9
+              35:      7(int) Constant 23
+              32:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 33 30 18 34 35 12 12 13
+              38:      7(int) Constant 21
+              36:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 37 22 18 38 12 21 37 12 13 32
+              39:             TypeFloat 32
+              41:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 40 10 13 12
+              42:             TypeRuntimeArray 39(float)
+              43:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 41 12
+44(MeshVertexPositions):             TypeStruct 42
+              47:      7(int) Constant 5
+              45:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 46 43 18 47 34 12 12 13
+              48:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 49 22 18 38 12 21 49 12 13 45
+              28:             TypePointer PhysicalStorageBufferEXT 44(MeshVertexPositions)
+              50:             TypePointer Function 31(Mesh)
+              51:      7(int) Constant 7
+              52:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 36 51 12
+              54:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 55 36 18 38 12 17 23
+              57:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
+        59(Mesh):             TypeStruct 28(ptr)
+              60:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 33 30 18 34 35 12 12 13
+              61:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 37 22 18 38 12 21 37 12 13 60
+              62:             TypeRuntimeArray 59(Mesh)
+              63:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 61 12
+64(PerPass_meshes):             TypeStruct 62
+              66:      7(int) Constant 13
+              67:      7(int) Constant 8
+              65:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 46 63 18 66 67 12 12 13
+              68:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 69 22 18 38 12 21 69 12 13 65
+              70:             TypePointer StorageBuffer 64(PerPass_meshes)
+              71:      7(int) Constant 12
+              72:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 68 71 12
+73(perPass_meshes):     70(ptr) Variable StorageBuffer
+              74:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 75 68 18 38 12 21 75 73(perPass_meshes) 67
+              76:             TypeInt 32 1
+              78:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 77 10 23 12
+              79:     76(int) Constant 0
+              80:             TypePointer Input 7(int)
+              81:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 9 22 12
+    82(tri_idx0):     80(ptr) Variable Input
+              83:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 84 9 18 38 12 21 84 82(tri_idx0) 67
+              86:             TypePointer StorageBuffer 59(Mesh)
+              87:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 61 71 12
+              91:             TypePointer Function 28(ptr)
+              92:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 30 51 12
+              94:             TypeVector 39(float) 3
+              95:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 41 13
+              96:             TypePointer Function 94(fvec3)
+              97:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 95 51 12
+              99:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 100 95 18 35 12 17 23
+             107:             TypePointer PhysicalStorageBufferEXT 39(float)
+             108:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 41 29 12
+             113:      7(int) Constant 24
+             122:      7(int) Constant 25
+             131:             TypeVector 39(float) 4
+             132:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 41 23
+             133:             TypePointer Output 131(fvec4)
+             134:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 132 13 12
+135(out_fragColor):    133(ptr) Variable Output
+             138:      7(int) Constant 27
+             136:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 137 132 18 138 12 21 137 135(out_fragColor) 67
+             141:   39(float) Constant 1065353216
+             147:      7(int) Constant 28
         14(main):           4 Function None 5
-              23:             Label
-    45(meshData):     44(ptr) Variable Function
- 84(vertex_pos0):     83(ptr) Variable Function
-              24:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 16 14(main)
-              25:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-              26:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 27 27 12 12
-              48:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 46 45(meshData) 49
-              72:      7(int) Load 69(tri_idx0)
-              74:     73(ptr) AccessChain 61(perPass_meshes) 67 72
-              75:    50(Mesh) Load 74
-              76:     28(ptr) CompositeExtract 75 0
-              78:     77(ptr) AccessChain 45(meshData) 67
-                              Store 78 76
-              79:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 80 80 12 12
-              87:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 85 84(vertex_pos0) 49
-              88:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 89 89 12 12
-              90:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 80 80 12 12
-              91:     77(ptr) AccessChain 45(meshData) 67
-              92:     28(ptr) Load 91
-              93:      7(int) Load 69(tri_idx0)
-              94:      7(int) IMul 13 93
-              96:     95(ptr) AccessChain 92 67 94
-              97:   32(float) Load 96 Aligned 4
-              98:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 99 99 12 12
-             100:     77(ptr) AccessChain 45(meshData) 67
-             101:     28(ptr) Load 100
-             102:      7(int) Load 69(tri_idx0)
-             103:      7(int) IMul 13 102
-             104:      7(int) IAdd 103 20
-             105:     95(ptr) AccessChain 101 67 104
-             106:   32(float) Load 105 Aligned 4
-             107:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 89 89 12 12
-             108:     77(ptr) AccessChain 45(meshData) 67
-             109:     28(ptr) Load 108
-             110:      7(int) Load 69(tri_idx0)
-             111:      7(int) IMul 13 110
-             112:      7(int) IAdd 111 22
-             113:     95(ptr) AccessChain 109 67 112
-             114:   32(float) Load 113 Aligned 4
-             115:   81(fvec3) CompositeConstruct 97 106 114
-             116:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 80 80 12 12
-                              Store 84(vertex_pos0) 115
-             117:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 118 118 12 12
-             125:   81(fvec3) Load 84(vertex_pos0)
-             127:   32(float) CompositeExtract 125 0
-             128:   32(float) CompositeExtract 125 1
-             129:   32(float) CompositeExtract 125 2
-             130:  119(fvec4) CompositeConstruct 127 128 129 126
-                              Store 122(out_fragColor) 130
+              15:             Label
+    53(meshData):     50(ptr) Variable Function
+ 98(vertex_pos0):     96(ptr) Variable Function
+              26:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+              27:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 20 20 12 12
+              25:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 17 14(main)
+              58:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 38 38 12 12
+              56:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 54 53(meshData) 57
+              85:      7(int) Load 82(tri_idx0)
+              88:     86(ptr) AccessChain 73(perPass_meshes) 79 85
+              89:    59(Mesh) Load 88
+              90:     28(ptr) CompositeExtract 89 0
+              93:     91(ptr) AccessChain 53(meshData) 79
+                              Store 93 90
+             102:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 35 35 12 12
+             101:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 99 98(vertex_pos0) 57
+             103:     91(ptr) AccessChain 53(meshData) 79
+             104:     28(ptr) Load 103
+             105:      7(int) Load 82(tri_idx0)
+             106:      7(int) IMul 13 105
+             109:    107(ptr) AccessChain 104 79 106
+             110:   39(float) Load 109 Aligned 4
+             112:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 113 113 12 12
+             111:     91(ptr) AccessChain 53(meshData) 79
+             114:     28(ptr) Load 111
+             115:      7(int) Load 82(tri_idx0)
+             116:      7(int) IMul 13 115
+             117:      7(int) IAdd 116 22
+             118:    107(ptr) AccessChain 114 79 117
+             119:   39(float) Load 118 Aligned 4
+             121:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 122 122 12 12
+             120:     91(ptr) AccessChain 53(meshData) 79
+             123:     28(ptr) Load 120
+             124:      7(int) Load 82(tri_idx0)
+             125:      7(int) IMul 13 124
+             126:      7(int) IAdd 125 24
+             127:    107(ptr) AccessChain 123 79 126
+             128:   39(float) Load 127 Aligned 4
+             129:   94(fvec3) CompositeConstruct 110 119 128
+             130:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 35 35 12 12
+                              Store 98(vertex_pos0) 129
+             140:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 138 138 12 12
+             139:   94(fvec3) Load 98(vertex_pos0)
+             142:   39(float) CompositeExtract 139 0
+             143:   39(float) CompositeExtract 139 1
+             144:   39(float) CompositeExtract 139 2
+             145:  131(fvec4) CompositeConstruct 142 143 144 141
+                              Store 135(out_fragColor) 145
+             146:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 147 147 12 12
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.debuginfo.const_params.glsl.comp.out b/Test/baseResults/spv.debuginfo.const_params.glsl.comp.out
index 846e0e3..c36a72d 100644
--- a/Test/baseResults/spv.debuginfo.const_params.glsl.comp.out
+++ b/Test/baseResults/spv.debuginfo.const_params.glsl.comp.out
@@ -1,96 +1,113 @@
 spv.debuginfo.const_params.glsl.comp
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 68
+// Id's are bound by 73
 
                               Capability Shader
                               Extension  "SPV_KHR_non_semantic_info"
-               2:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
                3:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
                               EntryPoint GLCompute 14  "main"
                               ExecutionMode 14 LocalSize 1 1 1
-               1:             String  ""
+               2:             String  "spv.debuginfo.const_params.glsl.comp"
                8:             String  "uint"
-              15:             String  "main"
-              18:             String  "// OpModuleProcessed auto-map-locations
+              17:             String  "float"
+              35:             String  "function"
+              38:             String  "// OpModuleProcessed auto-map-locations
 // OpModuleProcessed auto-map-bindings
 // OpModuleProcessed client vulkan100
 // OpModuleProcessed target-env vulkan1.0
 // OpModuleProcessed keep-uncalled
 // OpModuleProcessed entry-point main
 #line 1
+#version 450
+
+void function(
+    const float f,
+    const vec2 f2,
+    const vec3 f3,
+    const vec4 f4)
+{
+}
+
+void main()
+{
+    function(0, vec2(0), vec3(0), vec4(0));
+}
 "
-              25:             String  "float"
-              40:             String  "function"
-              46:             String  "f"
-              50:             String  "f2"
-              53:             String  "f3"
-              56:             String  "f4"
+              43:             String  "f"
+              49:             String  "f2"
+              52:             String  "f3"
+              55:             String  "f4"
+              57:             String  "main"
                               Name 14  "main"
-                              Name 39  "function(f1;vf2;vf3;vf4;"
-                              Name 35  "f"
-                              Name 36  "f2"
-                              Name 37  "f3"
-                              Name 38  "f4"
+                              Name 33  "function(f1;vf2;vf3;vf4;"
+                              Name 29  "f"
+                              Name 30  "f2"
+                              Name 31  "f3"
+                              Name 32  "f4"
                4:             TypeVoid
                5:             TypeFunction 4
                7:             TypeInt 32 0
               10:      7(int) Constant 32
               11:      7(int) Constant 6
               12:      7(int) Constant 0
-               9:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 8 10 11 12
+               9:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 8 10 11 12
               13:      7(int) Constant 3
-               6:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4
-              17:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 1 18
-              20:      7(int) Constant 1
-              21:      7(int) Constant 4
-              22:      7(int) Constant 2
-              19:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 20 21 17 22
-              16:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 15 6 17 12 12 19 15 13 12
-              24:             TypeFloat 32
-              26:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 25 10 13 12
-              27:             TypeVector 24(float) 2
-              28:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 26 22
-              29:             TypeVector 24(float) 3
-              30:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 26 13
-              31:             TypeVector 24(float) 4
-              32:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 26 21
-              33:             TypeFunction 4 24(float) 27(fvec2) 29(fvec3) 31(fvec4)
-              34:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4 26 28 30 32
-              41:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 40 34 17 12 12 19 40 13 12
-              45:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 46 26 17 12 12 41 21 20
-              48:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
-              49:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 50 28 17 12 12 41 21 22
-              52:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 53 30 17 12 12 41 21 13
-              55:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 56 32 17 12 12 41 21 21
-              62:      7(int) Constant 13
-              63:   24(float) Constant 0
-              64:   27(fvec2) ConstantComposite 63 63
-              65:   29(fvec3) ConstantComposite 63 63 63
-              66:   31(fvec4) ConstantComposite 63 63 63 63
-                              Line 1 11 11
+               6:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4
+              16:             TypeFloat 32
+              18:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 17 10 13 12
+              19:             TypeVector 16(float) 2
+              20:      7(int) Constant 2
+              21:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 18 20
+              22:             TypeVector 16(float) 3
+              23:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 18 13
+              24:             TypeVector 16(float) 4
+              25:      7(int) Constant 4
+              26:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 18 25
+              27:             TypeFunction 4 16(float) 19(fvec2) 22(fvec3) 24(fvec4)
+              28:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4 18 21 23 26
+              37:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 2 38
+              39:      7(int) Constant 7
+              41:      7(int) Constant 1
+              40:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 41 25 37 20
+              36:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 35 28 37 39 12 40 35 13 39
+              42:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 43 18 37 39 12 36 25 41
+              45:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
+              48:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 49 21 37 39 12 36 25 20
+              51:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 52 23 37 39 12 36 25 13
+              54:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 55 26 37 39 12 36 25 25
+              59:      7(int) Constant 11
+              58:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 57 6 37 59 12 40 57 13 59
+              64:   16(float) Constant 0
+              65:   19(fvec2) ConstantComposite 64 64
+              66:   22(fvec3) ConstantComposite 64 64 64
+              67:   24(fvec4) ConstantComposite 64 64 64 64
+              70:      7(int) Constant 13
+              72:      7(int) Constant 14
         14(main):           4 Function None 5
-              23:             Label
-              59:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 16 14(main)
-              60:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-              61:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 62 62 12 12
-              67:           4 FunctionCall 39(function(f1;vf2;vf3;vf4;) 63 64 65 66
+              15:             Label
+              62:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
+              63:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 37 59 59 12 12
+              61:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 58 14(main)
+              69:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 37 70 70 12 12
+              68:           4 FunctionCall 33(function(f1;vf2;vf3;vf4;) 64 65 66 67
+              71:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 37 72 72 12 12
                               Return
                               FunctionEnd
-                              Line 1 7 18
-39(function(f1;vf2;vf3;vf4;):           4 Function None 33
-           35(f):   24(float) FunctionParameter
-          36(f2):   27(fvec2) FunctionParameter
-          37(f3):   29(fvec3) FunctionParameter
-          38(f4):   31(fvec4) FunctionParameter
-              42:             Label
-              43:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 41
-              44:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 12 12 12 12
-              47:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 45 35(f) 48
-              51:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 49 36(f2) 48
-              54:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 52 37(f3) 48
-              57:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 55 38(f4) 48
-              58:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 41 39(function(f1;vf2;vf3;vf4;)
+33(function(f1;vf2;vf3;vf4;):           4 Function None 27
+           29(f):   16(float) FunctionParameter
+          30(f2):   19(fvec2) FunctionParameter
+          31(f3):   22(fvec3) FunctionParameter
+          32(f4):   24(fvec4) FunctionParameter
+              34:             Label
+              46:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 36
+              47:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 37 39 39 12 12
+              44:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 29(DebugValue) 42 29(f) 45
+              50:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 29(DebugValue) 48 30(f2) 45
+              53:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 29(DebugValue) 51 31(f3) 45
+              56:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 29(DebugValue) 54 32(f4) 45
+              60:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 36 33(function(f1;vf2;vf3;vf4;)
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.debuginfo.coopmatKHR.comp.out b/Test/baseResults/spv.debuginfo.coopmatKHR.comp.out
new file mode 100644
index 0000000..bc52759
--- /dev/null
+++ b/Test/baseResults/spv.debuginfo.coopmatKHR.comp.out
@@ -0,0 +1,623 @@
+spv.debuginfo.coopmatKHR.comp
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 380
+
+                              Capability Shader
+                              Capability Float16
+                              Capability StorageUniformBufferBlock16
+                              Capability VulkanMemoryModelKHR
+                              Capability CooperativeMatrixKHR
+                              Extension  "SPV_KHR_16bit_storage"
+                              Extension  "SPV_KHR_cooperative_matrix"
+                              Extension  "SPV_KHR_non_semantic_info"
+                              Extension  "SPV_KHR_storage_buffer_storage_class"
+                              Extension  "SPV_KHR_vulkan_memory_model"
+               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               3:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical VulkanKHR
+                              EntryPoint GLCompute 14  "main"
+                              ExecutionMode 14 LocalSize 1 1 1
+               2:             String  "spv.debuginfo.coopmatKHR.comp"
+               8:             String  "uint"
+              16:             String  "main"
+              19:             String  "// OpModuleProcessed auto-map-locations
+// OpModuleProcessed auto-map-bindings
+// OpModuleProcessed client vulkan100
+// OpModuleProcessed target-env vulkan1.0
+// OpModuleProcessed keep-uncalled
+// OpModuleProcessed entry-point main
+// OpModuleProcessed use-vulkan-memory-model
+// OpModuleProcessed use-vulkan-memory-model
+// OpModuleProcessed use-vulkan-memory-model
+// OpModuleProcessed use-vulkan-memory-model
+#line 1
+/*
+ * Copyright (c) 2019-2024, NVIDIA CORPORATION. All rights reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is 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 Software.
+ *
+ * THE SOFTWARE IS 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 SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+#version 450 core
+#pragma use_vulkan_memory_model
+#extension GL_EXT_scalar_block_layout : enable
+#extension GL_KHR_memory_scope_semantics : enable
+#extension GL_KHR_cooperative_matrix : enable
+#extension GL_EXT_shader_explicit_arithmetic_types_float16 : enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int8 : enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int32 : enable
+#extension GL_EXT_buffer_reference : enable
+#extension GL_EXT_control_flow_attributes : enable
+
+layout(constant_id = 0) const uint lM = 1;
+layout(constant_id = 1) const uint lN = 1;
+layout(constant_id = 2) const uint lK = 1;
+layout(constant_id = 3) const uint TILE_M = 1;
+layout(constant_id = 4) const uint TILE_N = 1;
+layout(constant_id = 5) const uint TILE_K = 1;
+layout(constant_id = 6) const uint K = 1;
+
+#define A_BITS 16
+#define A_TYPE float16_t
+#define C_BITS 16
+#define C_TYPE float16_t
+
+buffer Output { C_TYPE x[]; } outputO;
+
+shared uvec4 Ash[128];
+shared uvec4 Bsh[128];
+
+const uint C_ROWS = 2;
+const uint C_COLS = 2;
+coopmat<C_TYPE, gl_ScopeSubgroup, lM, lN, gl_MatrixUseAccumulator> result[C_ROWS][C_COLS];
+
+void main()
+{
+    [[unroll]] for (uint i = 0; i < C_ROWS; ++i) {
+        [[unroll]] for (uint j = 0; j < C_COLS; ++j) {
+            result[i][j] = coopmat<C_TYPE, gl_ScopeSubgroup, lM, lN, gl_MatrixUseAccumulator>(0.0);
+        }
+    }
+
+    for (uint chunkK = 0; chunkK < K; chunkK += TILE_K) {
+        [[unroll]] for (uint k = 0; k < TILE_K / lK; ++k)
+        {
+            coopmat<A_TYPE, gl_ScopeSubgroup, lM, lK, gl_MatrixUseA> matA[C_ROWS];
+            [[unroll]] for (uint i = 0; i < C_ROWS; ++i) {
+                coopMatLoad(matA[i], Ash, 0, 0, gl_CooperativeMatrixLayoutRowMajor);
+            }
+
+            coopmat<A_TYPE, gl_ScopeSubgroup, lK, lN, gl_MatrixUseB> matB;
+            [[unroll]] for (uint j = 0; j < C_COLS; ++j) {
+                coopMatLoad(matB, Bsh, 0, 0, gl_CooperativeMatrixLayoutRowMajor);
+
+                [[unroll]] for (uint i = 0; i < C_ROWS; ++i) {
+                    result[i][j] = coopMatMulAdd(matA[i], matB, result[i][j]);
+                }
+            }
+        }
+    }
+
+    [[unroll]] for (uint i = 0; i < C_ROWS; ++i) {
+        [[unroll]] for (uint j = 0; j < C_COLS; ++j) {
+            coopMatStore(result[i][j], outputO.x, 0, 0, gl_CooperativeMatrixLayoutRowMajor);
+        }
+    }
+}
+"
+              33:             String  "i"
+              49:             String  "bool"
+              54:             String  "j"
+              71:             String  "float16_t"
+              78:             String  "coopmat<float16_t, gl_ScopeSubgroup, lM, lN>"
+              80:             String  "@coopmat<float16_t, gl_ScopeSubgroup, lM, lN>"
+              90:             String  "result"
+             106:             String  "int"
+             116:             String  "chunkK"
+             135:             String  "k"
+             173:             String  "coopmat<float16_t, gl_ScopeSubgroup, lM, lK>"
+             175:             String  "@coopmat<float16_t, gl_ScopeSubgroup, lM, lK>"
+             180:             String  "tempArg"
+             193:             String  "Ash"
+             207:             String  "matA"
+             237:             String  "coopmat<float16_t, gl_ScopeSubgroup, lK, lN>"
+             239:             String  "@coopmat<float16_t, gl_ScopeSubgroup, lK, lN>"
+             249:             String  "Bsh"
+             256:             String  "matB"
+             353:             String  "x"
+             357:             String  "Output"
+             363:             String  "outputO"
+                              SourceExtension  "GL_EXT_buffer_reference"
+                              SourceExtension  "GL_EXT_control_flow_attributes"
+                              SourceExtension  "GL_EXT_scalar_block_layout"
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_float16"
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_int32"
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_int8"
+                              SourceExtension  "GL_KHR_cooperative_matrix"
+                              SourceExtension  "GL_KHR_memory_scope_semantics"
+                              Name 14  "main"
+                              Name 31  "i"
+                              Name 52  "j"
+                              Name 74  "lM"
+                              Name 75  "lN"
+                              Name 88  "result"
+                              Name 114  "chunkK"
+                              Name 131  "K"
+                              Name 133  "k"
+                              Name 150  "TILE_K"
+                              Name 151  "lK"
+                              Name 154  "i"
+                              Name 178  "tempArg"
+                              Name 191  "Ash"
+                              Name 205  "matA"
+                              Name 218  "j"
+                              Name 242  "tempArg"
+                              Name 247  "Bsh"
+                              Name 254  "matB"
+                              Name 261  "i"
+                              Name 308  "i"
+                              Name 325  "j"
+                              Name 351  "Output"
+                              MemberName 351(Output) 0  "x"
+                              Name 361  "outputO"
+                              Name 378  "TILE_M"
+                              Name 379  "TILE_N"
+                              Decorate 74(lM) SpecId 0
+                              Decorate 75(lN) SpecId 1
+                              Decorate 131(K) SpecId 6
+                              Decorate 150(TILE_K) SpecId 5
+                              Decorate 151(lK) SpecId 2
+                              Decorate 349 ArrayStride 2
+                              Decorate 351(Output) Block
+                              MemberDecorate 351(Output) 0 Offset 0
+                              Decorate 361(outputO) Binding 0
+                              Decorate 361(outputO) DescriptorSet 0
+                              Decorate 378(TILE_M) SpecId 3
+                              Decorate 379(TILE_N) SpecId 4
+               4:             TypeVoid
+               5:             TypeFunction 4
+               7:             TypeInt 32 0
+              10:      7(int) Constant 32
+              11:      7(int) Constant 6
+              12:      7(int) Constant 0
+               9:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 8 10 11 12
+              13:      7(int) Constant 3
+               6:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4
+              18:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 2 19
+              20:      7(int) Constant 55
+              22:      7(int) Constant 1
+              23:      7(int) Constant 4
+              24:      7(int) Constant 2
+              21:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 22 23 18 24
+              17:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 16 6 18 20 12 21 16 13 20
+              28:             TypePointer Function 7(int)
+              29:      7(int) Constant 7
+              30:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 9 29 12
+              34:      7(int) Constant 57
+              32:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 33 9 18 34 12 17 23
+              36:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
+              48:             TypeBool
+              50:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 49 10 24 12
+              55:      7(int) Constant 58
+              53:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 54 9 18 55 12 17 23
+              70:             TypeFloat 16
+              73:      7(int) Constant 16
+              72:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 71 73 13 12
+          74(lM):      7(int) SpecConstant 1
+          75(lN):      7(int) SpecConstant 1
+              76:             TypeCooperativeMatrixKHR 70(float16_t) 13 74(lM) 75(lN) 24
+              79:      7(int) Constant 53
+              81:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 0(DebugInfoNone)
+              77:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 78 22 18 79 12 21 80 81 13
+              82:             TypeArray 76 24
+              83:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 77 24
+              84:             TypeArray 82 24
+              85:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 83 24
+              86:             TypePointer Private 84
+              87:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 85 11 12
+      88(result):     86(ptr) Variable Private
+              91:      7(int) Constant 8
+              89:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 90 85 18 79 12 21 90 88(result) 91
+              95:      7(int) Constant 59
+              97:70(float16_t) Constant 0
+              98:          76 ConstantComposite 97
+              99:             TypePointer Private 76
+             100:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 77 11 12
+             105:             TypeInt 32 1
+             107:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 106 10 23 12
+             108:    105(int) Constant 1
+             117:      7(int) Constant 63
+             115:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 116 9 18 117 12 17 23
+          131(K):      7(int) SpecConstant 1
+             136:      7(int) Constant 64
+             134:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 135 9 18 136 12 17 23
+     150(TILE_K):      7(int) SpecConstant 1
+         151(lK):      7(int) SpecConstant 1
+             152:      7(int) SpecConstantOp 134 150(TILE_K) 151(lK)
+             156:      7(int) Constant 67
+             155:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 33 9 18 156 12 17 23
+             171:             TypeCooperativeMatrixKHR 70(float16_t) 13 74(lM) 151(lK) 12
+             174:      7(int) Constant 66
+             172:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 173 22 18 174 12 21 175 81 13
+             176:             TypePointer Function 171
+             177:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 172 29 12
+             179:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 180 172 18 174 12 17 23
+             184:             TypeVector 7(int) 4
+             185:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 9 23
+             186:      7(int) Constant 128
+             187:             TypeArray 184(ivec4) 186
+             188:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 185 186
+             189:             TypePointer Workgroup 187
+             190:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 188 23 12
+        191(Ash):    189(ptr) Variable Workgroup
+             194:      7(int) Constant 68
+             192:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 193 188 18 194 12 21 193 191(Ash) 91
+             195:             TypePointer Workgroup 184(ivec4)
+             196:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 185 23 12
+             199:    105(int) Constant 0
+             201:             TypeArray 171 24
+             202:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 172 24
+             203:             TypePointer Function 201
+             204:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 202 29 12
+             206:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 207 202 18 174 12 17 23
+             220:      7(int) Constant 72
+             219:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 54 9 18 220 12 17 23
+             235:             TypeCooperativeMatrixKHR 70(float16_t) 13 151(lK) 75(lN) 22
+             238:      7(int) Constant 71
+             236:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 237 22 18 238 12 21 239 81 13
+             240:             TypePointer Function 235
+             241:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 236 29 12
+             243:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 180 236 18 238 12 17 23
+        247(Bsh):    189(ptr) Variable Workgroup
+             250:      7(int) Constant 73
+             248:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 249 188 18 250 12 21 249 247(Bsh) 91
+             255:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 256 236 18 238 12 17 23
+             263:      7(int) Constant 75
+             262:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 33 9 18 263 12 17 23
+             280:      7(int) Constant 76
+             310:      7(int) Constant 82
+             309:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 33 9 18 310 12 17 23
+             327:      7(int) Constant 83
+             326:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 54 9 18 327 12 17 23
+             345:      7(int) Constant 84
+             349:             TypeRuntimeArray 70(float16_t)
+             350:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 72 12
+     351(Output):             TypeStruct 349
+             354:      7(int) Constant 46
+             355:      7(int) Constant 24
+             352:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 353 350 18 354 355 12 12 13
+             356:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 357 22 18 345 12 21 357 12 13 352
+             358:             TypePointer StorageBuffer 351(Output)
+             359:      7(int) Constant 12
+             360:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 356 359 12
+    361(outputO):    358(ptr) Variable StorageBuffer
+             362:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 363 356 18 345 12 21 363 361(outputO) 91
+             364:             TypePointer StorageBuffer 70(float16_t)
+             365:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 72 359 12
+             377:      7(int) Constant 87
+     378(TILE_M):      7(int) SpecConstant 1
+     379(TILE_N):      7(int) SpecConstant 1
+        14(main):           4 Function None 5
+              15:             Label
+           31(i):     28(ptr) Variable Function
+           52(j):     28(ptr) Variable Function
+     114(chunkK):     28(ptr) Variable Function
+          133(k):     28(ptr) Variable Function
+          154(i):     28(ptr) Variable Function
+    178(tempArg):    176(ptr) Variable Function
+       205(matA):    203(ptr) Variable Function
+          218(j):     28(ptr) Variable Function
+    242(tempArg):    240(ptr) Variable Function
+       254(matB):    240(ptr) Variable Function
+          261(i):     28(ptr) Variable Function
+          308(i):     28(ptr) Variable Function
+          325(j):     28(ptr) Variable Function
+              26:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+              27:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 20 20 12 12
+              25:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 17 14(main)
+              37:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 34 34 12 12
+              35:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 32 31(i) 36
+                              Store 31(i) 12
+                              Branch 38
+              38:             Label
+              42:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+              43:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 34 34 12 12
+                              LoopMerge 40 41 Unroll 
+                              Branch 44
+              44:             Label
+              46:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+              47:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 34 34 12 12
+              45:      7(int) Load 31(i)
+              51:    48(bool) ULessThan 45 24
+                              BranchConditional 51 39 40
+              39:               Label
+              57:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+              58:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 55 55 12 12
+              56:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 53 52(j) 36
+                                Store 52(j) 12
+                                Branch 59
+              59:               Label
+              63:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+              64:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 55 55 12 12
+                                LoopMerge 61 62 Unroll 
+                                Branch 65
+              65:               Label
+              67:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+              68:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 55 55 12 12
+              66:      7(int)   Load 52(j)
+              69:    48(bool)   ULessThan 66 24
+                                BranchConditional 69 60 61
+              60:                 Label
+              93:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+              94:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 95 95 12 12
+              92:      7(int)     Load 31(i)
+              96:      7(int)     Load 52(j)
+             101:     99(ptr)     AccessChain 88(result) 92 96
+                                  Store 101 98
+                                  Branch 62
+              62:                 Label
+             103:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+             104:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 55 55 12 12
+             102:      7(int)     Load 52(j)
+             109:      7(int)     IAdd 102 108
+                                  Store 52(j) 109
+                                  Branch 59
+              61:               Label
+                                Branch 41
+              41:               Label
+             111:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+             112:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 34 34 12 12
+             110:      7(int)   Load 31(i)
+             113:      7(int)   IAdd 110 108
+                                Store 31(i) 113
+                                Branch 38
+              40:             Label
+             119:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+             120:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 117 117 12 12
+             118:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 115 114(chunkK) 36
+                              Store 114(chunkK) 12
+                              Branch 121
+             121:             Label
+             125:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+             126:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 117 117 12 12
+                              LoopMerge 123 124 None
+                              Branch 127
+             127:             Label
+             129:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+             130:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 117 117 12 12
+             128:      7(int) Load 114(chunkK)
+             132:    48(bool) ULessThan 128 131(K)
+                              BranchConditional 132 122 123
+             122:               Label
+             138:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+             139:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 136 136 12 12
+             137:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 134 133(k) 36
+                                Store 133(k) 12
+                                Branch 140
+             140:               Label
+             144:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+             145:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 136 136 12 12
+                                LoopMerge 142 143 Unroll 
+                                Branch 146
+             146:               Label
+             148:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+             149:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 136 136 12 12
+             147:      7(int)   Load 133(k)
+             153:    48(bool)   ULessThan 147 152
+                                BranchConditional 153 141 142
+             141:                 Label
+             158:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+             159:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 156 156 12 12
+             157:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 155 154(i) 36
+                                  Store 154(i) 12
+                                  Branch 160
+             160:                 Label
+             164:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+             165:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 156 156 12 12
+                                  LoopMerge 162 163 Unroll 
+                                  Branch 166
+             166:                 Label
+             168:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+             169:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 156 156 12 12
+             167:      7(int)     Load 154(i)
+             170:    48(bool)     ULessThan 167 24
+                                  BranchConditional 170 161 162
+             161:                   Label
+             182:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+             183:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 174 174 12 12
+             181:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 179 178(tempArg) 36
+             198:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 194 194 12 12
+             197:    195(ptr)       AccessChain 191(Ash) 12
+             200:         171       CooperativeMatrixLoadKHR 197 199 12 MakePointerVisibleKHR NonPrivatePointerKHR 24
+                                    Store 178(tempArg) 200
+             209:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 174 174 12 12
+             208:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 206 205(matA) 36
+             211:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 194 194 12 12
+             210:      7(int)       Load 154(i)
+             212:         171       Load 178(tempArg)
+             213:    176(ptr)       AccessChain 205(matA) 210
+                                    Store 213 212
+                                    Branch 163
+             163:                   Label
+             215:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+             216:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 156 156 12 12
+             214:      7(int)       Load 154(i)
+             217:      7(int)       IAdd 214 108
+                                    Store 154(i) 217
+                                    Branch 160
+             162:                 Label
+             222:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+             223:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 220 220 12 12
+             221:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 219 218(j) 36
+                                  Store 218(j) 12
+                                  Branch 224
+             224:                 Label
+             228:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+             229:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 220 220 12 12
+                                  LoopMerge 226 227 Unroll 
+                                  Branch 230
+             230:                 Label
+             232:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+             233:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 220 220 12 12
+             231:      7(int)     Load 218(j)
+             234:    48(bool)     ULessThan 231 24
+                                  BranchConditional 234 225 226
+             225:                   Label
+             245:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+             246:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 238 238 12 12
+             244:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 243 242(tempArg) 36
+             252:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 250 250 12 12
+             251:    195(ptr)       AccessChain 247(Bsh) 12
+             253:         235       CooperativeMatrixLoadKHR 251 199 12 MakePointerVisibleKHR NonPrivatePointerKHR 24
+                                    Store 242(tempArg) 253
+             258:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 238 238 12 12
+             257:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 255 254(matB) 36
+             260:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 250 250 12 12
+             259:         235       Load 242(tempArg)
+                                    Store 254(matB) 259
+             265:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 263 263 12 12
+             264:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 262 261(i) 36
+                                    Store 261(i) 12
+                                    Branch 266
+             266:                   Label
+             270:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+             271:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 263 263 12 12
+                                    LoopMerge 268 269 Unroll 
+                                    Branch 272
+             272:                   Label
+             274:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+             275:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 263 263 12 12
+             273:      7(int)       Load 261(i)
+             276:    48(bool)       ULessThan 273 24
+                                    BranchConditional 276 267 268
+             267:                     Label
+             278:           4         ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+             279:           4         ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 280 280 12 12
+             277:      7(int)         Load 261(i)
+             281:      7(int)         Load 218(j)
+             282:      7(int)         Load 261(i)
+             283:    176(ptr)         AccessChain 205(matA) 282
+             284:         171         Load 283
+             285:         235         Load 254(matB)
+             286:      7(int)         Load 261(i)
+             287:      7(int)         Load 218(j)
+             288:     99(ptr)         AccessChain 88(result) 286 287
+             289:          76         Load 288
+             290:          76         CooperativeMatrixMulAddKHR 284 285 289
+             291:     99(ptr)         AccessChain 88(result) 277 281
+                                      Store 291 290
+                                      Branch 269
+             269:                     Label
+             293:           4         ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+             294:           4         ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 263 263 12 12
+             292:      7(int)         Load 261(i)
+             295:      7(int)         IAdd 292 108
+                                      Store 261(i) 295
+                                      Branch 266
+             268:                   Label
+                                    Branch 227
+             227:                   Label
+             297:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+             298:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 220 220 12 12
+             296:      7(int)       Load 218(j)
+             299:      7(int)       IAdd 296 108
+                                    Store 218(j) 299
+                                    Branch 224
+             226:                 Label
+                                  Branch 143
+             143:                 Label
+             301:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+             302:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 136 136 12 12
+             300:      7(int)     Load 133(k)
+             303:      7(int)     IAdd 300 108
+                                  Store 133(k) 303
+                                  Branch 140
+             142:               Label
+                                Branch 124
+             124:               Label
+             305:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+             306:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 117 117 12 12
+             304:      7(int)   Load 114(chunkK)
+             307:      7(int)   IAdd 304 150(TILE_K)
+                                Store 114(chunkK) 307
+                                Branch 121
+             123:             Label
+             312:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+             313:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 310 310 12 12
+             311:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 309 308(i) 36
+                              Store 308(i) 12
+                              Branch 314
+             314:             Label
+             318:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+             319:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 310 310 12 12
+                              LoopMerge 316 317 Unroll 
+                              Branch 320
+             320:             Label
+             322:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+             323:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 310 310 12 12
+             321:      7(int) Load 308(i)
+             324:    48(bool) ULessThan 321 24
+                              BranchConditional 324 315 316
+             315:               Label
+             329:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+             330:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 327 327 12 12
+             328:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 326 325(j) 36
+                                Store 325(j) 12
+                                Branch 331
+             331:               Label
+             335:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+             336:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 327 327 12 12
+                                LoopMerge 333 334 Unroll 
+                                Branch 337
+             337:               Label
+             339:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+             340:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 327 327 12 12
+             338:      7(int)   Load 325(j)
+             341:    48(bool)   ULessThan 338 24
+                                BranchConditional 341 332 333
+             332:                 Label
+             343:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+             344:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 345 345 12 12
+             342:      7(int)     Load 308(i)
+             346:      7(int)     Load 325(j)
+             347:     99(ptr)     AccessChain 88(result) 342 346
+             348:          76     Load 347
+             366:    364(ptr)     AccessChain 361(outputO) 199 12
+                                  CooperativeMatrixStoreKHR 366 348 199 12 None
+                                  Branch 334
+             334:                 Label
+             368:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+             369:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 327 327 12 12
+             367:      7(int)     Load 325(j)
+             370:      7(int)     IAdd 367 108
+                                  Store 325(j) 370
+                                  Branch 331
+             333:               Label
+                                Branch 317
+             317:               Label
+             372:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+             373:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 310 310 12 12
+             371:      7(int)   Load 308(i)
+             374:      7(int)   IAdd 371 108
+                                Store 308(i) 374
+                                Branch 314
+             316:             Label
+             375:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+             376:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 377 377 12 12
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.debuginfo.glsl.comp.out b/Test/baseResults/spv.debuginfo.glsl.comp.out
index 9026bf4..bcd29ec 100644
--- a/Test/baseResults/spv.debuginfo.glsl.comp.out
+++ b/Test/baseResults/spv.debuginfo.glsl.comp.out
@@ -1,1223 +1,1426 @@
 spv.debuginfo.glsl.comp
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 969
+// Id's are bound by 999
 
                               Capability Shader
                               Extension  "SPV_KHR_non_semantic_info"
-               2:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
                3:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint GLCompute 14  "main" 124
+                              EntryPoint GLCompute 14  "main" 135
                               ExecutionMode 14 LocalSize 10 10 1
-               1:             String  ""
+               2:             String  "spv.debuginfo.glsl.comp"
                8:             String  "uint"
-              15:             String  "main"
-              18:             String  "// OpModuleProcessed auto-map-locations
+              17:             String  "float"
+              33:             String  "springForce"
+              36:             String  "// OpModuleProcessed auto-map-locations
 // OpModuleProcessed auto-map-bindings
 // OpModuleProcessed client vulkan100
 // OpModuleProcessed target-env vulkan1.0
 // OpModuleProcessed keep-uncalled
 // OpModuleProcessed entry-point main
 #line 1
+/*
+The MIT License (MIT)
+
+Copyright (c) 2022 Sascha Willems
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+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 Software.
+
+THE SOFTWARE IS 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 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+*/
+
+#version 450
+
+struct Particle {
+	vec4 pos;
+	vec4 vel;
+	vec4 uv;
+	vec4 normal;
+	float pinned;
+};
+
+layout(std430, binding = 0) buffer ParticleIn {
+	Particle particleIn[ ];
+};
+
+layout(std430, binding = 1) buffer ParticleOut {
+	Particle particleOut[ ];
+};
+
+// todo: use shared memory to speed up calculation
+
+layout (local_size_x = 10, local_size_y = 10) in;
+
+layout (binding = 2) uniform UBO
+{
+	float deltaT;
+	float particleMass;
+	float springStiffness;
+	float damping;
+	float restDistH;
+	float restDistV;
+	float restDistD;
+	float sphereRadius;
+	vec4 spherePos;
+	vec4 gravity;
+	ivec2 particleCount;
+} params;
+
+layout (push_constant) uniform PushConsts {
+	uint calculateNormals;
+} pushConsts;
+
+vec3 springForce(vec3 p0, vec3 p1, float restDist)
+{
+	vec3 dist = p0 - p1;
+	return normalize(dist) * params.springStiffness * (length(dist) - restDist);
+}
+
+void main()
+{
+	uvec3 id = gl_GlobalInvocationID;
+
+	uint index = id.y * params.particleCount.x + id.x;
+	if (index > params.particleCount.x * params.particleCount.y)
+		return;
+
+	// Pinned?
+	if (particleIn[index].pinned == 1.0) {
+		particleOut[index].pos = particleOut[index].pos;
+		particleOut[index].vel = vec4(0.0);
+		return;
+	}
+
+	// Initial force from gravity
+	vec3 force = params.gravity.xyz * params.particleMass;
+
+	vec3 pos = particleIn[index].pos.xyz;
+	vec3 vel = particleIn[index].vel.xyz;
+
+	// Spring forces from neighboring particles
+	// left
+	if (id.x > 0) {
+		force += springForce(particleIn[index-1].pos.xyz, pos, params.restDistH);
+	}
+	// right
+	if (id.x < params.particleCount.x - 1) {
+		force += springForce(particleIn[index + 1].pos.xyz, pos, params.restDistH);
+	}
+	// upper
+	if (id.y < params.particleCount.y - 1) {
+		force += springForce(particleIn[index + params.particleCount.x].pos.xyz, pos, params.restDistV);
+	}
+	// lower
+	if (id.y > 0) {
+		force += springForce(particleIn[index - params.particleCount.x].pos.xyz, pos, params.restDistV);
+	}
+	// upper-left
+	if ((id.x > 0) && (id.y < params.particleCount.y - 1)) {
+		force += springForce(particleIn[index + params.particleCount.x - 1].pos.xyz, pos, params.restDistD);
+	}
+	// lower-left
+	if ((id.x > 0) && (id.y > 0)) {
+		force += springForce(particleIn[index - params.particleCount.x - 1].pos.xyz, pos, params.restDistD);
+	}
+	// upper-right
+	if ((id.x < params.particleCount.x - 1) && (id.y < params.particleCount.y - 1)) {
+		force += springForce(particleIn[index + params.particleCount.x + 1].pos.xyz, pos, params.restDistD);
+	}
+	// lower-right
+	if ((id.x < params.particleCount.x - 1) && (id.y > 0)) {
+		force += springForce(particleIn[index - params.particleCount.x + 1].pos.xyz, pos, params.restDistD);
+	}
+
+	force += (-params.damping * vel);
+
+	// Integrate
+	vec3 f = force * (1.0 / params.particleMass);
+	particleOut[index].pos = vec4(pos + vel * params.deltaT + 0.5 * f * params.deltaT * params.deltaT, 1.0);
+	particleOut[index].vel = vec4(vel + f * params.deltaT, 0.0);
+
+	// Sphere collision
+	vec3 sphereDist = particleOut[index].pos.xyz - params.spherePos.xyz;
+	if (length(sphereDist) < params.sphereRadius + 0.01) {
+		// If the particle is inside the sphere, push it to the outer radius
+		particleOut[index].pos.xyz = params.spherePos.xyz + normalize(sphereDist) * (params.sphereRadius + 0.01);
+		// Cancel out velocity
+		particleOut[index].vel = vec4(0.0);
+	}
+
+	// Normals
+	if (pushConsts.calculateNormals == 1) {
+		vec3 normal = vec3(0.0);
+		vec3 a, b, c;
+		if (id.y > 0) {
+			if (id.x > 0) {
+				a = particleIn[index - 1].pos.xyz - pos;
+				b = particleIn[index - params.particleCount.x - 1].pos.xyz - pos;
+				c = particleIn[index - params.particleCount.x].pos.xyz - pos;
+				normal += cross(a,b) + cross(b,c);
+			}
+			if (id.x < params.particleCount.x - 1) {
+				a = particleIn[index - params.particleCount.x].pos.xyz - pos;
+				b = particleIn[index - params.particleCount.x + 1].pos.xyz - pos;
+				c = particleIn[index + 1].pos.xyz - pos;
+				normal += cross(a,b) + cross(b,c);
+			}
+		}
+		if (id.y < params.particleCount.y - 1) {
+			if (id.x > 0) {
+				a = particleIn[index + params.particleCount.x].pos.xyz - pos;
+				b = particleIn[index + params.particleCount.x - 1].pos.xyz - pos;
+				c = particleIn[index - 1].pos.xyz - pos;
+				normal += cross(a,b) + cross(b,c);
+			}
+			if (id.x < params.particleCount.x - 1) {
+				a = particleIn[index + 1].pos.xyz - pos;
+				b = particleIn[index + params.particleCount.x + 1].pos.xyz - pos;
+				c = particleIn[index + params.particleCount.x].pos.xyz - pos;
+				normal += cross(a,b) + cross(b,c);
+			}
+		}
+		particleOut[index].normal = vec4(normalize(normal), 0.0f);
+	}
+}
 "
-              25:             String  "float"
-              37:             String  "springForce"
               43:             String  "p0"
-              47:             String  "p1"
-              50:             String  "restDist"
-              58:             String  "dist"
-              70:             String  "int"
-              76:             String  "sphereRadius"
-              87:             String  "gravity"
-              92:             String  "particleCount"
-              95:             String  "UBO"
-              99:             String  "params"
-             121:             String  "id"
-             126:             String  "gl_GlobalInvocationID"
-             133:             String  "index"
-             156:             String  "bool"
-             170:             String  "normal"
-             176:             String  "pinned"
-             178:             String  "Particle"
-             183:             String  "particleIn"
-             187:             String  "ParticleIn"
-             208:             String  "particleOut"
-             211:             String  "ParticleOut"
-             236:             String  "force"
-             249:             String  "pos"
-             259:             String  "vel"
-             571:             String  "f"
-             620:             String  "sphereDist"
-             673:             String  "calculateNormals"
-             676:             String  "PushConsts"
-             680:             String  "pushConsts"
-             717:             String  "a"
-             730:             String  "b"
-             747:             String  "c"
+              49:             String  "p1"
+              52:             String  "restDist"
+              54:             String  "main"
+              60:             String  "dist"
+              74:             String  "int"
+              80:             String  "sphereRadius"
+              91:             String  "gravity"
+              95:             String  "particleCount"
+              98:             String  "UBO"
+             103:             String  "params"
+             129:             String  "id"
+             137:             String  "gl_GlobalInvocationID"
+             143:             String  "index"
+             169:             String  "bool"
+             180:             String  "normal"
+             186:             String  "pinned"
+             188:             String  "Particle"
+             194:             String  "particleIn"
+             198:             String  "ParticleIn"
+             203:             String  ""
+             222:             String  "particleOut"
+             225:             String  "ParticleOut"
+             251:             String  "force"
+             265:             String  "pos"
+             275:             String  "vel"
+             592:             String  "f"
+             641:             String  "sphereDist"
+             694:             String  "calculateNormals"
+             697:             String  "PushConsts"
+             703:             String  "pushConsts"
+             742:             String  "a"
+             755:             String  "b"
+             772:             String  "c"
                               Name 14  "main"
-                              Name 36  "springForce(vf3;vf3;f1;"
-                              Name 33  "p0"
-                              Name 34  "p1"
-                              Name 35  "restDist"
-                              Name 56  "dist"
-                              Name 74  "UBO"
-                              MemberName 74(UBO) 0  "deltaT"
-                              MemberName 74(UBO) 1  "particleMass"
-                              MemberName 74(UBO) 2  "springStiffness"
-                              MemberName 74(UBO) 3  "damping"
-                              MemberName 74(UBO) 4  "restDistH"
-                              MemberName 74(UBO) 5  "restDistV"
-                              MemberName 74(UBO) 6  "restDistD"
-                              MemberName 74(UBO) 7  "sphereRadius"
-                              MemberName 74(UBO) 8  "spherePos"
-                              MemberName 74(UBO) 9  "gravity"
-                              MemberName 74(UBO) 10  "particleCount"
-                              Name 97  "params"
-                              Name 119  "id"
-                              Name 124  "gl_GlobalInvocationID"
-                              Name 131  "index"
-                              Name 168  "Particle"
-                              MemberName 168(Particle) 0  "pos"
-                              MemberName 168(Particle) 1  "vel"
-                              MemberName 168(Particle) 2  "uv"
-                              MemberName 168(Particle) 3  "normal"
-                              MemberName 168(Particle) 4  "pinned"
-                              Name 181  "ParticleIn"
-                              MemberName 181(ParticleIn) 0  "particleIn"
-                              Name 189  ""
-                              Name 206  "ParticleOut"
-                              MemberName 206(ParticleOut) 0  "particleOut"
-                              Name 213  ""
-                              Name 234  "force"
-                              Name 247  "pos"
-                              Name 257  "vel"
-                              Name 278  "param"
-                              Name 282  "param"
-                              Name 284  "param"
-                              Name 308  "param"
-                              Name 312  "param"
-                              Name 314  "param"
-                              Name 342  "param"
-                              Name 346  "param"
-                              Name 348  "param"
-                              Name 371  "param"
-                              Name 375  "param"
-                              Name 377  "param"
-                              Name 415  "param"
-                              Name 419  "param"
-                              Name 421  "param"
-                              Name 454  "param"
-                              Name 458  "param"
-                              Name 460  "param"
-                              Name 501  "param"
-                              Name 505  "param"
-                              Name 507  "param"
-                              Name 544  "param"
-                              Name 548  "param"
-                              Name 550  "param"
-                              Name 569  "f"
-                              Name 618  "sphereDist"
-                              Name 671  "PushConsts"
-                              MemberName 671(PushConsts) 0  "calculateNormals"
-                              Name 678  "pushConsts"
-                              Name 691  "normal"
-                              Name 715  "a"
-                              Name 728  "b"
-                              Name 745  "c"
-                              MemberDecorate 74(UBO) 0 Offset 0
-                              MemberDecorate 74(UBO) 1 Offset 4
-                              MemberDecorate 74(UBO) 2 Offset 8
-                              MemberDecorate 74(UBO) 3 Offset 12
-                              MemberDecorate 74(UBO) 4 Offset 16
-                              MemberDecorate 74(UBO) 5 Offset 20
-                              MemberDecorate 74(UBO) 6 Offset 24
-                              MemberDecorate 74(UBO) 7 Offset 28
-                              MemberDecorate 74(UBO) 8 Offset 32
-                              MemberDecorate 74(UBO) 9 Offset 48
-                              MemberDecorate 74(UBO) 10 Offset 64
-                              Decorate 74(UBO) Block
-                              Decorate 97(params) DescriptorSet 0
-                              Decorate 97(params) Binding 2
-                              Decorate 124(gl_GlobalInvocationID) BuiltIn GlobalInvocationId
-                              MemberDecorate 168(Particle) 0 Offset 0
-                              MemberDecorate 168(Particle) 1 Offset 16
-                              MemberDecorate 168(Particle) 2 Offset 32
-                              MemberDecorate 168(Particle) 3 Offset 48
-                              MemberDecorate 168(Particle) 4 Offset 64
-                              Decorate 179 ArrayStride 80
-                              MemberDecorate 181(ParticleIn) 0 Offset 0
-                              Decorate 181(ParticleIn) BufferBlock
-                              Decorate 189 DescriptorSet 0
-                              Decorate 189 Binding 0
-                              Decorate 204 ArrayStride 80
-                              MemberDecorate 206(ParticleOut) 0 Offset 0
-                              Decorate 206(ParticleOut) BufferBlock
-                              Decorate 213 DescriptorSet 0
-                              Decorate 213 Binding 1
-                              MemberDecorate 671(PushConsts) 0 Offset 0
-                              Decorate 671(PushConsts) Block
-                              Decorate 968 BuiltIn WorkgroupSize
+                              Name 31  "springForce(vf3;vf3;f1;"
+                              Name 28  "p0"
+                              Name 29  "p1"
+                              Name 30  "restDist"
+                              Name 58  "dist"
+                              Name 78  "UBO"
+                              MemberName 78(UBO) 0  "deltaT"
+                              MemberName 78(UBO) 1  "particleMass"
+                              MemberName 78(UBO) 2  "springStiffness"
+                              MemberName 78(UBO) 3  "damping"
+                              MemberName 78(UBO) 4  "restDistH"
+                              MemberName 78(UBO) 5  "restDistV"
+                              MemberName 78(UBO) 6  "restDistD"
+                              MemberName 78(UBO) 7  "sphereRadius"
+                              MemberName 78(UBO) 8  "spherePos"
+                              MemberName 78(UBO) 9  "gravity"
+                              MemberName 78(UBO) 10  "particleCount"
+                              Name 101  "params"
+                              Name 127  "id"
+                              Name 135  "gl_GlobalInvocationID"
+                              Name 141  "index"
+                              Name 178  "Particle"
+                              MemberName 178(Particle) 0  "pos"
+                              MemberName 178(Particle) 1  "vel"
+                              MemberName 178(Particle) 2  "uv"
+                              MemberName 178(Particle) 3  "normal"
+                              MemberName 178(Particle) 4  "pinned"
+                              Name 192  "ParticleIn"
+                              MemberName 192(ParticleIn) 0  "particleIn"
+                              Name 201  ""
+                              Name 220  "ParticleOut"
+                              MemberName 220(ParticleOut) 0  "particleOut"
+                              Name 228  ""
+                              Name 249  "force"
+                              Name 263  "pos"
+                              Name 273  "vel"
+                              Name 297  "param"
+                              Name 301  "param"
+                              Name 303  "param"
+                              Name 327  "param"
+                              Name 331  "param"
+                              Name 333  "param"
+                              Name 361  "param"
+                              Name 365  "param"
+                              Name 367  "param"
+                              Name 390  "param"
+                              Name 394  "param"
+                              Name 396  "param"
+                              Name 435  "param"
+                              Name 439  "param"
+                              Name 441  "param"
+                              Name 475  "param"
+                              Name 479  "param"
+                              Name 481  "param"
+                              Name 523  "param"
+                              Name 527  "param"
+                              Name 529  "param"
+                              Name 567  "param"
+                              Name 571  "param"
+                              Name 573  "param"
+                              Name 590  "f"
+                              Name 639  "sphereDist"
+                              Name 692  "PushConsts"
+                              MemberName 692(PushConsts) 0  "calculateNormals"
+                              Name 701  "pushConsts"
+                              Name 716  "normal"
+                              Name 740  "a"
+                              Name 753  "b"
+                              Name 770  "c"
+                              Decorate 78(UBO) Block
+                              MemberDecorate 78(UBO) 0 Offset 0
+                              MemberDecorate 78(UBO) 1 Offset 4
+                              MemberDecorate 78(UBO) 2 Offset 8
+                              MemberDecorate 78(UBO) 3 Offset 12
+                              MemberDecorate 78(UBO) 4 Offset 16
+                              MemberDecorate 78(UBO) 5 Offset 20
+                              MemberDecorate 78(UBO) 6 Offset 24
+                              MemberDecorate 78(UBO) 7 Offset 28
+                              MemberDecorate 78(UBO) 8 Offset 32
+                              MemberDecorate 78(UBO) 9 Offset 48
+                              MemberDecorate 78(UBO) 10 Offset 64
+                              Decorate 101(params) Binding 2
+                              Decorate 101(params) DescriptorSet 0
+                              Decorate 135(gl_GlobalInvocationID) BuiltIn GlobalInvocationId
+                              MemberDecorate 178(Particle) 0 Offset 0
+                              MemberDecorate 178(Particle) 1 Offset 16
+                              MemberDecorate 178(Particle) 2 Offset 32
+                              MemberDecorate 178(Particle) 3 Offset 48
+                              MemberDecorate 178(Particle) 4 Offset 64
+                              Decorate 190 ArrayStride 80
+                              Decorate 192(ParticleIn) BufferBlock
+                              MemberDecorate 192(ParticleIn) 0 Offset 0
+                              Decorate 201 Binding 0
+                              Decorate 201 DescriptorSet 0
+                              Decorate 218 ArrayStride 80
+                              Decorate 220(ParticleOut) BufferBlock
+                              MemberDecorate 220(ParticleOut) 0 Offset 0
+                              Decorate 228 Binding 1
+                              Decorate 228 DescriptorSet 0
+                              Decorate 692(PushConsts) Block
+                              MemberDecorate 692(PushConsts) 0 Offset 0
+                              Decorate 998 BuiltIn WorkgroupSize
                4:             TypeVoid
                5:             TypeFunction 4
                7:             TypeInt 32 0
               10:      7(int) Constant 32
               11:      7(int) Constant 6
               12:      7(int) Constant 0
-               9:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 8 10 11 12
+               9:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 8 10 11 12
               13:      7(int) Constant 3
-               6:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4
-              17:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 1 18
-              20:      7(int) Constant 1
-              21:      7(int) Constant 4
-              22:      7(int) Constant 2
-              19:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 20 21 17 22
-              16:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 15 6 17 12 12 19 15 13 12
-              24:             TypeFloat 32
-              26:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 25 10 13 12
-              27:             TypeVector 24(float) 3
-              28:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 26 13
-              29:             TypePointer Function 27(fvec3)
-              30:             TypePointer Function 24(float)
-              31:             TypeFunction 27(fvec3) 29(ptr) 29(ptr) 30(ptr)
-              32:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 28 28 28 26
-              38:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 37 32 17 12 12 19 37 13 12
-              42:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 43 28 17 12 12 38 21 20
-              45:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
-              46:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 47 28 17 12 12 38 21 22
-              49:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 50 26 17 12 12 38 21 13
-              55:      7(int) Constant 68
-              57:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 58 28 17 55 12 38 21
-              64:      7(int) Constant 69
-              67:             TypeVector 24(float) 4
-              68:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 26 21
-              69:             TypeInt 32 1
-              71:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 70 10 21 12
-              72:             TypeVector 69(int) 2
-              73:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 71 22
-         74(UBO):             TypeStruct 24(float) 24(float) 24(float) 24(float) 24(float) 24(float) 24(float) 24(float) 67(fvec4) 67(fvec4) 72(ivec2)
-              77:      7(int) Constant 56
-              78:      7(int) Constant 8
-              75:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 76 26 17 77 78 12 12 13
-              79:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 76 26 17 77 78 12 12 13
-              80:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 76 26 17 77 78 12 12 13
-              81:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 76 26 17 77 78 12 12 13
-              82:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 76 26 17 77 78 12 12 13
-              83:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 76 26 17 77 78 12 12 13
-              84:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 76 26 17 77 78 12 12 13
-              85:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 76 26 17 77 78 12 12 13
-              88:      7(int) Constant 58
-              89:      7(int) Constant 7
-              86:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 87 68 17 88 89 12 12 13
-              90:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 87 68 17 88 89 12 12 13
-              93:      7(int) Constant 59
-              91:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 92 73 17 93 78 12 12 13
-              94:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 95 20 17 64 12 19 95 12 13 75 79 80 81 82 83 84 85 86 90 91
-              96:             TypePointer Uniform 74(UBO)
-      97(params):     96(ptr) Variable Uniform
-              98:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 99 94 17 64 12 19 99 97(params) 78
-             100:     69(int) Constant 2
-             101:             TypePointer Uniform 24(float)
-             115:      7(int) Constant 74
-             116:             TypeVector 7(int) 3
-             117:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 9 13
-             118:             TypePointer Function 116(ivec3)
-             120:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 121 117 17 115 12 16 21
-             123:             TypePointer Input 116(ivec3)
-124(gl_GlobalInvocationID):    123(ptr) Variable Input
-             125:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 126 117 17 115 12 19 126 124(gl_GlobalInvocationID) 78
-             129:      7(int) Constant 76
-             130:             TypePointer Function 7(int)
-             132:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 133 9 17 129 12 16 21
-             137:     69(int) Constant 10
-             138:             TypePointer Uniform 69(int)
-             147:      7(int) Constant 77
-             155:             TypeBool
-             157:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
-             163:      7(int) Constant 78
-             167:      7(int) Constant 81
-   168(Particle):             TypeStruct 67(fvec4) 67(fvec4) 67(fvec4) 67(fvec4) 24(float)
-             171:      7(int) Constant 31
-             169:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 170 68 17 171 89 12 12 13
-             172:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 170 68 17 171 89 12 12 13
-             173:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 170 68 17 171 89 12 12 13
-             174:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 170 68 17 171 89 12 12 13
-             175:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 176 26 17 10 78 12 12 13
-             177:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 178 20 17 167 12 19 178 12 13 169 172 173 174 175
-             179:             TypeRuntimeArray 168(Particle)
-             180:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 177 12
- 181(ParticleIn):             TypeStruct 179
-             184:      7(int) Constant 36
-             185:      7(int) Constant 11
-             182:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 183 180 17 184 185 12 12 13
-             186:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 187 20 17 167 12 19 187 12 13 182
-             188:             TypePointer Uniform 181(ParticleIn)
-             189:    188(ptr) Variable Uniform
-             190:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 1 186 17 167 12 19 1 189 78
-             191:     69(int) Constant 0
-             193:     69(int) Constant 4
-             196:   24(float) Constant 1065353216
-             197:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
-             203:      7(int) Constant 82
-             204:             TypeRuntimeArray 168(Particle)
-             205:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 177 12
-206(ParticleOut):             TypeStruct 204
-             209:      7(int) Constant 40
-             207:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 208 205 17 209 185 12 12 13
-             210:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 211 20 17 203 12 19 211 12 13 207
-             212:             TypePointer Uniform 206(ParticleOut)
-             213:    212(ptr) Variable Uniform
-             214:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 1 210 17 203 12 19 1 213 78
-             217:             TypePointer Uniform 67(fvec4)
-             222:      7(int) Constant 83
-             224:     69(int) Constant 1
-             225:   24(float) Constant 0
-             226:   67(fvec4) ConstantComposite 225 225 225 225
-             229:      7(int) Constant 84
-             233:      7(int) Constant 88
-             235:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 236 28 17 233 12 16 21
-             238:     69(int) Constant 9
-             246:      7(int) Constant 90
-             248:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 249 28 17 246 12 16 21
-             256:      7(int) Constant 91
-             258:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 259 28 17 256 12 16 21
-             266:      7(int) Constant 95
-             269:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
-             275:      7(int) Constant 96
-             292:      7(int) Constant 99
-             299:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
-             305:      7(int) Constant 100
-             322:      7(int) Constant 103
-             329:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
-             335:      7(int) Constant 104
-             341:     69(int) Constant 5
-             356:      7(int) Constant 107
-             359:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
-             365:      7(int) Constant 108
-             385:      7(int) Constant 111
-             388:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
-             400:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
-             407:      7(int) Constant 112
-             414:     69(int) Constant 6
-             429:      7(int) Constant 115
-             432:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
-             440:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
-             447:      7(int) Constant 116
-             468:      7(int) Constant 119
-             475:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
-             487:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
-             494:      7(int) Constant 120
-             515:      7(int) Constant 123
-             522:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
-             530:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
-             537:      7(int) Constant 124
-             558:      7(int) Constant 127
-             559:     69(int) Constant 3
-             568:      7(int) Constant 130
-             570:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 571 28 17 568 12 16 21
-             579:      7(int) Constant 131
-             587:   24(float) Constant 1056964608
-             603:      7(int) Constant 132
-             617:      7(int) Constant 135
-             619:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 620 28 17 617 12 16 21
-             626:     69(int) Constant 8
-             632:      7(int) Constant 136
-             635:     69(int) Constant 7
-             638:   24(float) Constant 1008981770
-             640:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
-             646:      7(int) Constant 138
-             665:      7(int) Constant 140
-             670:      7(int) Constant 144
- 671(PushConsts):             TypeStruct 7(int)
-             674:      7(int) Constant 63
-             672:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 673 9 17 674 89 12 12 13
-             675:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 676 20 17 670 12 19 676 12 13 672
-             677:             TypePointer PushConstant 671(PushConsts)
- 678(pushConsts):    677(ptr) Variable PushConstant
-             679:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 680 675 17 670 12 19 680 678(pushConsts) 78
-             681:             TypePointer PushConstant 7(int)
-             684:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
-             690:      7(int) Constant 145
-             692:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 170 28 17 690 12 16 21
-             694:   27(fvec3) ConstantComposite 225 225 225
-             696:      7(int) Constant 147
-             699:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
-             705:      7(int) Constant 148
-             708:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
-             714:      7(int) Constant 149
-             716:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 717 28 17 714 12 16 21
-             727:      7(int) Constant 150
-             729:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 730 28 17 727 12 16 21
-             744:      7(int) Constant 151
-             746:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 747 28 17 744 12 16 21
-             760:      7(int) Constant 152
-             772:      7(int) Constant 154
-             779:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
-             785:      7(int) Constant 155
-             797:      7(int) Constant 156
-             810:      7(int) Constant 157
-             819:      7(int) Constant 158
-             831:      7(int) Constant 161
-             838:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
-             844:      7(int) Constant 162
-             847:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
-             853:      7(int) Constant 163
-             865:      7(int) Constant 164
-             878:      7(int) Constant 165
-             887:      7(int) Constant 166
-             899:      7(int) Constant 168
-             906:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 156 10 22 12
-             912:      7(int) Constant 169
-             921:      7(int) Constant 170
-             934:      7(int) Constant 171
-             946:      7(int) Constant 172
-             958:      7(int) Constant 175
-             967:      7(int) Constant 10
-             968:  116(ivec3) ConstantComposite 967 967 20
-                              Line 1 72 11
+               6:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4
+              16:             TypeFloat 32
+              18:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 17 10 13 12
+              19:             TypeVector 16(float) 3
+              20:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 18 13
+              21:             TypePointer Function 19(fvec3)
+              22:      7(int) Constant 7
+              23:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 20 22 12
+              24:             TypePointer Function 16(float)
+              25:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 18 22 12
+              26:             TypeFunction 19(fvec3) 21(ptr) 21(ptr) 24(ptr)
+              27:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 20 20 20 18
+              35:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 2 36
+              37:      7(int) Constant 66
+              39:      7(int) Constant 1
+              40:      7(int) Constant 4
+              41:      7(int) Constant 2
+              38:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 39 40 35 41
+              34:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 33 27 35 37 12 38 33 13 37
+              42:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 43 20 35 37 12 34 40 39
+              45:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
+              48:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 49 20 35 37 12 34 40 41
+              51:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 52 18 35 37 12 34 40 13
+              56:      7(int) Constant 72
+              55:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 54 6 35 56 12 38 54 13 56
+              61:      7(int) Constant 68
+              59:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 60 20 35 61 12 34 40
+              69:      7(int) Constant 69
+              71:             TypeVector 16(float) 4
+              72:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 18 40
+              73:             TypeInt 32 1
+              75:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 74 10 40 12
+              76:             TypeVector 73(int) 2
+              77:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 75 41
+         78(UBO):             TypeStruct 16(float) 16(float) 16(float) 16(float) 16(float) 16(float) 16(float) 16(float) 71(fvec4) 71(fvec4) 76(ivec2)
+              81:      7(int) Constant 56
+              82:      7(int) Constant 8
+              79:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 80 18 35 81 82 12 12 13
+              83:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 80 18 35 81 82 12 12 13
+              84:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 80 18 35 81 82 12 12 13
+              85:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 80 18 35 81 82 12 12 13
+              86:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 80 18 35 81 82 12 12 13
+              87:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 80 18 35 81 82 12 12 13
+              88:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 80 18 35 81 82 12 12 13
+              89:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 80 18 35 81 82 12 12 13
+              92:      7(int) Constant 58
+              90:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 91 72 35 92 22 12 12 13
+              93:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 91 72 35 92 22 12 12 13
+              96:      7(int) Constant 59
+              94:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 95 77 35 96 82 12 12 13
+              97:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 98 39 35 69 12 38 98 12 13 79 83 84 85 86 87 88 89 90 93 94
+              99:             TypePointer Uniform 78(UBO)
+             100:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 97 41 12
+     101(params):     99(ptr) Variable Uniform
+             102:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 103 97 35 69 12 38 103 101(params) 82
+             104:     73(int) Constant 2
+             105:             TypePointer Uniform 16(float)
+             106:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 18 41 12
+             119:      7(int) Constant 70
+             123:             TypeVector 7(int) 3
+             124:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 9 13
+             125:             TypePointer Function 123(ivec3)
+             126:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 124 22 12
+             130:      7(int) Constant 74
+             128:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 129 124 35 130 12 55 40
+             133:             TypePointer Input 123(ivec3)
+             134:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 124 39 12
+135(gl_GlobalInvocationID):    133(ptr) Variable Input
+             136:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 137 124 35 130 12 38 137 135(gl_GlobalInvocationID) 82
+             139:             TypePointer Function 7(int)
+             140:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 9 22 12
+             144:      7(int) Constant 76
+             142:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 143 9 35 144 12 55 40
+             149:     73(int) Constant 10
+             150:             TypePointer Uniform 73(int)
+             151:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 75 41 12
+             161:      7(int) Constant 77
+             168:             TypeBool
+             170:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 169 10 41 12
+             176:      7(int) Constant 78
+   178(Particle):             TypeStruct 71(fvec4) 71(fvec4) 71(fvec4) 71(fvec4) 16(float)
+             181:      7(int) Constant 31
+             179:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 180 72 35 181 22 12 12 13
+             182:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 180 72 35 181 22 12 12 13
+             183:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 180 72 35 181 22 12 12 13
+             184:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 180 72 35 181 22 12 12 13
+             185:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 186 18 35 10 82 12 12 13
+             189:      7(int) Constant 81
+             187:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 188 39 35 189 12 38 188 12 13 179 182 183 184 185
+             190:             TypeRuntimeArray 178(Particle)
+             191:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 187 12
+ 192(ParticleIn):             TypeStruct 190
+             195:      7(int) Constant 36
+             196:      7(int) Constant 11
+             193:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 194 191 35 195 196 12 12 13
+             197:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 198 39 35 189 12 38 198 12 13 193
+             199:             TypePointer Uniform 192(ParticleIn)
+             200:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 197 41 12
+             201:    199(ptr) Variable Uniform
+             202:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 203 197 35 189 12 38 203 201 82
+             204:     73(int) Constant 0
+             208:     73(int) Constant 4
+             211:   16(float) Constant 1065353216
+             216:      7(int) Constant 82
+             217:      7(int) Constant 26
+             215:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 35 216 217 55
+             218:             TypeRuntimeArray 178(Particle)
+             219:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 187 12
+220(ParticleOut):             TypeStruct 218
+             223:      7(int) Constant 40
+             221:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 222 219 35 223 196 12 12 13
+             224:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 225 39 35 216 12 38 225 12 13 221
+             226:             TypePointer Uniform 220(ParticleOut)
+             227:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 224 41 12
+             228:    226(ptr) Variable Uniform
+             229:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 203 224 35 216 12 38 203 228 82
+             234:             TypePointer Uniform 71(fvec4)
+             235:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 72 41 12
+             241:      7(int) Constant 83
+             242:     73(int) Constant 1
+             243:   16(float) Constant 0
+             244:   71(fvec4) ConstantComposite 243 243 243 243
+             247:      7(int) Constant 84
+             252:      7(int) Constant 88
+             250:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 251 20 35 252 12 55 40
+             256:     73(int) Constant 9
+             266:      7(int) Constant 90
+             264:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 265 20 35 266 12 55 40
+             276:      7(int) Constant 91
+             274:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 275 20 35 276 12 55 40
+             285:      7(int) Constant 95
+             291:      7(int) Constant 96
+             292:      7(int) Constant 9
+             290:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 35 291 292 55
+             312:      7(int) Constant 99
+             322:      7(int) Constant 100
+             321:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 35 322 292 55
+             342:      7(int) Constant 103
+             352:      7(int) Constant 104
+             351:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 35 352 292 55
+             360:     73(int) Constant 5
+             376:      7(int) Constant 107
+             382:      7(int) Constant 108
+             381:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 35 382 292 55
+             405:      7(int) Constant 111
+             425:      7(int) Constant 112
+             424:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 35 425 292 55
+             434:     73(int) Constant 6
+             450:      7(int) Constant 115
+             466:      7(int) Constant 116
+             465:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 35 466 292 55
+             490:      7(int) Constant 119
+             514:      7(int) Constant 120
+             513:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 35 514 292 55
+             538:      7(int) Constant 123
+             558:      7(int) Constant 124
+             557:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 35 558 292 55
+             579:     73(int) Constant 3
+             583:      7(int) Constant 127
+             593:      7(int) Constant 130
+             591:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 592 20 35 593 12 55 40
+             603:      7(int) Constant 131
+             610:   16(float) Constant 1056964608
+             627:      7(int) Constant 132
+             642:      7(int) Constant 135
+             640:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 641 20 35 642 12 55 40
+             649:     73(int) Constant 8
+             656:      7(int) Constant 136
+             658:     73(int) Constant 7
+             661:   16(float) Constant 1008981770
+             667:      7(int) Constant 138
+             668:      7(int) Constant 30
+             666:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 35 667 668 55
+             690:      7(int) Constant 140
+ 692(PushConsts):             TypeStruct 7(int)
+             695:      7(int) Constant 63
+             693:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 694 9 35 695 22 12 12 13
+             698:      7(int) Constant 144
+             696:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 697 39 35 698 12 38 697 12 13 693
+             699:             TypePointer PushConstant 692(PushConsts)
+             700:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 696 292 12
+ 701(pushConsts):    699(ptr) Variable PushConstant
+             702:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 703 696 35 698 12 38 703 701(pushConsts) 82
+             704:             TypePointer PushConstant 7(int)
+             705:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 9 292 12
+             714:      7(int) Constant 145
+             715:      7(int) Constant 15
+             713:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 35 714 715 55
+             717:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 180 20 35 714 12 713 40
+             721:   19(fvec3) ConstantComposite 243 243 243
+             724:      7(int) Constant 147
+             730:      7(int) Constant 148
+             729:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 35 730 40 713
+             739:      7(int) Constant 149
+             738:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 35 739 22 729
+             741:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 742 20 35 739 12 738 40
+             756:      7(int) Constant 150
+             754:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 755 20 35 756 12 738 40
+             773:      7(int) Constant 151
+             771:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 772 20 35 773 12 738 40
+             788:      7(int) Constant 152
+             800:      7(int) Constant 154
+             810:      7(int) Constant 155
+             809:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 35 810 22 729
+             825:      7(int) Constant 156
+             838:      7(int) Constant 157
+             847:      7(int) Constant 158
+             859:      7(int) Constant 161
+             869:      7(int) Constant 162
+             868:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 35 869 40 713
+             878:      7(int) Constant 163
+             877:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 35 878 22 868
+             893:      7(int) Constant 164
+             906:      7(int) Constant 165
+             915:      7(int) Constant 166
+             927:      7(int) Constant 168
+             937:      7(int) Constant 169
+             936:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 35 937 22 868
+             949:      7(int) Constant 170
+             962:      7(int) Constant 171
+             974:      7(int) Constant 172
+             986:      7(int) Constant 175
+             996:      7(int) Constant 177
+             997:      7(int) Constant 10
+             998:  123(ivec3) ConstantComposite 997 997 39
         14(main):           4 Function None 5
-              23:             Label
-         119(id):    118(ptr) Variable Function
-      131(index):    130(ptr) Variable Function
-      234(force):     29(ptr) Variable Function
-        247(pos):     29(ptr) Variable Function
-        257(vel):     29(ptr) Variable Function
-      278(param):     29(ptr) Variable Function
-      282(param):     29(ptr) Variable Function
-      284(param):     30(ptr) Variable Function
-      308(param):     29(ptr) Variable Function
-      312(param):     29(ptr) Variable Function
-      314(param):     30(ptr) Variable Function
-      342(param):     29(ptr) Variable Function
-      346(param):     29(ptr) Variable Function
-      348(param):     30(ptr) Variable Function
-      371(param):     29(ptr) Variable Function
-      375(param):     29(ptr) Variable Function
-      377(param):     30(ptr) Variable Function
-      415(param):     29(ptr) Variable Function
-      419(param):     29(ptr) Variable Function
-      421(param):     30(ptr) Variable Function
-      454(param):     29(ptr) Variable Function
-      458(param):     29(ptr) Variable Function
-      460(param):     30(ptr) Variable Function
-      501(param):     29(ptr) Variable Function
-      505(param):     29(ptr) Variable Function
-      507(param):     30(ptr) Variable Function
-      544(param):     29(ptr) Variable Function
-      548(param):     29(ptr) Variable Function
-      550(param):     30(ptr) Variable Function
-          569(f):     29(ptr) Variable Function
- 618(sphereDist):     29(ptr) Variable Function
-     691(normal):     29(ptr) Variable Function
-          715(a):     29(ptr) Variable Function
-          728(b):     29(ptr) Variable Function
-          745(c):     29(ptr) Variable Function
-             112:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 16 14(main)
-             113:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             114:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 115 115 12 12
-             122:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 120 119(id) 45
-             127:  116(ivec3) Load 124(gl_GlobalInvocationID)
-                              Store 119(id) 127
-             128:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 129 129 12 12
-             134:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 132 131(index) 45
-             135:    130(ptr) AccessChain 119(id) 20
-             136:      7(int) Load 135
-             139:    138(ptr) AccessChain 97(params) 137 12
-             140:     69(int) Load 139
-             141:      7(int) Bitcast 140
-             142:      7(int) IMul 136 141
-             143:    130(ptr) AccessChain 119(id) 12
-             144:      7(int) Load 143
-             145:      7(int) IAdd 142 144
-                              Store 131(index) 145
-             146:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 147 147 12 12
-             148:      7(int) Load 131(index)
-             149:    138(ptr) AccessChain 97(params) 137 12
-             150:     69(int) Load 149
-             151:    138(ptr) AccessChain 97(params) 137 20
-             152:     69(int) Load 151
-             153:     69(int) IMul 150 152
+              15:             Label
+         127(id):    125(ptr) Variable Function
+      141(index):    139(ptr) Variable Function
+      249(force):     21(ptr) Variable Function
+        263(pos):     21(ptr) Variable Function
+        273(vel):     21(ptr) Variable Function
+      297(param):     21(ptr) Variable Function
+      301(param):     21(ptr) Variable Function
+      303(param):     24(ptr) Variable Function
+      327(param):     21(ptr) Variable Function
+      331(param):     21(ptr) Variable Function
+      333(param):     24(ptr) Variable Function
+      361(param):     21(ptr) Variable Function
+      365(param):     21(ptr) Variable Function
+      367(param):     24(ptr) Variable Function
+      390(param):     21(ptr) Variable Function
+      394(param):     21(ptr) Variable Function
+      396(param):     24(ptr) Variable Function
+      435(param):     21(ptr) Variable Function
+      439(param):     21(ptr) Variable Function
+      441(param):     24(ptr) Variable Function
+      475(param):     21(ptr) Variable Function
+      479(param):     21(ptr) Variable Function
+      481(param):     24(ptr) Variable Function
+      523(param):     21(ptr) Variable Function
+      527(param):     21(ptr) Variable Function
+      529(param):     24(ptr) Variable Function
+      567(param):     21(ptr) Variable Function
+      571(param):     21(ptr) Variable Function
+      573(param):     24(ptr) Variable Function
+          590(f):     21(ptr) Variable Function
+ 639(sphereDist):     21(ptr) Variable Function
+     716(normal):     21(ptr) Variable Function
+          740(a):     21(ptr) Variable Function
+          753(b):     21(ptr) Variable Function
+          770(c):     21(ptr) Variable Function
+             121:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55
+             122:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 56 56 12 12
+             120:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 55 14(main)
+             132:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 130 130 12 12
+             131:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 128 127(id) 45
+             138:  123(ivec3) Load 135(gl_GlobalInvocationID)
+                              Store 127(id) 138
+             146:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 144 144 12 12
+             145:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 142 141(index) 45
+             147:    139(ptr) AccessChain 127(id) 39
+             148:      7(int) Load 147
+             152:    150(ptr) AccessChain 101(params) 149 12
+             153:     73(int) Load 152
              154:      7(int) Bitcast 153
-             158:   155(bool) UGreaterThan 148 154
-                              SelectionMerge 160 None
-                              BranchConditional 158 159 160
-             159:               Label
-             161:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             162:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 163 163 12 12
+             155:      7(int) IMul 148 154
+             156:    139(ptr) AccessChain 127(id) 12
+             157:      7(int) Load 156
+             158:      7(int) IAdd 155 157
+                              Store 141(index) 158
+             160:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 161 161 12 12
+             159:      7(int) Load 141(index)
+             162:    150(ptr) AccessChain 101(params) 149 12
+             163:     73(int) Load 162
+             164:    150(ptr) AccessChain 101(params) 149 39
+             165:     73(int) Load 164
+             166:     73(int) IMul 163 165
+             167:      7(int) Bitcast 166
+             171:   168(bool) UGreaterThan 159 167
+                              SelectionMerge 173 None
+                              BranchConditional 171 172 173
+             172:               Label
+             174:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55
+             175:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 176 176 12 12
                                 Return
-             160:             Label
-             165:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             166:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 167 167 12 12
-             192:      7(int) Load 131(index)
-             194:    101(ptr) AccessChain 189 191 192 193
-             195:   24(float) Load 194
-             198:   155(bool) FOrdEqual 195 196
-                              SelectionMerge 200 None
-                              BranchConditional 198 199 200
-             199:               Label
-             201:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             202:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 203 203 12 12
-             215:      7(int)   Load 131(index)
-             216:      7(int)   Load 131(index)
-             218:    217(ptr)   AccessChain 213 191 216 191
-             219:   67(fvec4)   Load 218
-             220:    217(ptr)   AccessChain 213 191 215 191
-                                Store 220 219
-             221:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 222 222 12 12
-             223:      7(int)   Load 131(index)
-             227:    217(ptr)   AccessChain 213 191 223 224
-                                Store 227 226
-             228:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 229 229 12 12
+             173:             Label
+             206:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55
+             207:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 189 189 12 12
+             205:      7(int) Load 141(index)
+             209:    105(ptr) AccessChain 201 204 205 208
+             210:   16(float) Load 209
+             212:   168(bool) FOrdEqual 210 211
+                              SelectionMerge 214 None
+                              BranchConditional 212 213 214
+             213:               Label
+             231:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 215
+             232:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 216 216 12 12
+             230:      7(int)   Load 141(index)
+             233:      7(int)   Load 141(index)
+             236:    234(ptr)   AccessChain 228 204 233 204
+             237:   71(fvec4)   Load 236
+             238:    234(ptr)   AccessChain 228 204 230 204
+                                Store 238 237
+             240:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 241 241 12 12
+             239:      7(int)   Load 141(index)
+             245:    234(ptr)   AccessChain 228 204 239 242
+                                Store 245 244
+             246:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 247 247 12 12
                                 Return
-             200:             Label
-             231:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             232:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 233 233 12 12
-             237:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 235 234(force) 45
-             239:    217(ptr) AccessChain 97(params) 238
-             240:   67(fvec4) Load 239
-             241:   27(fvec3) VectorShuffle 240 240 0 1 2
-             242:    101(ptr) AccessChain 97(params) 224
-             243:   24(float) Load 242
-             244:   27(fvec3) VectorTimesScalar 241 243
-                              Store 234(force) 244
-             245:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 246 246 12 12
-             250:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 248 247(pos) 45
-             251:      7(int) Load 131(index)
-             252:    217(ptr) AccessChain 189 191 251 191
-             253:   67(fvec4) Load 252
-             254:   27(fvec3) VectorShuffle 253 253 0 1 2
-                              Store 247(pos) 254
-             255:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 256 256 12 12
-             260:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 258 257(vel) 45
-             261:      7(int) Load 131(index)
-             262:    217(ptr) AccessChain 189 191 261 224
-             263:   67(fvec4) Load 262
-             264:   27(fvec3) VectorShuffle 263 263 0 1 2
-                              Store 257(vel) 264
-             265:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 266 266 12 12
-             267:    130(ptr) AccessChain 119(id) 12
-             268:      7(int) Load 267
-             270:   155(bool) UGreaterThan 268 12
-                              SelectionMerge 272 None
-                              BranchConditional 270 271 272
-             271:               Label
-             273:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             274:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 275 275 12 12
-             276:      7(int)   Load 131(index)
-             277:      7(int)   ISub 276 20
-             279:    217(ptr)   AccessChain 189 191 277 191
-             280:   67(fvec4)   Load 279
-             281:   27(fvec3)   VectorShuffle 280 280 0 1 2
-                                Store 278(param) 281
-             283:   27(fvec3)   Load 247(pos)
-                                Store 282(param) 283
-             285:    101(ptr)   AccessChain 97(params) 193
-             286:   24(float)   Load 285
-                                Store 284(param) 286
-             287:   27(fvec3)   FunctionCall 36(springForce(vf3;vf3;f1;) 278(param) 282(param) 284(param)
-             288:   27(fvec3)   Load 234(force)
-             289:   27(fvec3)   FAdd 288 287
-                                Store 234(force) 289
-                                Branch 272
-             272:             Label
-             290:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             291:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 292 292 12 12
-             293:    130(ptr) AccessChain 119(id) 12
-             294:      7(int) Load 293
-             295:    138(ptr) AccessChain 97(params) 137 12
-             296:     69(int) Load 295
-             297:     69(int) ISub 296 224
-             298:      7(int) Bitcast 297
-             300:   155(bool) ULessThan 294 298
-                              SelectionMerge 302 None
-                              BranchConditional 300 301 302
-             301:               Label
-             303:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             304:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 305 305 12 12
-             306:      7(int)   Load 131(index)
-             307:      7(int)   IAdd 306 20
-             309:    217(ptr)   AccessChain 189 191 307 191
-             310:   67(fvec4)   Load 309
-             311:   27(fvec3)   VectorShuffle 310 310 0 1 2
-                                Store 308(param) 311
-             313:   27(fvec3)   Load 247(pos)
-                                Store 312(param) 313
-             315:    101(ptr)   AccessChain 97(params) 193
-             316:   24(float)   Load 315
-                                Store 314(param) 316
-             317:   27(fvec3)   FunctionCall 36(springForce(vf3;vf3;f1;) 308(param) 312(param) 314(param)
-             318:   27(fvec3)   Load 234(force)
-             319:   27(fvec3)   FAdd 318 317
-                                Store 234(force) 319
-                                Branch 302
-             302:             Label
-             320:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             321:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 322 322 12 12
-             323:    130(ptr) AccessChain 119(id) 20
-             324:      7(int) Load 323
-             325:    138(ptr) AccessChain 97(params) 137 20
-             326:     69(int) Load 325
-             327:     69(int) ISub 326 224
-             328:      7(int) Bitcast 327
-             330:   155(bool) ULessThan 324 328
-                              SelectionMerge 332 None
-                              BranchConditional 330 331 332
-             331:               Label
-             333:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             334:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 335 335 12 12
-             336:      7(int)   Load 131(index)
-             337:    138(ptr)   AccessChain 97(params) 137 12
-             338:     69(int)   Load 337
-             339:      7(int)   Bitcast 338
-             340:      7(int)   IAdd 336 339
-             343:    217(ptr)   AccessChain 189 191 340 191
-             344:   67(fvec4)   Load 343
-             345:   27(fvec3)   VectorShuffle 344 344 0 1 2
-                                Store 342(param) 345
-             347:   27(fvec3)   Load 247(pos)
-                                Store 346(param) 347
-             349:    101(ptr)   AccessChain 97(params) 341
-             350:   24(float)   Load 349
-                                Store 348(param) 350
-             351:   27(fvec3)   FunctionCall 36(springForce(vf3;vf3;f1;) 342(param) 346(param) 348(param)
-             352:   27(fvec3)   Load 234(force)
-             353:   27(fvec3)   FAdd 352 351
-                                Store 234(force) 353
-                                Branch 332
-             332:             Label
-             354:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             355:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 356 356 12 12
-             357:    130(ptr) AccessChain 119(id) 20
-             358:      7(int) Load 357
-             360:   155(bool) UGreaterThan 358 12
-                              SelectionMerge 362 None
-                              BranchConditional 360 361 362
-             361:               Label
-             363:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             364:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 365 365 12 12
-             366:      7(int)   Load 131(index)
-             367:    138(ptr)   AccessChain 97(params) 137 12
-             368:     69(int)   Load 367
-             369:      7(int)   Bitcast 368
-             370:      7(int)   ISub 366 369
-             372:    217(ptr)   AccessChain 189 191 370 191
-             373:   67(fvec4)   Load 372
-             374:   27(fvec3)   VectorShuffle 373 373 0 1 2
-                                Store 371(param) 374
-             376:   27(fvec3)   Load 247(pos)
-                                Store 375(param) 376
-             378:    101(ptr)   AccessChain 97(params) 341
-             379:   24(float)   Load 378
-                                Store 377(param) 379
-             380:   27(fvec3)   FunctionCall 36(springForce(vf3;vf3;f1;) 371(param) 375(param) 377(param)
-             381:   27(fvec3)   Load 234(force)
-             382:   27(fvec3)   FAdd 381 380
-                                Store 234(force) 382
-                                Branch 362
-             362:             Label
-             383:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             384:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 385 385 12 12
-             386:    130(ptr) AccessChain 119(id) 12
-             387:      7(int) Load 386
-             389:   155(bool) UGreaterThan 387 12
-                              SelectionMerge 391 None
-                              BranchConditional 389 390 391
-             390:               Label
-             392:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             393:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 385 385 12 12
-             394:    130(ptr)   AccessChain 119(id) 20
-             395:      7(int)   Load 394
-             396:    138(ptr)   AccessChain 97(params) 137 20
-             397:     69(int)   Load 396
-             398:     69(int)   ISub 397 224
-             399:      7(int)   Bitcast 398
-             401:   155(bool)   ULessThan 395 399
-                                Branch 391
-             391:             Label
-             402:   155(bool) Phi 389 362 401 390
-                              SelectionMerge 404 None
-                              BranchConditional 402 403 404
-             403:               Label
-             405:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             406:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 407 407 12 12
-             408:      7(int)   Load 131(index)
-             409:    138(ptr)   AccessChain 97(params) 137 12
-             410:     69(int)   Load 409
-             411:      7(int)   Bitcast 410
-             412:      7(int)   IAdd 408 411
-             413:      7(int)   ISub 412 20
-             416:    217(ptr)   AccessChain 189 191 413 191
-             417:   67(fvec4)   Load 416
-             418:   27(fvec3)   VectorShuffle 417 417 0 1 2
-                                Store 415(param) 418
-             420:   27(fvec3)   Load 247(pos)
-                                Store 419(param) 420
-             422:    101(ptr)   AccessChain 97(params) 414
-             423:   24(float)   Load 422
-                                Store 421(param) 423
-             424:   27(fvec3)   FunctionCall 36(springForce(vf3;vf3;f1;) 415(param) 419(param) 421(param)
-             425:   27(fvec3)   Load 234(force)
-             426:   27(fvec3)   FAdd 425 424
-                                Store 234(force) 426
-                                Branch 404
-             404:             Label
-             427:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             428:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 429 429 12 12
-             430:    130(ptr) AccessChain 119(id) 12
-             431:      7(int) Load 430
-             433:   155(bool) UGreaterThan 431 12
-                              SelectionMerge 435 None
-                              BranchConditional 433 434 435
-             434:               Label
-             436:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             437:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 429 429 12 12
-             438:    130(ptr)   AccessChain 119(id) 20
-             439:      7(int)   Load 438
-             441:   155(bool)   UGreaterThan 439 12
-                                Branch 435
-             435:             Label
-             442:   155(bool) Phi 433 404 441 434
-                              SelectionMerge 444 None
-                              BranchConditional 442 443 444
-             443:               Label
-             445:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             446:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 447 447 12 12
-             448:      7(int)   Load 131(index)
-             449:    138(ptr)   AccessChain 97(params) 137 12
-             450:     69(int)   Load 449
-             451:      7(int)   Bitcast 450
-             452:      7(int)   ISub 448 451
-             453:      7(int)   ISub 452 20
-             455:    217(ptr)   AccessChain 189 191 453 191
-             456:   67(fvec4)   Load 455
-             457:   27(fvec3)   VectorShuffle 456 456 0 1 2
-                                Store 454(param) 457
-             459:   27(fvec3)   Load 247(pos)
-                                Store 458(param) 459
-             461:    101(ptr)   AccessChain 97(params) 414
-             462:   24(float)   Load 461
-                                Store 460(param) 462
-             463:   27(fvec3)   FunctionCall 36(springForce(vf3;vf3;f1;) 454(param) 458(param) 460(param)
-             464:   27(fvec3)   Load 234(force)
-             465:   27(fvec3)   FAdd 464 463
-                                Store 234(force) 465
-                                Branch 444
-             444:             Label
-             466:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             467:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 468 468 12 12
-             469:    130(ptr) AccessChain 119(id) 12
-             470:      7(int) Load 469
-             471:    138(ptr) AccessChain 97(params) 137 12
-             472:     69(int) Load 471
-             473:     69(int) ISub 472 224
-             474:      7(int) Bitcast 473
-             476:   155(bool) ULessThan 470 474
-                              SelectionMerge 478 None
-                              BranchConditional 476 477 478
-             477:               Label
-             479:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             480:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 468 468 12 12
-             481:    130(ptr)   AccessChain 119(id) 20
-             482:      7(int)   Load 481
-             483:    138(ptr)   AccessChain 97(params) 137 20
-             484:     69(int)   Load 483
-             485:     69(int)   ISub 484 224
-             486:      7(int)   Bitcast 485
-             488:   155(bool)   ULessThan 482 486
-                                Branch 478
-             478:             Label
-             489:   155(bool) Phi 476 444 488 477
-                              SelectionMerge 491 None
-                              BranchConditional 489 490 491
-             490:               Label
-             492:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             493:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 494 494 12 12
-             495:      7(int)   Load 131(index)
-             496:    138(ptr)   AccessChain 97(params) 137 12
-             497:     69(int)   Load 496
-             498:      7(int)   Bitcast 497
-             499:      7(int)   IAdd 495 498
-             500:      7(int)   IAdd 499 20
-             502:    217(ptr)   AccessChain 189 191 500 191
-             503:   67(fvec4)   Load 502
-             504:   27(fvec3)   VectorShuffle 503 503 0 1 2
-                                Store 501(param) 504
-             506:   27(fvec3)   Load 247(pos)
-                                Store 505(param) 506
-             508:    101(ptr)   AccessChain 97(params) 414
-             509:   24(float)   Load 508
-                                Store 507(param) 509
-             510:   27(fvec3)   FunctionCall 36(springForce(vf3;vf3;f1;) 501(param) 505(param) 507(param)
-             511:   27(fvec3)   Load 234(force)
-             512:   27(fvec3)   FAdd 511 510
-                                Store 234(force) 512
-                                Branch 491
-             491:             Label
-             513:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             514:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 515 515 12 12
-             516:    130(ptr) AccessChain 119(id) 12
-             517:      7(int) Load 516
-             518:    138(ptr) AccessChain 97(params) 137 12
-             519:     69(int) Load 518
-             520:     69(int) ISub 519 224
-             521:      7(int) Bitcast 520
-             523:   155(bool) ULessThan 517 521
-                              SelectionMerge 525 None
-                              BranchConditional 523 524 525
-             524:               Label
-             526:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             527:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 515 515 12 12
-             528:    130(ptr)   AccessChain 119(id) 20
-             529:      7(int)   Load 528
-             531:   155(bool)   UGreaterThan 529 12
-                                Branch 525
-             525:             Label
-             532:   155(bool) Phi 523 491 531 524
-                              SelectionMerge 534 None
-                              BranchConditional 532 533 534
-             533:               Label
-             535:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             536:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 537 537 12 12
-             538:      7(int)   Load 131(index)
-             539:    138(ptr)   AccessChain 97(params) 137 12
-             540:     69(int)   Load 539
-             541:      7(int)   Bitcast 540
-             542:      7(int)   ISub 538 541
-             543:      7(int)   IAdd 542 20
-             545:    217(ptr)   AccessChain 189 191 543 191
-             546:   67(fvec4)   Load 545
-             547:   27(fvec3)   VectorShuffle 546 546 0 1 2
-                                Store 544(param) 547
-             549:   27(fvec3)   Load 247(pos)
-                                Store 548(param) 549
-             551:    101(ptr)   AccessChain 97(params) 414
-             552:   24(float)   Load 551
-                                Store 550(param) 552
-             553:   27(fvec3)   FunctionCall 36(springForce(vf3;vf3;f1;) 544(param) 548(param) 550(param)
-             554:   27(fvec3)   Load 234(force)
-             555:   27(fvec3)   FAdd 554 553
-                                Store 234(force) 555
-                                Branch 534
-             534:             Label
-             556:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             557:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 558 558 12 12
-             560:    101(ptr) AccessChain 97(params) 559
-             561:   24(float) Load 560
-             562:   24(float) FNegate 561
-             563:   27(fvec3) Load 257(vel)
-             564:   27(fvec3) VectorTimesScalar 563 562
-             565:   27(fvec3) Load 234(force)
-             566:   27(fvec3) FAdd 565 564
-                              Store 234(force) 566
-             567:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 568 568 12 12
-             572:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 570 569(f) 45
-             573:   27(fvec3) Load 234(force)
-             574:    101(ptr) AccessChain 97(params) 224
-             575:   24(float) Load 574
-             576:   24(float) FDiv 196 575
-             577:   27(fvec3) VectorTimesScalar 573 576
-                              Store 569(f) 577
-             578:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 579 579 12 12
-             580:      7(int) Load 131(index)
-             581:   27(fvec3) Load 247(pos)
-             582:   27(fvec3) Load 257(vel)
-             583:    101(ptr) AccessChain 97(params) 191
-             584:   24(float) Load 583
-             585:   27(fvec3) VectorTimesScalar 582 584
-             586:   27(fvec3) FAdd 581 585
-             588:   27(fvec3) Load 569(f)
-             589:   27(fvec3) VectorTimesScalar 588 587
-             590:    101(ptr) AccessChain 97(params) 191
-             591:   24(float) Load 590
-             592:   27(fvec3) VectorTimesScalar 589 591
-             593:    101(ptr) AccessChain 97(params) 191
-             594:   24(float) Load 593
-             595:   27(fvec3) VectorTimesScalar 592 594
-             596:   27(fvec3) FAdd 586 595
-             597:   24(float) CompositeExtract 596 0
-             598:   24(float) CompositeExtract 596 1
-             599:   24(float) CompositeExtract 596 2
-             600:   67(fvec4) CompositeConstruct 597 598 599 196
-             601:    217(ptr) AccessChain 213 191 580 191
-                              Store 601 600
-             602:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 603 603 12 12
-             604:      7(int) Load 131(index)
-             605:   27(fvec3) Load 257(vel)
-             606:   27(fvec3) Load 569(f)
-             607:    101(ptr) AccessChain 97(params) 191
-             608:   24(float) Load 607
-             609:   27(fvec3) VectorTimesScalar 606 608
-             610:   27(fvec3) FAdd 605 609
-             611:   24(float) CompositeExtract 610 0
-             612:   24(float) CompositeExtract 610 1
-             613:   24(float) CompositeExtract 610 2
-             614:   67(fvec4) CompositeConstruct 611 612 613 225
-             615:    217(ptr) AccessChain 213 191 604 224
-                              Store 615 614
-             616:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 617 617 12 12
-             621:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 619 618(sphereDist) 45
-             622:      7(int) Load 131(index)
-             623:    217(ptr) AccessChain 213 191 622 191
-             624:   67(fvec4) Load 623
-             625:   27(fvec3) VectorShuffle 624 624 0 1 2
-             627:    217(ptr) AccessChain 97(params) 626
-             628:   67(fvec4) Load 627
-             629:   27(fvec3) VectorShuffle 628 628 0 1 2
-             630:   27(fvec3) FSub 625 629
-                              Store 618(sphereDist) 630
-             631:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 632 632 12 12
-             633:   27(fvec3) Load 618(sphereDist)
-             634:   24(float) ExtInst 3(GLSL.std.450) 66(Length) 633
-             636:    101(ptr) AccessChain 97(params) 635
-             637:   24(float) Load 636
-             639:   24(float) FAdd 637 638
-             641:   155(bool) FOrdLessThan 634 639
-                              SelectionMerge 643 None
-                              BranchConditional 641 642 643
-             642:               Label
-             644:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             645:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 646 646 12 12
-             647:      7(int)   Load 131(index)
-             648:    217(ptr)   AccessChain 97(params) 626
-             649:   67(fvec4)   Load 648
-             650:   27(fvec3)   VectorShuffle 649 649 0 1 2
-             651:   27(fvec3)   Load 618(sphereDist)
-             652:   27(fvec3)   ExtInst 3(GLSL.std.450) 69(Normalize) 651
-             653:    101(ptr)   AccessChain 97(params) 635
-             654:   24(float)   Load 653
-             655:   24(float)   FAdd 654 638
-             656:   27(fvec3)   VectorTimesScalar 652 655
-             657:   27(fvec3)   FAdd 650 656
-             658:    101(ptr)   AccessChain 213 191 647 191 12
-             659:   24(float)   CompositeExtract 657 0
-                                Store 658 659
-             660:    101(ptr)   AccessChain 213 191 647 191 20
-             661:   24(float)   CompositeExtract 657 1
-                                Store 660 661
-             662:    101(ptr)   AccessChain 213 191 647 191 22
-             663:   24(float)   CompositeExtract 657 2
-                                Store 662 663
-             664:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 665 665 12 12
-             666:      7(int)   Load 131(index)
-             667:    217(ptr)   AccessChain 213 191 666 224
-                                Store 667 226
-                                Branch 643
-             643:             Label
-             668:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             669:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 670 670 12 12
-             682:    681(ptr) AccessChain 678(pushConsts) 191
-             683:      7(int) Load 682
-             685:   155(bool) IEqual 683 20
-                              SelectionMerge 687 None
-                              BranchConditional 685 686 687
-             686:               Label
-             688:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             689:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 690 690 12 12
-             693:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 692 691(normal) 45
-                                Store 691(normal) 694
-             695:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 696 696 12 12
-             697:    130(ptr)   AccessChain 119(id) 20
-             698:      7(int)   Load 697
-             700:   155(bool)   UGreaterThan 698 12
-                                SelectionMerge 702 None
-                                BranchConditional 700 701 702
-             701:                 Label
-             703:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             704:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 705 705 12 12
-             706:    130(ptr)     AccessChain 119(id) 12
-             707:      7(int)     Load 706
-             709:   155(bool)     UGreaterThan 707 12
-                                  SelectionMerge 711 None
-                                  BranchConditional 709 710 711
-             710:                   Label
-             712:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             713:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 714 714 12 12
-             718:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 716 715(a) 45
-             719:      7(int)       Load 131(index)
-             720:      7(int)       ISub 719 20
-             721:    217(ptr)       AccessChain 189 191 720 191
-             722:   67(fvec4)       Load 721
-             723:   27(fvec3)       VectorShuffle 722 722 0 1 2
-             724:   27(fvec3)       Load 247(pos)
-             725:   27(fvec3)       FSub 723 724
-                                    Store 715(a) 725
-             726:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 727 727 12 12
-             731:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 729 728(b) 45
-             732:      7(int)       Load 131(index)
-             733:    138(ptr)       AccessChain 97(params) 137 12
-             734:     69(int)       Load 733
-             735:      7(int)       Bitcast 734
-             736:      7(int)       ISub 732 735
-             737:      7(int)       ISub 736 20
-             738:    217(ptr)       AccessChain 189 191 737 191
-             739:   67(fvec4)       Load 738
-             740:   27(fvec3)       VectorShuffle 739 739 0 1 2
-             741:   27(fvec3)       Load 247(pos)
-             742:   27(fvec3)       FSub 740 741
-                                    Store 728(b) 742
-             743:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 744 744 12 12
-             748:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 746 745(c) 45
-             749:      7(int)       Load 131(index)
-             750:    138(ptr)       AccessChain 97(params) 137 12
-             751:     69(int)       Load 750
-             752:      7(int)       Bitcast 751
-             753:      7(int)       ISub 749 752
-             754:    217(ptr)       AccessChain 189 191 753 191
-             755:   67(fvec4)       Load 754
-             756:   27(fvec3)       VectorShuffle 755 755 0 1 2
-             757:   27(fvec3)       Load 247(pos)
-             758:   27(fvec3)       FSub 756 757
-                                    Store 745(c) 758
-             759:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 760 760 12 12
-             761:   27(fvec3)       Load 715(a)
-             762:   27(fvec3)       Load 728(b)
-             763:   27(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 761 762
-             764:   27(fvec3)       Load 728(b)
-             765:   27(fvec3)       Load 745(c)
-             766:   27(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 764 765
-             767:   27(fvec3)       FAdd 763 766
-             768:   27(fvec3)       Load 691(normal)
-             769:   27(fvec3)       FAdd 768 767
-                                    Store 691(normal) 769
-                                    Branch 711
-             711:                 Label
-             770:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             771:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 772 772 12 12
-             773:    130(ptr)     AccessChain 119(id) 12
-             774:      7(int)     Load 773
-             775:    138(ptr)     AccessChain 97(params) 137 12
-             776:     69(int)     Load 775
-             777:     69(int)     ISub 776 224
-             778:      7(int)     Bitcast 777
-             780:   155(bool)     ULessThan 774 778
-                                  SelectionMerge 782 None
-                                  BranchConditional 780 781 782
-             781:                   Label
-             783:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             784:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 785 785 12 12
-             786:      7(int)       Load 131(index)
-             787:    138(ptr)       AccessChain 97(params) 137 12
-             788:     69(int)       Load 787
-             789:      7(int)       Bitcast 788
-             790:      7(int)       ISub 786 789
-             791:    217(ptr)       AccessChain 189 191 790 191
-             792:   67(fvec4)       Load 791
-             793:   27(fvec3)       VectorShuffle 792 792 0 1 2
-             794:   27(fvec3)       Load 247(pos)
-             795:   27(fvec3)       FSub 793 794
-                                    Store 715(a) 795
-             796:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 797 797 12 12
-             798:      7(int)       Load 131(index)
-             799:    138(ptr)       AccessChain 97(params) 137 12
-             800:     69(int)       Load 799
-             801:      7(int)       Bitcast 800
-             802:      7(int)       ISub 798 801
-             803:      7(int)       IAdd 802 20
-             804:    217(ptr)       AccessChain 189 191 803 191
-             805:   67(fvec4)       Load 804
-             806:   27(fvec3)       VectorShuffle 805 805 0 1 2
-             807:   27(fvec3)       Load 247(pos)
-             808:   27(fvec3)       FSub 806 807
-                                    Store 728(b) 808
-             809:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 810 810 12 12
-             811:      7(int)       Load 131(index)
-             812:      7(int)       IAdd 811 20
-             813:    217(ptr)       AccessChain 189 191 812 191
-             814:   67(fvec4)       Load 813
-             815:   27(fvec3)       VectorShuffle 814 814 0 1 2
-             816:   27(fvec3)       Load 247(pos)
-             817:   27(fvec3)       FSub 815 816
-                                    Store 745(c) 817
-             818:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 819 819 12 12
-             820:   27(fvec3)       Load 715(a)
-             821:   27(fvec3)       Load 728(b)
-             822:   27(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 820 821
-             823:   27(fvec3)       Load 728(b)
-             824:   27(fvec3)       Load 745(c)
-             825:   27(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 823 824
-             826:   27(fvec3)       FAdd 822 825
-             827:   27(fvec3)       Load 691(normal)
-             828:   27(fvec3)       FAdd 827 826
-                                    Store 691(normal) 828
-                                    Branch 782
-             782:                 Label
-                                  Branch 702
-             702:               Label
-             829:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             830:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 831 831 12 12
-             832:    130(ptr)   AccessChain 119(id) 20
-             833:      7(int)   Load 832
-             834:    138(ptr)   AccessChain 97(params) 137 20
-             835:     69(int)   Load 834
-             836:     69(int)   ISub 835 224
-             837:      7(int)   Bitcast 836
-             839:   155(bool)   ULessThan 833 837
-                                SelectionMerge 841 None
-                                BranchConditional 839 840 841
-             840:                 Label
-             842:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             843:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 844 844 12 12
-             845:    130(ptr)     AccessChain 119(id) 12
-             846:      7(int)     Load 845
-             848:   155(bool)     UGreaterThan 846 12
-                                  SelectionMerge 850 None
-                                  BranchConditional 848 849 850
-             849:                   Label
-             851:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             852:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 853 853 12 12
-             854:      7(int)       Load 131(index)
-             855:    138(ptr)       AccessChain 97(params) 137 12
-             856:     69(int)       Load 855
-             857:      7(int)       Bitcast 856
-             858:      7(int)       IAdd 854 857
-             859:    217(ptr)       AccessChain 189 191 858 191
-             860:   67(fvec4)       Load 859
-             861:   27(fvec3)       VectorShuffle 860 860 0 1 2
-             862:   27(fvec3)       Load 247(pos)
-             863:   27(fvec3)       FSub 861 862
-                                    Store 715(a) 863
-             864:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 865 865 12 12
-             866:      7(int)       Load 131(index)
-             867:    138(ptr)       AccessChain 97(params) 137 12
-             868:     69(int)       Load 867
-             869:      7(int)       Bitcast 868
-             870:      7(int)       IAdd 866 869
-             871:      7(int)       ISub 870 20
-             872:    217(ptr)       AccessChain 189 191 871 191
-             873:   67(fvec4)       Load 872
-             874:   27(fvec3)       VectorShuffle 873 873 0 1 2
-             875:   27(fvec3)       Load 247(pos)
-             876:   27(fvec3)       FSub 874 875
-                                    Store 728(b) 876
-             877:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 878 878 12 12
-             879:      7(int)       Load 131(index)
-             880:      7(int)       ISub 879 20
-             881:    217(ptr)       AccessChain 189 191 880 191
-             882:   67(fvec4)       Load 881
-             883:   27(fvec3)       VectorShuffle 882 882 0 1 2
-             884:   27(fvec3)       Load 247(pos)
-             885:   27(fvec3)       FSub 883 884
-                                    Store 745(c) 885
-             886:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 887 887 12 12
-             888:   27(fvec3)       Load 715(a)
-             889:   27(fvec3)       Load 728(b)
-             890:   27(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 888 889
-             891:   27(fvec3)       Load 728(b)
-             892:   27(fvec3)       Load 745(c)
-             893:   27(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 891 892
-             894:   27(fvec3)       FAdd 890 893
-             895:   27(fvec3)       Load 691(normal)
-             896:   27(fvec3)       FAdd 895 894
-                                    Store 691(normal) 896
-                                    Branch 850
-             850:                 Label
-             897:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             898:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 899 899 12 12
-             900:    130(ptr)     AccessChain 119(id) 12
-             901:      7(int)     Load 900
-             902:    138(ptr)     AccessChain 97(params) 137 12
-             903:     69(int)     Load 902
-             904:     69(int)     ISub 903 224
-             905:      7(int)     Bitcast 904
-             907:   155(bool)     ULessThan 901 905
-                                  SelectionMerge 909 None
-                                  BranchConditional 907 908 909
-             908:                   Label
-             910:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             911:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 912 912 12 12
-             913:      7(int)       Load 131(index)
-             914:      7(int)       IAdd 913 20
-             915:    217(ptr)       AccessChain 189 191 914 191
-             916:   67(fvec4)       Load 915
-             917:   27(fvec3)       VectorShuffle 916 916 0 1 2
-             918:   27(fvec3)       Load 247(pos)
-             919:   27(fvec3)       FSub 917 918
-                                    Store 715(a) 919
-             920:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 921 921 12 12
-             922:      7(int)       Load 131(index)
-             923:    138(ptr)       AccessChain 97(params) 137 12
-             924:     69(int)       Load 923
-             925:      7(int)       Bitcast 924
-             926:      7(int)       IAdd 922 925
-             927:      7(int)       IAdd 926 20
-             928:    217(ptr)       AccessChain 189 191 927 191
-             929:   67(fvec4)       Load 928
-             930:   27(fvec3)       VectorShuffle 929 929 0 1 2
-             931:   27(fvec3)       Load 247(pos)
-             932:   27(fvec3)       FSub 930 931
-                                    Store 728(b) 932
-             933:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 934 934 12 12
-             935:      7(int)       Load 131(index)
-             936:    138(ptr)       AccessChain 97(params) 137 12
-             937:     69(int)       Load 936
-             938:      7(int)       Bitcast 937
-             939:      7(int)       IAdd 935 938
-             940:    217(ptr)       AccessChain 189 191 939 191
-             941:   67(fvec4)       Load 940
-             942:   27(fvec3)       VectorShuffle 941 941 0 1 2
-             943:   27(fvec3)       Load 247(pos)
-             944:   27(fvec3)       FSub 942 943
-                                    Store 745(c) 944
-             945:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 946 946 12 12
-             947:   27(fvec3)       Load 715(a)
-             948:   27(fvec3)       Load 728(b)
-             949:   27(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 947 948
-             950:   27(fvec3)       Load 728(b)
-             951:   27(fvec3)       Load 745(c)
-             952:   27(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 950 951
-             953:   27(fvec3)       FAdd 949 952
-             954:   27(fvec3)       Load 691(normal)
-             955:   27(fvec3)       FAdd 954 953
-                                    Store 691(normal) 955
-                                    Branch 909
-             909:                 Label
-                                  Branch 841
-             841:               Label
-             956:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             957:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 958 958 12 12
-             959:      7(int)   Load 131(index)
-             960:   27(fvec3)   Load 691(normal)
-             961:   27(fvec3)   ExtInst 3(GLSL.std.450) 69(Normalize) 960
-             962:   24(float)   CompositeExtract 961 0
-             963:   24(float)   CompositeExtract 961 1
-             964:   24(float)   CompositeExtract 961 2
-             965:   67(fvec4)   CompositeConstruct 962 963 964 225
-             966:    217(ptr)   AccessChain 213 191 959 559
-                                Store 966 965
-                                Branch 687
-             687:             Label
+             214:             Label
+             254:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55
+             255:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 252 252 12 12
+             253:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 250 249(force) 45
+             257:    234(ptr) AccessChain 101(params) 256
+             258:   71(fvec4) Load 257
+             259:   19(fvec3) VectorShuffle 258 258 0 1 2
+             260:    105(ptr) AccessChain 101(params) 242
+             261:   16(float) Load 260
+             262:   19(fvec3) VectorTimesScalar 259 261
+                              Store 249(force) 262
+             268:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 266 266 12 12
+             267:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 264 263(pos) 45
+             269:      7(int) Load 141(index)
+             270:    234(ptr) AccessChain 201 204 269 204
+             271:   71(fvec4) Load 270
+             272:   19(fvec3) VectorShuffle 271 271 0 1 2
+                              Store 263(pos) 272
+             278:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 276 276 12 12
+             277:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 274 273(vel) 45
+             279:      7(int) Load 141(index)
+             280:    234(ptr) AccessChain 201 204 279 242
+             281:   71(fvec4) Load 280
+             282:   19(fvec3) VectorShuffle 281 281 0 1 2
+                              Store 273(vel) 282
+             284:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 285 285 12 12
+             283:    139(ptr) AccessChain 127(id) 12
+             286:      7(int) Load 283
+             287:   168(bool) UGreaterThan 286 12
+                              SelectionMerge 289 None
+                              BranchConditional 287 288 289
+             288:               Label
+             294:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 290
+             295:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 291 291 12 12
+             293:      7(int)   Load 141(index)
+             296:      7(int)   ISub 293 39
+             298:    234(ptr)   AccessChain 201 204 296 204
+             299:   71(fvec4)   Load 298
+             300:   19(fvec3)   VectorShuffle 299 299 0 1 2
+                                Store 297(param) 300
+             302:   19(fvec3)   Load 263(pos)
+                                Store 301(param) 302
+             304:    105(ptr)   AccessChain 101(params) 208
+             305:   16(float)   Load 304
+                                Store 303(param) 305
+             306:   19(fvec3)   FunctionCall 31(springForce(vf3;vf3;f1;) 297(param) 301(param) 303(param)
+             307:   19(fvec3)   Load 249(force)
+             308:   19(fvec3)   FAdd 307 306
+                                Store 249(force) 308
+                                Branch 289
+             289:             Label
+             310:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55
+             311:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 312 312 12 12
+             309:    139(ptr) AccessChain 127(id) 12
+             313:      7(int) Load 309
+             314:    150(ptr) AccessChain 101(params) 149 12
+             315:     73(int) Load 314
+             316:     73(int) ISub 315 242
+             317:      7(int) Bitcast 316
+             318:   168(bool) ULessThan 313 317
+                              SelectionMerge 320 None
+                              BranchConditional 318 319 320
+             319:               Label
+             324:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 321
+             325:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 322 322 12 12
+             323:      7(int)   Load 141(index)
+             326:      7(int)   IAdd 323 39
+             328:    234(ptr)   AccessChain 201 204 326 204
+             329:   71(fvec4)   Load 328
+             330:   19(fvec3)   VectorShuffle 329 329 0 1 2
+                                Store 327(param) 330
+             332:   19(fvec3)   Load 263(pos)
+                                Store 331(param) 332
+             334:    105(ptr)   AccessChain 101(params) 208
+             335:   16(float)   Load 334
+                                Store 333(param) 335
+             336:   19(fvec3)   FunctionCall 31(springForce(vf3;vf3;f1;) 327(param) 331(param) 333(param)
+             337:   19(fvec3)   Load 249(force)
+             338:   19(fvec3)   FAdd 337 336
+                                Store 249(force) 338
+                                Branch 320
+             320:             Label
+             340:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55
+             341:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 342 342 12 12
+             339:    139(ptr) AccessChain 127(id) 39
+             343:      7(int) Load 339
+             344:    150(ptr) AccessChain 101(params) 149 39
+             345:     73(int) Load 344
+             346:     73(int) ISub 345 242
+             347:      7(int) Bitcast 346
+             348:   168(bool) ULessThan 343 347
+                              SelectionMerge 350 None
+                              BranchConditional 348 349 350
+             349:               Label
+             354:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 351
+             355:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 352 352 12 12
+             353:      7(int)   Load 141(index)
+             356:    150(ptr)   AccessChain 101(params) 149 12
+             357:     73(int)   Load 356
+             358:      7(int)   Bitcast 357
+             359:      7(int)   IAdd 353 358
+             362:    234(ptr)   AccessChain 201 204 359 204
+             363:   71(fvec4)   Load 362
+             364:   19(fvec3)   VectorShuffle 363 363 0 1 2
+                                Store 361(param) 364
+             366:   19(fvec3)   Load 263(pos)
+                                Store 365(param) 366
+             368:    105(ptr)   AccessChain 101(params) 360
+             369:   16(float)   Load 368
+                                Store 367(param) 369
+             370:   19(fvec3)   FunctionCall 31(springForce(vf3;vf3;f1;) 361(param) 365(param) 367(param)
+             371:   19(fvec3)   Load 249(force)
+             372:   19(fvec3)   FAdd 371 370
+                                Store 249(force) 372
+                                Branch 350
+             350:             Label
+             374:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55
+             375:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 376 376 12 12
+             373:    139(ptr) AccessChain 127(id) 39
+             377:      7(int) Load 373
+             378:   168(bool) UGreaterThan 377 12
+                              SelectionMerge 380 None
+                              BranchConditional 378 379 380
+             379:               Label
+             384:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 381
+             385:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 382 382 12 12
+             383:      7(int)   Load 141(index)
+             386:    150(ptr)   AccessChain 101(params) 149 12
+             387:     73(int)   Load 386
+             388:      7(int)   Bitcast 387
+             389:      7(int)   ISub 383 388
+             391:    234(ptr)   AccessChain 201 204 389 204
+             392:   71(fvec4)   Load 391
+             393:   19(fvec3)   VectorShuffle 392 392 0 1 2
+                                Store 390(param) 393
+             395:   19(fvec3)   Load 263(pos)
+                                Store 394(param) 395
+             397:    105(ptr)   AccessChain 101(params) 360
+             398:   16(float)   Load 397
+                                Store 396(param) 398
+             399:   19(fvec3)   FunctionCall 31(springForce(vf3;vf3;f1;) 390(param) 394(param) 396(param)
+             400:   19(fvec3)   Load 249(force)
+             401:   19(fvec3)   FAdd 400 399
+                                Store 249(force) 401
+                                Branch 380
+             380:             Label
+             403:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55
+             404:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 405 405 12 12
+             402:    139(ptr) AccessChain 127(id) 12
+             406:      7(int) Load 402
+             407:   168(bool) UGreaterThan 406 12
+                              SelectionMerge 409 None
+                              BranchConditional 407 408 409
+             408:               Label
+             411:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55
+             412:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 405 405 12 12
+             410:    139(ptr)   AccessChain 127(id) 39
+             413:      7(int)   Load 410
+             414:    150(ptr)   AccessChain 101(params) 149 39
+             415:     73(int)   Load 414
+             416:     73(int)   ISub 415 242
+             417:      7(int)   Bitcast 416
+             418:   168(bool)   ULessThan 413 417
+                                Branch 409
+             409:             Label
+             419:   168(bool) Phi 407 380 418 408
+             422:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55
+             423:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 405 405 12 12
+                              SelectionMerge 421 None
+                              BranchConditional 419 420 421
+             420:               Label
+             427:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 424
+             428:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 425 425 12 12
+             426:      7(int)   Load 141(index)
+             429:    150(ptr)   AccessChain 101(params) 149 12
+             430:     73(int)   Load 429
+             431:      7(int)   Bitcast 430
+             432:      7(int)   IAdd 426 431
+             433:      7(int)   ISub 432 39
+             436:    234(ptr)   AccessChain 201 204 433 204
+             437:   71(fvec4)   Load 436
+             438:   19(fvec3)   VectorShuffle 437 437 0 1 2
+                                Store 435(param) 438
+             440:   19(fvec3)   Load 263(pos)
+                                Store 439(param) 440
+             442:    105(ptr)   AccessChain 101(params) 434
+             443:   16(float)   Load 442
+                                Store 441(param) 443
+             444:   19(fvec3)   FunctionCall 31(springForce(vf3;vf3;f1;) 435(param) 439(param) 441(param)
+             445:   19(fvec3)   Load 249(force)
+             446:   19(fvec3)   FAdd 445 444
+                                Store 249(force) 446
+                                Branch 421
+             421:             Label
+             448:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55
+             449:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 450 450 12 12
+             447:    139(ptr) AccessChain 127(id) 12
+             451:      7(int) Load 447
+             452:   168(bool) UGreaterThan 451 12
+                              SelectionMerge 454 None
+                              BranchConditional 452 453 454
+             453:               Label
+             456:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55
+             457:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 450 450 12 12
+             455:    139(ptr)   AccessChain 127(id) 39
+             458:      7(int)   Load 455
+             459:   168(bool)   UGreaterThan 458 12
+                                Branch 454
+             454:             Label
+             460:   168(bool) Phi 452 421 459 453
+             463:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55
+             464:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 450 450 12 12
+                              SelectionMerge 462 None
+                              BranchConditional 460 461 462
+             461:               Label
+             468:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 465
+             469:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 466 466 12 12
+             467:      7(int)   Load 141(index)
+             470:    150(ptr)   AccessChain 101(params) 149 12
+             471:     73(int)   Load 470
+             472:      7(int)   Bitcast 471
+             473:      7(int)   ISub 467 472
+             474:      7(int)   ISub 473 39
+             476:    234(ptr)   AccessChain 201 204 474 204
+             477:   71(fvec4)   Load 476
+             478:   19(fvec3)   VectorShuffle 477 477 0 1 2
+                                Store 475(param) 478
+             480:   19(fvec3)   Load 263(pos)
+                                Store 479(param) 480
+             482:    105(ptr)   AccessChain 101(params) 434
+             483:   16(float)   Load 482
+                                Store 481(param) 483
+             484:   19(fvec3)   FunctionCall 31(springForce(vf3;vf3;f1;) 475(param) 479(param) 481(param)
+             485:   19(fvec3)   Load 249(force)
+             486:   19(fvec3)   FAdd 485 484
+                                Store 249(force) 486
+                                Branch 462
+             462:             Label
+             488:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55
+             489:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 490 490 12 12
+             487:    139(ptr) AccessChain 127(id) 12
+             491:      7(int) Load 487
+             492:    150(ptr) AccessChain 101(params) 149 12
+             493:     73(int) Load 492
+             494:     73(int) ISub 493 242
+             495:      7(int) Bitcast 494
+             496:   168(bool) ULessThan 491 495
+                              SelectionMerge 498 None
+                              BranchConditional 496 497 498
+             497:               Label
+             500:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55
+             501:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 490 490 12 12
+             499:    139(ptr)   AccessChain 127(id) 39
+             502:      7(int)   Load 499
+             503:    150(ptr)   AccessChain 101(params) 149 39
+             504:     73(int)   Load 503
+             505:     73(int)   ISub 504 242
+             506:      7(int)   Bitcast 505
+             507:   168(bool)   ULessThan 502 506
+                                Branch 498
+             498:             Label
+             508:   168(bool) Phi 496 462 507 497
+             511:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55
+             512:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 490 490 12 12
+                              SelectionMerge 510 None
+                              BranchConditional 508 509 510
+             509:               Label
+             516:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 513
+             517:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 514 514 12 12
+             515:      7(int)   Load 141(index)
+             518:    150(ptr)   AccessChain 101(params) 149 12
+             519:     73(int)   Load 518
+             520:      7(int)   Bitcast 519
+             521:      7(int)   IAdd 515 520
+             522:      7(int)   IAdd 521 39
+             524:    234(ptr)   AccessChain 201 204 522 204
+             525:   71(fvec4)   Load 524
+             526:   19(fvec3)   VectorShuffle 525 525 0 1 2
+                                Store 523(param) 526
+             528:   19(fvec3)   Load 263(pos)
+                                Store 527(param) 528
+             530:    105(ptr)   AccessChain 101(params) 434
+             531:   16(float)   Load 530
+                                Store 529(param) 531
+             532:   19(fvec3)   FunctionCall 31(springForce(vf3;vf3;f1;) 523(param) 527(param) 529(param)
+             533:   19(fvec3)   Load 249(force)
+             534:   19(fvec3)   FAdd 533 532
+                                Store 249(force) 534
+                                Branch 510
+             510:             Label
+             536:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55
+             537:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 538 538 12 12
+             535:    139(ptr) AccessChain 127(id) 12
+             539:      7(int) Load 535
+             540:    150(ptr) AccessChain 101(params) 149 12
+             541:     73(int) Load 540
+             542:     73(int) ISub 541 242
+             543:      7(int) Bitcast 542
+             544:   168(bool) ULessThan 539 543
+                              SelectionMerge 546 None
+                              BranchConditional 544 545 546
+             545:               Label
+             548:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55
+             549:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 538 538 12 12
+             547:    139(ptr)   AccessChain 127(id) 39
+             550:      7(int)   Load 547
+             551:   168(bool)   UGreaterThan 550 12
+                                Branch 546
+             546:             Label
+             552:   168(bool) Phi 544 510 551 545
+             555:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55
+             556:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 538 538 12 12
+                              SelectionMerge 554 None
+                              BranchConditional 552 553 554
+             553:               Label
+             560:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 557
+             561:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 558 558 12 12
+             559:      7(int)   Load 141(index)
+             562:    150(ptr)   AccessChain 101(params) 149 12
+             563:     73(int)   Load 562
+             564:      7(int)   Bitcast 563
+             565:      7(int)   ISub 559 564
+             566:      7(int)   IAdd 565 39
+             568:    234(ptr)   AccessChain 201 204 566 204
+             569:   71(fvec4)   Load 568
+             570:   19(fvec3)   VectorShuffle 569 569 0 1 2
+                                Store 567(param) 570
+             572:   19(fvec3)   Load 263(pos)
+                                Store 571(param) 572
+             574:    105(ptr)   AccessChain 101(params) 434
+             575:   16(float)   Load 574
+                                Store 573(param) 575
+             576:   19(fvec3)   FunctionCall 31(springForce(vf3;vf3;f1;) 567(param) 571(param) 573(param)
+             577:   19(fvec3)   Load 249(force)
+             578:   19(fvec3)   FAdd 577 576
+                                Store 249(force) 578
+                                Branch 554
+             554:             Label
+             581:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55
+             582:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 583 583 12 12
+             580:    105(ptr) AccessChain 101(params) 579
+             584:   16(float) Load 580
+             585:   16(float) FNegate 584
+             586:   19(fvec3) Load 273(vel)
+             587:   19(fvec3) VectorTimesScalar 586 585
+             588:   19(fvec3) Load 249(force)
+             589:   19(fvec3) FAdd 588 587
+                              Store 249(force) 589
+             595:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 593 593 12 12
+             594:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 591 590(f) 45
+             596:   19(fvec3) Load 249(force)
+             597:    105(ptr) AccessChain 101(params) 242
+             598:   16(float) Load 597
+             599:   16(float) FDiv 211 598
+             600:   19(fvec3) VectorTimesScalar 596 599
+                              Store 590(f) 600
+             602:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 603 603 12 12
+             601:      7(int) Load 141(index)
+             604:   19(fvec3) Load 263(pos)
+             605:   19(fvec3) Load 273(vel)
+             606:    105(ptr) AccessChain 101(params) 204
+             607:   16(float) Load 606
+             608:   19(fvec3) VectorTimesScalar 605 607
+             609:   19(fvec3) FAdd 604 608
+             611:   19(fvec3) Load 590(f)
+             612:   19(fvec3) VectorTimesScalar 611 610
+             613:    105(ptr) AccessChain 101(params) 204
+             614:   16(float) Load 613
+             615:   19(fvec3) VectorTimesScalar 612 614
+             616:    105(ptr) AccessChain 101(params) 204
+             617:   16(float) Load 616
+             618:   19(fvec3) VectorTimesScalar 615 617
+             619:   19(fvec3) FAdd 609 618
+             620:   16(float) CompositeExtract 619 0
+             621:   16(float) CompositeExtract 619 1
+             622:   16(float) CompositeExtract 619 2
+             623:   71(fvec4) CompositeConstruct 620 621 622 211
+             624:    234(ptr) AccessChain 228 204 601 204
+                              Store 624 623
+             626:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 627 627 12 12
+             625:      7(int) Load 141(index)
+             628:   19(fvec3) Load 273(vel)
+             629:   19(fvec3) Load 590(f)
+             630:    105(ptr) AccessChain 101(params) 204
+             631:   16(float) Load 630
+             632:   19(fvec3) VectorTimesScalar 629 631
+             633:   19(fvec3) FAdd 628 632
+             634:   16(float) CompositeExtract 633 0
+             635:   16(float) CompositeExtract 633 1
+             636:   16(float) CompositeExtract 633 2
+             637:   71(fvec4) CompositeConstruct 634 635 636 243
+             638:    234(ptr) AccessChain 228 204 625 242
+                              Store 638 637
+             644:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 642 642 12 12
+             643:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 640 639(sphereDist) 45
+             645:      7(int) Load 141(index)
+             646:    234(ptr) AccessChain 228 204 645 204
+             647:   71(fvec4) Load 646
+             648:   19(fvec3) VectorShuffle 647 647 0 1 2
+             650:    234(ptr) AccessChain 101(params) 649
+             651:   71(fvec4) Load 650
+             652:   19(fvec3) VectorShuffle 651 651 0 1 2
+             653:   19(fvec3) FSub 648 652
+                              Store 639(sphereDist) 653
+             655:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 656 656 12 12
+             654:   19(fvec3) Load 639(sphereDist)
+             657:   16(float) ExtInst 3(GLSL.std.450) 66(Length) 654
+             659:    105(ptr) AccessChain 101(params) 658
+             660:   16(float) Load 659
+             662:   16(float) FAdd 660 661
+             663:   168(bool) FOrdLessThan 657 662
+                              SelectionMerge 665 None
+                              BranchConditional 663 664 665
+             664:               Label
+             670:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 666
+             671:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 667 667 12 12
+             669:      7(int)   Load 141(index)
+             672:    234(ptr)   AccessChain 101(params) 649
+             673:   71(fvec4)   Load 672
+             674:   19(fvec3)   VectorShuffle 673 673 0 1 2
+             675:   19(fvec3)   Load 639(sphereDist)
+             676:   19(fvec3)   ExtInst 3(GLSL.std.450) 69(Normalize) 675
+             677:    105(ptr)   AccessChain 101(params) 658
+             678:   16(float)   Load 677
+             679:   16(float)   FAdd 678 661
+             680:   19(fvec3)   VectorTimesScalar 676 679
+             681:   19(fvec3)   FAdd 674 680
+             682:    105(ptr)   AccessChain 228 204 669 204 12
+             683:   16(float)   CompositeExtract 681 0
+                                Store 682 683
+             684:    105(ptr)   AccessChain 228 204 669 204 39
+             685:   16(float)   CompositeExtract 681 1
+                                Store 684 685
+             686:    105(ptr)   AccessChain 228 204 669 204 41
+             687:   16(float)   CompositeExtract 681 2
+                                Store 686 687
+             689:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 690 690 12 12
+             688:      7(int)   Load 141(index)
+             691:    234(ptr)   AccessChain 228 204 688 242
+                                Store 691 244
+                                Branch 665
+             665:             Label
+             707:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55
+             708:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 698 698 12 12
+             706:    704(ptr) AccessChain 701(pushConsts) 204
+             709:      7(int) Load 706
+             710:   168(bool) IEqual 709 39
+                              SelectionMerge 712 None
+                              BranchConditional 710 711 712
+             711:               Label
+             719:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 713
+             720:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 714 714 12 12
+             718:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 717 716(normal) 45
+                                Store 716(normal) 721
+             723:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 724 724 12 12
+             722:    139(ptr)   AccessChain 127(id) 39
+             725:      7(int)   Load 722
+             726:   168(bool)   UGreaterThan 725 12
+                                SelectionMerge 728 None
+                                BranchConditional 726 727 728
+             727:                 Label
+             732:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 729
+             733:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 730 730 12 12
+             731:    139(ptr)     AccessChain 127(id) 12
+             734:      7(int)     Load 731
+             735:   168(bool)     UGreaterThan 734 12
+                                  SelectionMerge 737 None
+                                  BranchConditional 735 736 737
+             736:                   Label
+             744:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 738
+             745:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 739 739 12 12
+             743:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 741 740(a) 45
+             746:      7(int)       Load 141(index)
+             747:      7(int)       ISub 746 39
+             748:    234(ptr)       AccessChain 201 204 747 204
+             749:   71(fvec4)       Load 748
+             750:   19(fvec3)       VectorShuffle 749 749 0 1 2
+             751:   19(fvec3)       Load 263(pos)
+             752:   19(fvec3)       FSub 750 751
+                                    Store 740(a) 752
+             758:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 756 756 12 12
+             757:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 754 753(b) 45
+             759:      7(int)       Load 141(index)
+             760:    150(ptr)       AccessChain 101(params) 149 12
+             761:     73(int)       Load 760
+             762:      7(int)       Bitcast 761
+             763:      7(int)       ISub 759 762
+             764:      7(int)       ISub 763 39
+             765:    234(ptr)       AccessChain 201 204 764 204
+             766:   71(fvec4)       Load 765
+             767:   19(fvec3)       VectorShuffle 766 766 0 1 2
+             768:   19(fvec3)       Load 263(pos)
+             769:   19(fvec3)       FSub 767 768
+                                    Store 753(b) 769
+             775:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 773 773 12 12
+             774:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 771 770(c) 45
+             776:      7(int)       Load 141(index)
+             777:    150(ptr)       AccessChain 101(params) 149 12
+             778:     73(int)       Load 777
+             779:      7(int)       Bitcast 778
+             780:      7(int)       ISub 776 779
+             781:    234(ptr)       AccessChain 201 204 780 204
+             782:   71(fvec4)       Load 781
+             783:   19(fvec3)       VectorShuffle 782 782 0 1 2
+             784:   19(fvec3)       Load 263(pos)
+             785:   19(fvec3)       FSub 783 784
+                                    Store 770(c) 785
+             787:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 788 788 12 12
+             786:   19(fvec3)       Load 740(a)
+             789:   19(fvec3)       Load 753(b)
+             790:   19(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 786 789
+             791:   19(fvec3)       Load 753(b)
+             792:   19(fvec3)       Load 770(c)
+             793:   19(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 791 792
+             794:   19(fvec3)       FAdd 790 793
+             795:   19(fvec3)       Load 716(normal)
+             796:   19(fvec3)       FAdd 795 794
+                                    Store 716(normal) 796
+                                    Branch 737
+             737:                 Label
+             798:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 729
+             799:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 800 800 12 12
+             797:    139(ptr)     AccessChain 127(id) 12
+             801:      7(int)     Load 797
+             802:    150(ptr)     AccessChain 101(params) 149 12
+             803:     73(int)     Load 802
+             804:     73(int)     ISub 803 242
+             805:      7(int)     Bitcast 804
+             806:   168(bool)     ULessThan 801 805
+                                  SelectionMerge 808 None
+                                  BranchConditional 806 807 808
+             807:                   Label
+             812:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 809
+             813:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 810 810 12 12
+             811:      7(int)       Load 141(index)
+             814:    150(ptr)       AccessChain 101(params) 149 12
+             815:     73(int)       Load 814
+             816:      7(int)       Bitcast 815
+             817:      7(int)       ISub 811 816
+             818:    234(ptr)       AccessChain 201 204 817 204
+             819:   71(fvec4)       Load 818
+             820:   19(fvec3)       VectorShuffle 819 819 0 1 2
+             821:   19(fvec3)       Load 263(pos)
+             822:   19(fvec3)       FSub 820 821
+                                    Store 740(a) 822
+             824:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 825 825 12 12
+             823:      7(int)       Load 141(index)
+             826:    150(ptr)       AccessChain 101(params) 149 12
+             827:     73(int)       Load 826
+             828:      7(int)       Bitcast 827
+             829:      7(int)       ISub 823 828
+             830:      7(int)       IAdd 829 39
+             831:    234(ptr)       AccessChain 201 204 830 204
+             832:   71(fvec4)       Load 831
+             833:   19(fvec3)       VectorShuffle 832 832 0 1 2
+             834:   19(fvec3)       Load 263(pos)
+             835:   19(fvec3)       FSub 833 834
+                                    Store 753(b) 835
+             837:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 838 838 12 12
+             836:      7(int)       Load 141(index)
+             839:      7(int)       IAdd 836 39
+             840:    234(ptr)       AccessChain 201 204 839 204
+             841:   71(fvec4)       Load 840
+             842:   19(fvec3)       VectorShuffle 841 841 0 1 2
+             843:   19(fvec3)       Load 263(pos)
+             844:   19(fvec3)       FSub 842 843
+                                    Store 770(c) 844
+             846:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 847 847 12 12
+             845:   19(fvec3)       Load 740(a)
+             848:   19(fvec3)       Load 753(b)
+             849:   19(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 845 848
+             850:   19(fvec3)       Load 753(b)
+             851:   19(fvec3)       Load 770(c)
+             852:   19(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 850 851
+             853:   19(fvec3)       FAdd 849 852
+             854:   19(fvec3)       Load 716(normal)
+             855:   19(fvec3)       FAdd 854 853
+                                    Store 716(normal) 855
+                                    Branch 808
+             808:                 Label
+                                  Branch 728
+             728:               Label
+             857:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 713
+             858:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 859 859 12 12
+             856:    139(ptr)   AccessChain 127(id) 39
+             860:      7(int)   Load 856
+             861:    150(ptr)   AccessChain 101(params) 149 39
+             862:     73(int)   Load 861
+             863:     73(int)   ISub 862 242
+             864:      7(int)   Bitcast 863
+             865:   168(bool)   ULessThan 860 864
+                                SelectionMerge 867 None
+                                BranchConditional 865 866 867
+             866:                 Label
+             871:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 868
+             872:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 869 869 12 12
+             870:    139(ptr)     AccessChain 127(id) 12
+             873:      7(int)     Load 870
+             874:   168(bool)     UGreaterThan 873 12
+                                  SelectionMerge 876 None
+                                  BranchConditional 874 875 876
+             875:                   Label
+             880:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 877
+             881:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 878 878 12 12
+             879:      7(int)       Load 141(index)
+             882:    150(ptr)       AccessChain 101(params) 149 12
+             883:     73(int)       Load 882
+             884:      7(int)       Bitcast 883
+             885:      7(int)       IAdd 879 884
+             886:    234(ptr)       AccessChain 201 204 885 204
+             887:   71(fvec4)       Load 886
+             888:   19(fvec3)       VectorShuffle 887 887 0 1 2
+             889:   19(fvec3)       Load 263(pos)
+             890:   19(fvec3)       FSub 888 889
+                                    Store 740(a) 890
+             892:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 893 893 12 12
+             891:      7(int)       Load 141(index)
+             894:    150(ptr)       AccessChain 101(params) 149 12
+             895:     73(int)       Load 894
+             896:      7(int)       Bitcast 895
+             897:      7(int)       IAdd 891 896
+             898:      7(int)       ISub 897 39
+             899:    234(ptr)       AccessChain 201 204 898 204
+             900:   71(fvec4)       Load 899
+             901:   19(fvec3)       VectorShuffle 900 900 0 1 2
+             902:   19(fvec3)       Load 263(pos)
+             903:   19(fvec3)       FSub 901 902
+                                    Store 753(b) 903
+             905:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 906 906 12 12
+             904:      7(int)       Load 141(index)
+             907:      7(int)       ISub 904 39
+             908:    234(ptr)       AccessChain 201 204 907 204
+             909:   71(fvec4)       Load 908
+             910:   19(fvec3)       VectorShuffle 909 909 0 1 2
+             911:   19(fvec3)       Load 263(pos)
+             912:   19(fvec3)       FSub 910 911
+                                    Store 770(c) 912
+             914:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 915 915 12 12
+             913:   19(fvec3)       Load 740(a)
+             916:   19(fvec3)       Load 753(b)
+             917:   19(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 913 916
+             918:   19(fvec3)       Load 753(b)
+             919:   19(fvec3)       Load 770(c)
+             920:   19(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 918 919
+             921:   19(fvec3)       FAdd 917 920
+             922:   19(fvec3)       Load 716(normal)
+             923:   19(fvec3)       FAdd 922 921
+                                    Store 716(normal) 923
+                                    Branch 876
+             876:                 Label
+             925:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 868
+             926:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 927 927 12 12
+             924:    139(ptr)     AccessChain 127(id) 12
+             928:      7(int)     Load 924
+             929:    150(ptr)     AccessChain 101(params) 149 12
+             930:     73(int)     Load 929
+             931:     73(int)     ISub 930 242
+             932:      7(int)     Bitcast 931
+             933:   168(bool)     ULessThan 928 932
+                                  SelectionMerge 935 None
+                                  BranchConditional 933 934 935
+             934:                   Label
+             939:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 936
+             940:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 937 937 12 12
+             938:      7(int)       Load 141(index)
+             941:      7(int)       IAdd 938 39
+             942:    234(ptr)       AccessChain 201 204 941 204
+             943:   71(fvec4)       Load 942
+             944:   19(fvec3)       VectorShuffle 943 943 0 1 2
+             945:   19(fvec3)       Load 263(pos)
+             946:   19(fvec3)       FSub 944 945
+                                    Store 740(a) 946
+             948:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 949 949 12 12
+             947:      7(int)       Load 141(index)
+             950:    150(ptr)       AccessChain 101(params) 149 12
+             951:     73(int)       Load 950
+             952:      7(int)       Bitcast 951
+             953:      7(int)       IAdd 947 952
+             954:      7(int)       IAdd 953 39
+             955:    234(ptr)       AccessChain 201 204 954 204
+             956:   71(fvec4)       Load 955
+             957:   19(fvec3)       VectorShuffle 956 956 0 1 2
+             958:   19(fvec3)       Load 263(pos)
+             959:   19(fvec3)       FSub 957 958
+                                    Store 753(b) 959
+             961:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 962 962 12 12
+             960:      7(int)       Load 141(index)
+             963:    150(ptr)       AccessChain 101(params) 149 12
+             964:     73(int)       Load 963
+             965:      7(int)       Bitcast 964
+             966:      7(int)       IAdd 960 965
+             967:    234(ptr)       AccessChain 201 204 966 204
+             968:   71(fvec4)       Load 967
+             969:   19(fvec3)       VectorShuffle 968 968 0 1 2
+             970:   19(fvec3)       Load 263(pos)
+             971:   19(fvec3)       FSub 969 970
+                                    Store 770(c) 971
+             973:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 974 974 12 12
+             972:   19(fvec3)       Load 740(a)
+             975:   19(fvec3)       Load 753(b)
+             976:   19(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 972 975
+             977:   19(fvec3)       Load 753(b)
+             978:   19(fvec3)       Load 770(c)
+             979:   19(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 977 978
+             980:   19(fvec3)       FAdd 976 979
+             981:   19(fvec3)       Load 716(normal)
+             982:   19(fvec3)       FAdd 981 980
+                                    Store 716(normal) 982
+                                    Branch 935
+             935:                 Label
+                                  Branch 867
+             867:               Label
+             984:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 713
+             985:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 986 986 12 12
+             983:      7(int)   Load 141(index)
+             987:   19(fvec3)   Load 716(normal)
+             988:   19(fvec3)   ExtInst 3(GLSL.std.450) 69(Normalize) 987
+             989:   16(float)   CompositeExtract 988 0
+             990:   16(float)   CompositeExtract 988 1
+             991:   16(float)   CompositeExtract 988 2
+             992:   71(fvec4)   CompositeConstruct 989 990 991 243
+             993:    234(ptr)   AccessChain 228 204 983 579
+                                Store 993 992
+                                Branch 712
+             712:             Label
+             994:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 55
+             995:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 996 996 12 12
                               Return
                               FunctionEnd
-                              Line 1 66 50
-36(springForce(vf3;vf3;f1;):   27(fvec3) Function None 31
-          33(p0):     29(ptr) FunctionParameter
-          34(p1):     29(ptr) FunctionParameter
-    35(restDist):     30(ptr) FunctionParameter
-              39:             Label
-        56(dist):     29(ptr) Variable Function
-              40:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 38
-              41:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 12 12 12 12
-              44:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 42 33(p0) 45
-              48:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 46 34(p1) 45
-              51:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 49 35(restDist) 45
-              52:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 38 36(springForce(vf3;vf3;f1;)
-              53:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 38
-              54:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 55 55 12 12
-              59:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 57 56(dist) 45
-              60:   27(fvec3) Load 33(p0)
-              61:   27(fvec3) Load 34(p1)
-              62:   27(fvec3) FSub 60 61
-                              Store 56(dist) 62
-              63:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 64 64 12 12
-              65:   27(fvec3) Load 56(dist)
-              66:   27(fvec3) ExtInst 3(GLSL.std.450) 69(Normalize) 65
-             102:    101(ptr) AccessChain 97(params) 100
-             103:   24(float) Load 102
-             104:   27(fvec3) VectorTimesScalar 66 103
-             105:   27(fvec3) Load 56(dist)
-             106:   24(float) ExtInst 3(GLSL.std.450) 66(Length) 105
-             107:   24(float) Load 35(restDist)
-             108:   24(float) FSub 106 107
-             109:   27(fvec3) VectorTimesScalar 104 108
-                              ReturnValue 109
+31(springForce(vf3;vf3;f1;):   19(fvec3) Function None 26
+          28(p0):     21(ptr) FunctionParameter
+          29(p1):     21(ptr) FunctionParameter
+    30(restDist):     24(ptr) FunctionParameter
+              32:             Label
+        58(dist):     21(ptr) Variable Function
+              46:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 34
+              47:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 37 37 12 12
+              44:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 42 28(p0) 45
+              50:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 48 29(p1) 45
+              53:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 51 30(restDist) 45
+              57:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 34 31(springForce(vf3;vf3;f1;)
+              63:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 61 61 12 12
+              62:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 59 58(dist) 45
+              64:   19(fvec3) Load 28(p0)
+              65:   19(fvec3) Load 29(p1)
+              66:   19(fvec3) FSub 64 65
+                              Store 58(dist) 66
+              68:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 69 69 12 12
+              67:   19(fvec3) Load 58(dist)
+              70:   19(fvec3) ExtInst 3(GLSL.std.450) 69(Normalize) 67
+             107:    105(ptr) AccessChain 101(params) 104
+             108:   16(float) Load 107
+             109:   19(fvec3) VectorTimesScalar 70 108
+             110:   19(fvec3) Load 58(dist)
+             111:   16(float) ExtInst 3(GLSL.std.450) 66(Length) 110
+             112:   16(float) Load 30(restDist)
+             113:   16(float) FSub 111 112
+             114:   19(fvec3) VectorTimesScalar 109 113
+                              ReturnValue 114
                               FunctionEnd
diff --git a/Test/baseResults/spv.debuginfo.glsl.frag.out b/Test/baseResults/spv.debuginfo.glsl.frag.out
index 464e321..387041d 100644
--- a/Test/baseResults/spv.debuginfo.glsl.frag.out
+++ b/Test/baseResults/spv.debuginfo.glsl.frag.out
@@ -1,1104 +1,1315 @@
 spv.debuginfo.glsl.frag
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 859
+// Id's are bound by 886
 
                               Capability Shader
                               Capability ImageQuery
                               Extension  "SPV_KHR_non_semantic_info"
-               2:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
                3:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 14  "main" 478 533
+                              EntryPoint Fragment 14  "main" 503 557
                               ExecutionMode 14 OriginUpperLeft
-               1:             String  ""
+               2:             String  "spv.debuginfo.glsl.frag"
                8:             String  "uint"
-              15:             String  "main"
-              18:             String  "// OpModuleProcessed auto-map-locations
+              17:             String  "float"
+              39:             String  "textureProj"
+              42:             String  "// OpModuleProcessed auto-map-locations
 // OpModuleProcessed auto-map-bindings
 // OpModuleProcessed client vulkan100
 // OpModuleProcessed target-env vulkan1.0
 // OpModuleProcessed keep-uncalled
 // OpModuleProcessed entry-point main
 #line 1
+/*
+The MIT License (MIT)
+
+Copyright (c) 2022 Sascha Willems
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+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 Software.
+
+THE SOFTWARE IS 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 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+*/
+
+#version 450
+
+layout (binding = 1) uniform sampler2D samplerposition;
+layout (binding = 2) uniform sampler2D samplerNormal;
+layout (binding = 3) uniform sampler2D samplerAlbedo;
+layout (binding = 5) uniform sampler2DArray samplerShadowMap;
+
+layout (location = 0) in vec2 inUV;
+
+layout (location = 0) out vec4 outFragColor;
+
+#define LIGHT_COUNT 3
+#define SHADOW_FACTOR 0.25
+#define AMBIENT_LIGHT 0.1
+#define USE_PCF
+
+int global_var = 0;
+
+struct Light 
+{
+	vec4 position;
+	vec4 target;
+	vec4 color;
+	mat4 viewMatrix;
+};
+
+layout (binding = 4) uniform UBO 
+{
+	vec4 viewPos;
+	Light lights[LIGHT_COUNT];
+	int useShadows;
+	int debugDisplayTarget;
+} ubo;
+
+float textureProj(vec4 P, float layer, vec2 offset)
+{
+	float shadow = 1.0;
+	vec4 shadowCoord = P / P.w;
+	shadowCoord.st = shadowCoord.st * 0.5 + 0.5;
+	
+	if (shadowCoord.z > -1.0 && shadowCoord.z < 1.0) 
+	{
+		float dist = texture(samplerShadowMap, vec3(shadowCoord.st + offset, layer)).r;
+		if (shadowCoord.w > 0.0 && dist < shadowCoord.z) 
+		{
+			shadow = SHADOW_FACTOR;
+		}
+	}
+	return shadow;
+}
+
+float filterPCF(vec4 sc, float layer)
+{
+	ivec2 texDim = textureSize(samplerShadowMap, 0).xy;
+	float scale = 1.5;
+	float dx = scale * 1.0 / float(texDim.x);
+	float dy = scale * 1.0 / float(texDim.y);
+
+	float shadowFactor = 0.0;
+	int count = 0;
+	int range = 1;
+	
+	for (int x = -range; x <= range; x++)
+	{
+		for (int y = -range; y <= range; y++)
+		{
+			shadowFactor += textureProj(sc, layer, vec2(dx*x, dy*y));
+			count++;
+		}
+	
+	}
+	return shadowFactor / count;
+}
+
+vec3 shadow(vec3 fragcolor, vec3 fragpos) {
+	for(int i = 0; i < LIGHT_COUNT; ++i)
+	{
+		vec4 shadowClip	= ubo.lights[i].viewMatrix * vec4(fragpos, 1.0);
+
+		float shadowFactor;
+		#ifdef USE_PCF
+			shadowFactor= filterPCF(shadowClip, i);
+		#else
+			shadowFactor = textureProj(shadowClip, i, vec2(0.0));
+		#endif
+
+		fragcolor *= shadowFactor;
+	}
+	return fragcolor;
+}
+
+void main() 
+{
+	// Get G-Buffer values
+	vec3 fragPos = texture(samplerposition, inUV).rgb;
+	vec3 normal = texture(samplerNormal, inUV).rgb;
+	vec4 albedo = texture(samplerAlbedo, inUV);
+
+	// Debug display
+	if (ubo.debugDisplayTarget > 0) {
+		switch (ubo.debugDisplayTarget) {
+			case 1: 
+				outFragColor.rgb = shadow(vec3(1.0), fragPos).rgb;
+				break;
+			case 2: 
+				outFragColor.rgb = fragPos;
+				break;
+			case 3: 
+				outFragColor.rgb = normal;
+				break;
+			case 4: 
+				outFragColor.rgb = albedo.rgb;
+				break;
+			case 5: 
+				outFragColor.rgb = albedo.aaa;
+				break;
+		}		
+		outFragColor.a = 1.0;
+		return;
+	}
+
+	// Ambient part
+	vec3 fragcolor  = albedo.rgb * AMBIENT_LIGHT;
+
+	vec3 N = normalize(normal);
+		
+	for(int i = 0; i < LIGHT_COUNT; ++i)
+	{
+		// Vector to light
+		vec3 L = ubo.lights[i].position.xyz - fragPos;
+		// Distance from light to fragment position
+		float dist = length(L);
+		L = normalize(L);
+
+		// Viewer to fragment
+		vec3 V = ubo.viewPos.xyz - fragPos;
+		V = normalize(V);
+
+		float lightCosInnerAngle = cos(radians(15.0));
+		float lightCosOuterAngle = cos(radians(25.0));
+		float lightRange = 100.0;
+
+		// Direction vector from source to target
+		vec3 dir = normalize(ubo.lights[i].position.xyz - ubo.lights[i].target.xyz);
+
+		// Dual cone spot light with smooth transition between inner and outer angle
+		float cosDir = dot(L, dir);
+		float spotEffect = smoothstep(lightCosOuterAngle, lightCosInnerAngle, cosDir);
+		float heightAttenuation = smoothstep(lightRange, 0.0f, dist);
+
+		// Diffuse lighting
+		float NdotL = max(0.0, dot(N, L));
+		vec3 diff = vec3(NdotL);
+
+		// Specular lighting
+		vec3 R = reflect(-L, N);
+		float NdotR = max(0.0, dot(R, V));
+		vec3 spec = vec3(pow(NdotR, 16.0) * albedo.a * 2.5);
+
+		fragcolor += vec3((diff + spec) * spotEffect * heightAttenuation) * ubo.lights[i].color.rgb * albedo.rgb;
+	}    	
+
+	// Shadow calculations in a separate pass
+	if (ubo.useShadows > 0)
+	{
+		fragcolor = shadow(fragcolor, fragPos);
+	}
+
+	outFragColor = vec4(fragcolor, 1.0);
+}
 "
-              25:             String  "float"
-              40:             String  "textureProj"
-              46:             String  "P"
-              50:             String  "layer"
-              53:             String  "offset"
-              60:             String  "filterPCF"
-              66:             String  "sc"
-              78:             String  "shadow"
-              84:             String  "fragcolor"
-              87:             String  "fragpos"
-              93:             String  "int"
-              98:             String  "global_var"
-             113:             String  "shadowCoord"
-             138:             String  "bool"
-             157:             String  "dist"
-             161:             String  "type.2d.image"
-             162:             String  "@type.2d.image"
-             166:             String  "type.sampled.image"
-             167:             String  "@type.sampled.image"
-             171:             String  "samplerShadowMap"
-             221:             String  "texDim"
-             233:             String  "scale"
-             240:             String  "dx"
-             253:             String  "dy"
-             265:             String  "shadowFactor"
-             271:             String  "count"
-             277:             String  "range"
-             284:             String  "x"
-             306:             String  "y"
-             370:             String  "i"
-             390:             String  "shadowClip"
-             397:             String  "color"
-             403:             String  "viewMatrix"
-             406:             String  "Light"
-             412:             String  "lights"
-             415:             String  "debugDisplayTarget"
-             419:             String  "UBO"
-             423:             String  "ubo"
-             466:             String  "fragPos"
-             475:             String  "samplerposition"
-             480:             String  "inUV"
-             488:             String  "normal"
-             492:             String  "samplerNormal"
-             501:             String  "albedo"
-             505:             String  "samplerAlbedo"
-             535:             String  "outFragColor"
-             627:             String  "N"
-             653:             String  "L"
-             677:             String  "V"
-             692:             String  "lightCosInnerAngle"
-             699:             String  "lightCosOuterAngle"
-             706:             String  "lightRange"
-             713:             String  "dir"
-             729:             String  "cosDir"
-             738:             String  "spotEffect"
-             748:             String  "heightAttenuation"
-             757:             String  "NdotL"
-             767:             String  "diff"
-             775:             String  "R"
-             785:             String  "NdotR"
-             795:             String  "spec"
+              47:             String  "P"
+              53:             String  "layer"
+              56:             String  "offset"
+              64:             String  "filterPCF"
+              68:             String  "sc"
+              84:             String  "shadow"
+              88:             String  "fragcolor"
+              93:             String  "fragpos"
+              95:             String  "main"
+              99:             String  "int"
+             105:             String  "global_var"
+             120:             String  "shadowCoord"
+             142:             String  "bool"
+             167:             String  "dist"
+             173:             String  "type.2d.image"
+             174:             String  "@type.2d.image"
+             178:             String  "type.sampled.image"
+             179:             String  "@type.sampled.image"
+             184:             String  "samplerShadowMap"
+             237:             String  "texDim"
+             249:             String  "scale"
+             256:             String  "dx"
+             270:             String  "dy"
+             282:             String  "shadowFactor"
+             288:             String  "count"
+             294:             String  "range"
+             301:             String  "x"
+             321:             String  "y"
+             387:             String  "i"
+             405:             String  "shadowClip"
+             415:             String  "color"
+             420:             String  "viewMatrix"
+             423:             String  "Light"
+             429:             String  "lights"
+             432:             String  "debugDisplayTarget"
+             436:             String  "UBO"
+             441:             String  "ubo"
+             487:             String  "fragPos"
+             499:             String  "samplerposition"
+             505:             String  "inUV"
+             511:             String  "normal"
+             517:             String  "samplerNormal"
+             524:             String  "albedo"
+             530:             String  "samplerAlbedo"
+             559:             String  "outFragColor"
+             653:             String  "N"
+             677:             String  "L"
+             703:             String  "V"
+             718:             String  "lightCosInnerAngle"
+             725:             String  "lightCosOuterAngle"
+             732:             String  "lightRange"
+             739:             String  "dir"
+             755:             String  "cosDir"
+             764:             String  "spotEffect"
+             774:             String  "heightAttenuation"
+             783:             String  "NdotL"
+             793:             String  "diff"
+             801:             String  "R"
+             811:             String  "NdotR"
+             821:             String  "spec"
                               Name 14  "main"
-                              Name 39  "textureProj(vf4;f1;vf2;"
-                              Name 36  "P"
-                              Name 37  "layer"
-                              Name 38  "offset"
-                              Name 59  "filterPCF(vf4;f1;"
-                              Name 57  "sc"
-                              Name 58  "layer"
-                              Name 77  "shadow(vf3;vf3;"
-                              Name 75  "fragcolor"
-                              Name 76  "fragpos"
-                              Name 96  "global_var"
-                              Name 105  "shadow"
-                              Name 111  "shadowCoord"
-                              Name 155  "dist"
-                              Name 169  "samplerShadowMap"
-                              Name 219  "texDim"
-                              Name 231  "scale"
-                              Name 238  "dx"
-                              Name 251  "dy"
-                              Name 263  "shadowFactor"
-                              Name 269  "count"
-                              Name 275  "range"
-                              Name 282  "x"
-                              Name 304  "y"
-                              Name 335  "param"
-                              Name 337  "param"
-                              Name 339  "param"
-                              Name 368  "i"
-                              Name 388  "shadowClip"
-                              Name 395  "Light"
-                              MemberName 395(Light) 0  "position"
-                              MemberName 395(Light) 1  "target"
-                              MemberName 395(Light) 2  "color"
-                              MemberName 395(Light) 3  "viewMatrix"
-                              Name 409  "UBO"
-                              MemberName 409(UBO) 0  "viewPos"
-                              MemberName 409(UBO) 1  "lights"
-                              MemberName 409(UBO) 2  "useShadows"
-                              MemberName 409(UBO) 3  "debugDisplayTarget"
-                              Name 421  "ubo"
-                              Name 436  "shadowFactor"
-                              Name 441  "param"
-                              Name 443  "param"
-                              Name 464  "fragPos"
-                              Name 473  "samplerposition"
-                              Name 478  "inUV"
-                              Name 486  "normal"
-                              Name 490  "samplerNormal"
-                              Name 499  "albedo"
-                              Name 503  "samplerAlbedo"
-                              Name 533  "outFragColor"
-                              Name 537  "param"
-                              Name 538  "param"
-                              Name 616  "fragcolor"
-                              Name 625  "N"
-                              Name 633  "i"
-                              Name 651  "L"
-                              Name 664  "dist"
-                              Name 675  "V"
-                              Name 690  "lightCosInnerAngle"
-                              Name 697  "lightCosOuterAngle"
-                              Name 704  "lightRange"
-                              Name 711  "dir"
-                              Name 727  "cosDir"
-                              Name 736  "spotEffect"
-                              Name 746  "heightAttenuation"
-                              Name 755  "NdotL"
-                              Name 765  "diff"
-                              Name 773  "R"
-                              Name 783  "NdotR"
-                              Name 793  "spec"
-                              Name 846  "param"
-                              Name 848  "param"
-                              Decorate 169(samplerShadowMap) DescriptorSet 0
-                              Decorate 169(samplerShadowMap) Binding 5
-                              MemberDecorate 395(Light) 0 Offset 0
-                              MemberDecorate 395(Light) 1 Offset 16
-                              MemberDecorate 395(Light) 2 Offset 32
-                              MemberDecorate 395(Light) 3 ColMajor
-                              MemberDecorate 395(Light) 3 Offset 48
-                              MemberDecorate 395(Light) 3 MatrixStride 16
-                              Decorate 407 ArrayStride 112
-                              MemberDecorate 409(UBO) 0 Offset 0
-                              MemberDecorate 409(UBO) 1 Offset 16
-                              MemberDecorate 409(UBO) 2 Offset 352
-                              MemberDecorate 409(UBO) 3 Offset 356
-                              Decorate 409(UBO) Block
-                              Decorate 421(ubo) DescriptorSet 0
-                              Decorate 421(ubo) Binding 4
-                              Decorate 473(samplerposition) DescriptorSet 0
-                              Decorate 473(samplerposition) Binding 1
-                              Decorate 478(inUV) Location 0
-                              Decorate 490(samplerNormal) DescriptorSet 0
-                              Decorate 490(samplerNormal) Binding 2
-                              Decorate 503(samplerAlbedo) DescriptorSet 0
-                              Decorate 503(samplerAlbedo) Binding 3
-                              Decorate 533(outFragColor) Location 0
+                              Name 37  "textureProj(vf4;f1;vf2;"
+                              Name 34  "P"
+                              Name 35  "layer"
+                              Name 36  "offset"
+                              Name 62  "filterPCF(vf4;f1;"
+                              Name 60  "sc"
+                              Name 61  "layer"
+                              Name 82  "shadow(vf3;vf3;"
+                              Name 80  "fragcolor"
+                              Name 81  "fragpos"
+                              Name 103  "global_var"
+                              Name 112  "shadow"
+                              Name 118  "shadowCoord"
+                              Name 165  "dist"
+                              Name 182  "samplerShadowMap"
+                              Name 235  "texDim"
+                              Name 247  "scale"
+                              Name 254  "dx"
+                              Name 268  "dy"
+                              Name 280  "shadowFactor"
+                              Name 286  "count"
+                              Name 292  "range"
+                              Name 299  "x"
+                              Name 319  "y"
+                              Name 352  "param"
+                              Name 354  "param"
+                              Name 356  "param"
+                              Name 385  "i"
+                              Name 403  "shadowClip"
+                              Name 413  "Light"
+                              MemberName 413(Light) 0  "position"
+                              MemberName 413(Light) 1  "target"
+                              MemberName 413(Light) 2  "color"
+                              MemberName 413(Light) 3  "viewMatrix"
+                              Name 426  "UBO"
+                              MemberName 426(UBO) 0  "viewPos"
+                              MemberName 426(UBO) 1  "lights"
+                              MemberName 426(UBO) 2  "useShadows"
+                              MemberName 426(UBO) 3  "debugDisplayTarget"
+                              Name 439  "ubo"
+                              Name 453  "shadowFactor"
+                              Name 460  "param"
+                              Name 462  "param"
+                              Name 485  "fragPos"
+                              Name 497  "samplerposition"
+                              Name 503  "inUV"
+                              Name 509  "normal"
+                              Name 515  "samplerNormal"
+                              Name 522  "albedo"
+                              Name 528  "samplerAlbedo"
+                              Name 557  "outFragColor"
+                              Name 562  "param"
+                              Name 565  "param"
+                              Name 641  "fragcolor"
+                              Name 651  "N"
+                              Name 659  "i"
+                              Name 675  "L"
+                              Name 690  "dist"
+                              Name 701  "V"
+                              Name 716  "lightCosInnerAngle"
+                              Name 723  "lightCosOuterAngle"
+                              Name 730  "lightRange"
+                              Name 737  "dir"
+                              Name 753  "cosDir"
+                              Name 762  "spotEffect"
+                              Name 772  "heightAttenuation"
+                              Name 781  "NdotL"
+                              Name 791  "diff"
+                              Name 799  "R"
+                              Name 809  "NdotR"
+                              Name 819  "spec"
+                              Name 869  "param"
+                              Name 873  "param"
+                              Decorate 182(samplerShadowMap) Binding 5
+                              Decorate 182(samplerShadowMap) DescriptorSet 0
+                              MemberDecorate 413(Light) 0 Offset 0
+                              MemberDecorate 413(Light) 1 Offset 16
+                              MemberDecorate 413(Light) 2 Offset 32
+                              MemberDecorate 413(Light) 3 ColMajor
+                              MemberDecorate 413(Light) 3 MatrixStride 16
+                              MemberDecorate 413(Light) 3 Offset 48
+                              Decorate 424 ArrayStride 112
+                              Decorate 426(UBO) Block
+                              MemberDecorate 426(UBO) 0 Offset 0
+                              MemberDecorate 426(UBO) 1 Offset 16
+                              MemberDecorate 426(UBO) 2 Offset 352
+                              MemberDecorate 426(UBO) 3 Offset 356
+                              Decorate 439(ubo) Binding 4
+                              Decorate 439(ubo) DescriptorSet 0
+                              Decorate 497(samplerposition) Binding 1
+                              Decorate 497(samplerposition) DescriptorSet 0
+                              Decorate 503(inUV) Location 0
+                              Decorate 515(samplerNormal) Binding 2
+                              Decorate 515(samplerNormal) DescriptorSet 0
+                              Decorate 528(samplerAlbedo) Binding 3
+                              Decorate 528(samplerAlbedo) DescriptorSet 0
+                              Decorate 557(outFragColor) Location 0
                4:             TypeVoid
                5:             TypeFunction 4
                7:             TypeInt 32 0
               10:      7(int) Constant 32
               11:      7(int) Constant 6
               12:      7(int) Constant 0
-               9:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 8 10 11 12
+               9:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 8 10 11 12
               13:      7(int) Constant 3
-               6:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4
-              17:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 1 18
-              20:      7(int) Constant 1
-              21:      7(int) Constant 4
-              22:      7(int) Constant 2
-              19:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 20 21 17 22
-              16:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 15 6 17 12 12 19 15 13 12
-              24:             TypeFloat 32
-              26:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 25 10 13 12
-              27:             TypeVector 24(float) 4
-              28:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 26 21
-              29:             TypePointer Function 27(fvec4)
-              30:             TypePointer Function 24(float)
-              31:             TypeVector 24(float) 2
-              32:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 26 22
-              33:             TypePointer Function 31(fvec2)
-              34:             TypeFunction 24(float) 29(ptr) 30(ptr) 33(ptr)
-              35:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 26 28 26 32
-              41:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 40 35 17 12 12 19 40 13 12
-              45:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 46 28 17 12 12 41 21 20
-              48:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
-              49:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 50 26 17 12 12 41 21 22
-              52:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 53 32 17 12 12 41 21 13
-              55:             TypeFunction 24(float) 29(ptr) 30(ptr)
-              56:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 26 28 26
-              61:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 60 56 17 12 12 19 60 13 12
-              65:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 66 28 17 12 12 61 21 20
-              68:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 50 26 17 12 12 61 21 22
-              70:             TypeVector 24(float) 3
-              71:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 26 13
-              72:             TypePointer Function 70(fvec3)
-              73:             TypeFunction 70(fvec3) 72(ptr) 72(ptr)
-              74:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 71 71 71
-              79:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 78 74 17 12 12 19 78 13 12
-              83:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 84 71 17 12 12 79 21 20
-              86:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 87 71 17 12 12 79 21 22
-              91:      7(int) Constant 41
-              92:             TypeInt 32 1
-              94:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 93 10 21 12
-              95:             TypePointer Private 92(int)
-  96(global_var):     95(ptr) Variable Private
-              99:      7(int) Constant 8
-              97:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 98 94 17 91 12 19 98 96(global_var) 99
-             100:     92(int) Constant 0
-             104:      7(int) Constant 61
-             106:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 78 26 17 104 12 41 21
-             108:   24(float) Constant 1065353216
-             110:      7(int) Constant 62
-             112:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 113 28 17 110 12 41 21
-             121:      7(int) Constant 63
-             124:   24(float) Constant 1056964608
-             133:      7(int) Constant 65
-             134:             TypeBool
-             137:   24(float) Constant 3212836864
-             139:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 138 10 22 12
-             147:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 138 10 22 12
-             154:      7(int) Constant 67
-             156:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 157 26 17 154 12 41 21
-             159:             TypeImage 24(float) 2D array sampled format:Unknown
-             163:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 0(DebugInfoNone)
-             160:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 161 12 17 154 12 19 162 163 13
-             164:             TypeSampledImage 159
-             165:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 166 12 17 154 12 19 167 163 13
-             168:             TypePointer UniformConstant 164
-169(samplerShadowMap):    168(ptr) Variable UniformConstant
-             170:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 171 165 17 154 12 19 171 169(samplerShadowMap) 99
-             184:      7(int) Constant 68
-             187:   24(float) Constant 0
-             188:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 138 10 22 12
-             197:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 138 10 22 12
-             204:      7(int) Constant 70
-             205:   24(float) Constant 1048576000
-             208:      7(int) Constant 73
-             215:      7(int) Constant 78
-             216:             TypeVector 92(int) 2
-             217:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 94 22
-             218:             TypePointer Function 216(ivec2)
-             220:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 221 217 17 215 12 61 21
-             225:             TypeVector 92(int) 3
-             226:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 94 13
-             230:      7(int) Constant 79
-             232:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 233 26 17 230 12 61 21
-             235:   24(float) Constant 1069547520
-             237:      7(int) Constant 80
-             239:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 240 26 17 237 12 61 21
-             244:             TypePointer Function 92(int)
-             250:      7(int) Constant 81
-             252:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 253 26 17 250 12 61 21
-             262:      7(int) Constant 83
-             264:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 265 26 17 262 12 61 21
-             268:      7(int) Constant 84
-             270:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 271 94 17 268 12 61 21
-             274:      7(int) Constant 85
-             276:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 277 94 17 274 12 61 21
-             279:     92(int) Constant 1
-             281:      7(int) Constant 87
-             283:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 284 94 17 281 12 61 21
-             299:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 138 10 22 12
-             303:      7(int) Constant 89
-             305:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 306 94 17 303 12 61 21
-             321:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 138 10 22 12
-             325:      7(int) Constant 91
-             344:      7(int) Constant 92
-             357:      7(int) Constant 96
-             367:      7(int) Constant 100
-             369:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 370 94 17 367 12 79 21
-             382:     92(int) Constant 3
-             383:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 138 10 22 12
-             387:      7(int) Constant 102
-             389:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 390 28 17 387 12 79 21
-             392:             TypeMatrix 27(fvec4) 4
-             394:   134(bool) ConstantTrue
-             393:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 28 21 394
-      395(Light):             TypeStruct 27(fvec4) 27(fvec4) 27(fvec4) 392
-             398:      7(int) Constant 47
-             399:      7(int) Constant 7
-             396:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 397 28 17 398 399 12 12 13
-             400:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 397 28 17 398 399 12 12 13
-             401:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 397 28 17 398 399 12 12 13
-             404:      7(int) Constant 48
-             402:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 403 393 17 404 399 12 12 13
-             405:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 406 20 17 387 12 19 406 12 13 396 400 401 402
-             407:             TypeArray 395(Light) 13
-             408:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 405 13
-        409(UBO):             TypeStruct 27(fvec4) 407 92(int) 92(int)
-             410:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 397 28 17 398 399 12 12 13
-             413:      7(int) Constant 54
-             411:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 412 408 17 413 99 12 12 13
-             416:      7(int) Constant 56
-             414:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 415 94 17 416 11 12 12 13
-             417:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 415 94 17 416 11 12 12 13
-             418:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 419 20 17 387 12 19 419 12 13 410 411 414 417
-             420:             TypePointer Uniform 409(UBO)
-        421(ubo):    420(ptr) Variable Uniform
-             422:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 423 418 17 387 12 19 423 421(ubo) 99
-             425:             TypePointer Uniform 392
-             435:      7(int) Constant 106
-             437:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 265 26 17 435 12 79 21
-             446:      7(int) Constant 111
-             456:      7(int) Constant 113
-             463:      7(int) Constant 119
-             465:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 466 71 17 463 12 16 21
-             468:             TypeImage 24(float) 2D sampled format:Unknown
-             469:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 161 12 17 463 12 19 162 163 13
-             470:             TypeSampledImage 468
-             471:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 166 12 17 463 12 19 167 163 13
-             472:             TypePointer UniformConstant 470
-473(samplerposition):    472(ptr) Variable UniformConstant
-             474:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 475 471 17 463 12 19 475 473(samplerposition) 99
-             477:             TypePointer Input 31(fvec2)
-       478(inUV):    477(ptr) Variable Input
-             479:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 480 32 17 463 12 19 480 478(inUV) 99
-             485:      7(int) Constant 120
-             487:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 488 71 17 485 12 16 21
-490(samplerNormal):    472(ptr) Variable UniformConstant
-             491:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 492 471 17 485 12 19 492 490(samplerNormal) 99
-             498:      7(int) Constant 121
-             500:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 501 28 17 498 12 16 21
-503(samplerAlbedo):    472(ptr) Variable UniformConstant
-             504:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 505 471 17 498 12 19 505 503(samplerAlbedo) 99
-             510:      7(int) Constant 124
-             511:             TypePointer Uniform 92(int)
-             514:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 138 10 22 12
-             520:      7(int) Constant 125
-             531:      7(int) Constant 127
-             532:             TypePointer Output 27(fvec4)
-533(outFragColor):    532(ptr) Variable Output
-             534:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 535 28 17 531 12 19 535 533(outFragColor) 99
-             536:   70(fvec3) ConstantComposite 108 108 108
-             541:             TypePointer Output 24(float)
-             549:      7(int) Constant 128
-             553:      7(int) Constant 130
-             562:      7(int) Constant 131
-             566:      7(int) Constant 133
-             575:      7(int) Constant 134
-             579:      7(int) Constant 136
-             589:      7(int) Constant 137
-             593:      7(int) Constant 139
-             603:      7(int) Constant 140
-             608:      7(int) Constant 142
-             611:      7(int) Constant 143
-             615:      7(int) Constant 147
-             617:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 84 71 17 615 12 16 21
-             621:   24(float) Constant 1036831949
-             624:      7(int) Constant 149
-             626:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 627 71 17 624 12 16 21
-             632:      7(int) Constant 151
-             634:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 370 94 17 632 12 16 21
-             646:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 138 10 22 12
-             650:      7(int) Constant 154
-             652:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 653 71 17 650 12 16 21
-             656:             TypePointer Uniform 27(fvec4)
-             663:      7(int) Constant 156
-             665:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 157 26 17 663 12 16 21
-             670:      7(int) Constant 157
-             674:      7(int) Constant 160
-             676:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 677 71 17 674 12 16 21
-             685:      7(int) Constant 161
-             689:      7(int) Constant 163
-             691:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 692 26 17 689 12 16 21
-             694:   24(float) Constant 1064781546
-             696:      7(int) Constant 164
-             698:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 699 26 17 696 12 16 21
-             701:   24(float) Constant 1063781322
-             703:      7(int) Constant 165
-             705:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 706 26 17 703 12 16 21
-             708:   24(float) Constant 1120403456
-             710:      7(int) Constant 168
-             712:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 713 71 17 710 12 16 21
-             726:      7(int) Constant 171
-             728:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 729 26 17 726 12 16 21
-             735:      7(int) Constant 172
-             737:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 738 26 17 735 12 16 21
-             745:      7(int) Constant 173
-             747:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 748 26 17 745 12 16 21
-             754:      7(int) Constant 176
-             756:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 757 26 17 754 12 16 21
-             764:      7(int) Constant 177
-             766:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 767 71 17 764 12 16 21
-             772:      7(int) Constant 180
-             774:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 775 71 17 772 12 16 21
-             782:      7(int) Constant 181
-             784:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 785 26 17 782 12 16 21
-             792:      7(int) Constant 182
-             794:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 795 71 17 792 12 16 21
-             798:   24(float) Constant 1098907648
-             803:   24(float) Constant 1075838976
-             807:      7(int) Constant 184
-             820:     92(int) Constant 2
-             836:      7(int) Constant 188
-             839:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 138 10 22 12
-             845:      7(int) Constant 190
-             853:      7(int) Constant 193
-                              Line 1 116 11
+               6:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4
+              16:             TypeFloat 32
+              18:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 17 10 13 12
+              19:             TypeVector 16(float) 4
+              20:      7(int) Constant 4
+              21:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 18 20
+              22:             TypePointer Function 19(fvec4)
+              23:      7(int) Constant 7
+              24:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 21 23 12
+              25:             TypePointer Function 16(float)
+              26:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 18 23 12
+              27:             TypeVector 16(float) 2
+              28:      7(int) Constant 2
+              29:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 18 28
+              30:             TypePointer Function 27(fvec2)
+              31:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 29 23 12
+              32:             TypeFunction 16(float) 22(ptr) 25(ptr) 30(ptr)
+              33:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 18 21 18 29
+              41:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 2 42
+              43:      7(int) Constant 59
+              45:      7(int) Constant 1
+              44:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 45 20 41 28
+              40:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 39 33 41 43 12 44 39 13 43
+              46:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 47 21 41 43 12 40 20 45
+              49:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
+              52:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 53 18 41 43 12 40 20 28
+              55:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 56 29 41 43 12 40 20 13
+              58:             TypeFunction 16(float) 22(ptr) 25(ptr)
+              59:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 18 21 18
+              66:      7(int) Constant 76
+              65:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 64 59 41 66 12 44 64 13 66
+              67:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 68 21 41 66 12 65 20 45
+              72:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 53 18 41 66 12 65 20 28
+              74:             TypeVector 16(float) 3
+              75:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 18 13
+              76:             TypePointer Function 74(fvec3)
+              77:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 75 23 12
+              78:             TypeFunction 74(fvec3) 76(ptr) 76(ptr)
+              79:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 75 75 75
+              86:      7(int) Constant 99
+              85:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 84 79 41 86 12 44 84 13 86
+              87:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 88 75 41 86 12 85 20 45
+              92:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 93 75 41 86 12 85 20 28
+              97:      7(int) Constant 116
+              96:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 95 6 41 97 12 44 95 13 97
+              98:             TypeInt 32 1
+             100:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 99 10 20 12
+             101:             TypePointer Private 98(int)
+             102:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 100 11 12
+ 103(global_var):    101(ptr) Variable Private
+             106:      7(int) Constant 41
+             107:      7(int) Constant 8
+             104:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 105 100 41 106 12 44 105 103(global_var) 107
+             108:     98(int) Constant 0
+             114:      7(int) Constant 61
+             113:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 84 18 41 114 12 40 20
+             117:   16(float) Constant 1065353216
+             121:      7(int) Constant 62
+             119:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 120 21 41 121 12 40 20
+             131:      7(int) Constant 63
+             133:   16(float) Constant 1056964608
+             141:             TypeBool
+             143:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 142 10 28 12
+             146:      7(int) Constant 65
+             148:   16(float) Constant 3212836864
+             163:      7(int) Constant 67
+             164:      7(int) Constant 14
+             162:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 41 163 164 40
+             166:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 167 18 41 163 12 162 20
+             171:             TypeImage 16(float) 2D array sampled format:Unknown
+             175:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 0(DebugInfoNone)
+             172:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 173 12 41 163 12 44 174 175 13
+             176:             TypeSampledImage 171
+             177:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 178 12 41 163 12 44 179 175 13
+             180:             TypePointer UniformConstant 176
+             181:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 177 12 12
+182(samplerShadowMap):    180(ptr) Variable UniformConstant
+             183:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 184 177 41 163 12 44 184 182(samplerShadowMap) 107
+             198:      7(int) Constant 68
+             200:   16(float) Constant 0
+             216:      7(int) Constant 70
+             217:      7(int) Constant 11
+             215:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 41 216 217 162
+             218:   16(float) Constant 1048576000
+             224:      7(int) Constant 73
+             229:      7(int) Constant 74
+             231:             TypeVector 98(int) 2
+             232:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 100 28
+             233:             TypePointer Function 231(ivec2)
+             234:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 232 23 12
+             238:      7(int) Constant 78
+             236:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 237 232 41 238 12 65 20
+             243:             TypeVector 98(int) 3
+             244:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 100 13
+             250:      7(int) Constant 79
+             248:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 249 18 41 250 12 65 20
+             253:   16(float) Constant 1069547520
+             257:      7(int) Constant 80
+             255:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 256 18 41 257 12 65 20
+             262:             TypePointer Function 98(int)
+             263:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 100 23 12
+             271:      7(int) Constant 81
+             269:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 270 18 41 271 12 65 20
+             283:      7(int) Constant 83
+             281:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 282 18 41 283 12 65 20
+             289:      7(int) Constant 84
+             287:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 288 100 41 289 12 65 20
+             295:      7(int) Constant 85
+             293:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 294 100 41 295 12 65 20
+             298:     98(int) Constant 1
+             302:      7(int) Constant 87
+             300:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 301 100 41 302 12 65 20
+             322:      7(int) Constant 89
+             320:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 321 100 41 322 12 65 20
+             343:      7(int) Constant 91
+             362:      7(int) Constant 92
+             375:      7(int) Constant 96
+             383:      7(int) Constant 97
+             388:      7(int) Constant 100
+             386:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 387 100 41 388 12 85 20
+             401:     98(int) Constant 3
+             406:      7(int) Constant 102
+             404:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 405 21 41 406 12 85 20
+             410:             TypeMatrix 19(fvec4) 4
+             412:   141(bool) ConstantTrue
+             411:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 21 20 412
+      413(Light):             TypeStruct 19(fvec4) 19(fvec4) 19(fvec4) 410
+             416:      7(int) Constant 47
+             414:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 415 21 41 416 23 12 12 13
+             417:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 415 21 41 416 23 12 12 13
+             418:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 415 21 41 416 23 12 12 13
+             421:      7(int) Constant 48
+             419:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 420 411 41 421 23 12 12 13
+             422:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 423 45 41 406 12 44 423 12 13 414 417 418 419
+             424:             TypeArray 413(Light) 13
+             425:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 422 13
+        426(UBO):             TypeStruct 19(fvec4) 424 98(int) 98(int)
+             427:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 415 21 41 416 23 12 12 13
+             430:      7(int) Constant 54
+             428:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 429 425 41 430 107 12 12 13
+             433:      7(int) Constant 56
+             431:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 432 100 41 433 11 12 12 13
+             434:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 432 100 41 433 11 12 12 13
+             435:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 436 45 41 406 12 44 436 12 13 427 428 431 434
+             437:             TypePointer Uniform 426(UBO)
+             438:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 435 28 12
+        439(ubo):    437(ptr) Variable Uniform
+             440:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 441 435 41 406 12 44 441 439(ubo) 107
+             443:             TypePointer Uniform 410
+             444:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 411 28 12
+             455:      7(int) Constant 106
+             454:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 282 18 41 455 12 85 20
+             466:      7(int) Constant 111
+             476:      7(int) Constant 113
+             481:      7(int) Constant 114
+             488:      7(int) Constant 119
+             486:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 487 75 41 488 12 96 20
+             491:             TypeImage 16(float) 2D sampled format:Unknown
+             492:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 173 12 41 488 12 44 174 175 13
+             493:             TypeSampledImage 491
+             494:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 178 12 41 488 12 44 179 175 13
+             495:             TypePointer UniformConstant 493
+             496:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 494 12 12
+497(samplerposition):    495(ptr) Variable UniformConstant
+             498:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 499 494 41 488 12 44 499 497(samplerposition) 107
+             501:             TypePointer Input 27(fvec2)
+             502:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 29 45 12
+       503(inUV):    501(ptr) Variable Input
+             504:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 505 29 41 488 12 44 505 503(inUV) 107
+             512:      7(int) Constant 120
+             510:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 511 75 41 512 12 96 20
+515(samplerNormal):    495(ptr) Variable UniformConstant
+             516:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 517 494 41 512 12 44 517 515(samplerNormal) 107
+             525:      7(int) Constant 121
+             523:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 524 21 41 525 12 96 20
+528(samplerAlbedo):    495(ptr) Variable UniformConstant
+             529:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 530 494 41 525 12 44 530 528(samplerAlbedo) 107
+             534:             TypePointer Uniform 98(int)
+             535:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 100 28 12
+             538:      7(int) Constant 124
+             544:      7(int) Constant 125
+             543:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 41 544 13 96
+             555:             TypePointer Output 19(fvec4)
+             556:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 21 13 12
+557(outFragColor):    555(ptr) Variable Output
+             560:      7(int) Constant 127
+             558:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 559 21 41 560 12 44 559 557(outFragColor) 107
+             561:   74(fvec3) ConstantComposite 117 117 117
+             568:             TypePointer Output 16(float)
+             569:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 18 13 12
+             577:      7(int) Constant 128
+             582:      7(int) Constant 130
+             590:      7(int) Constant 131
+             595:      7(int) Constant 133
+             603:      7(int) Constant 134
+             608:      7(int) Constant 136
+             617:      7(int) Constant 137
+             622:      7(int) Constant 139
+             631:      7(int) Constant 140
+             637:      7(int) Constant 142
+             639:      7(int) Constant 143
+             643:      7(int) Constant 147
+             642:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 88 75 41 643 12 96 20
+             649:   16(float) Constant 1036831949
+             654:      7(int) Constant 149
+             652:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 653 75 41 654 12 96 20
+             661:      7(int) Constant 151
+             660:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 387 100 41 661 12 96 20
+             678:      7(int) Constant 154
+             676:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 677 75 41 678 12 96 20
+             683:             TypePointer Uniform 19(fvec4)
+             684:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 21 28 12
+             692:      7(int) Constant 156
+             691:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 167 18 41 692 12 96 20
+             699:      7(int) Constant 157
+             704:      7(int) Constant 160
+             702:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 703 75 41 704 12 96 20
+             714:      7(int) Constant 161
+             719:      7(int) Constant 163
+             717:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 718 18 41 719 12 96 20
+             722:   16(float) Constant 1064781546
+             726:      7(int) Constant 164
+             724:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 725 18 41 726 12 96 20
+             729:   16(float) Constant 1063781322
+             733:      7(int) Constant 165
+             731:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 732 18 41 733 12 96 20
+             736:   16(float) Constant 1120403456
+             740:      7(int) Constant 168
+             738:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 739 75 41 740 12 96 20
+             756:      7(int) Constant 171
+             754:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 755 18 41 756 12 96 20
+             765:      7(int) Constant 172
+             763:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 764 18 41 765 12 96 20
+             775:      7(int) Constant 173
+             773:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 774 18 41 775 12 96 20
+             784:      7(int) Constant 176
+             782:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 783 18 41 784 12 96 20
+             794:      7(int) Constant 177
+             792:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 793 75 41 794 12 96 20
+             802:      7(int) Constant 180
+             800:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 801 75 41 802 12 96 20
+             812:      7(int) Constant 181
+             810:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 811 18 41 812 12 96 20
+             822:      7(int) Constant 182
+             820:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 821 75 41 822 12 96 20
+             826:   16(float) Constant 1098907648
+             831:   16(float) Constant 1075838976
+             836:      7(int) Constant 184
+             844:     98(int) Constant 2
+             861:      7(int) Constant 188
+             867:      7(int) Constant 190
+             868:      7(int) Constant 13
+             866:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 41 867 868 96
+             879:      7(int) Constant 193
+             885:      7(int) Constant 194
         14(main):           4 Function None 5
-              23:             Label
-    464(fragPos):     72(ptr) Variable Function
-     486(normal):     72(ptr) Variable Function
-     499(albedo):     29(ptr) Variable Function
-      537(param):     72(ptr) Variable Function
-      538(param):     72(ptr) Variable Function
-  616(fragcolor):     72(ptr) Variable Function
-          625(N):     72(ptr) Variable Function
-          633(i):    244(ptr) Variable Function
-          651(L):     72(ptr) Variable Function
-       664(dist):     30(ptr) Variable Function
-          675(V):     72(ptr) Variable Function
-690(lightCosInnerAngle):     30(ptr) Variable Function
-697(lightCosOuterAngle):     30(ptr) Variable Function
- 704(lightRange):     30(ptr) Variable Function
-        711(dir):     72(ptr) Variable Function
-     727(cosDir):     30(ptr) Variable Function
- 736(spotEffect):     30(ptr) Variable Function
-746(heightAttenuation):     30(ptr) Variable Function
-      755(NdotL):     30(ptr) Variable Function
-       765(diff):     72(ptr) Variable Function
-          773(R):     72(ptr) Variable Function
-      783(NdotR):     30(ptr) Variable Function
-       793(spec):     72(ptr) Variable Function
-      846(param):     72(ptr) Variable Function
-      848(param):     72(ptr) Variable Function
-              89:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 19
-              90:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 91 91 12 12
-                              Store 96(global_var) 100
-             460:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 16 14(main)
-             461:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             462:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 463 463 12 12
-             467:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 465 464(fragPos) 48
-             476:         470 Load 473(samplerposition)
-             481:   31(fvec2) Load 478(inUV)
-             482:   27(fvec4) ImageSampleImplicitLod 476 481
-             483:   70(fvec3) VectorShuffle 482 482 0 1 2
-                              Store 464(fragPos) 483
-             484:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 485 485 12 12
-             489:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 487 486(normal) 48
-             493:         470 Load 490(samplerNormal)
-             494:   31(fvec2) Load 478(inUV)
-             495:   27(fvec4) ImageSampleImplicitLod 493 494
-             496:   70(fvec3) VectorShuffle 495 495 0 1 2
-                              Store 486(normal) 496
-             497:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 498 498 12 12
-             502:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 500 499(albedo) 48
-             506:         470 Load 503(samplerAlbedo)
-             507:   31(fvec2) Load 478(inUV)
-             508:   27(fvec4) ImageSampleImplicitLod 506 507
-                              Store 499(albedo) 508
-             509:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 510 510 12 12
-             512:    511(ptr) AccessChain 421(ubo) 382
-             513:     92(int) Load 512
-             515:   134(bool) SGreaterThan 513 100
-                              SelectionMerge 517 None
-                              BranchConditional 515 516 517
-             516:               Label
-             518:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             519:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 520 520 12 12
-             521:    511(ptr)   AccessChain 421(ubo) 382
-             522:     92(int)   Load 521
-                                SelectionMerge 528 None
-                                Switch 522 528 
-                                       case 1: 523
-                                       case 2: 524
-                                       case 3: 525
-                                       case 4: 526
-                                       case 5: 527
-             523:                 Label
-             529:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             530:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 531 531 12 12
-                                  Store 537(param) 536
-             539:   70(fvec3)     Load 464(fragPos)
-                                  Store 538(param) 539
-             540:   70(fvec3)     FunctionCall 77(shadow(vf3;vf3;) 537(param) 538(param)
-             542:    541(ptr)     AccessChain 533(outFragColor) 12
-             543:   24(float)     CompositeExtract 540 0
-                                  Store 542 543
-             544:    541(ptr)     AccessChain 533(outFragColor) 20
-             545:   24(float)     CompositeExtract 540 1
-                                  Store 544 545
-             546:    541(ptr)     AccessChain 533(outFragColor) 22
-             547:   24(float)     CompositeExtract 540 2
-                                  Store 546 547
-             548:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 549 549 12 12
-                                  Branch 528
-             524:                 Label
-             551:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             552:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 553 553 12 12
-             554:   70(fvec3)     Load 464(fragPos)
-             555:    541(ptr)     AccessChain 533(outFragColor) 12
-             556:   24(float)     CompositeExtract 554 0
-                                  Store 555 556
-             557:    541(ptr)     AccessChain 533(outFragColor) 20
-             558:   24(float)     CompositeExtract 554 1
-                                  Store 557 558
-             559:    541(ptr)     AccessChain 533(outFragColor) 22
-             560:   24(float)     CompositeExtract 554 2
-                                  Store 559 560
-             561:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 562 562 12 12
-                                  Branch 528
-             525:                 Label
-             564:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             565:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 566 566 12 12
-             567:   70(fvec3)     Load 486(normal)
-             568:    541(ptr)     AccessChain 533(outFragColor) 12
-             569:   24(float)     CompositeExtract 567 0
-                                  Store 568 569
-             570:    541(ptr)     AccessChain 533(outFragColor) 20
-             571:   24(float)     CompositeExtract 567 1
+              15:             Label
+    485(fragPos):     76(ptr) Variable Function
+     509(normal):     76(ptr) Variable Function
+     522(albedo):     22(ptr) Variable Function
+      562(param):     76(ptr) Variable Function
+      565(param):     76(ptr) Variable Function
+  641(fragcolor):     76(ptr) Variable Function
+          651(N):     76(ptr) Variable Function
+          659(i):    262(ptr) Variable Function
+          675(L):     76(ptr) Variable Function
+       690(dist):     25(ptr) Variable Function
+          701(V):     76(ptr) Variable Function
+716(lightCosInnerAngle):     25(ptr) Variable Function
+723(lightCosOuterAngle):     25(ptr) Variable Function
+ 730(lightRange):     25(ptr) Variable Function
+        737(dir):     76(ptr) Variable Function
+     753(cosDir):     25(ptr) Variable Function
+ 762(spotEffect):     25(ptr) Variable Function
+772(heightAttenuation):     25(ptr) Variable Function
+      781(NdotL):     25(ptr) Variable Function
+       791(diff):     76(ptr) Variable Function
+          799(R):     76(ptr) Variable Function
+      809(NdotR):     25(ptr) Variable Function
+       819(spec):     76(ptr) Variable Function
+      869(param):     76(ptr) Variable Function
+      873(param):     76(ptr) Variable Function
+             109:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 44
+             110:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 106 106 12 12
+                              Store 103(global_var) 108
+             483:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 96
+             484:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 97 97 12 12
+             482:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 96 14(main)
+             490:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 488 488 12 12
+             489:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 486 485(fragPos) 49
+             500:         493 Load 497(samplerposition)
+             506:   27(fvec2) Load 503(inUV)
+             507:   19(fvec4) ImageSampleImplicitLod 500 506
+             508:   74(fvec3) VectorShuffle 507 507 0 1 2
+                              Store 485(fragPos) 508
+             514:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 512 512 12 12
+             513:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 510 509(normal) 49
+             518:         493 Load 515(samplerNormal)
+             519:   27(fvec2) Load 503(inUV)
+             520:   19(fvec4) ImageSampleImplicitLod 518 519
+             521:   74(fvec3) VectorShuffle 520 520 0 1 2
+                              Store 509(normal) 521
+             527:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 525 525 12 12
+             526:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 523 522(albedo) 49
+             531:         493 Load 528(samplerAlbedo)
+             532:   27(fvec2) Load 503(inUV)
+             533:   19(fvec4) ImageSampleImplicitLod 531 532
+                              Store 522(albedo) 533
+             537:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 538 538 12 12
+             536:    534(ptr) AccessChain 439(ubo) 401
+             539:     98(int) Load 536
+             540:   141(bool) SGreaterThan 539 108
+                              SelectionMerge 542 None
+                              BranchConditional 540 541 542
+             541:               Label
+             546:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 543
+             547:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 544 544 12 12
+             545:    534(ptr)   AccessChain 439(ubo) 401
+             548:     98(int)   Load 545
+                                SelectionMerge 554 None
+                                Switch 548 554 
+                                       case 1: 549
+                                       case 2: 550
+                                       case 3: 551
+                                       case 4: 552
+                                       case 5: 553
+             549:                 Label
+             563:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 543
+             564:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 560 560 12 12
+                                  Store 562(param) 561
+             566:   74(fvec3)     Load 485(fragPos)
+                                  Store 565(param) 566
+             567:   74(fvec3)     FunctionCall 82(shadow(vf3;vf3;) 562(param) 565(param)
+             570:    568(ptr)     AccessChain 557(outFragColor) 12
+             571:   16(float)     CompositeExtract 567 0
                                   Store 570 571
-             572:    541(ptr)     AccessChain 533(outFragColor) 22
-             573:   24(float)     CompositeExtract 567 2
+             572:    568(ptr)     AccessChain 557(outFragColor) 45
+             573:   16(float)     CompositeExtract 567 1
                                   Store 572 573
-             574:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 575 575 12 12
-                                  Branch 528
-             526:                 Label
-             577:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             578:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 579 579 12 12
-             580:   27(fvec4)     Load 499(albedo)
-             581:   70(fvec3)     VectorShuffle 580 580 0 1 2
-             582:    541(ptr)     AccessChain 533(outFragColor) 12
-             583:   24(float)     CompositeExtract 581 0
-                                  Store 582 583
-             584:    541(ptr)     AccessChain 533(outFragColor) 20
-             585:   24(float)     CompositeExtract 581 1
-                                  Store 584 585
-             586:    541(ptr)     AccessChain 533(outFragColor) 22
-             587:   24(float)     CompositeExtract 581 2
-                                  Store 586 587
-             588:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 589 589 12 12
-                                  Branch 528
-             527:                 Label
-             591:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             592:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 593 593 12 12
-             594:   27(fvec4)     Load 499(albedo)
-             595:   70(fvec3)     VectorShuffle 594 594 3 3 3
-             596:    541(ptr)     AccessChain 533(outFragColor) 12
-             597:   24(float)     CompositeExtract 595 0
+             574:    568(ptr)     AccessChain 557(outFragColor) 28
+             575:   16(float)     CompositeExtract 567 2
+                                  Store 574 575
+             576:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 577 577 12 12
+                                  Branch 554
+             550:                 Label
+             580:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 543
+             581:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 582 582 12 12
+             579:   74(fvec3)     Load 485(fragPos)
+             583:    568(ptr)     AccessChain 557(outFragColor) 12
+             584:   16(float)     CompositeExtract 579 0
+                                  Store 583 584
+             585:    568(ptr)     AccessChain 557(outFragColor) 45
+             586:   16(float)     CompositeExtract 579 1
+                                  Store 585 586
+             587:    568(ptr)     AccessChain 557(outFragColor) 28
+             588:   16(float)     CompositeExtract 579 2
+                                  Store 587 588
+             589:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 590 590 12 12
+                                  Branch 554
+             551:                 Label
+             593:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 543
+             594:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 595 595 12 12
+             592:   74(fvec3)     Load 509(normal)
+             596:    568(ptr)     AccessChain 557(outFragColor) 12
+             597:   16(float)     CompositeExtract 592 0
                                   Store 596 597
-             598:    541(ptr)     AccessChain 533(outFragColor) 20
-             599:   24(float)     CompositeExtract 595 1
+             598:    568(ptr)     AccessChain 557(outFragColor) 45
+             599:   16(float)     CompositeExtract 592 1
                                   Store 598 599
-             600:    541(ptr)     AccessChain 533(outFragColor) 22
-             601:   24(float)     CompositeExtract 595 2
+             600:    568(ptr)     AccessChain 557(outFragColor) 28
+             601:   16(float)     CompositeExtract 592 2
                                   Store 600 601
-             602:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 603 603 12 12
-                                  Branch 528
-             528:               Label
-             606:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             607:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 608 608 12 12
-             609:    541(ptr)   AccessChain 533(outFragColor) 13
-                                Store 609 108
-             610:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 611 611 12 12
+             602:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 603 603 12 12
+                                  Branch 554
+             552:                 Label
+             606:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 543
+             607:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 608 608 12 12
+             605:   19(fvec4)     Load 522(albedo)
+             609:   74(fvec3)     VectorShuffle 605 605 0 1 2
+             610:    568(ptr)     AccessChain 557(outFragColor) 12
+             611:   16(float)     CompositeExtract 609 0
+                                  Store 610 611
+             612:    568(ptr)     AccessChain 557(outFragColor) 45
+             613:   16(float)     CompositeExtract 609 1
+                                  Store 612 613
+             614:    568(ptr)     AccessChain 557(outFragColor) 28
+             615:   16(float)     CompositeExtract 609 2
+                                  Store 614 615
+             616:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 617 617 12 12
+                                  Branch 554
+             553:                 Label
+             620:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 543
+             621:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 622 622 12 12
+             619:   19(fvec4)     Load 522(albedo)
+             623:   74(fvec3)     VectorShuffle 619 619 3 3 3
+             624:    568(ptr)     AccessChain 557(outFragColor) 12
+             625:   16(float)     CompositeExtract 623 0
+                                  Store 624 625
+             626:    568(ptr)     AccessChain 557(outFragColor) 45
+             627:   16(float)     CompositeExtract 623 1
+                                  Store 626 627
+             628:    568(ptr)     AccessChain 557(outFragColor) 28
+             629:   16(float)     CompositeExtract 623 2
+                                  Store 628 629
+             630:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 631 631 12 12
+                                  Branch 554
+             554:               Label
+             635:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 543
+             636:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 637 637 12 12
+             634:    568(ptr)   AccessChain 557(outFragColor) 13
+                                Store 634 117
+             638:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 639 639 12 12
                                 Return
-             517:             Label
-             613:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             614:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 615 615 12 12
-             618:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 617 616(fragcolor) 48
-             619:   27(fvec4) Load 499(albedo)
-             620:   70(fvec3) VectorShuffle 619 619 0 1 2
-             622:   70(fvec3) VectorTimesScalar 620 621
-                              Store 616(fragcolor) 622
-             623:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 624 624 12 12
-             628:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 626 625(N) 48
-             629:   70(fvec3) Load 486(normal)
-             630:   70(fvec3) ExtInst 3(GLSL.std.450) 69(Normalize) 629
-                              Store 625(N) 630
-             631:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 632 632 12 12
-             635:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 634 633(i) 48
-                              Store 633(i) 100
-                              Branch 636
-             636:             Label
-             640:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             641:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 632 632 12 12
-                              LoopMerge 638 639 None
-                              Branch 642
-             642:             Label
-             643:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             644:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 632 632 12 12
-             645:     92(int) Load 633(i)
-             647:   134(bool) SLessThan 645 382
-                              BranchConditional 647 637 638
-             637:               Label
-             648:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             649:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 650 650 12 12
-             654:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 652 651(L) 48
-             655:     92(int)   Load 633(i)
-             657:    656(ptr)   AccessChain 421(ubo) 279 655 100
-             658:   27(fvec4)   Load 657
-             659:   70(fvec3)   VectorShuffle 658 658 0 1 2
-             660:   70(fvec3)   Load 464(fragPos)
-             661:   70(fvec3)   FSub 659 660
-                                Store 651(L) 661
-             662:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 663 663 12 12
-             666:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 665 664(dist) 48
-             667:   70(fvec3)   Load 651(L)
-             668:   24(float)   ExtInst 3(GLSL.std.450) 66(Length) 667
-                                Store 664(dist) 668
-             669:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 670 670 12 12
-             671:   70(fvec3)   Load 651(L)
-             672:   70(fvec3)   ExtInst 3(GLSL.std.450) 69(Normalize) 671
-                                Store 651(L) 672
-             673:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 674 674 12 12
-             678:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 676 675(V) 48
-             679:    656(ptr)   AccessChain 421(ubo) 100
-             680:   27(fvec4)   Load 679
-             681:   70(fvec3)   VectorShuffle 680 680 0 1 2
-             682:   70(fvec3)   Load 464(fragPos)
-             683:   70(fvec3)   FSub 681 682
-                                Store 675(V) 683
-             684:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 685 685 12 12
-             686:   70(fvec3)   Load 675(V)
-             687:   70(fvec3)   ExtInst 3(GLSL.std.450) 69(Normalize) 686
-                                Store 675(V) 687
-             688:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 689 689 12 12
-             693:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 691 690(lightCosInnerAngle) 48
-                                Store 690(lightCosInnerAngle) 694
-             695:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 696 696 12 12
-             700:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 698 697(lightCosOuterAngle) 48
-                                Store 697(lightCosOuterAngle) 701
-             702:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 703 703 12 12
-             707:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 705 704(lightRange) 48
-                                Store 704(lightRange) 708
-             709:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 710 710 12 12
-             714:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 712 711(dir) 48
-             715:     92(int)   Load 633(i)
-             716:    656(ptr)   AccessChain 421(ubo) 279 715 100
-             717:   27(fvec4)   Load 716
-             718:   70(fvec3)   VectorShuffle 717 717 0 1 2
-             719:     92(int)   Load 633(i)
-             720:    656(ptr)   AccessChain 421(ubo) 279 719 279
-             721:   27(fvec4)   Load 720
-             722:   70(fvec3)   VectorShuffle 721 721 0 1 2
-             723:   70(fvec3)   FSub 718 722
-             724:   70(fvec3)   ExtInst 3(GLSL.std.450) 69(Normalize) 723
-                                Store 711(dir) 724
-             725:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 726 726 12 12
-             730:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 728 727(cosDir) 48
-             731:   70(fvec3)   Load 651(L)
-             732:   70(fvec3)   Load 711(dir)
-             733:   24(float)   Dot 731 732
-                                Store 727(cosDir) 733
-             734:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 735 735 12 12
-             739:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 737 736(spotEffect) 48
-             740:   24(float)   Load 697(lightCosOuterAngle)
-             741:   24(float)   Load 690(lightCosInnerAngle)
-             742:   24(float)   Load 727(cosDir)
-             743:   24(float)   ExtInst 3(GLSL.std.450) 49(SmoothStep) 740 741 742
-                                Store 736(spotEffect) 743
-             744:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 745 745 12 12
-             749:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 747 746(heightAttenuation) 48
-             750:   24(float)   Load 704(lightRange)
-             751:   24(float)   Load 664(dist)
-             752:   24(float)   ExtInst 3(GLSL.std.450) 49(SmoothStep) 750 187 751
-                                Store 746(heightAttenuation) 752
-             753:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 754 754 12 12
-             758:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 756 755(NdotL) 48
-             759:   70(fvec3)   Load 625(N)
-             760:   70(fvec3)   Load 651(L)
-             761:   24(float)   Dot 759 760
-             762:   24(float)   ExtInst 3(GLSL.std.450) 40(FMax) 187 761
-                                Store 755(NdotL) 762
-             763:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 764 764 12 12
-             768:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 766 765(diff) 48
-             769:   24(float)   Load 755(NdotL)
-             770:   70(fvec3)   CompositeConstruct 769 769 769
-                                Store 765(diff) 770
-             771:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 772 772 12 12
-             776:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 774 773(R) 48
-             777:   70(fvec3)   Load 651(L)
-             778:   70(fvec3)   FNegate 777
-             779:   70(fvec3)   Load 625(N)
-             780:   70(fvec3)   ExtInst 3(GLSL.std.450) 71(Reflect) 778 779
-                                Store 773(R) 780
-             781:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 782 782 12 12
-             786:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 784 783(NdotR) 48
-             787:   70(fvec3)   Load 773(R)
-             788:   70(fvec3)   Load 675(V)
-             789:   24(float)   Dot 787 788
-             790:   24(float)   ExtInst 3(GLSL.std.450) 40(FMax) 187 789
-                                Store 783(NdotR) 790
-             791:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 792 792 12 12
-             796:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 794 793(spec) 48
-             797:   24(float)   Load 783(NdotR)
-             799:   24(float)   ExtInst 3(GLSL.std.450) 26(Pow) 797 798
-             800:     30(ptr)   AccessChain 499(albedo) 13
-             801:   24(float)   Load 800
-             802:   24(float)   FMul 799 801
-             804:   24(float)   FMul 802 803
-             805:   70(fvec3)   CompositeConstruct 804 804 804
-                                Store 793(spec) 805
-             806:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 807 807 12 12
-             808:   70(fvec3)   Load 765(diff)
-             809:   70(fvec3)   Load 793(spec)
-             810:   70(fvec3)   FAdd 808 809
-             811:   24(float)   Load 736(spotEffect)
-             812:   70(fvec3)   VectorTimesScalar 810 811
-             813:   24(float)   Load 746(heightAttenuation)
-             814:   70(fvec3)   VectorTimesScalar 812 813
-             815:   24(float)   CompositeExtract 814 0
-             816:   24(float)   CompositeExtract 814 1
-             817:   24(float)   CompositeExtract 814 2
-             818:   70(fvec3)   CompositeConstruct 815 816 817
-             819:     92(int)   Load 633(i)
-             821:    656(ptr)   AccessChain 421(ubo) 279 819 820
-             822:   27(fvec4)   Load 821
-             823:   70(fvec3)   VectorShuffle 822 822 0 1 2
-             824:   70(fvec3)   FMul 818 823
-             825:   27(fvec4)   Load 499(albedo)
-             826:   70(fvec3)   VectorShuffle 825 825 0 1 2
-             827:   70(fvec3)   FMul 824 826
-             828:   70(fvec3)   Load 616(fragcolor)
-             829:   70(fvec3)   FAdd 828 827
-                                Store 616(fragcolor) 829
-                                Branch 639
-             639:               Label
-             830:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             831:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 632 632 12 12
-             832:     92(int)   Load 633(i)
-             833:     92(int)   IAdd 832 279
-                                Store 633(i) 833
-                                Branch 636
-             638:             Label
-             834:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             835:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 836 836 12 12
-             837:    511(ptr) AccessChain 421(ubo) 820
-             838:     92(int) Load 837
-             840:   134(bool) SGreaterThan 838 100
-                              SelectionMerge 842 None
-                              BranchConditional 840 841 842
-             841:               Label
-             843:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             844:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 845 845 12 12
-             847:   70(fvec3)   Load 616(fragcolor)
-                                Store 846(param) 847
-             849:   70(fvec3)   Load 464(fragPos)
-                                Store 848(param) 849
-             850:   70(fvec3)   FunctionCall 77(shadow(vf3;vf3;) 846(param) 848(param)
-                                Store 616(fragcolor) 850
-                                Branch 842
-             842:             Label
-             851:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             852:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 853 853 12 12
-             854:   70(fvec3) Load 616(fragcolor)
-             855:   24(float) CompositeExtract 854 0
-             856:   24(float) CompositeExtract 854 1
-             857:   24(float) CompositeExtract 854 2
-             858:   27(fvec4) CompositeConstruct 855 856 857 108
-                              Store 533(outFragColor) 858
+             542:             Label
+             645:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 96
+             646:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 643 643 12 12
+             644:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 642 641(fragcolor) 49
+             647:   19(fvec4) Load 522(albedo)
+             648:   74(fvec3) VectorShuffle 647 647 0 1 2
+             650:   74(fvec3) VectorTimesScalar 648 649
+                              Store 641(fragcolor) 650
+             656:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 654 654 12 12
+             655:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 652 651(N) 49
+             657:   74(fvec3) Load 509(normal)
+             658:   74(fvec3) ExtInst 3(GLSL.std.450) 69(Normalize) 657
+                              Store 651(N) 658
+             663:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 661 661 12 12
+             662:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 660 659(i) 49
+                              Store 659(i) 108
+                              Branch 664
+             664:             Label
+             668:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 96
+             669:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 661 661 12 12
+                              LoopMerge 666 667 None
+                              Branch 670
+             670:             Label
+             672:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 96
+             673:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 661 661 12 12
+             671:     98(int) Load 659(i)
+             674:   141(bool) SLessThan 671 401
+                              BranchConditional 674 665 666
+             665:               Label
+             680:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 96
+             681:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 678 678 12 12
+             679:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 676 675(L) 49
+             682:     98(int)   Load 659(i)
+             685:    683(ptr)   AccessChain 439(ubo) 298 682 108
+             686:   19(fvec4)   Load 685
+             687:   74(fvec3)   VectorShuffle 686 686 0 1 2
+             688:   74(fvec3)   Load 485(fragPos)
+             689:   74(fvec3)   FSub 687 688
+                                Store 675(L) 689
+             694:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 692 692 12 12
+             693:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 691 690(dist) 49
+             695:   74(fvec3)   Load 675(L)
+             696:   16(float)   ExtInst 3(GLSL.std.450) 66(Length) 695
+                                Store 690(dist) 696
+             698:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 699 699 12 12
+             697:   74(fvec3)   Load 675(L)
+             700:   74(fvec3)   ExtInst 3(GLSL.std.450) 69(Normalize) 697
+                                Store 675(L) 700
+             706:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 704 704 12 12
+             705:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 702 701(V) 49
+             707:    683(ptr)   AccessChain 439(ubo) 108
+             708:   19(fvec4)   Load 707
+             709:   74(fvec3)   VectorShuffle 708 708 0 1 2
+             710:   74(fvec3)   Load 485(fragPos)
+             711:   74(fvec3)   FSub 709 710
+                                Store 701(V) 711
+             713:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 714 714 12 12
+             712:   74(fvec3)   Load 701(V)
+             715:   74(fvec3)   ExtInst 3(GLSL.std.450) 69(Normalize) 712
+                                Store 701(V) 715
+             721:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 719 719 12 12
+             720:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 717 716(lightCosInnerAngle) 49
+                                Store 716(lightCosInnerAngle) 722
+             728:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 726 726 12 12
+             727:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 724 723(lightCosOuterAngle) 49
+                                Store 723(lightCosOuterAngle) 729
+             735:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 733 733 12 12
+             734:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 731 730(lightRange) 49
+                                Store 730(lightRange) 736
+             742:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 740 740 12 12
+             741:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 738 737(dir) 49
+             743:     98(int)   Load 659(i)
+             744:    683(ptr)   AccessChain 439(ubo) 298 743 108
+             745:   19(fvec4)   Load 744
+             746:   74(fvec3)   VectorShuffle 745 745 0 1 2
+             747:     98(int)   Load 659(i)
+             748:    683(ptr)   AccessChain 439(ubo) 298 747 298
+             749:   19(fvec4)   Load 748
+             750:   74(fvec3)   VectorShuffle 749 749 0 1 2
+             751:   74(fvec3)   FSub 746 750
+             752:   74(fvec3)   ExtInst 3(GLSL.std.450) 69(Normalize) 751
+                                Store 737(dir) 752
+             758:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 756 756 12 12
+             757:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 754 753(cosDir) 49
+             759:   74(fvec3)   Load 675(L)
+             760:   74(fvec3)   Load 737(dir)
+             761:   16(float)   Dot 759 760
+                                Store 753(cosDir) 761
+             767:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 765 765 12 12
+             766:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 763 762(spotEffect) 49
+             768:   16(float)   Load 723(lightCosOuterAngle)
+             769:   16(float)   Load 716(lightCosInnerAngle)
+             770:   16(float)   Load 753(cosDir)
+             771:   16(float)   ExtInst 3(GLSL.std.450) 49(SmoothStep) 768 769 770
+                                Store 762(spotEffect) 771
+             777:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 775 775 12 12
+             776:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 773 772(heightAttenuation) 49
+             778:   16(float)   Load 730(lightRange)
+             779:   16(float)   Load 690(dist)
+             780:   16(float)   ExtInst 3(GLSL.std.450) 49(SmoothStep) 778 200 779
+                                Store 772(heightAttenuation) 780
+             786:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 784 784 12 12
+             785:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 782 781(NdotL) 49
+             787:   74(fvec3)   Load 651(N)
+             788:   74(fvec3)   Load 675(L)
+             789:   16(float)   Dot 787 788
+             790:   16(float)   ExtInst 3(GLSL.std.450) 40(FMax) 200 789
+                                Store 781(NdotL) 790
+             796:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 794 794 12 12
+             795:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 792 791(diff) 49
+             797:   16(float)   Load 781(NdotL)
+             798:   74(fvec3)   CompositeConstruct 797 797 797
+                                Store 791(diff) 798
+             804:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 802 802 12 12
+             803:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 800 799(R) 49
+             805:   74(fvec3)   Load 675(L)
+             806:   74(fvec3)   FNegate 805
+             807:   74(fvec3)   Load 651(N)
+             808:   74(fvec3)   ExtInst 3(GLSL.std.450) 71(Reflect) 806 807
+                                Store 799(R) 808
+             814:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 812 812 12 12
+             813:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 810 809(NdotR) 49
+             815:   74(fvec3)   Load 799(R)
+             816:   74(fvec3)   Load 701(V)
+             817:   16(float)   Dot 815 816
+             818:   16(float)   ExtInst 3(GLSL.std.450) 40(FMax) 200 817
+                                Store 809(NdotR) 818
+             824:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 822 822 12 12
+             823:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 820 819(spec) 49
+             825:   16(float)   Load 809(NdotR)
+             827:   16(float)   ExtInst 3(GLSL.std.450) 26(Pow) 825 826
+             828:     25(ptr)   AccessChain 522(albedo) 13
+             829:   16(float)   Load 828
+             830:   16(float)   FMul 827 829
+             832:   16(float)   FMul 830 831
+             833:   74(fvec3)   CompositeConstruct 832 832 832
+                                Store 819(spec) 833
+             835:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 836 836 12 12
+             834:   74(fvec3)   Load 791(diff)
+             837:   74(fvec3)   Load 819(spec)
+             838:   74(fvec3)   FAdd 834 837
+             839:   16(float)   Load 762(spotEffect)
+             840:   74(fvec3)   VectorTimesScalar 838 839
+             841:   16(float)   Load 772(heightAttenuation)
+             842:   74(fvec3)   VectorTimesScalar 840 841
+             843:     98(int)   Load 659(i)
+             845:    683(ptr)   AccessChain 439(ubo) 298 843 844
+             846:   19(fvec4)   Load 845
+             847:   74(fvec3)   VectorShuffle 846 846 0 1 2
+             848:   74(fvec3)   FMul 842 847
+             849:   19(fvec4)   Load 522(albedo)
+             850:   74(fvec3)   VectorShuffle 849 849 0 1 2
+             851:   74(fvec3)   FMul 848 850
+             852:   74(fvec3)   Load 641(fragcolor)
+             853:   74(fvec3)   FAdd 852 851
+                                Store 641(fragcolor) 853
+                                Branch 667
+             667:               Label
+             855:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 96
+             856:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 661 661 12 12
+             854:     98(int)   Load 659(i)
+             857:     98(int)   IAdd 854 298
+                                Store 659(i) 857
+                                Branch 664
+             666:             Label
+             859:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 96
+             860:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 861 861 12 12
+             858:    534(ptr) AccessChain 439(ubo) 844
+             862:     98(int) Load 858
+             863:   141(bool) SGreaterThan 862 108
+                              SelectionMerge 865 None
+                              BranchConditional 863 864 865
+             864:               Label
+             871:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 866
+             872:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 867 867 12 12
+             870:   74(fvec3)   Load 641(fragcolor)
+                                Store 869(param) 870
+             874:   74(fvec3)   Load 485(fragPos)
+                                Store 873(param) 874
+             875:   74(fvec3)   FunctionCall 82(shadow(vf3;vf3;) 869(param) 873(param)
+                                Store 641(fragcolor) 875
+                                Branch 865
+             865:             Label
+             877:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 96
+             878:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 879 879 12 12
+             876:   74(fvec3) Load 641(fragcolor)
+             880:   16(float) CompositeExtract 876 0
+             881:   16(float) CompositeExtract 876 1
+             882:   16(float) CompositeExtract 876 2
+             883:   19(fvec4) CompositeConstruct 880 881 882 117
+                              Store 557(outFragColor) 883
+             884:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 885 885 12 12
                               Return
                               FunctionEnd
-                              Line 1 59 51
-39(textureProj(vf4;f1;vf2;):   24(float) Function None 34
-           36(P):     29(ptr) FunctionParameter
-       37(layer):     30(ptr) FunctionParameter
-      38(offset):     33(ptr) FunctionParameter
-              42:             Label
-     105(shadow):     30(ptr) Variable Function
-111(shadowCoord):     29(ptr) Variable Function
-       155(dist):     30(ptr) Variable Function
-              43:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 41
-              44:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 12 12 12 12
-              47:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 45 36(P) 48
-              51:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 49 37(layer) 48
-              54:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 52 38(offset) 48
-             101:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 41 39(textureProj(vf4;f1;vf2;)
-             102:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 41
-             103:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 104 104 12 12
-             107:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 106 105(shadow) 48
-                              Store 105(shadow) 108
-             109:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 110 110 12 12
-             114:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 112 111(shadowCoord) 48
-             115:   27(fvec4) Load 36(P)
-             116:     30(ptr) AccessChain 36(P) 13
-             117:   24(float) Load 116
-             118:   27(fvec4) CompositeConstruct 117 117 117 117
-             119:   27(fvec4) FDiv 115 118
-                              Store 111(shadowCoord) 119
-             120:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 121 121 12 12
-             122:   27(fvec4) Load 111(shadowCoord)
-             123:   31(fvec2) VectorShuffle 122 122 0 1
-             125:   31(fvec2) VectorTimesScalar 123 124
-             126:   31(fvec2) CompositeConstruct 124 124
-             127:   31(fvec2) FAdd 125 126
-             128:     30(ptr) AccessChain 111(shadowCoord) 12
-             129:   24(float) CompositeExtract 127 0
-                              Store 128 129
-             130:     30(ptr) AccessChain 111(shadowCoord) 20
-             131:   24(float) CompositeExtract 127 1
-                              Store 130 131
-             132:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 133 133 12 12
-             135:     30(ptr) AccessChain 111(shadowCoord) 22
-             136:   24(float) Load 135
-             140:   134(bool) FOrdGreaterThan 136 137
-                              SelectionMerge 142 None
-                              BranchConditional 140 141 142
-             141:               Label
-             143:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 41
-             144:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 133 133 12 12
-             145:     30(ptr)   AccessChain 111(shadowCoord) 22
-             146:   24(float)   Load 145
-             148:   134(bool)   FOrdLessThan 146 108
-                                Branch 142
-             142:             Label
-             149:   134(bool) Phi 140 42 148 141
+37(textureProj(vf4;f1;vf2;):   16(float) Function None 32
+           34(P):     22(ptr) FunctionParameter
+       35(layer):     25(ptr) FunctionParameter
+      36(offset):     30(ptr) FunctionParameter
+              38:             Label
+     112(shadow):     25(ptr) Variable Function
+118(shadowCoord):     22(ptr) Variable Function
+       165(dist):     25(ptr) Variable Function
+              50:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 40
+              51:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 43 43 12 12
+              48:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 46 34(P) 49
+              54:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 52 35(layer) 49
+              57:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 55 36(offset) 49
+             111:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 40 37(textureProj(vf4;f1;vf2;)
+             116:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 114 114 12 12
+             115:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 113 112(shadow) 49
+                              Store 112(shadow) 117
+             123:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 121 121 12 12
+             122:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 119 118(shadowCoord) 49
+             124:   19(fvec4) Load 34(P)
+             125:     25(ptr) AccessChain 34(P) 13
+             126:   16(float) Load 125
+             127:   19(fvec4) CompositeConstruct 126 126 126 126
+             128:   19(fvec4) FDiv 124 127
+                              Store 118(shadowCoord) 128
+             130:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 131 131 12 12
+             129:   19(fvec4) Load 118(shadowCoord)
+             132:   27(fvec2) VectorShuffle 129 129 0 1
+             134:   27(fvec2) VectorTimesScalar 132 133
+             135:   27(fvec2) CompositeConstruct 133 133
+             136:   27(fvec2) FAdd 134 135
+             137:     25(ptr) AccessChain 118(shadowCoord) 12
+             138:   16(float) CompositeExtract 136 0
+                              Store 137 138
+             139:     25(ptr) AccessChain 118(shadowCoord) 45
+             140:   16(float) CompositeExtract 136 1
+                              Store 139 140
+             145:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 146 146 12 12
+             144:     25(ptr) AccessChain 118(shadowCoord) 28
+             147:   16(float) Load 144
+             149:   141(bool) FOrdGreaterThan 147 148
                               SelectionMerge 151 None
                               BranchConditional 149 150 151
              150:               Label
-             152:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 41
-             153:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 154 154 12 12
-             158:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 156 155(dist) 48
-             172:         164   Load 169(samplerShadowMap)
-             173:   27(fvec4)   Load 111(shadowCoord)
-             174:   31(fvec2)   VectorShuffle 173 173 0 1
-             175:   31(fvec2)   Load 38(offset)
-             176:   31(fvec2)   FAdd 174 175
-             177:   24(float)   Load 37(layer)
-             178:   24(float)   CompositeExtract 176 0
-             179:   24(float)   CompositeExtract 176 1
-             180:   70(fvec3)   CompositeConstruct 178 179 177
-             181:   27(fvec4)   ImageSampleImplicitLod 172 180
-             182:   24(float)   CompositeExtract 181 0
-                                Store 155(dist) 182
-             183:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 184 184 12 12
-             185:     30(ptr)   AccessChain 111(shadowCoord) 13
-             186:   24(float)   Load 185
-             189:   134(bool)   FOrdGreaterThan 186 187
-                                SelectionMerge 191 None
-                                BranchConditional 189 190 191
-             190:                 Label
-             192:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 41
-             193:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 184 184 12 12
-             194:   24(float)     Load 155(dist)
-             195:     30(ptr)     AccessChain 111(shadowCoord) 22
-             196:   24(float)     Load 195
-             198:   134(bool)     FOrdLessThan 194 196
-                                  Branch 191
-             191:               Label
-             199:   134(bool)   Phi 189 150 198 190
-                                SelectionMerge 201 None
-                                BranchConditional 199 200 201
-             200:                 Label
-             202:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 41
-             203:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 204 204 12 12
-                                  Store 105(shadow) 205
-                                  Branch 201
-             201:               Label
+             153:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 40
+             154:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 146 146 12 12
+             152:     25(ptr)   AccessChain 118(shadowCoord) 28
+             155:   16(float)   Load 152
+             156:   141(bool)   FOrdLessThan 155 117
                                 Branch 151
              151:             Label
-             206:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 41
-             207:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 208 208 12 12
-             209:   24(float) Load 105(shadow)
-                              ReturnValue 209
+             157:   141(bool) Phi 149 38 156 150
+             160:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 40
+             161:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 146 146 12 12
+                              SelectionMerge 159 None
+                              BranchConditional 157 158 159
+             158:               Label
+             169:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 162
+             170:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 163 163 12 12
+             168:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 166 165(dist) 49
+             185:         176   Load 182(samplerShadowMap)
+             186:   19(fvec4)   Load 118(shadowCoord)
+             187:   27(fvec2)   VectorShuffle 186 186 0 1
+             188:   27(fvec2)   Load 36(offset)
+             189:   27(fvec2)   FAdd 187 188
+             190:   16(float)   Load 35(layer)
+             191:   16(float)   CompositeExtract 189 0
+             192:   16(float)   CompositeExtract 189 1
+             193:   74(fvec3)   CompositeConstruct 191 192 190
+             194:   19(fvec4)   ImageSampleImplicitLod 185 193
+             195:   16(float)   CompositeExtract 194 0
+                                Store 165(dist) 195
+             197:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 198 198 12 12
+             196:     25(ptr)   AccessChain 118(shadowCoord) 13
+             199:   16(float)   Load 196
+             201:   141(bool)   FOrdGreaterThan 199 200
+                                SelectionMerge 203 None
+                                BranchConditional 201 202 203
+             202:                 Label
+             205:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 162
+             206:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 198 198 12 12
+             204:   16(float)     Load 165(dist)
+             207:     25(ptr)     AccessChain 118(shadowCoord) 28
+             208:   16(float)     Load 207
+             209:   141(bool)     FOrdLessThan 204 208
+                                  Branch 203
+             203:               Label
+             210:   141(bool)   Phi 201 158 209 202
+             213:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 162
+             214:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 198 198 12 12
+                                SelectionMerge 212 None
+                                BranchConditional 210 211 212
+             211:                 Label
+             219:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 215
+             220:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 216 216 12 12
+                                  Store 112(shadow) 218
+                                  Branch 212
+             212:               Label
+                                Branch 159
+             159:             Label
+             222:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 40
+             223:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 224 224 12 12
+             221:   16(float) Load 112(shadow)
+                              ReturnValue 221
                               FunctionEnd
-                              Line 1 76 37
-59(filterPCF(vf4;f1;):   24(float) Function None 55
-          57(sc):     29(ptr) FunctionParameter
-       58(layer):     30(ptr) FunctionParameter
-              62:             Label
-     219(texDim):    218(ptr) Variable Function
-      231(scale):     30(ptr) Variable Function
-         238(dx):     30(ptr) Variable Function
-         251(dy):     30(ptr) Variable Function
-263(shadowFactor):     30(ptr) Variable Function
-      269(count):    244(ptr) Variable Function
-      275(range):    244(ptr) Variable Function
-          282(x):    244(ptr) Variable Function
-          304(y):    244(ptr) Variable Function
-      335(param):     29(ptr) Variable Function
-      337(param):     30(ptr) Variable Function
-      339(param):     33(ptr) Variable Function
-              63:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 61
-              64:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 12 12 12 12
-              67:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 65 57(sc) 48
-              69:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 68 58(layer) 48
-             212:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 61 59(filterPCF(vf4;f1;)
-             213:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 61
-             214:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 215 215 12 12
-             222:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 220 219(texDim) 48
-             223:         164 Load 169(samplerShadowMap)
-             224:         159 Image 223
-             227:  225(ivec3) ImageQuerySizeLod 224 100
-             228:  216(ivec2) VectorShuffle 227 227 0 1
-                              Store 219(texDim) 228
-             229:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 230 230 12 12
-             234:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 232 231(scale) 48
-                              Store 231(scale) 235
-             236:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 237 237 12 12
-             241:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 239 238(dx) 48
-             242:   24(float) Load 231(scale)
-             243:   24(float) FMul 242 108
-             245:    244(ptr) AccessChain 219(texDim) 12
-             246:     92(int) Load 245
-             247:   24(float) ConvertSToF 246
-             248:   24(float) FDiv 243 247
-                              Store 238(dx) 248
-             249:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 250 250 12 12
-             254:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 252 251(dy) 48
-             255:   24(float) Load 231(scale)
-             256:   24(float) FMul 255 108
-             257:    244(ptr) AccessChain 219(texDim) 20
-             258:     92(int) Load 257
-             259:   24(float) ConvertSToF 258
-             260:   24(float) FDiv 256 259
-                              Store 251(dy) 260
-             261:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 262 262 12 12
-             266:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 264 263(shadowFactor) 48
-                              Store 263(shadowFactor) 187
-             267:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 268 268 12 12
-             272:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 270 269(count) 48
-                              Store 269(count) 100
-             273:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 274 274 12 12
-             278:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 276 275(range) 48
-                              Store 275(range) 279
-             280:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 281 281 12 12
-             285:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 283 282(x) 48
-             286:     92(int) Load 275(range)
-             287:     92(int) SNegate 286
-                              Store 282(x) 287
-                              Branch 288
-             288:             Label
-             292:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 61
-             293:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 281 281 12 12
-                              LoopMerge 290 291 None
-                              Branch 294
-             294:             Label
-             295:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 61
-             296:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 281 281 12 12
-             297:     92(int) Load 282(x)
-             298:     92(int) Load 275(range)
-             300:   134(bool) SLessThanEqual 297 298
-                              BranchConditional 300 289 290
-             289:               Label
-             301:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 61
-             302:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 303 303 12 12
-             307:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 305 304(y) 48
-             308:     92(int)   Load 275(range)
-             309:     92(int)   SNegate 308
-                                Store 304(y) 309
+62(filterPCF(vf4;f1;):   16(float) Function None 58
+          60(sc):     22(ptr) FunctionParameter
+       61(layer):     25(ptr) FunctionParameter
+              63:             Label
+     235(texDim):    233(ptr) Variable Function
+      247(scale):     25(ptr) Variable Function
+         254(dx):     25(ptr) Variable Function
+         268(dy):     25(ptr) Variable Function
+280(shadowFactor):     25(ptr) Variable Function
+      286(count):    262(ptr) Variable Function
+      292(range):    262(ptr) Variable Function
+          299(x):    262(ptr) Variable Function
+          319(y):    262(ptr) Variable Function
+      352(param):     22(ptr) Variable Function
+      354(param):     25(ptr) Variable Function
+      356(param):     30(ptr) Variable Function
+              70:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 65
+              71:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 66 66 12 12
+              69:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 67 60(sc) 49
+              73:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 72 61(layer) 49
+             230:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 65 62(filterPCF(vf4;f1;)
+             240:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 238 238 12 12
+             239:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 236 235(texDim) 49
+             241:         176 Load 182(samplerShadowMap)
+             242:         171 Image 241
+             245:  243(ivec3) ImageQuerySizeLod 242 108
+             246:  231(ivec2) VectorShuffle 245 245 0 1
+                              Store 235(texDim) 246
+             252:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 250 250 12 12
+             251:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 248 247(scale) 49
+                              Store 247(scale) 253
+             259:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 257 257 12 12
+             258:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 255 254(dx) 49
+             260:   16(float) Load 247(scale)
+             261:   16(float) FMul 260 117
+             264:    262(ptr) AccessChain 235(texDim) 12
+             265:     98(int) Load 264
+             266:   16(float) ConvertSToF 265
+             267:   16(float) FDiv 261 266
+                              Store 254(dx) 267
+             273:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 271 271 12 12
+             272:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 269 268(dy) 49
+             274:   16(float) Load 247(scale)
+             275:   16(float) FMul 274 117
+             276:    262(ptr) AccessChain 235(texDim) 45
+             277:     98(int) Load 276
+             278:   16(float) ConvertSToF 277
+             279:   16(float) FDiv 275 278
+                              Store 268(dy) 279
+             285:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 283 283 12 12
+             284:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 281 280(shadowFactor) 49
+                              Store 280(shadowFactor) 200
+             291:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 289 289 12 12
+             290:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 287 286(count) 49
+                              Store 286(count) 108
+             297:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 295 295 12 12
+             296:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 293 292(range) 49
+                              Store 292(range) 298
+             304:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 302 302 12 12
+             303:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 300 299(x) 49
+             305:     98(int) Load 292(range)
+             306:     98(int) SNegate 305
+                              Store 299(x) 306
+                              Branch 307
+             307:             Label
+             311:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 65
+             312:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 302 302 12 12
+                              LoopMerge 309 310 None
+                              Branch 313
+             313:             Label
+             315:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 65
+             316:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 302 302 12 12
+             314:     98(int) Load 299(x)
+             317:     98(int) Load 292(range)
+             318:   141(bool) SLessThanEqual 314 317
+                              BranchConditional 318 308 309
+             308:               Label
+             324:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 65
+             325:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 322 322 12 12
+             323:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 320 319(y) 49
+             326:     98(int)   Load 292(range)
+             327:     98(int)   SNegate 326
+                                Store 319(y) 327
+                                Branch 328
+             328:               Label
+             332:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 65
+             333:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 322 322 12 12
+                                LoopMerge 330 331 None
+                                Branch 334
+             334:               Label
+             336:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 65
+             337:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 322 322 12 12
+             335:     98(int)   Load 319(y)
+             338:     98(int)   Load 292(range)
+             339:   141(bool)   SLessThanEqual 335 338
+                                BranchConditional 339 329 330
+             329:                 Label
+             341:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 65
+             342:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 343 343 12 12
+             340:   16(float)     Load 254(dx)
+             344:     98(int)     Load 299(x)
+             345:   16(float)     ConvertSToF 344
+             346:   16(float)     FMul 340 345
+             347:   16(float)     Load 268(dy)
+             348:     98(int)     Load 319(y)
+             349:   16(float)     ConvertSToF 348
+             350:   16(float)     FMul 347 349
+             351:   27(fvec2)     CompositeConstruct 346 350
+             353:   19(fvec4)     Load 60(sc)
+                                  Store 352(param) 353
+             355:   16(float)     Load 61(layer)
+                                  Store 354(param) 355
+                                  Store 356(param) 351
+             357:   16(float)     FunctionCall 37(textureProj(vf4;f1;vf2;) 352(param) 354(param) 356(param)
+             358:   16(float)     Load 280(shadowFactor)
+             359:   16(float)     FAdd 358 357
+                                  Store 280(shadowFactor) 359
+             361:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 362 362 12 12
+             360:     98(int)     Load 286(count)
+             363:     98(int)     IAdd 360 298
+                                  Store 286(count) 363
+                                  Branch 331
+             331:                 Label
+             365:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 65
+             366:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 322 322 12 12
+             364:     98(int)     Load 319(y)
+             367:     98(int)     IAdd 364 298
+                                  Store 319(y) 367
+                                  Branch 328
+             330:               Label
                                 Branch 310
              310:               Label
-             314:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 61
-             315:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 303 303 12 12
-                                LoopMerge 312 313 None
-                                Branch 316
-             316:               Label
-             317:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 61
-             318:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 303 303 12 12
-             319:     92(int)   Load 304(y)
-             320:     92(int)   Load 275(range)
-             322:   134(bool)   SLessThanEqual 319 320
-                                BranchConditional 322 311 312
-             311:                 Label
-             323:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 61
-             324:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 325 325 12 12
-             326:   24(float)     Load 238(dx)
-             327:     92(int)     Load 282(x)
-             328:   24(float)     ConvertSToF 327
-             329:   24(float)     FMul 326 328
-             330:   24(float)     Load 251(dy)
-             331:     92(int)     Load 304(y)
-             332:   24(float)     ConvertSToF 331
-             333:   24(float)     FMul 330 332
-             334:   31(fvec2)     CompositeConstruct 329 333
-             336:   27(fvec4)     Load 57(sc)
-                                  Store 335(param) 336
-             338:   24(float)     Load 58(layer)
-                                  Store 337(param) 338
-                                  Store 339(param) 334
-             340:   24(float)     FunctionCall 39(textureProj(vf4;f1;vf2;) 335(param) 337(param) 339(param)
-             341:   24(float)     Load 263(shadowFactor)
-             342:   24(float)     FAdd 341 340
-                                  Store 263(shadowFactor) 342
-             343:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 344 344 12 12
-             345:     92(int)     Load 269(count)
-             346:     92(int)     IAdd 345 279
-                                  Store 269(count) 346
-                                  Branch 313
-             313:                 Label
-             347:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 61
-             348:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 303 303 12 12
-             349:     92(int)     Load 304(y)
-             350:     92(int)     IAdd 349 279
-                                  Store 304(y) 350
-                                  Branch 310
-             312:               Label
-                                Branch 291
-             291:               Label
-             351:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 61
-             352:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 281 281 12 12
-             353:     92(int)   Load 282(x)
-             354:     92(int)   IAdd 353 279
-                                Store 282(x) 354
-                                Branch 288
-             290:             Label
-             355:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 61
-             356:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 357 357 12 12
-             358:   24(float) Load 263(shadowFactor)
-             359:     92(int) Load 269(count)
-             360:   24(float) ConvertSToF 359
-             361:   24(float) FDiv 358 360
-                              ReturnValue 361
+             369:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 65
+             370:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 302 302 12 12
+             368:     98(int)   Load 299(x)
+             371:     98(int)   IAdd 368 298
+                                Store 299(x) 371
+                                Branch 307
+             309:             Label
+             373:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 65
+             374:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 375 375 12 12
+             372:   16(float) Load 280(shadowFactor)
+             376:     98(int) Load 286(count)
+             377:   16(float) ConvertSToF 376
+             378:   16(float) FDiv 372 377
+                              ReturnValue 378
                               FunctionEnd
-                              Line 1 99 41
-77(shadow(vf3;vf3;):   70(fvec3) Function None 73
-   75(fragcolor):     72(ptr) FunctionParameter
-     76(fragpos):     72(ptr) FunctionParameter
-              80:             Label
-          368(i):    244(ptr) Variable Function
- 388(shadowClip):     29(ptr) Variable Function
-436(shadowFactor):     30(ptr) Variable Function
-      441(param):     29(ptr) Variable Function
-      443(param):     30(ptr) Variable Function
-              81:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 79
-              82:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 12 12 12 12
-              85:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 83 75(fragcolor) 48
-              88:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 86 76(fragpos) 48
-             364:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 79 77(shadow(vf3;vf3;)
-             365:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 79
-             366:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 367 367 12 12
-             371:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 369 368(i) 48
-                              Store 368(i) 100
-                              Branch 372
-             372:             Label
-             376:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 79
-             377:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 367 367 12 12
-                              LoopMerge 374 375 None
-                              Branch 378
-             378:             Label
-             379:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 79
-             380:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 367 367 12 12
-             381:     92(int) Load 368(i)
-             384:   134(bool) SLessThan 381 382
-                              BranchConditional 384 373 374
-             373:               Label
-             385:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 79
-             386:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 387 387 12 12
-             391:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 389 388(shadowClip) 48
-             424:     92(int)   Load 368(i)
-             426:    425(ptr)   AccessChain 421(ubo) 279 424 382
-             427:         392   Load 426
-             428:   70(fvec3)   Load 76(fragpos)
-             429:   24(float)   CompositeExtract 428 0
-             430:   24(float)   CompositeExtract 428 1
-             431:   24(float)   CompositeExtract 428 2
-             432:   27(fvec4)   CompositeConstruct 429 430 431 108
-             433:   27(fvec4)   MatrixTimesVector 427 432
-                                Store 388(shadowClip) 433
-             434:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 435 435 12 12
-             438:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 437 436(shadowFactor) 48
-             439:     92(int)   Load 368(i)
-             440:   24(float)   ConvertSToF 439
-             442:   27(fvec4)   Load 388(shadowClip)
-                                Store 441(param) 442
-                                Store 443(param) 440
-             444:   24(float)   FunctionCall 59(filterPCF(vf4;f1;) 441(param) 443(param)
-                                Store 436(shadowFactor) 444
-             445:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 446 446 12 12
-             447:   24(float)   Load 436(shadowFactor)
-             448:   70(fvec3)   Load 75(fragcolor)
-             449:   70(fvec3)   VectorTimesScalar 448 447
-                                Store 75(fragcolor) 449
-                                Branch 375
-             375:               Label
-             450:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 79
-             451:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 367 367 12 12
-             452:     92(int)   Load 368(i)
-             453:     92(int)   IAdd 452 279
-                                Store 368(i) 453
-                                Branch 372
-             374:             Label
-             454:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 79
-             455:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 456 456 12 12
-             457:   70(fvec3) Load 75(fragcolor)
-                              ReturnValue 457
+82(shadow(vf3;vf3;):   74(fvec3) Function None 78
+   80(fragcolor):     76(ptr) FunctionParameter
+     81(fragpos):     76(ptr) FunctionParameter
+              83:             Label
+          385(i):    262(ptr) Variable Function
+ 403(shadowClip):     22(ptr) Variable Function
+453(shadowFactor):     25(ptr) Variable Function
+      460(param):     22(ptr) Variable Function
+      462(param):     25(ptr) Variable Function
+              90:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 85
+              91:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 86 86 12 12
+              89:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 87 80(fragcolor) 49
+              94:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 92 81(fragpos) 49
+             384:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 85 82(shadow(vf3;vf3;)
+             390:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 388 388 12 12
+             389:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 386 385(i) 49
+                              Store 385(i) 108
+                              Branch 391
+             391:             Label
+             395:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 85
+             396:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 388 388 12 12
+                              LoopMerge 393 394 None
+                              Branch 397
+             397:             Label
+             399:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 85
+             400:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 388 388 12 12
+             398:     98(int) Load 385(i)
+             402:   141(bool) SLessThan 398 401
+                              BranchConditional 402 392 393
+             392:               Label
+             408:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 85
+             409:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 406 406 12 12
+             407:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 404 403(shadowClip) 49
+             442:     98(int)   Load 385(i)
+             445:    443(ptr)   AccessChain 439(ubo) 298 442 401
+             446:         410   Load 445
+             447:   74(fvec3)   Load 81(fragpos)
+             448:   16(float)   CompositeExtract 447 0
+             449:   16(float)   CompositeExtract 447 1
+             450:   16(float)   CompositeExtract 447 2
+             451:   19(fvec4)   CompositeConstruct 448 449 450 117
+             452:   19(fvec4)   MatrixTimesVector 446 451
+                                Store 403(shadowClip) 452
+             457:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 455 455 12 12
+             456:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 454 453(shadowFactor) 49
+             458:     98(int)   Load 385(i)
+             459:   16(float)   ConvertSToF 458
+             461:   19(fvec4)   Load 403(shadowClip)
+                                Store 460(param) 461
+                                Store 462(param) 459
+             463:   16(float)   FunctionCall 62(filterPCF(vf4;f1;) 460(param) 462(param)
+                                Store 453(shadowFactor) 463
+             465:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 466 466 12 12
+             464:   16(float)   Load 453(shadowFactor)
+             467:   74(fvec3)   Load 80(fragcolor)
+             468:   74(fvec3)   VectorTimesScalar 467 464
+                                Store 80(fragcolor) 468
+                                Branch 394
+             394:               Label
+             470:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 85
+             471:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 388 388 12 12
+             469:     98(int)   Load 385(i)
+             472:     98(int)   IAdd 469 298
+                                Store 385(i) 472
+                                Branch 391
+             393:             Label
+             474:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 85
+             475:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 41 476 476 12 12
+             473:   74(fvec3) Load 80(fragcolor)
+                              ReturnValue 473
                               FunctionEnd
diff --git a/Test/baseResults/spv.debuginfo.glsl.geom.out b/Test/baseResults/spv.debuginfo.glsl.geom.out
index 84b9807..0f8ceab 100644
--- a/Test/baseResults/spv.debuginfo.glsl.geom.out
+++ b/Test/baseResults/spv.debuginfo.glsl.geom.out
@@ -1,364 +1,452 @@
 spv.debuginfo.glsl.geom
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 256
+// Id's are bound by 276
 
                               Capability Geometry
                               Capability MultiViewport
                               Extension  "SPV_KHR_non_semantic_info"
-               2:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
                3:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Geometry 14  "main" 62 94 113 123 126 157 196 205 222 234 240 243
+                              EntryPoint Geometry 14  "main" 64 98 121 130 134 168 208 217 236 250 256 260
                               ExecutionMode 14 Triangles
                               ExecutionMode 14 Invocations 2
                               ExecutionMode 14 OutputTriangleStrip
                               ExecutionMode 14 OutputVertices 3
-               1:             String  ""
+               2:             String  "spv.debuginfo.glsl.geom"
                8:             String  "uint"
-              15:             String  "main"
-              18:             String  "// OpModuleProcessed auto-map-locations
+              16:             String  "main"
+              19:             String  "// OpModuleProcessed auto-map-locations
 // OpModuleProcessed auto-map-bindings
 // OpModuleProcessed client vulkan100
 // OpModuleProcessed target-env vulkan1.0
 // OpModuleProcessed keep-uncalled
 // OpModuleProcessed entry-point main
 #line 1
+/*
+The MIT License (MIT)
+
+Copyright (c) 2022 Sascha Willems
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+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 Software.
+
+THE SOFTWARE IS 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 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+*/
+
+#version 450
+
+#extension GL_ARB_viewport_array : enable
+
+layout (triangles, invocations = 2) in;
+layout (triangle_strip, max_vertices = 3) out;
+
+layout (binding = 0) uniform UBO 
+{
+	mat4 projection[2];
+	mat4 modelview[2];
+	vec4 lightPos;
+} ubo;
+
+layout (location = 0) in vec3 inNormal[];
+layout (location = 1) in vec3 inColor[];
+
+layout (location = 0) out vec3 outNormal;
+layout (location = 1) out vec3 outColor;
+layout (location = 2) out vec3 outViewVec;
+layout (location = 3) out vec3 outLightVec;
+
+void main(void)
+{	
+	for(int i = 0; i < gl_in.length(); i++)
+	{
+		outNormal = mat3(ubo.modelview[gl_InvocationID]) * inNormal[i];
+		outColor = inColor[i];
+
+		vec4 pos = gl_in[i].gl_Position;
+		vec4 worldPos = (ubo.modelview[gl_InvocationID] * pos);
+		
+		vec3 lPos = vec3(ubo.modelview[gl_InvocationID]  * ubo.lightPos);
+		outLightVec = lPos - worldPos.xyz;
+		outViewVec = -worldPos.xyz;	
+	
+		gl_Position = ubo.projection[gl_InvocationID] * worldPos;
+
+		// Set the viewport index that the vertex will be emitted to
+		gl_ViewportIndex = gl_InvocationID;
+      gl_PrimitiveID = gl_PrimitiveIDIn;
+		EmitVertex();
+	}
+	EndPrimitive();
+}
 "
               29:             String  "int"
-              34:             String  "i"
-              50:             String  "bool"
-              57:             String  "float"
-              64:             String  "outNormal"
-              77:             String  "projection"
-              81:             String  "modelview"
-              84:             String  "lightPos"
-              87:             String  "UBO"
-              91:             String  "ubo"
-              96:             String  "gl_InvocationID"
-             115:             String  "inNormal"
-             125:             String  "outColor"
-             128:             String  "inColor"
-             137:             String  "pos"
-             143:             String  "gl_Position"
-             146:             String  "gl_PointSize"
-             149:             String  "gl_CullDistance"
-             153:             String  "gl_PerVertex"
-             159:             String  "gl_in"
-             168:             String  "worldPos"
-             180:             String  "lPos"
-             198:             String  "outLightVec"
-             207:             String  "outViewVec"
-             236:             String  "gl_ViewportIndex"
-             242:             String  "gl_PrimitiveID"
-             245:             String  "gl_PrimitiveIDIn"
+              36:             String  "i"
+              54:             String  "bool"
+              58:             String  "float"
+              66:             String  "outNormal"
+              80:             String  "projection"
+              83:             String  "modelview"
+              86:             String  "lightPos"
+              89:             String  "UBO"
+              94:             String  "ubo"
+             100:             String  "gl_InvocationID"
+             123:             String  "inNormal"
+             132:             String  "outColor"
+             136:             String  "inColor"
+             145:             String  "pos"
+             153:             String  "gl_Position"
+             156:             String  "gl_PointSize"
+             159:             String  "gl_CullDistance"
+             163:             String  "gl_PerVertex"
+             170:             String  "gl_in"
+             178:             String  "worldPos"
+             191:             String  "lPos"
+             210:             String  "outLightVec"
+             219:             String  "outViewVec"
+             238:             String  ""
+             252:             String  "gl_ViewportIndex"
+             258:             String  "gl_PrimitiveID"
+             262:             String  "gl_PrimitiveIDIn"
                               SourceExtension  "GL_ARB_viewport_array"
                               Name 14  "main"
-                              Name 32  "i"
-                              Name 62  "outNormal"
-                              Name 75  "UBO"
-                              MemberName 75(UBO) 0  "projection"
-                              MemberName 75(UBO) 1  "modelview"
-                              MemberName 75(UBO) 2  "lightPos"
-                              Name 89  "ubo"
-                              Name 94  "gl_InvocationID"
-                              Name 113  "inNormal"
-                              Name 123  "outColor"
-                              Name 126  "inColor"
-                              Name 135  "pos"
-                              Name 141  "gl_PerVertex"
-                              MemberName 141(gl_PerVertex) 0  "gl_Position"
-                              MemberName 141(gl_PerVertex) 1  "gl_PointSize"
-                              MemberName 141(gl_PerVertex) 2  "gl_ClipDistance"
-                              MemberName 141(gl_PerVertex) 3  "gl_CullDistance"
-                              Name 157  "gl_in"
-                              Name 166  "worldPos"
-                              Name 178  "lPos"
-                              Name 196  "outLightVec"
-                              Name 205  "outViewVec"
-                              Name 213  "gl_PerVertex"
-                              MemberName 213(gl_PerVertex) 0  "gl_Position"
-                              MemberName 213(gl_PerVertex) 1  "gl_PointSize"
-                              MemberName 213(gl_PerVertex) 2  "gl_ClipDistance"
-                              MemberName 213(gl_PerVertex) 3  "gl_CullDistance"
-                              Name 222  ""
-                              Name 234  "gl_ViewportIndex"
-                              Name 240  "gl_PrimitiveID"
-                              Name 243  "gl_PrimitiveIDIn"
-                              Decorate 62(outNormal) Location 0
-                              Decorate 71 ArrayStride 64
-                              Decorate 73 ArrayStride 64
-                              MemberDecorate 75(UBO) 0 ColMajor
-                              MemberDecorate 75(UBO) 0 Offset 0
-                              MemberDecorate 75(UBO) 0 MatrixStride 16
-                              MemberDecorate 75(UBO) 1 ColMajor
-                              MemberDecorate 75(UBO) 1 Offset 128
-                              MemberDecorate 75(UBO) 1 MatrixStride 16
-                              MemberDecorate 75(UBO) 2 Offset 256
-                              Decorate 75(UBO) Block
-                              Decorate 89(ubo) DescriptorSet 0
-                              Decorate 89(ubo) Binding 0
-                              Decorate 94(gl_InvocationID) BuiltIn InvocationId
-                              Decorate 113(inNormal) Location 0
-                              Decorate 123(outColor) Location 1
-                              Decorate 126(inColor) Location 1
-                              MemberDecorate 141(gl_PerVertex) 0 BuiltIn Position
-                              MemberDecorate 141(gl_PerVertex) 1 BuiltIn PointSize
-                              MemberDecorate 141(gl_PerVertex) 2 BuiltIn ClipDistance
-                              MemberDecorate 141(gl_PerVertex) 3 BuiltIn CullDistance
-                              Decorate 141(gl_PerVertex) Block
-                              Decorate 196(outLightVec) Location 3
-                              Decorate 205(outViewVec) Location 2
-                              MemberDecorate 213(gl_PerVertex) 0 BuiltIn Position
-                              MemberDecorate 213(gl_PerVertex) 1 BuiltIn PointSize
-                              MemberDecorate 213(gl_PerVertex) 2 BuiltIn ClipDistance
-                              MemberDecorate 213(gl_PerVertex) 3 BuiltIn CullDistance
-                              Decorate 213(gl_PerVertex) Block
-                              Decorate 234(gl_ViewportIndex) BuiltIn ViewportIndex
-                              Decorate 240(gl_PrimitiveID) BuiltIn PrimitiveId
-                              Decorate 243(gl_PrimitiveIDIn) BuiltIn PrimitiveId
+                              Name 34  "i"
+                              Name 64  "outNormal"
+                              Name 78  "UBO"
+                              MemberName 78(UBO) 0  "projection"
+                              MemberName 78(UBO) 1  "modelview"
+                              MemberName 78(UBO) 2  "lightPos"
+                              Name 92  "ubo"
+                              Name 98  "gl_InvocationID"
+                              Name 121  "inNormal"
+                              Name 130  "outColor"
+                              Name 134  "inColor"
+                              Name 143  "pos"
+                              Name 151  "gl_PerVertex"
+                              MemberName 151(gl_PerVertex) 0  "gl_Position"
+                              MemberName 151(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 151(gl_PerVertex) 2  "gl_ClipDistance"
+                              MemberName 151(gl_PerVertex) 3  "gl_CullDistance"
+                              Name 168  "gl_in"
+                              Name 176  "worldPos"
+                              Name 189  "lPos"
+                              Name 208  "outLightVec"
+                              Name 217  "outViewVec"
+                              Name 225  "gl_PerVertex"
+                              MemberName 225(gl_PerVertex) 0  "gl_Position"
+                              MemberName 225(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 225(gl_PerVertex) 2  "gl_ClipDistance"
+                              MemberName 225(gl_PerVertex) 3  "gl_CullDistance"
+                              Name 236  ""
+                              Name 250  "gl_ViewportIndex"
+                              Name 256  "gl_PrimitiveID"
+                              Name 260  "gl_PrimitiveIDIn"
+                              Decorate 64(outNormal) Location 0
+                              Decorate 74 ArrayStride 64
+                              Decorate 76 ArrayStride 64
+                              Decorate 78(UBO) Block
+                              MemberDecorate 78(UBO) 0 ColMajor
+                              MemberDecorate 78(UBO) 0 MatrixStride 16
+                              MemberDecorate 78(UBO) 0 Offset 0
+                              MemberDecorate 78(UBO) 1 ColMajor
+                              MemberDecorate 78(UBO) 1 MatrixStride 16
+                              MemberDecorate 78(UBO) 1 Offset 128
+                              MemberDecorate 78(UBO) 2 Offset 256
+                              Decorate 92(ubo) Binding 0
+                              Decorate 92(ubo) DescriptorSet 0
+                              Decorate 98(gl_InvocationID) BuiltIn InvocationId
+                              Decorate 121(inNormal) Location 0
+                              Decorate 130(outColor) Location 1
+                              Decorate 134(inColor) Location 1
+                              Decorate 151(gl_PerVertex) Block
+                              MemberDecorate 151(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 151(gl_PerVertex) 1 BuiltIn PointSize
+                              MemberDecorate 151(gl_PerVertex) 2 BuiltIn ClipDistance
+                              MemberDecorate 151(gl_PerVertex) 3 BuiltIn CullDistance
+                              Decorate 208(outLightVec) Location 3
+                              Decorate 217(outViewVec) Location 2
+                              Decorate 225(gl_PerVertex) Block
+                              MemberDecorate 225(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 225(gl_PerVertex) 1 BuiltIn PointSize
+                              MemberDecorate 225(gl_PerVertex) 2 BuiltIn ClipDistance
+                              MemberDecorate 225(gl_PerVertex) 3 BuiltIn CullDistance
+                              Decorate 250(gl_ViewportIndex) BuiltIn ViewportIndex
+                              Decorate 256(gl_PrimitiveID) BuiltIn PrimitiveId
+                              Decorate 260(gl_PrimitiveIDIn) BuiltIn PrimitiveId
                4:             TypeVoid
                5:             TypeFunction 4
                7:             TypeInt 32 0
               10:      7(int) Constant 32
               11:      7(int) Constant 6
               12:      7(int) Constant 0
-               9:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 8 10 11 12
+               9:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 8 10 11 12
               13:      7(int) Constant 3
-               6:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4
-              17:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 1 18
-              20:      7(int) Constant 1
-              21:      7(int) Constant 4
-              22:      7(int) Constant 2
-              19:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 20 21 17 22
-              16:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 15 6 17 12 12 19 15 13 12
-              27:      7(int) Constant 49
+               6:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4
+              18:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 2 19
+              20:      7(int) Constant 47
+              22:      7(int) Constant 1
+              23:      7(int) Constant 4
+              24:      7(int) Constant 2
+              21:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 22 23 18 24
+              17:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 16 6 18 20 12 21 16 13 20
               28:             TypeInt 32 1
-              30:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 29 10 21 12
+              30:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 29 10 23 12
               31:             TypePointer Function 28(int)
-              33:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 34 30 17 27 12 16 21
-              36:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
-              37:     28(int) Constant 0
-              48:     28(int) Constant 3
-              49:             TypeBool
-              51:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 50 10 22 12
-              55:      7(int) Constant 51
-              56:             TypeFloat 32
-              58:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 57 10 13 12
-              59:             TypeVector 56(float) 3
-              60:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 58 13
-              61:             TypePointer Output 59(fvec3)
-   62(outNormal):     61(ptr) Variable Output
-              65:      7(int) Constant 8
-              63:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 64 60 17 55 12 19 64 62(outNormal) 65
-              66:             TypeVector 56(float) 4
-              67:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 58 21
-              68:             TypeMatrix 66(fvec4) 4
-              70:    49(bool) ConstantTrue
-              69:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 67 21 70
-              71:             TypeArray 68 22
-              72:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 69 22
-              73:             TypeArray 68 22
-              74:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 69 22
-         75(UBO):             TypeStruct 71 73 66(fvec4)
-              78:      7(int) Constant 34
-              79:      7(int) Constant 7
-              76:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 77 72 17 78 79 12 12 13
-              82:      7(int) Constant 35
-              80:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 81 74 17 82 79 12 12 13
-              85:      7(int) Constant 36
-              83:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 84 67 17 85 79 12 12 13
-              86:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 87 20 17 55 12 19 87 12 13 76 80 83
-              88:             TypePointer Uniform 75(UBO)
-         89(ubo):     88(ptr) Variable Uniform
-              90:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 91 86 17 55 12 19 91 89(ubo) 65
-              92:     28(int) Constant 1
-              93:             TypePointer Input 28(int)
-94(gl_InvocationID):     93(ptr) Variable Input
-              95:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 96 30 17 55 12 19 96 94(gl_InvocationID) 65
-              98:             TypePointer Uniform 68
-             101:             TypeMatrix 59(fvec3) 3
-             102:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 60 13 70
-             110:             TypeArray 59(fvec3) 13
-             111:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 60 13
-             112:             TypePointer Input 110
-   113(inNormal):    112(ptr) Variable Input
-             114:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 115 111 17 55 12 19 115 113(inNormal) 65
-             117:             TypePointer Input 59(fvec3)
-             122:      7(int) Constant 52
-   123(outColor):     61(ptr) Variable Output
-             124:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 125 60 17 122 12 19 125 123(outColor) 65
-    126(inColor):    112(ptr) Variable Input
-             127:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 128 111 17 122 12 19 128 126(inColor) 65
-             133:      7(int) Constant 54
-             134:             TypePointer Function 66(fvec4)
-             136:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 137 67 17 133 12 16 21
-             139:             TypeArray 56(float) 20
-             140:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 58 20
-141(gl_PerVertex):             TypeStruct 66(fvec4) 56(float) 139 139
-             144:      7(int) Constant 23
-             142:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 143 67 17 22 144 12 12 13
-             147:      7(int) Constant 41
-             145:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 146 58 17 22 147 12 12 13
-             150:      7(int) Constant 84
-             148:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 149 140 17 22 150 12 12 13
-             151:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 149 140 17 22 150 12 12 13
-             152:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 153 20 17 133 12 19 153 12 13 142 145 148 151
-             154:             TypeArray 141(gl_PerVertex) 13
-             155:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 152 13
-             156:             TypePointer Input 154
-      157(gl_in):    156(ptr) Variable Input
-             158:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 159 155 17 133 12 19 159 157(gl_in) 65
-             161:             TypePointer Input 66(fvec4)
-             165:      7(int) Constant 55
-             167:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 168 67 17 165 12 16 21
-             176:      7(int) Constant 57
-             177:             TypePointer Function 59(fvec3)
-             179:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 180 60 17 176 12 16 21
-             185:     28(int) Constant 2
-             186:             TypePointer Uniform 66(fvec4)
-             195:      7(int) Constant 58
-196(outLightVec):     61(ptr) Variable Output
-             197:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 198 60 17 195 12 19 198 196(outLightVec) 65
-             204:      7(int) Constant 59
- 205(outViewVec):     61(ptr) Variable Output
-             206:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 207 60 17 204 12 19 207 205(outViewVec) 65
-             212:      7(int) Constant 61
-213(gl_PerVertex):             TypeStruct 66(fvec4) 56(float) 139 139
-             215:      7(int) Constant 215
-             214:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 143 67 17 22 215 12 12 13
-             217:      7(int) Constant 233
-             216:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 146 58 17 22 217 12 12 13
-             218:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 149 140 17 13 79 12 12 13
-             219:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 149 140 17 13 79 12 12 13
-             220:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 153 20 17 212 12 19 153 12 13 214 216 218 219
-             221:             TypePointer Output 213(gl_PerVertex)
-             222:    221(ptr) Variable Output
-             223:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 1 220 17 212 12 19 1 222 65
-             229:             TypePointer Output 66(fvec4)
-             232:      7(int) Constant 64
-             233:             TypePointer Output 28(int)
-234(gl_ViewportIndex):    233(ptr) Variable Output
-             235:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 236 30 17 232 12 19 236 234(gl_ViewportIndex) 65
-             239:      7(int) Constant 65
-240(gl_PrimitiveID):    233(ptr) Variable Output
-             241:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 242 30 17 239 12 19 242 240(gl_PrimitiveID) 65
-243(gl_PrimitiveIDIn):     93(ptr) Variable Input
-             244:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 245 30 17 239 12 19 245 243(gl_PrimitiveIDIn) 65
-             248:      7(int) Constant 66
-             255:      7(int) Constant 68
-                              Line 1 47 15
+              32:      7(int) Constant 7
+              33:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 30 32 12
+              37:      7(int) Constant 49
+              35:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 36 30 18 37 12 17 23
+              39:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
+              41:     28(int) Constant 0
+              52:     28(int) Constant 3
+              53:             TypeBool
+              55:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 54 10 24 12
+              57:             TypeFloat 32
+              59:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 58 10 13 12
+              60:             TypeVector 57(float) 3
+              61:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 59 13
+              62:             TypePointer Output 60(fvec3)
+              63:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 61 13 12
+   64(outNormal):     62(ptr) Variable Output
+              67:      7(int) Constant 51
+              68:      7(int) Constant 8
+              65:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 66 61 18 67 12 21 66 64(outNormal) 68
+              69:             TypeVector 57(float) 4
+              70:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 59 23
+              71:             TypeMatrix 69(fvec4) 4
+              73:    53(bool) ConstantTrue
+              72:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 70 23 73
+              74:             TypeArray 71 24
+              75:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 72 24
+              76:             TypeArray 71 24
+              77:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 72 24
+         78(UBO):             TypeStruct 74 76 69(fvec4)
+              81:      7(int) Constant 34
+              79:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 80 75 18 81 32 12 12 13
+              84:      7(int) Constant 35
+              82:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 83 77 18 84 32 12 12 13
+              87:      7(int) Constant 36
+              85:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 86 70 18 87 32 12 12 13
+              88:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 89 22 18 67 12 21 89 12 13 79 82 85
+              90:             TypePointer Uniform 78(UBO)
+              91:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 88 24 12
+         92(ubo):     90(ptr) Variable Uniform
+              93:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 94 88 18 67 12 21 94 92(ubo) 68
+              95:     28(int) Constant 1
+              96:             TypePointer Input 28(int)
+              97:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 30 22 12
+98(gl_InvocationID):     96(ptr) Variable Input
+              99:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 100 30 18 67 12 21 100 98(gl_InvocationID) 68
+             104:             TypePointer Uniform 71
+             105:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 72 24 12
+             108:             TypeMatrix 60(fvec3) 3
+             109:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 61 13 73
+             117:             TypeArray 60(fvec3) 13
+             118:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 61 13
+             119:             TypePointer Input 117
+             120:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 118 22 12
+   121(inNormal):    119(ptr) Variable Input
+             122:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 123 118 18 67 12 21 123 121(inNormal) 68
+             125:             TypePointer Input 60(fvec3)
+             126:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 61 22 12
+   130(outColor):     62(ptr) Variable Output
+             133:      7(int) Constant 52
+             131:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 132 61 18 133 12 21 132 130(outColor) 68
+    134(inColor):    119(ptr) Variable Input
+             135:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 136 118 18 133 12 21 136 134(inColor) 68
+             141:             TypePointer Function 69(fvec4)
+             142:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 70 32 12
+             146:      7(int) Constant 54
+             144:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 145 70 18 146 12 17 23
+             149:             TypeArray 57(float) 22
+             150:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 59 22
+151(gl_PerVertex):             TypeStruct 69(fvec4) 57(float) 149 149
+             154:      7(int) Constant 23
+             152:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 153 70 18 24 154 12 12 13
+             157:      7(int) Constant 41
+             155:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 156 59 18 24 157 12 12 13
+             160:      7(int) Constant 84
+             158:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 159 150 18 24 160 12 12 13
+             161:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 159 150 18 24 160 12 12 13
+             162:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 163 22 18 146 12 21 163 12 13 152 155 158 161
+             164:             TypeArray 151(gl_PerVertex) 13
+             165:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 162 13
+             166:             TypePointer Input 164
+             167:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 165 22 12
+      168(gl_in):    166(ptr) Variable Input
+             169:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 170 165 18 146 12 21 170 168(gl_in) 68
+             172:             TypePointer Input 69(fvec4)
+             173:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 70 22 12
+             179:      7(int) Constant 55
+             177:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 178 70 18 179 12 17 23
+             187:             TypePointer Function 60(fvec3)
+             188:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 61 32 12
+             192:      7(int) Constant 57
+             190:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 191 61 18 192 12 17 23
+             198:     28(int) Constant 2
+             199:             TypePointer Uniform 69(fvec4)
+             200:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 70 24 12
+208(outLightVec):     62(ptr) Variable Output
+             211:      7(int) Constant 58
+             209:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 210 61 18 211 12 21 210 208(outLightVec) 68
+ 217(outViewVec):     62(ptr) Variable Output
+             220:      7(int) Constant 59
+             218:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 219 61 18 220 12 21 219 217(outViewVec) 68
+225(gl_PerVertex):             TypeStruct 69(fvec4) 57(float) 149 149
+             227:      7(int) Constant 215
+             226:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 153 70 18 24 227 12 12 13
+             229:      7(int) Constant 233
+             228:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 156 59 18 24 229 12 12 13
+             230:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 159 150 18 13 32 12 12 13
+             231:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 159 150 18 13 32 12 12 13
+             233:      7(int) Constant 61
+             232:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 163 22 18 233 12 21 163 12 13 226 228 230 231
+             234:             TypePointer Output 225(gl_PerVertex)
+             235:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 232 13 12
+             236:    234(ptr) Variable Output
+             237:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 238 232 18 233 12 21 238 236 68
+             245:             TypePointer Output 69(fvec4)
+             246:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 70 13 12
+             248:             TypePointer Output 28(int)
+             249:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 30 13 12
+250(gl_ViewportIndex):    248(ptr) Variable Output
+             253:      7(int) Constant 64
+             251:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 252 30 18 253 12 21 252 250(gl_ViewportIndex) 68
+256(gl_PrimitiveID):    248(ptr) Variable Output
+             259:      7(int) Constant 65
+             257:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 258 30 18 259 12 21 258 256(gl_PrimitiveID) 68
+260(gl_PrimitiveIDIn):     96(ptr) Variable Input
+             261:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 262 30 18 259 12 21 262 260(gl_PrimitiveIDIn) 68
+             266:      7(int) Constant 66
+             273:      7(int) Constant 68
+             275:      7(int) Constant 69
         14(main):           4 Function None 5
-              23:             Label
-           32(i):     31(ptr) Variable Function
-        135(pos):    134(ptr) Variable Function
-   166(worldPos):    134(ptr) Variable Function
-       178(lPos):    177(ptr) Variable Function
-              24:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 16 14(main)
-              25:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-              26:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 27 27 12 12
-              35:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 33 32(i) 36
-                              Store 32(i) 37
-                              Branch 38
-              38:             Label
-              42:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-              43:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 27 27 12 12
-                              LoopMerge 40 41 None
-                              Branch 44
-              44:             Label
-              45:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-              46:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 27 27 12 12
-              47:     28(int) Load 32(i)
-              52:    49(bool) SLessThan 47 48
-                              BranchConditional 52 39 40
-              39:               Label
-              53:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-              54:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 55 55 12 12
-              97:     28(int)   Load 94(gl_InvocationID)
-              99:     98(ptr)   AccessChain 89(ubo) 92 97
-             100:          68   Load 99
-             103:   66(fvec4)   CompositeExtract 100 0
-             104:   59(fvec3)   VectorShuffle 103 103 0 1 2
-             105:   66(fvec4)   CompositeExtract 100 1
-             106:   59(fvec3)   VectorShuffle 105 105 0 1 2
-             107:   66(fvec4)   CompositeExtract 100 2
-             108:   59(fvec3)   VectorShuffle 107 107 0 1 2
-             109:         101   CompositeConstruct 104 106 108
-             116:     28(int)   Load 32(i)
-             118:    117(ptr)   AccessChain 113(inNormal) 116
-             119:   59(fvec3)   Load 118
-             120:   59(fvec3)   MatrixTimesVector 109 119
-                                Store 62(outNormal) 120
-             121:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 122 122 12 12
-             129:     28(int)   Load 32(i)
-             130:    117(ptr)   AccessChain 126(inColor) 129
-             131:   59(fvec3)   Load 130
-                                Store 123(outColor) 131
-             132:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 133 133 12 12
-             138:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 136 135(pos) 36
-             160:     28(int)   Load 32(i)
-             162:    161(ptr)   AccessChain 157(gl_in) 160 37
-             163:   66(fvec4)   Load 162
-                                Store 135(pos) 163
-             164:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 165 165 12 12
-             169:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 167 166(worldPos) 36
-             170:     28(int)   Load 94(gl_InvocationID)
-             171:     98(ptr)   AccessChain 89(ubo) 92 170
-             172:          68   Load 171
-             173:   66(fvec4)   Load 135(pos)
-             174:   66(fvec4)   MatrixTimesVector 172 173
-                                Store 166(worldPos) 174
-             175:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 176 176 12 12
-             181:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 179 178(lPos) 36
-             182:     28(int)   Load 94(gl_InvocationID)
-             183:     98(ptr)   AccessChain 89(ubo) 92 182
-             184:          68   Load 183
-             187:    186(ptr)   AccessChain 89(ubo) 185
-             188:   66(fvec4)   Load 187
-             189:   66(fvec4)   MatrixTimesVector 184 188
-             190:   56(float)   CompositeExtract 189 0
-             191:   56(float)   CompositeExtract 189 1
-             192:   56(float)   CompositeExtract 189 2
-             193:   59(fvec3)   CompositeConstruct 190 191 192
-                                Store 178(lPos) 193
-             194:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 195 195 12 12
-             199:   59(fvec3)   Load 178(lPos)
-             200:   66(fvec4)   Load 166(worldPos)
-             201:   59(fvec3)   VectorShuffle 200 200 0 1 2
-             202:   59(fvec3)   FSub 199 201
-                                Store 196(outLightVec) 202
-             203:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 204 204 12 12
-             208:   66(fvec4)   Load 166(worldPos)
-             209:   59(fvec3)   VectorShuffle 208 208 0 1 2
-             210:   59(fvec3)   FNegate 209
-                                Store 205(outViewVec) 210
-             211:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 212 212 12 12
-             224:     28(int)   Load 94(gl_InvocationID)
-             225:     98(ptr)   AccessChain 89(ubo) 37 224
-             226:          68   Load 225
-             227:   66(fvec4)   Load 166(worldPos)
-             228:   66(fvec4)   MatrixTimesVector 226 227
-             230:    229(ptr)   AccessChain 222 37
-                                Store 230 228
-             231:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 232 232 12 12
-             237:     28(int)   Load 94(gl_InvocationID)
-                                Store 234(gl_ViewportIndex) 237
-             238:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 239 239 12 12
-             246:     28(int)   Load 243(gl_PrimitiveIDIn)
-                                Store 240(gl_PrimitiveID) 246
-             247:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 248 248 12 12
+              15:             Label
+           34(i):     31(ptr) Variable Function
+        143(pos):    141(ptr) Variable Function
+   176(worldPos):    141(ptr) Variable Function
+       189(lPos):    187(ptr) Variable Function
+              26:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+              27:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 20 20 12 12
+              25:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 17 14(main)
+              40:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 37 37 12 12
+              38:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 35 34(i) 39
+                              Store 34(i) 41
+                              Branch 42
+              42:             Label
+              46:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+              47:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 37 37 12 12
+                              LoopMerge 44 45 None
+                              Branch 48
+              48:             Label
+              50:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+              51:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 37 37 12 12
+              49:     28(int) Load 34(i)
+              56:    53(bool) SLessThan 49 52
+                              BranchConditional 56 43 44
+              43:               Label
+             102:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+             103:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 67 67 12 12
+             101:     28(int)   Load 98(gl_InvocationID)
+             106:    104(ptr)   AccessChain 92(ubo) 95 101
+             107:          71   Load 106
+             110:   69(fvec4)   CompositeExtract 107 0
+             111:   60(fvec3)   VectorShuffle 110 110 0 1 2
+             112:   69(fvec4)   CompositeExtract 107 1
+             113:   60(fvec3)   VectorShuffle 112 112 0 1 2
+             114:   69(fvec4)   CompositeExtract 107 2
+             115:   60(fvec3)   VectorShuffle 114 114 0 1 2
+             116:         108   CompositeConstruct 111 113 115
+             124:     28(int)   Load 34(i)
+             127:    125(ptr)   AccessChain 121(inNormal) 124
+             128:   60(fvec3)   Load 127
+             129:   60(fvec3)   MatrixTimesVector 116 128
+                                Store 64(outNormal) 129
+             138:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 133 133 12 12
+             137:     28(int)   Load 34(i)
+             139:    125(ptr)   AccessChain 134(inColor) 137
+             140:   60(fvec3)   Load 139
+                                Store 130(outColor) 140
+             148:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 146 146 12 12
+             147:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 144 143(pos) 39
+             171:     28(int)   Load 34(i)
+             174:    172(ptr)   AccessChain 168(gl_in) 171 41
+             175:   69(fvec4)   Load 174
+                                Store 143(pos) 175
+             181:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 179 179 12 12
+             180:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 177 176(worldPos) 39
+             182:     28(int)   Load 98(gl_InvocationID)
+             183:    104(ptr)   AccessChain 92(ubo) 95 182
+             184:          71   Load 183
+             185:   69(fvec4)   Load 143(pos)
+             186:   69(fvec4)   MatrixTimesVector 184 185
+                                Store 176(worldPos) 186
+             194:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 192 192 12 12
+             193:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 190 189(lPos) 39
+             195:     28(int)   Load 98(gl_InvocationID)
+             196:    104(ptr)   AccessChain 92(ubo) 95 195
+             197:          71   Load 196
+             201:    199(ptr)   AccessChain 92(ubo) 198
+             202:   69(fvec4)   Load 201
+             203:   69(fvec4)   MatrixTimesVector 197 202
+             204:   57(float)   CompositeExtract 203 0
+             205:   57(float)   CompositeExtract 203 1
+             206:   57(float)   CompositeExtract 203 2
+             207:   60(fvec3)   CompositeConstruct 204 205 206
+                                Store 189(lPos) 207
+             213:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 211 211 12 12
+             212:   60(fvec3)   Load 189(lPos)
+             214:   69(fvec4)   Load 176(worldPos)
+             215:   60(fvec3)   VectorShuffle 214 214 0 1 2
+             216:   60(fvec3)   FSub 212 215
+                                Store 208(outLightVec) 216
+             222:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 220 220 12 12
+             221:   69(fvec4)   Load 176(worldPos)
+             223:   60(fvec3)   VectorShuffle 221 221 0 1 2
+             224:   60(fvec3)   FNegate 223
+                                Store 217(outViewVec) 224
+             240:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 233 233 12 12
+             239:     28(int)   Load 98(gl_InvocationID)
+             241:    104(ptr)   AccessChain 92(ubo) 41 239
+             242:          71   Load 241
+             243:   69(fvec4)   Load 176(worldPos)
+             244:   69(fvec4)   MatrixTimesVector 242 243
+             247:    245(ptr)   AccessChain 236 41
+                                Store 247 244
+             255:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 253 253 12 12
+             254:     28(int)   Load 98(gl_InvocationID)
+                                Store 250(gl_ViewportIndex) 254
+             264:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 259 259 12 12
+             263:     28(int)   Load 260(gl_PrimitiveIDIn)
+                                Store 256(gl_PrimitiveID) 263
+             265:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 266 266 12 12
                                 EmitVertex
-                                Branch 41
-              41:               Label
-             249:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             250:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 27 27 12 12
-             251:     28(int)   Load 32(i)
-             252:     28(int)   IAdd 251 92
-                                Store 32(i) 252
-                                Branch 38
-              40:             Label
-             253:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             254:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 255 255 12 12
+                                Branch 45
+              45:               Label
+             268:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+             269:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 37 37 12 12
+             267:     28(int)   Load 34(i)
+             270:     28(int)   IAdd 267 95
+                                Store 34(i) 270
+                                Branch 42
+              44:             Label
+             271:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+             272:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 273 273 12 12
                               EndPrimitive
+             274:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 275 275 12 12
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.debuginfo.glsl.tesc.out b/Test/baseResults/spv.debuginfo.glsl.tesc.out
index b19528c..937a42e 100644
--- a/Test/baseResults/spv.debuginfo.glsl.tesc.out
+++ b/Test/baseResults/spv.debuginfo.glsl.tesc.out
@@ -1,713 +1,883 @@
 spv.debuginfo.glsl.tesc
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 542
+// Id's are bound by 579
 
                               Capability Tessellation
                               Extension  "SPV_KHR_non_semantic_info"
-               2:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
                3:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint TessellationControl 14  "main" 249 253 279 370 383 498 512 519 533
+                              EntryPoint TessellationControl 14  "main" 262 267 296 390 405 524 540 550 565
                               ExecutionMode 14 OutputVertices 4
-               1:             String  ""
+               2:             String  "spv.debuginfo.glsl.tesc"
                8:             String  "uint"
-              15:             String  "main"
-              18:             String  "// OpModuleProcessed auto-map-locations
+              17:             String  "float"
+              31:             String  "screenSpaceTessFactor"
+              34:             String  "// OpModuleProcessed auto-map-locations
 // OpModuleProcessed auto-map-bindings
 // OpModuleProcessed client vulkan100
 // OpModuleProcessed target-env vulkan1.0
 // OpModuleProcessed keep-uncalled
 // OpModuleProcessed entry-point main
 #line 1
+/*
+The MIT License (MIT)
+
+Copyright (c) 2022 Sascha Willems
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+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 Software.
+
+THE SOFTWARE IS 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 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+*/
+
+#version 450
+
+layout(set = 0, binding = 0) uniform UBO
+{
+	mat4 projection;
+	mat4 modelview;
+	vec4 lightPos;
+	vec4 frustumPlanes[6];
+	float displacementFactor;
+	float tessellationFactor;
+	vec2 viewportDim;
+	float tessellatedEdgeSize;
+} ubo;
+
+layout(set = 0, binding = 1) uniform sampler2D samplerHeight;
+
+layout (vertices = 4) out;
+
+layout (location = 0) in vec3 inNormal[];
+layout (location = 1) in vec2 inUV[];
+
+layout (location = 0) out vec3 outNormal[4];
+layout (location = 1) out vec2 outUV[4];
+
+// Calculate the tessellation factor based on screen space
+// dimensions of the edge
+float screenSpaceTessFactor(vec4 p0, vec4 p1)
+{
+	// Calculate edge mid point
+	vec4 midPoint = 0.5 * (p0 + p1);
+	// Sphere radius as distance between the control points
+	float radius = distance(p0, p1) / 2.0;
+
+	// View space
+	vec4 v0 = ubo.modelview  * midPoint;
+
+	// Project into clip space
+	vec4 clip0 = (ubo.projection * (v0 - vec4(radius, vec3(0.0))));
+	vec4 clip1 = (ubo.projection * (v0 + vec4(radius, vec3(0.0))));
+
+	// Get normalized device coordinates
+	clip0 /= clip0.w;
+	clip1 /= clip1.w;
+
+	// Convert to viewport coordinates
+	clip0.xy *= ubo.viewportDim;
+	clip1.xy *= ubo.viewportDim;
+
+	// Return the tessellation factor based on the screen size
+	// given by the distance of the two edge control points in screen space
+	// and a reference (min.) tessellation size for the edge set by the application
+	return clamp(distance(clip0, clip1) / ubo.tessellatedEdgeSize * ubo.tessellationFactor, 1.0, 64.0);
+}
+
+// Checks the current's patch visibility against the frustum using a sphere check
+// Sphere radius is given by the patch size
+bool frustumCheck()
+{
+	// Fixed radius (increase if patch size is increased in example)
+	const float radius = 8.0f;
+	vec4 pos = gl_in[gl_InvocationID].gl_Position;
+	pos.y -= textureLod(samplerHeight, inUV[0], 0.0).r * ubo.displacementFactor;
+
+	// Check sphere against frustum planes
+	for (int i = 0; i < 6; i++) {
+		if (dot(pos, ubo.frustumPlanes[i]) + radius < 0.0)
+		{
+			return false;
+		}
+	}
+	return true;
+}
+
+void main()
+{
+	if (gl_InvocationID == 0)
+	{
+		if (!frustumCheck())
+		{
+			gl_TessLevelInner[0] = 0.0;
+			gl_TessLevelInner[1] = 0.0;
+			gl_TessLevelOuter[0] = 0.0;
+			gl_TessLevelOuter[1] = 0.0;
+			gl_TessLevelOuter[2] = 0.0;
+			gl_TessLevelOuter[3] = 0.0;
+		}
+		else
+		{
+			if (ubo.tessellationFactor > 0.0)
+			{
+				gl_TessLevelOuter[0] = screenSpaceTessFactor(gl_in[3].gl_Position, gl_in[0].gl_Position);
+				gl_TessLevelOuter[1] = screenSpaceTessFactor(gl_in[0].gl_Position, gl_in[1].gl_Position);
+				gl_TessLevelOuter[2] = screenSpaceTessFactor(gl_in[1].gl_Position, gl_in[2].gl_Position);
+				gl_TessLevelOuter[3] = screenSpaceTessFactor(gl_in[2].gl_Position, gl_in[3].gl_Position);
+				gl_TessLevelInner[0] = mix(gl_TessLevelOuter[0], gl_TessLevelOuter[3], 0.5);
+				gl_TessLevelInner[1] = mix(gl_TessLevelOuter[2], gl_TessLevelOuter[1], 0.5);
+			}
+			else
+			{
+				// Tessellation factor can be set to zero by example
+				// to demonstrate a simple passthrough
+				gl_TessLevelInner[0] = 1.0;
+				gl_TessLevelInner[1] = 1.0;
+				gl_TessLevelOuter[0] = 1.0;
+				gl_TessLevelOuter[1] = 1.0;
+				gl_TessLevelOuter[2] = 1.0;
+				gl_TessLevelOuter[3] = 1.0;
+			}
+		}
+
+	}
+
+	gl_out[gl_InvocationID].gl_Position =  gl_in[gl_InvocationID].gl_Position;
+	outNormal[gl_InvocationID] = inNormal[gl_InvocationID];
+	outUV[gl_InvocationID] = inUV[gl_InvocationID];
+}
 "
-              25:             String  "float"
-              35:             String  "screenSpaceTessFactor"
-              41:             String  "p0"
-              45:             String  "p1"
-              48:             String  "bool"
-              53:             String  "frustumCheck"
-              62:             String  "midPoint"
-              74:             String  "radius"
-              85:             String  "v0"
-              96:             String  "modelview"
-             101:             String  "lightPos"
-             104:             String  "frustumPlanes"
-             106:             String  "tessellatedEdgeSize"
-             111:             String  "viewportDim"
-             115:             String  "UBO"
-             119:             String  "ubo"
-             121:             String  "int"
-             133:             String  "clip0"
-             154:             String  "clip1"
-             229:             String  "pos"
-             235:             String  "gl_Position"
-             238:             String  "gl_PointSize"
-             241:             String  "gl_CullDistance"
-             245:             String  "gl_PerVertex"
-             251:             String  "gl_in"
-             255:             String  "gl_InvocationID"
-             264:             String  "type.2d.image"
-             265:             String  "@type.2d.image"
-             269:             String  "type.sampled.image"
-             270:             String  "@type.sampled.image"
-             274:             String  "samplerHeight"
-             281:             String  "inUV"
-             300:             String  "i"
-             372:             String  "gl_TessLevelInner"
-             385:             String  "gl_TessLevelOuter"
-             500:             String  "gl_out"
-             514:             String  "outNormal"
-             521:             String  "inNormal"
-             535:             String  "outUV"
+              40:             String  "p0"
+              46:             String  "p1"
+              49:             String  "bool"
+              55:             String  "frustumCheck"
+              58:             String  "main"
+              64:             String  "midPoint"
+              77:             String  "radius"
+              88:             String  "v0"
+             101:             String  "modelview"
+             105:             String  "lightPos"
+             108:             String  "frustumPlanes"
+             110:             String  "tessellatedEdgeSize"
+             115:             String  "viewportDim"
+             119:             String  "UBO"
+             124:             String  "ubo"
+             126:             String  "int"
+             137:             String  "clip0"
+             158:             String  "clip1"
+             239:             String  "pos"
+             247:             String  "gl_Position"
+             250:             String  "gl_PointSize"
+             253:             String  "gl_CullDistance"
+             257:             String  "gl_PerVertex"
+             264:             String  "gl_in"
+             269:             String  "gl_InvocationID"
+             277:             String  "type.2d.image"
+             279:             String  "@type.2d.image"
+             283:             String  "type.sampled.image"
+             284:             String  "@type.sampled.image"
+             289:             String  "samplerHeight"
+             298:             String  "inUV"
+             317:             String  "i"
+             392:             String  "gl_TessLevelInner"
+             407:             String  "gl_TessLevelOuter"
+             526:             String  "gl_out"
+             542:             String  "outNormal"
+             552:             String  "inNormal"
+             567:             String  "outUV"
                               Name 14  "main"
-                              Name 34  "screenSpaceTessFactor(vf4;vf4;"
-                              Name 32  "p0"
-                              Name 33  "p1"
-                              Name 52  "frustumCheck("
-                              Name 60  "midPoint"
-                              Name 72  "radius"
-                              Name 83  "v0"
-                              Name 94  "UBO"
-                              MemberName 94(UBO) 0  "projection"
-                              MemberName 94(UBO) 1  "modelview"
-                              MemberName 94(UBO) 2  "lightPos"
-                              MemberName 94(UBO) 3  "frustumPlanes"
-                              MemberName 94(UBO) 4  "displacementFactor"
-                              MemberName 94(UBO) 5  "tessellationFactor"
-                              MemberName 94(UBO) 6  "viewportDim"
-                              MemberName 94(UBO) 7  "tessellatedEdgeSize"
-                              Name 117  "ubo"
-                              Name 131  "clip0"
-                              Name 152  "clip1"
-                              Name 227  "pos"
-                              Name 233  "gl_PerVertex"
-                              MemberName 233(gl_PerVertex) 0  "gl_Position"
-                              MemberName 233(gl_PerVertex) 1  "gl_PointSize"
-                              MemberName 233(gl_PerVertex) 2  "gl_ClipDistance"
-                              MemberName 233(gl_PerVertex) 3  "gl_CullDistance"
-                              Name 249  "gl_in"
-                              Name 253  "gl_InvocationID"
-                              Name 272  "samplerHeight"
-                              Name 279  "inUV"
-                              Name 298  "i"
-                              Name 370  "gl_TessLevelInner"
-                              Name 383  "gl_TessLevelOuter"
-                              Name 410  "param"
-                              Name 413  "param"
-                              Name 420  "param"
-                              Name 423  "param"
-                              Name 430  "param"
-                              Name 433  "param"
-                              Name 440  "param"
-                              Name 443  "param"
-                              Name 487  "gl_PerVertex"
-                              MemberName 487(gl_PerVertex) 0  "gl_Position"
-                              MemberName 487(gl_PerVertex) 1  "gl_PointSize"
-                              MemberName 487(gl_PerVertex) 2  "gl_ClipDistance"
-                              MemberName 487(gl_PerVertex) 3  "gl_CullDistance"
-                              Name 498  "gl_out"
-                              Name 512  "outNormal"
-                              Name 519  "inNormal"
-                              Name 533  "outUV"
-                              Decorate 90 ArrayStride 16
-                              MemberDecorate 94(UBO) 0 ColMajor
-                              MemberDecorate 94(UBO) 0 Offset 0
-                              MemberDecorate 94(UBO) 0 MatrixStride 16
-                              MemberDecorate 94(UBO) 1 ColMajor
-                              MemberDecorate 94(UBO) 1 Offset 64
-                              MemberDecorate 94(UBO) 1 MatrixStride 16
-                              MemberDecorate 94(UBO) 2 Offset 128
-                              MemberDecorate 94(UBO) 3 Offset 144
-                              MemberDecorate 94(UBO) 4 Offset 240
-                              MemberDecorate 94(UBO) 5 Offset 244
-                              MemberDecorate 94(UBO) 6 Offset 248
-                              MemberDecorate 94(UBO) 7 Offset 256
-                              Decorate 94(UBO) Block
-                              Decorate 117(ubo) DescriptorSet 0
-                              Decorate 117(ubo) Binding 0
-                              MemberDecorate 233(gl_PerVertex) 0 BuiltIn Position
-                              MemberDecorate 233(gl_PerVertex) 1 BuiltIn PointSize
-                              MemberDecorate 233(gl_PerVertex) 2 BuiltIn ClipDistance
-                              MemberDecorate 233(gl_PerVertex) 3 BuiltIn CullDistance
-                              Decorate 233(gl_PerVertex) Block
-                              Decorate 253(gl_InvocationID) BuiltIn InvocationId
-                              Decorate 272(samplerHeight) DescriptorSet 0
-                              Decorate 272(samplerHeight) Binding 1
-                              Decorate 279(inUV) Location 1
-                              Decorate 370(gl_TessLevelInner) Patch
-                              Decorate 370(gl_TessLevelInner) BuiltIn TessLevelInner
-                              Decorate 383(gl_TessLevelOuter) Patch
-                              Decorate 383(gl_TessLevelOuter) BuiltIn TessLevelOuter
-                              MemberDecorate 487(gl_PerVertex) 0 BuiltIn Position
-                              MemberDecorate 487(gl_PerVertex) 1 BuiltIn PointSize
-                              MemberDecorate 487(gl_PerVertex) 2 BuiltIn ClipDistance
-                              MemberDecorate 487(gl_PerVertex) 3 BuiltIn CullDistance
-                              Decorate 487(gl_PerVertex) Block
-                              Decorate 512(outNormal) Location 0
-                              Decorate 519(inNormal) Location 0
-                              Decorate 533(outUV) Location 1
+                              Name 29  "screenSpaceTessFactor(vf4;vf4;"
+                              Name 27  "p0"
+                              Name 28  "p1"
+                              Name 53  "frustumCheck("
+                              Name 62  "midPoint"
+                              Name 75  "radius"
+                              Name 86  "v0"
+                              Name 99  "UBO"
+                              MemberName 99(UBO) 0  "projection"
+                              MemberName 99(UBO) 1  "modelview"
+                              MemberName 99(UBO) 2  "lightPos"
+                              MemberName 99(UBO) 3  "frustumPlanes"
+                              MemberName 99(UBO) 4  "displacementFactor"
+                              MemberName 99(UBO) 5  "tessellationFactor"
+                              MemberName 99(UBO) 6  "viewportDim"
+                              MemberName 99(UBO) 7  "tessellatedEdgeSize"
+                              Name 122  "ubo"
+                              Name 135  "clip0"
+                              Name 156  "clip1"
+                              Name 237  "pos"
+                              Name 245  "gl_PerVertex"
+                              MemberName 245(gl_PerVertex) 0  "gl_Position"
+                              MemberName 245(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 245(gl_PerVertex) 2  "gl_ClipDistance"
+                              MemberName 245(gl_PerVertex) 3  "gl_CullDistance"
+                              Name 262  "gl_in"
+                              Name 267  "gl_InvocationID"
+                              Name 287  "samplerHeight"
+                              Name 296  "inUV"
+                              Name 315  "i"
+                              Name 390  "gl_TessLevelInner"
+                              Name 405  "gl_TessLevelOuter"
+                              Name 434  "param"
+                              Name 439  "param"
+                              Name 444  "param"
+                              Name 449  "param"
+                              Name 454  "param"
+                              Name 459  "param"
+                              Name 464  "param"
+                              Name 469  "param"
+                              Name 511  "gl_PerVertex"
+                              MemberName 511(gl_PerVertex) 0  "gl_Position"
+                              MemberName 511(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 511(gl_PerVertex) 2  "gl_ClipDistance"
+                              MemberName 511(gl_PerVertex) 3  "gl_CullDistance"
+                              Name 524  "gl_out"
+                              Name 540  "outNormal"
+                              Name 550  "inNormal"
+                              Name 565  "outUV"
+                              Decorate 95 ArrayStride 16
+                              Decorate 99(UBO) Block
+                              MemberDecorate 99(UBO) 0 ColMajor
+                              MemberDecorate 99(UBO) 0 MatrixStride 16
+                              MemberDecorate 99(UBO) 0 Offset 0
+                              MemberDecorate 99(UBO) 1 ColMajor
+                              MemberDecorate 99(UBO) 1 MatrixStride 16
+                              MemberDecorate 99(UBO) 1 Offset 64
+                              MemberDecorate 99(UBO) 2 Offset 128
+                              MemberDecorate 99(UBO) 3 Offset 144
+                              MemberDecorate 99(UBO) 4 Offset 240
+                              MemberDecorate 99(UBO) 5 Offset 244
+                              MemberDecorate 99(UBO) 6 Offset 248
+                              MemberDecorate 99(UBO) 7 Offset 256
+                              Decorate 122(ubo) Binding 0
+                              Decorate 122(ubo) DescriptorSet 0
+                              Decorate 245(gl_PerVertex) Block
+                              MemberDecorate 245(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 245(gl_PerVertex) 1 BuiltIn PointSize
+                              MemberDecorate 245(gl_PerVertex) 2 BuiltIn ClipDistance
+                              MemberDecorate 245(gl_PerVertex) 3 BuiltIn CullDistance
+                              Decorate 267(gl_InvocationID) BuiltIn InvocationId
+                              Decorate 287(samplerHeight) Binding 1
+                              Decorate 287(samplerHeight) DescriptorSet 0
+                              Decorate 296(inUV) Location 1
+                              Decorate 390(gl_TessLevelInner) BuiltIn TessLevelInner
+                              Decorate 390(gl_TessLevelInner) Patch
+                              Decorate 405(gl_TessLevelOuter) BuiltIn TessLevelOuter
+                              Decorate 405(gl_TessLevelOuter) Patch
+                              Decorate 511(gl_PerVertex) Block
+                              MemberDecorate 511(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 511(gl_PerVertex) 1 BuiltIn PointSize
+                              MemberDecorate 511(gl_PerVertex) 2 BuiltIn ClipDistance
+                              MemberDecorate 511(gl_PerVertex) 3 BuiltIn CullDistance
+                              Decorate 540(outNormal) Location 0
+                              Decorate 550(inNormal) Location 0
+                              Decorate 565(outUV) Location 1
                4:             TypeVoid
                5:             TypeFunction 4
                7:             TypeInt 32 0
               10:      7(int) Constant 32
               11:      7(int) Constant 6
               12:      7(int) Constant 0
-               9:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 8 10 11 12
+               9:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 8 10 11 12
               13:      7(int) Constant 3
-               6:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4
-              17:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 1 18
-              20:      7(int) Constant 1
-              21:      7(int) Constant 4
-              22:      7(int) Constant 2
-              19:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 20 21 17 22
-              16:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 15 6 17 12 12 19 15 13 12
-              24:             TypeFloat 32
-              26:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 25 10 13 12
-              27:             TypeVector 24(float) 4
-              28:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 26 21
-              29:             TypePointer Function 27(fvec4)
-              30:             TypeFunction 24(float) 29(ptr) 29(ptr)
-              31:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 26 28 28
-              36:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 35 31 17 12 12 19 35 13 12
-              40:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 41 28 17 12 12 36 21 20
-              43:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
-              44:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 45 28 17 12 12 36 21 22
-              47:             TypeBool
-              49:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 48 10 22 12
-              50:             TypeFunction 47(bool)
-              51:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 49
-              54:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 53 51 17 12 12 19 53 13 12
-              59:      7(int) Constant 54
-              61:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 62 28 17 59 12 36 21
-              64:   24(float) Constant 1056964608
-              70:      7(int) Constant 56
-              71:             TypePointer Function 24(float)
-              73:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 74 26 17 70 12 36 21
-              79:   24(float) Constant 1073741824
-              82:      7(int) Constant 59
-              84:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 85 28 17 82 12 36 21
-              87:             TypeMatrix 27(fvec4) 4
-              89:    47(bool) ConstantTrue
-              88:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 28 21 89
-              90:             TypeArray 27(fvec4) 11
-              91:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 28 11
-              92:             TypeVector 24(float) 2
-              93:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 26 22
-         94(UBO):             TypeStruct 87 87 27(fvec4) 90 24(float) 24(float) 92(fvec2) 24(float)
-              97:      7(int) Constant 30
-              98:      7(int) Constant 7
-              95:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 96 88 17 97 98 12 12 13
-              99:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 96 88 17 97 98 12 12 13
-             102:      7(int) Constant 31
-             100:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 101 28 17 102 98 12 12 13
-             103:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 104 91 17 10 98 12 12 13
-             107:      7(int) Constant 36
-             108:      7(int) Constant 8
-             105:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 106 26 17 107 108 12 12 13
-             109:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 106 26 17 107 108 12 12 13
-             112:      7(int) Constant 35
-             110:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 111 93 17 112 98 12 12 13
-             113:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 106 26 17 107 108 12 12 13
-             114:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 115 20 17 82 12 19 115 12 13 95 99 100 103 105 109 110 113
-             116:             TypePointer Uniform 94(UBO)
-        117(ubo):    116(ptr) Variable Uniform
-             118:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 119 114 17 82 12 19 119 117(ubo) 108
-             120:             TypeInt 32 1
-             122:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 121 10 21 12
-             123:    120(int) Constant 1
-             124:             TypePointer Uniform 87
-             130:      7(int) Constant 62
-             132:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 133 28 17 130 12 36 21
-             135:    120(int) Constant 0
-             140:             TypeVector 24(float) 3
-             141:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 26 13
-             142:   24(float) Constant 0
-             143:  140(fvec3) ConstantComposite 142 142 142
-             151:      7(int) Constant 63
-             153:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 154 28 17 151 12 36 21
-             167:      7(int) Constant 66
-             174:      7(int) Constant 67
-             181:      7(int) Constant 70
-             182:    120(int) Constant 6
-             183:             TypePointer Uniform 92(fvec2)
-             194:      7(int) Constant 71
-             205:      7(int) Constant 76
-             209:    120(int) Constant 7
-             210:             TypePointer Uniform 24(float)
-             214:    120(int) Constant 5
-             218:   24(float) Constant 1065353216
-             219:   24(float) Constant 1115684864
-             226:      7(int) Constant 85
-             228:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 229 28 17 226 12 54 21
-             231:             TypeArray 24(float) 20
-             232:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 26 20
-233(gl_PerVertex):             TypeStruct 27(fvec4) 24(float) 231 231
-             236:      7(int) Constant 1756
-             234:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 235 28 17 20 236 12 12 13
-             239:      7(int) Constant 1774
-             237:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 238 26 17 20 239 12 12 13
-             242:      7(int) Constant 1817
-             240:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 241 232 17 20 242 12 12 13
-             243:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 241 232 17 20 242 12 12 13
-             244:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 245 20 17 226 12 19 245 12 13 234 237 240 243
-             246:             TypeArray 233(gl_PerVertex) 10
-             247:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 244 10
-             248:             TypePointer Input 246
-      249(gl_in):    248(ptr) Variable Input
-             250:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 251 247 17 226 12 19 251 249(gl_in) 108
-             252:             TypePointer Input 120(int)
-253(gl_InvocationID):    252(ptr) Variable Input
-             254:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 255 122 17 226 12 19 255 253(gl_InvocationID) 108
-             257:             TypePointer Input 27(fvec4)
-             261:      7(int) Constant 86
-             262:             TypeImage 24(float) 2D sampled format:Unknown
-             266:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 0(DebugInfoNone)
-             263:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 264 12 17 261 12 19 265 266 13
-             267:             TypeSampledImage 262
-             268:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 269 12 17 261 12 19 270 266 13
-             271:             TypePointer UniformConstant 267
-272(samplerHeight):    271(ptr) Variable UniformConstant
-             273:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 274 268 17 261 12 19 274 272(samplerHeight) 108
-             276:             TypeArray 92(fvec2) 10
-             277:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 93 10
-             278:             TypePointer Input 276
-       279(inUV):    278(ptr) Variable Input
-             280:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 281 277 17 261 12 19 281 279(inUV) 108
-             282:             TypePointer Input 92(fvec2)
-             287:    120(int) Constant 4
-             296:      7(int) Constant 89
-             297:             TypePointer Function 120(int)
-             299:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 300 122 17 296 12 54 21
-             312:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 48 10 22 12
-             316:      7(int) Constant 90
-             318:    120(int) Constant 3
-             320:             TypePointer Uniform 27(fvec4)
-             324:   24(float) Constant 1090519040
-             326:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 48 10 22 12
-             330:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 48 10 22 12
-             331:    47(bool) ConstantFalse
-             334:      7(int) Constant 92
-             340:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 48 10 22 12
-             343:      7(int) Constant 95
-             349:      7(int) Constant 100
-             351:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 48 10 22 12
-             357:      7(int) Constant 102
-             359:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 48 10 22 12
-             360:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 48 10 22 12
-             366:      7(int) Constant 104
-             367:             TypeArray 24(float) 22
-             368:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 26 22
-             369:             TypePointer Output 367
-370(gl_TessLevelInner):    369(ptr) Variable Output
-             371:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 372 368 17 366 12 19 372 370(gl_TessLevelInner) 108
-             373:             TypePointer Output 24(float)
-             376:      7(int) Constant 105
-             379:      7(int) Constant 106
-             380:             TypeArray 24(float) 21
-             381:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 26 21
-             382:             TypePointer Output 380
-383(gl_TessLevelOuter):    382(ptr) Variable Output
-             384:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 385 381 17 379 12 19 385 383(gl_TessLevelOuter) 108
-             388:      7(int) Constant 107
-             391:      7(int) Constant 108
-             392:    120(int) Constant 2
-             395:      7(int) Constant 109
-             400:      7(int) Constant 113
-             403:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 48 10 22 12
-             409:      7(int) Constant 115
-             419:      7(int) Constant 116
-             429:      7(int) Constant 117
-             439:      7(int) Constant 118
-             449:      7(int) Constant 119
-             457:      7(int) Constant 120
-             467:      7(int) Constant 126
-             470:      7(int) Constant 127
-             473:      7(int) Constant 128
-             476:      7(int) Constant 129
-             479:      7(int) Constant 130
-             482:      7(int) Constant 131
-             486:      7(int) Constant 137
-487(gl_PerVertex):             TypeStruct 27(fvec4) 24(float) 231 231
-             489:      7(int) Constant 110
-             488:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 235 28 17 20 489 12 12 13
-             490:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 238 26 17 20 473 12 12 13
-             492:      7(int) Constant 171
-             491:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 241 232 17 20 492 12 12 13
-             493:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 241 232 17 20 492 12 12 13
-             494:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 245 20 17 486 12 19 245 12 13 488 490 491 493
-             495:             TypeArray 487(gl_PerVertex) 21
-             496:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 494 21
-             497:             TypePointer Output 495
-     498(gl_out):    497(ptr) Variable Output
-             499:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 500 496 17 486 12 19 500 498(gl_out) 108
-             505:             TypePointer Output 27(fvec4)
-             508:      7(int) Constant 138
-             509:             TypeArray 140(fvec3) 21
-             510:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 141 21
-             511:             TypePointer Output 509
-  512(outNormal):    511(ptr) Variable Output
-             513:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 514 510 17 508 12 19 514 512(outNormal) 108
-             516:             TypeArray 140(fvec3) 10
-             517:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 141 10
-             518:             TypePointer Input 516
-   519(inNormal):    518(ptr) Variable Input
-             520:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 521 517 17 508 12 19 521 519(inNormal) 108
-             523:             TypePointer Input 140(fvec3)
-             526:             TypePointer Output 140(fvec3)
-             529:      7(int) Constant 139
-             530:             TypeArray 92(fvec2) 21
-             531:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 93 21
-             532:             TypePointer Output 530
-      533(outUV):    532(ptr) Variable Output
-             534:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 535 531 17 529 12 19 535 533(outUV) 108
-             540:             TypePointer Output 92(fvec2)
-                              Line 1 98 11
+               6:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4
+              16:             TypeFloat 32
+              18:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 17 10 13 12
+              19:             TypeVector 16(float) 4
+              20:      7(int) Constant 4
+              21:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 18 20
+              22:             TypePointer Function 19(fvec4)
+              23:      7(int) Constant 7
+              24:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 21 23 12
+              25:             TypeFunction 16(float) 22(ptr) 22(ptr)
+              26:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 18 21 21
+              33:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 2 34
+              35:      7(int) Constant 51
+              37:      7(int) Constant 1
+              38:      7(int) Constant 2
+              36:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 37 20 33 38
+              32:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 31 26 33 35 12 36 31 13 35
+              39:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 40 21 33 35 12 32 20 37
+              42:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
+              45:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 46 21 33 35 12 32 20 38
+              48:             TypeBool
+              50:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 49 10 38 12
+              51:             TypeFunction 48(bool)
+              52:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 50
+              57:      7(int) Constant 81
+              56:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 55 52 33 57 12 36 55 13 57
+              60:      7(int) Constant 98
+              59:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 58 6 33 60 12 36 58 13 60
+              65:      7(int) Constant 54
+              63:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 64 21 33 65 12 32 20
+              68:   16(float) Constant 1056964608
+              73:             TypePointer Function 16(float)
+              74:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 18 23 12
+              78:      7(int) Constant 56
+              76:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 77 18 33 78 12 32 20
+              84:   16(float) Constant 1073741824
+              89:      7(int) Constant 59
+              87:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 88 21 33 89 12 32 20
+              92:             TypeMatrix 19(fvec4) 4
+              94:    48(bool) ConstantTrue
+              93:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 21 20 94
+              95:             TypeArray 19(fvec4) 11
+              96:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 21 11
+              97:             TypeVector 16(float) 2
+              98:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 18 38
+         99(UBO):             TypeStruct 92 92 19(fvec4) 95 16(float) 16(float) 97(fvec2) 16(float)
+             102:      7(int) Constant 30
+             100:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 101 93 33 102 23 12 12 13
+             103:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 101 93 33 102 23 12 12 13
+             106:      7(int) Constant 31
+             104:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 105 21 33 106 23 12 12 13
+             107:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 108 96 33 10 23 12 12 13
+             111:      7(int) Constant 36
+             112:      7(int) Constant 8
+             109:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 110 18 33 111 112 12 12 13
+             113:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 110 18 33 111 112 12 12 13
+             116:      7(int) Constant 35
+             114:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 115 98 33 116 23 12 12 13
+             117:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 110 18 33 111 112 12 12 13
+             118:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 119 37 33 89 12 36 119 12 13 100 103 104 107 109 113 114 117
+             120:             TypePointer Uniform 99(UBO)
+             121:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 118 38 12
+        122(ubo):    120(ptr) Variable Uniform
+             123:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 124 118 33 89 12 36 124 122(ubo) 112
+             125:             TypeInt 32 1
+             127:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 126 10 20 12
+             128:    125(int) Constant 1
+             129:             TypePointer Uniform 92
+             130:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 93 38 12
+             138:      7(int) Constant 62
+             136:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 137 21 33 138 12 32 20
+             141:    125(int) Constant 0
+             146:             TypeVector 16(float) 3
+             147:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 18 13
+             148:   16(float) Constant 0
+             149:  146(fvec3) ConstantComposite 148 148 148
+             159:      7(int) Constant 63
+             157:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 158 21 33 159 12 32 20
+             174:      7(int) Constant 66
+             181:      7(int) Constant 67
+             186:    125(int) Constant 6
+             187:             TypePointer Uniform 97(fvec2)
+             188:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 98 38 12
+             191:      7(int) Constant 70
+             202:      7(int) Constant 71
+             213:      7(int) Constant 76
+             216:    125(int) Constant 7
+             217:             TypePointer Uniform 16(float)
+             218:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 18 38 12
+             222:    125(int) Constant 5
+             226:   16(float) Constant 1065353216
+             227:   16(float) Constant 1115684864
+             233:      7(int) Constant 77
+             240:      7(int) Constant 85
+             238:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 239 21 33 240 12 56 20
+             243:             TypeArray 16(float) 37
+             244:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 18 37
+245(gl_PerVertex):             TypeStruct 19(fvec4) 16(float) 243 243
+             248:      7(int) Constant 1756
+             246:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 247 21 33 37 248 12 12 13
+             251:      7(int) Constant 1774
+             249:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 250 18 33 37 251 12 12 13
+             254:      7(int) Constant 1817
+             252:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 253 244 33 37 254 12 12 13
+             255:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 253 244 33 37 254 12 12 13
+             256:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 257 37 33 240 12 36 257 12 13 246 249 252 255
+             258:             TypeArray 245(gl_PerVertex) 10
+             259:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 256 10
+             260:             TypePointer Input 258
+             261:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 259 37 12
+      262(gl_in):    260(ptr) Variable Input
+             263:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 264 259 33 240 12 36 264 262(gl_in) 112
+             265:             TypePointer Input 125(int)
+             266:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 127 37 12
+267(gl_InvocationID):    265(ptr) Variable Input
+             268:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 269 127 33 240 12 36 269 267(gl_InvocationID) 112
+             271:             TypePointer Input 19(fvec4)
+             272:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 21 37 12
+             275:             TypeImage 16(float) 2D sampled format:Unknown
+             278:      7(int) Constant 86
+             280:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 0(DebugInfoNone)
+             276:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 277 12 33 278 12 36 279 280 13
+             281:             TypeSampledImage 275
+             282:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 283 12 33 278 12 36 284 280 13
+             285:             TypePointer UniformConstant 281
+             286:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 282 12 12
+287(samplerHeight):    285(ptr) Variable UniformConstant
+             288:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 289 282 33 278 12 36 289 287(samplerHeight) 112
+             292:             TypeArray 97(fvec2) 10
+             293:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 98 10
+             294:             TypePointer Input 292
+             295:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 293 37 12
+       296(inUV):    294(ptr) Variable Input
+             297:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 298 293 33 278 12 36 298 296(inUV) 112
+             299:             TypePointer Input 97(fvec2)
+             300:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 98 37 12
+             305:    125(int) Constant 4
+             313:             TypePointer Function 125(int)
+             314:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 127 23 12
+             318:      7(int) Constant 89
+             316:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 317 127 33 318 12 56 20
+             335:      7(int) Constant 90
+             336:    125(int) Constant 3
+             338:             TypePointer Uniform 19(fvec4)
+             339:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 21 38 12
+             343:   16(float) Constant 1090519040
+             349:      7(int) Constant 92
+             348:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 33 349 20 56
+             350:    48(bool) ConstantFalse
+             360:      7(int) Constant 95
+             365:      7(int) Constant 96
+             371:      7(int) Constant 100
+             376:      7(int) Constant 102
+             375:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 33 376 13 59
+             384:      7(int) Constant 104
+             385:      7(int) Constant 25
+             383:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 33 384 385 375
+             386:             TypeArray 16(float) 38
+             387:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 18 38
+             388:             TypePointer Output 386
+             389:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 387 13 12
+390(gl_TessLevelInner):    388(ptr) Variable Output
+             391:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 392 387 33 384 12 36 392 390(gl_TessLevelInner) 112
+             393:             TypePointer Output 16(float)
+             394:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 18 13 12
+             400:      7(int) Constant 105
+             401:             TypeArray 16(float) 20
+             402:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 18 20
+             403:             TypePointer Output 401
+             404:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 402 13 12
+405(gl_TessLevelOuter):    403(ptr) Variable Output
+             408:      7(int) Constant 106
+             406:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 407 402 33 408 12 36 407 405(gl_TessLevelOuter) 112
+             413:      7(int) Constant 107
+             414:    125(int) Constant 2
+             417:      7(int) Constant 108
+             420:      7(int) Constant 109
+             423:      7(int) Constant 113
+             422:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 33 423 20 375
+             432:      7(int) Constant 115
+             433:      7(int) Constant 26
+             431:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 33 432 433 422
+             447:      7(int) Constant 116
+             457:      7(int) Constant 117
+             467:      7(int) Constant 118
+             476:      7(int) Constant 119
+             484:      7(int) Constant 120
+             492:      7(int) Constant 126
+             491:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 33 492 433 422
+             498:      7(int) Constant 127
+             501:      7(int) Constant 128
+             504:      7(int) Constant 129
+             507:      7(int) Constant 130
+             510:      7(int) Constant 131
+511(gl_PerVertex):             TypeStruct 19(fvec4) 16(float) 243 243
+             513:      7(int) Constant 110
+             512:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 247 21 33 37 513 12 12 13
+             514:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 250 18 33 37 501 12 12 13
+             516:      7(int) Constant 171
+             515:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 253 244 33 37 516 12 12 13
+             517:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 253 244 33 37 516 12 12 13
+             519:      7(int) Constant 137
+             518:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 257 37 33 519 12 36 257 12 13 512 514 515 517
+             520:             TypeArray 511(gl_PerVertex) 20
+             521:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 518 20
+             522:             TypePointer Output 520
+             523:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 521 13 12
+     524(gl_out):    522(ptr) Variable Output
+             525:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 526 521 33 519 12 36 526 524(gl_out) 112
+             533:             TypePointer Output 19(fvec4)
+             534:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 21 13 12
+             536:             TypeArray 146(fvec3) 20
+             537:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 147 20
+             538:             TypePointer Output 536
+             539:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 537 13 12
+  540(outNormal):    538(ptr) Variable Output
+             543:      7(int) Constant 138
+             541:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 542 537 33 543 12 36 542 540(outNormal) 112
+             546:             TypeArray 146(fvec3) 10
+             547:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 147 10
+             548:             TypePointer Input 546
+             549:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 547 37 12
+   550(inNormal):    548(ptr) Variable Input
+             551:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 552 547 33 543 12 36 552 550(inNormal) 112
+             554:             TypePointer Input 146(fvec3)
+             555:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 147 37 12
+             558:             TypePointer Output 146(fvec3)
+             559:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 147 13 12
+             561:             TypeArray 97(fvec2) 20
+             562:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 98 20
+             563:             TypePointer Output 561
+             564:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 562 13 12
+      565(outUV):    563(ptr) Variable Output
+             568:      7(int) Constant 139
+             566:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 567 562 33 568 12 36 567 565(outUV) 112
+             574:             TypePointer Output 97(fvec2)
+             575:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 98 13 12
+             578:      7(int) Constant 140
         14(main):           4 Function None 5
-              23:             Label
-      410(param):     29(ptr) Variable Function
-      413(param):     29(ptr) Variable Function
-      420(param):     29(ptr) Variable Function
-      423(param):     29(ptr) Variable Function
-      430(param):     29(ptr) Variable Function
-      433(param):     29(ptr) Variable Function
-      440(param):     29(ptr) Variable Function
-      443(param):     29(ptr) Variable Function
-             346:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 16 14(main)
-             347:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             348:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 349 349 12 12
-             350:    120(int) Load 253(gl_InvocationID)
-             352:    47(bool) IEqual 350 135
-                              SelectionMerge 354 None
-                              BranchConditional 352 353 354
-             353:               Label
-             355:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             356:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 357 357 12 12
-             358:    47(bool)   FunctionCall 52(frustumCheck()
-             361:    47(bool)   LogicalNot 358
-                                SelectionMerge 363 None
-                                BranchConditional 361 362 397
-             362:                 Label
-             364:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             365:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 366 366 12 12
-             374:    373(ptr)     AccessChain 370(gl_TessLevelInner) 135
-                                  Store 374 142
-             375:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 376 376 12 12
-             377:    373(ptr)     AccessChain 370(gl_TessLevelInner) 123
-                                  Store 377 142
-             378:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 379 379 12 12
-             386:    373(ptr)     AccessChain 383(gl_TessLevelOuter) 135
-                                  Store 386 142
-             387:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 388 388 12 12
-             389:    373(ptr)     AccessChain 383(gl_TessLevelOuter) 123
-                                  Store 389 142
-             390:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 391 391 12 12
-             393:    373(ptr)     AccessChain 383(gl_TessLevelOuter) 392
-                                  Store 393 142
-             394:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 395 395 12 12
-             396:    373(ptr)     AccessChain 383(gl_TessLevelOuter) 318
-                                  Store 396 142
-                                  Branch 363
-             397:                 Label
-             398:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             399:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 400 400 12 12
-             401:    210(ptr)     AccessChain 117(ubo) 214
-             402:   24(float)     Load 401
-             404:    47(bool)     FOrdGreaterThan 402 142
-                                  SelectionMerge 406 None
-                                  BranchConditional 404 405 464
-             405:                   Label
-             407:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             408:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 409 409 12 12
-             411:    257(ptr)       AccessChain 249(gl_in) 318 135
-             412:   27(fvec4)       Load 411
-                                    Store 410(param) 412
-             414:    257(ptr)       AccessChain 249(gl_in) 135 135
-             415:   27(fvec4)       Load 414
-                                    Store 413(param) 415
-             416:   24(float)       FunctionCall 34(screenSpaceTessFactor(vf4;vf4;) 410(param) 413(param)
-             417:    373(ptr)       AccessChain 383(gl_TessLevelOuter) 135
-                                    Store 417 416
-             418:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 419 419 12 12
-             421:    257(ptr)       AccessChain 249(gl_in) 135 135
-             422:   27(fvec4)       Load 421
-                                    Store 420(param) 422
-             424:    257(ptr)       AccessChain 249(gl_in) 123 135
-             425:   27(fvec4)       Load 424
-                                    Store 423(param) 425
-             426:   24(float)       FunctionCall 34(screenSpaceTessFactor(vf4;vf4;) 420(param) 423(param)
-             427:    373(ptr)       AccessChain 383(gl_TessLevelOuter) 123
-                                    Store 427 426
-             428:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 429 429 12 12
-             431:    257(ptr)       AccessChain 249(gl_in) 123 135
-             432:   27(fvec4)       Load 431
-                                    Store 430(param) 432
-             434:    257(ptr)       AccessChain 249(gl_in) 392 135
-             435:   27(fvec4)       Load 434
-                                    Store 433(param) 435
-             436:   24(float)       FunctionCall 34(screenSpaceTessFactor(vf4;vf4;) 430(param) 433(param)
-             437:    373(ptr)       AccessChain 383(gl_TessLevelOuter) 392
-                                    Store 437 436
-             438:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 439 439 12 12
-             441:    257(ptr)       AccessChain 249(gl_in) 392 135
-             442:   27(fvec4)       Load 441
-                                    Store 440(param) 442
-             444:    257(ptr)       AccessChain 249(gl_in) 318 135
-             445:   27(fvec4)       Load 444
-                                    Store 443(param) 445
-             446:   24(float)       FunctionCall 34(screenSpaceTessFactor(vf4;vf4;) 440(param) 443(param)
-             447:    373(ptr)       AccessChain 383(gl_TessLevelOuter) 318
-                                    Store 447 446
-             448:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 449 449 12 12
-             450:    373(ptr)       AccessChain 383(gl_TessLevelOuter) 135
-             451:   24(float)       Load 450
-             452:    373(ptr)       AccessChain 383(gl_TessLevelOuter) 318
-             453:   24(float)       Load 452
-             454:   24(float)       ExtInst 3(GLSL.std.450) 46(FMix) 451 453 64
-             455:    373(ptr)       AccessChain 370(gl_TessLevelInner) 135
-                                    Store 455 454
-             456:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 457 457 12 12
-             458:    373(ptr)       AccessChain 383(gl_TessLevelOuter) 392
-             459:   24(float)       Load 458
-             460:    373(ptr)       AccessChain 383(gl_TessLevelOuter) 123
-             461:   24(float)       Load 460
-             462:   24(float)       ExtInst 3(GLSL.std.450) 46(FMix) 459 461 64
-             463:    373(ptr)       AccessChain 370(gl_TessLevelInner) 123
+              15:             Label
+      434(param):     22(ptr) Variable Function
+      439(param):     22(ptr) Variable Function
+      444(param):     22(ptr) Variable Function
+      449(param):     22(ptr) Variable Function
+      454(param):     22(ptr) Variable Function
+      459(param):     22(ptr) Variable Function
+      464(param):     22(ptr) Variable Function
+      469(param):     22(ptr) Variable Function
+             367:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 59
+             368:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 60 60 12 12
+             366:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 59 14(main)
+             370:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 371 371 12 12
+             369:    125(int) Load 267(gl_InvocationID)
+             372:    48(bool) IEqual 369 141
+                              SelectionMerge 374 None
+                              BranchConditional 372 373 374
+             373:               Label
+             378:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 375
+             379:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 376 376 12 12
+             377:    48(bool)   FunctionCall 53(frustumCheck()
+             380:    48(bool)   LogicalNot 377
+                                SelectionMerge 382 None
+                                BranchConditional 380 381 421
+             381:                 Label
+             396:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 383
+             397:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 384 384 12 12
+             395:    393(ptr)     AccessChain 390(gl_TessLevelInner) 141
+                                  Store 395 148
+             399:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 400 400 12 12
+             398:    393(ptr)     AccessChain 390(gl_TessLevelInner) 128
+                                  Store 398 148
+             410:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 408 408 12 12
+             409:    393(ptr)     AccessChain 405(gl_TessLevelOuter) 141
+                                  Store 409 148
+             412:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 413 413 12 12
+             411:    393(ptr)     AccessChain 405(gl_TessLevelOuter) 128
+                                  Store 411 148
+             416:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 417 417 12 12
+             415:    393(ptr)     AccessChain 405(gl_TessLevelOuter) 414
+                                  Store 415 148
+             419:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 420 420 12 12
+             418:    393(ptr)     AccessChain 405(gl_TessLevelOuter) 336
+                                  Store 418 148
+                                  Branch 382
+             421:                 Label
+             425:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 422
+             426:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 423 423 12 12
+             424:    217(ptr)     AccessChain 122(ubo) 222
+             427:   16(float)     Load 424
+             428:    48(bool)     FOrdGreaterThan 427 148
+                                  SelectionMerge 430 None
+                                  BranchConditional 428 429 490
+             429:                   Label
+             436:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 431
+             437:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 432 432 12 12
+             435:    271(ptr)       AccessChain 262(gl_in) 336 141
+             438:   19(fvec4)       Load 435
+                                    Store 434(param) 438
+             440:    271(ptr)       AccessChain 262(gl_in) 141 141
+             441:   19(fvec4)       Load 440
+                                    Store 439(param) 441
+             442:   16(float)       FunctionCall 29(screenSpaceTessFactor(vf4;vf4;) 434(param) 439(param)
+             443:    393(ptr)       AccessChain 405(gl_TessLevelOuter) 141
+                                    Store 443 442
+             446:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 447 447 12 12
+             445:    271(ptr)       AccessChain 262(gl_in) 141 141
+             448:   19(fvec4)       Load 445
+                                    Store 444(param) 448
+             450:    271(ptr)       AccessChain 262(gl_in) 128 141
+             451:   19(fvec4)       Load 450
+                                    Store 449(param) 451
+             452:   16(float)       FunctionCall 29(screenSpaceTessFactor(vf4;vf4;) 444(param) 449(param)
+             453:    393(ptr)       AccessChain 405(gl_TessLevelOuter) 128
+                                    Store 453 452
+             456:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 457 457 12 12
+             455:    271(ptr)       AccessChain 262(gl_in) 128 141
+             458:   19(fvec4)       Load 455
+                                    Store 454(param) 458
+             460:    271(ptr)       AccessChain 262(gl_in) 414 141
+             461:   19(fvec4)       Load 460
+                                    Store 459(param) 461
+             462:   16(float)       FunctionCall 29(screenSpaceTessFactor(vf4;vf4;) 454(param) 459(param)
+             463:    393(ptr)       AccessChain 405(gl_TessLevelOuter) 414
                                     Store 463 462
-                                    Branch 406
-             464:                   Label
-             465:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             466:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 467 467 12 12
-             468:    373(ptr)       AccessChain 370(gl_TessLevelInner) 135
-                                    Store 468 218
-             469:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 470 470 12 12
-             471:    373(ptr)       AccessChain 370(gl_TessLevelInner) 123
-                                    Store 471 218
-             472:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 473 473 12 12
-             474:    373(ptr)       AccessChain 383(gl_TessLevelOuter) 135
-                                    Store 474 218
-             475:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 476 476 12 12
-             477:    373(ptr)       AccessChain 383(gl_TessLevelOuter) 123
-                                    Store 477 218
-             478:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 479 479 12 12
-             480:    373(ptr)       AccessChain 383(gl_TessLevelOuter) 392
-                                    Store 480 218
-             481:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 482 482 12 12
-             483:    373(ptr)       AccessChain 383(gl_TessLevelOuter) 318
-                                    Store 483 218
-                                    Branch 406
-             406:                 Label
-                                  Branch 363
-             363:               Label
-                                Branch 354
-             354:             Label
-             484:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-             485:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 486 486 12 12
-             501:    120(int) Load 253(gl_InvocationID)
-             502:    120(int) Load 253(gl_InvocationID)
-             503:    257(ptr) AccessChain 249(gl_in) 502 135
-             504:   27(fvec4) Load 503
-             506:    505(ptr) AccessChain 498(gl_out) 501 135
-                              Store 506 504
-             507:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 508 508 12 12
-             515:    120(int) Load 253(gl_InvocationID)
-             522:    120(int) Load 253(gl_InvocationID)
-             524:    523(ptr) AccessChain 519(inNormal) 522
-             525:  140(fvec3) Load 524
-             527:    526(ptr) AccessChain 512(outNormal) 515
-                              Store 527 525
-             528:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 529 529 12 12
-             536:    120(int) Load 253(gl_InvocationID)
-             537:    120(int) Load 253(gl_InvocationID)
-             538:    282(ptr) AccessChain 279(inUV) 537
-             539:   92(fvec2) Load 538
-             541:    540(ptr) AccessChain 533(outUV) 536
-                              Store 541 539
+             466:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 467 467 12 12
+             465:    271(ptr)       AccessChain 262(gl_in) 414 141
+             468:   19(fvec4)       Load 465
+                                    Store 464(param) 468
+             470:    271(ptr)       AccessChain 262(gl_in) 336 141
+             471:   19(fvec4)       Load 470
+                                    Store 469(param) 471
+             472:   16(float)       FunctionCall 29(screenSpaceTessFactor(vf4;vf4;) 464(param) 469(param)
+             473:    393(ptr)       AccessChain 405(gl_TessLevelOuter) 336
+                                    Store 473 472
+             475:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 476 476 12 12
+             474:    393(ptr)       AccessChain 405(gl_TessLevelOuter) 141
+             477:   16(float)       Load 474
+             478:    393(ptr)       AccessChain 405(gl_TessLevelOuter) 336
+             479:   16(float)       Load 478
+             480:   16(float)       ExtInst 3(GLSL.std.450) 46(FMix) 477 479 68
+             481:    393(ptr)       AccessChain 390(gl_TessLevelInner) 141
+                                    Store 481 480
+             483:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 484 484 12 12
+             482:    393(ptr)       AccessChain 405(gl_TessLevelOuter) 414
+             485:   16(float)       Load 482
+             486:    393(ptr)       AccessChain 405(gl_TessLevelOuter) 128
+             487:   16(float)       Load 486
+             488:   16(float)       ExtInst 3(GLSL.std.450) 46(FMix) 485 487 68
+             489:    393(ptr)       AccessChain 390(gl_TessLevelInner) 128
+                                    Store 489 488
+                                    Branch 430
+             490:                   Label
+             494:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 491
+             495:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 492 492 12 12
+             493:    393(ptr)       AccessChain 390(gl_TessLevelInner) 141
+                                    Store 493 226
+             497:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 498 498 12 12
+             496:    393(ptr)       AccessChain 390(gl_TessLevelInner) 128
+                                    Store 496 226
+             500:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 501 501 12 12
+             499:    393(ptr)       AccessChain 405(gl_TessLevelOuter) 141
+                                    Store 499 226
+             503:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 504 504 12 12
+             502:    393(ptr)       AccessChain 405(gl_TessLevelOuter) 128
+                                    Store 502 226
+             506:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 507 507 12 12
+             505:    393(ptr)       AccessChain 405(gl_TessLevelOuter) 414
+                                    Store 505 226
+             509:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 510 510 12 12
+             508:    393(ptr)       AccessChain 405(gl_TessLevelOuter) 336
+                                    Store 508 226
+                                    Branch 430
+             430:                 Label
+                                  Branch 382
+             382:               Label
+                                Branch 374
+             374:             Label
+             528:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 59
+             529:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 519 519 12 12
+             527:    125(int) Load 267(gl_InvocationID)
+             530:    125(int) Load 267(gl_InvocationID)
+             531:    271(ptr) AccessChain 262(gl_in) 530 141
+             532:   19(fvec4) Load 531
+             535:    533(ptr) AccessChain 524(gl_out) 527 141
+                              Store 535 532
+             545:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 543 543 12 12
+             544:    125(int) Load 267(gl_InvocationID)
+             553:    125(int) Load 267(gl_InvocationID)
+             556:    554(ptr) AccessChain 550(inNormal) 553
+             557:  146(fvec3) Load 556
+             560:    558(ptr) AccessChain 540(outNormal) 544
+                              Store 560 557
+             570:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 568 568 12 12
+             569:    125(int) Load 267(gl_InvocationID)
+             571:    125(int) Load 267(gl_InvocationID)
+             572:    299(ptr) AccessChain 296(inUV) 571
+             573:   97(fvec2) Load 572
+             576:    574(ptr) AccessChain 565(outUV) 569
+                              Store 576 573
+             577:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 578 578 12 12
                               Return
                               FunctionEnd
-                              Line 1 51 45
-34(screenSpaceTessFactor(vf4;vf4;):   24(float) Function None 30
-          32(p0):     29(ptr) FunctionParameter
-          33(p1):     29(ptr) FunctionParameter
-              37:             Label
-    60(midPoint):     29(ptr) Variable Function
-      72(radius):     71(ptr) Variable Function
-          83(v0):     29(ptr) Variable Function
-      131(clip0):     29(ptr) Variable Function
-      152(clip1):     29(ptr) Variable Function
-              38:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 36
-              39:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 12 12 12 12
-              42:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 40 32(p0) 43
-              46:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 44 33(p1) 43
-              56:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 36 34(screenSpaceTessFactor(vf4;vf4;)
-              57:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 36
-              58:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 59 59 12 12
-              63:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 61 60(midPoint) 43
-              65:   27(fvec4) Load 32(p0)
-              66:   27(fvec4) Load 33(p1)
-              67:   27(fvec4) FAdd 65 66
-              68:   27(fvec4) VectorTimesScalar 67 64
-                              Store 60(midPoint) 68
-              69:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 70 70 12 12
-              75:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 73 72(radius) 43
-              76:   27(fvec4) Load 32(p0)
-              77:   27(fvec4) Load 33(p1)
-              78:   24(float) ExtInst 3(GLSL.std.450) 67(Distance) 76 77
-              80:   24(float) FDiv 78 79
-                              Store 72(radius) 80
-              81:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 82 82 12 12
-              86:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 84 83(v0) 43
-             125:    124(ptr) AccessChain 117(ubo) 123
-             126:          87 Load 125
-             127:   27(fvec4) Load 60(midPoint)
-             128:   27(fvec4) MatrixTimesVector 126 127
-                              Store 83(v0) 128
-             129:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 130 130 12 12
-             134:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 132 131(clip0) 43
-             136:    124(ptr) AccessChain 117(ubo) 135
-             137:          87 Load 136
-             138:   27(fvec4) Load 83(v0)
-             139:   24(float) Load 72(radius)
-             144:   24(float) CompositeExtract 143 0
-             145:   24(float) CompositeExtract 143 1
-             146:   24(float) CompositeExtract 143 2
-             147:   27(fvec4) CompositeConstruct 139 144 145 146
-             148:   27(fvec4) FSub 138 147
-             149:   27(fvec4) MatrixTimesVector 137 148
-                              Store 131(clip0) 149
-             150:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 151 151 12 12
-             155:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 153 152(clip1) 43
-             156:    124(ptr) AccessChain 117(ubo) 135
-             157:          87 Load 156
-             158:   27(fvec4) Load 83(v0)
-             159:   24(float) Load 72(radius)
-             160:   24(float) CompositeExtract 143 0
-             161:   24(float) CompositeExtract 143 1
-             162:   24(float) CompositeExtract 143 2
-             163:   27(fvec4) CompositeConstruct 159 160 161 162
-             164:   27(fvec4) FAdd 158 163
-             165:   27(fvec4) MatrixTimesVector 157 164
-                              Store 152(clip1) 165
-             166:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 167 167 12 12
-             168:     71(ptr) AccessChain 131(clip0) 13
-             169:   24(float) Load 168
-             170:   27(fvec4) Load 131(clip0)
-             171:   27(fvec4) CompositeConstruct 169 169 169 169
-             172:   27(fvec4) FDiv 170 171
-                              Store 131(clip0) 172
-             173:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 174 174 12 12
-             175:     71(ptr) AccessChain 152(clip1) 13
-             176:   24(float) Load 175
-             177:   27(fvec4) Load 152(clip1)
-             178:   27(fvec4) CompositeConstruct 176 176 176 176
-             179:   27(fvec4) FDiv 177 178
-                              Store 152(clip1) 179
-             180:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 181 181 12 12
-             184:    183(ptr) AccessChain 117(ubo) 182
-             185:   92(fvec2) Load 184
-             186:   27(fvec4) Load 131(clip0)
-             187:   92(fvec2) VectorShuffle 186 186 0 1
-             188:   92(fvec2) FMul 187 185
-             189:     71(ptr) AccessChain 131(clip0) 12
-             190:   24(float) CompositeExtract 188 0
-                              Store 189 190
-             191:     71(ptr) AccessChain 131(clip0) 20
-             192:   24(float) CompositeExtract 188 1
-                              Store 191 192
-             193:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 194 194 12 12
-             195:    183(ptr) AccessChain 117(ubo) 182
-             196:   92(fvec2) Load 195
-             197:   27(fvec4) Load 152(clip1)
-             198:   92(fvec2) VectorShuffle 197 197 0 1
-             199:   92(fvec2) FMul 198 196
-             200:     71(ptr) AccessChain 152(clip1) 12
-             201:   24(float) CompositeExtract 199 0
-                              Store 200 201
-             202:     71(ptr) AccessChain 152(clip1) 20
-             203:   24(float) CompositeExtract 199 1
-                              Store 202 203
-             204:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 205 205 12 12
-             206:   27(fvec4) Load 131(clip0)
-             207:   27(fvec4) Load 152(clip1)
-             208:   24(float) ExtInst 3(GLSL.std.450) 67(Distance) 206 207
-             211:    210(ptr) AccessChain 117(ubo) 209
-             212:   24(float) Load 211
-             213:   24(float) FDiv 208 212
-             215:    210(ptr) AccessChain 117(ubo) 214
-             216:   24(float) Load 215
-             217:   24(float) FMul 213 216
-             220:   24(float) ExtInst 3(GLSL.std.450) 43(FClamp) 217 218 219
-                              ReturnValue 220
+29(screenSpaceTessFactor(vf4;vf4;):   16(float) Function None 25
+          27(p0):     22(ptr) FunctionParameter
+          28(p1):     22(ptr) FunctionParameter
+              30:             Label
+    62(midPoint):     22(ptr) Variable Function
+      75(radius):     73(ptr) Variable Function
+          86(v0):     22(ptr) Variable Function
+      135(clip0):     22(ptr) Variable Function
+      156(clip1):     22(ptr) Variable Function
+              43:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 32
+              44:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 35 35 12 12
+              41:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 39 27(p0) 42
+              47:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 45 28(p1) 42
+              61:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 32 29(screenSpaceTessFactor(vf4;vf4;)
+              67:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 65 65 12 12
+              66:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 63 62(midPoint) 42
+              69:   19(fvec4) Load 27(p0)
+              70:   19(fvec4) Load 28(p1)
+              71:   19(fvec4) FAdd 69 70
+              72:   19(fvec4) VectorTimesScalar 71 68
+                              Store 62(midPoint) 72
+              80:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 78 78 12 12
+              79:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 76 75(radius) 42
+              81:   19(fvec4) Load 27(p0)
+              82:   19(fvec4) Load 28(p1)
+              83:   16(float) ExtInst 3(GLSL.std.450) 67(Distance) 81 82
+              85:   16(float) FDiv 83 84
+                              Store 75(radius) 85
+              91:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 89 89 12 12
+              90:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 87 86(v0) 42
+             131:    129(ptr) AccessChain 122(ubo) 128
+             132:          92 Load 131
+             133:   19(fvec4) Load 62(midPoint)
+             134:   19(fvec4) MatrixTimesVector 132 133
+                              Store 86(v0) 134
+             140:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 138 138 12 12
+             139:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 136 135(clip0) 42
+             142:    129(ptr) AccessChain 122(ubo) 141
+             143:          92 Load 142
+             144:   19(fvec4) Load 86(v0)
+             145:   16(float) Load 75(radius)
+             150:   16(float) CompositeExtract 149 0
+             151:   16(float) CompositeExtract 149 1
+             152:   16(float) CompositeExtract 149 2
+             153:   19(fvec4) CompositeConstruct 145 150 151 152
+             154:   19(fvec4) FSub 144 153
+             155:   19(fvec4) MatrixTimesVector 143 154
+                              Store 135(clip0) 155
+             161:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 159 159 12 12
+             160:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 157 156(clip1) 42
+             162:    129(ptr) AccessChain 122(ubo) 141
+             163:          92 Load 162
+             164:   19(fvec4) Load 86(v0)
+             165:   16(float) Load 75(radius)
+             166:   16(float) CompositeExtract 149 0
+             167:   16(float) CompositeExtract 149 1
+             168:   16(float) CompositeExtract 149 2
+             169:   19(fvec4) CompositeConstruct 165 166 167 168
+             170:   19(fvec4) FAdd 164 169
+             171:   19(fvec4) MatrixTimesVector 163 170
+                              Store 156(clip1) 171
+             173:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 174 174 12 12
+             172:     73(ptr) AccessChain 135(clip0) 13
+             175:   16(float) Load 172
+             176:   19(fvec4) Load 135(clip0)
+             177:   19(fvec4) CompositeConstruct 175 175 175 175
+             178:   19(fvec4) FDiv 176 177
+                              Store 135(clip0) 178
+             180:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 181 181 12 12
+             179:     73(ptr) AccessChain 156(clip1) 13
+             182:   16(float) Load 179
+             183:   19(fvec4) Load 156(clip1)
+             184:   19(fvec4) CompositeConstruct 182 182 182 182
+             185:   19(fvec4) FDiv 183 184
+                              Store 156(clip1) 185
+             190:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 191 191 12 12
+             189:    187(ptr) AccessChain 122(ubo) 186
+             192:   97(fvec2) Load 189
+             193:   19(fvec4) Load 135(clip0)
+             194:   97(fvec2) VectorShuffle 193 193 0 1
+             195:   97(fvec2) FMul 194 192
+             196:     73(ptr) AccessChain 135(clip0) 12
+             197:   16(float) CompositeExtract 195 0
+                              Store 196 197
+             198:     73(ptr) AccessChain 135(clip0) 37
+             199:   16(float) CompositeExtract 195 1
+                              Store 198 199
+             201:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 202 202 12 12
+             200:    187(ptr) AccessChain 122(ubo) 186
+             203:   97(fvec2) Load 200
+             204:   19(fvec4) Load 156(clip1)
+             205:   97(fvec2) VectorShuffle 204 204 0 1
+             206:   97(fvec2) FMul 205 203
+             207:     73(ptr) AccessChain 156(clip1) 12
+             208:   16(float) CompositeExtract 206 0
+                              Store 207 208
+             209:     73(ptr) AccessChain 156(clip1) 37
+             210:   16(float) CompositeExtract 206 1
+                              Store 209 210
+             212:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 213 213 12 12
+             211:   19(fvec4) Load 135(clip0)
+             214:   19(fvec4) Load 156(clip1)
+             215:   16(float) ExtInst 3(GLSL.std.450) 67(Distance) 211 214
+             219:    217(ptr) AccessChain 122(ubo) 216
+             220:   16(float) Load 219
+             221:   16(float) FDiv 215 220
+             223:    217(ptr) AccessChain 122(ubo) 222
+             224:   16(float) Load 223
+             225:   16(float) FMul 221 224
+             228:   16(float) ExtInst 3(GLSL.std.450) 43(FClamp) 225 226 227
+                              ReturnValue 228
                               FunctionEnd
-                              Line 1 81 19
-52(frustumCheck():    47(bool) Function None 50
-              55:             Label
-        227(pos):     29(ptr) Variable Function
-          298(i):    297(ptr) Variable Function
-             223:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 54 52(frustumCheck()
-             224:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 54
-             225:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 226 226 12 12
-             230:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 228 227(pos) 43
-             256:    120(int) Load 253(gl_InvocationID)
-             258:    257(ptr) AccessChain 249(gl_in) 256 135
-             259:   27(fvec4) Load 258
-                              Store 227(pos) 259
-             260:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 261 261 12 12
-             275:         267 Load 272(samplerHeight)
-             283:    282(ptr) AccessChain 279(inUV) 135
-             284:   92(fvec2) Load 283
-             285:   27(fvec4) ImageSampleExplicitLod 275 284 Lod 142
-             286:   24(float) CompositeExtract 285 0
-             288:    210(ptr) AccessChain 117(ubo) 287
-             289:   24(float) Load 288
-             290:   24(float) FMul 286 289
-             291:     71(ptr) AccessChain 227(pos) 20
-             292:   24(float) Load 291
-             293:   24(float) FSub 292 290
-             294:     71(ptr) AccessChain 227(pos) 20
-                              Store 294 293
-             295:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 296 296 12 12
-             301:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 299 298(i) 43
-                              Store 298(i) 135
-                              Branch 302
-             302:             Label
-             306:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 54
-             307:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 296 296 12 12
-                              LoopMerge 304 305 None
-                              Branch 308
-             308:             Label
-             309:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 54
-             310:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 296 296 12 12
-             311:    120(int) Load 298(i)
-             313:    47(bool) SLessThan 311 182
-                              BranchConditional 313 303 304
-             303:               Label
-             314:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 54
-             315:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 316 316 12 12
-             317:   27(fvec4)   Load 227(pos)
-             319:    120(int)   Load 298(i)
-             321:    320(ptr)   AccessChain 117(ubo) 318 319
-             322:   27(fvec4)   Load 321
-             323:   24(float)   Dot 317 322
-             325:   24(float)   FAdd 323 324
-             327:    47(bool)   FOrdLessThan 325 142
-                                SelectionMerge 329 None
-                                BranchConditional 327 328 329
-             328:                 Label
-             332:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 54
-             333:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 334 334 12 12
-                                  ReturnValue 331
-             329:               Label
-                                Branch 305
-             305:               Label
-             336:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 54
-             337:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 296 296 12 12
-             338:    120(int)   Load 298(i)
-             339:    120(int)   IAdd 338 123
-                                Store 298(i) 339
-                                Branch 302
-             304:             Label
-             341:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 54
-             342:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 343 343 12 12
-                              ReturnValue 89
+53(frustumCheck():    48(bool) Function None 51
+              54:             Label
+        237(pos):     22(ptr) Variable Function
+          315(i):    313(ptr) Variable Function
+             235:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 56
+             236:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 57 57 12 12
+             234:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 56 53(frustumCheck()
+             242:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 240 240 12 12
+             241:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 238 237(pos) 42
+             270:    125(int) Load 267(gl_InvocationID)
+             273:    271(ptr) AccessChain 262(gl_in) 270 141
+             274:   19(fvec4) Load 273
+                              Store 237(pos) 274
+             291:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 278 278 12 12
+             290:         281 Load 287(samplerHeight)
+             301:    299(ptr) AccessChain 296(inUV) 141
+             302:   97(fvec2) Load 301
+             303:   19(fvec4) ImageSampleExplicitLod 290 302 Lod 148
+             304:   16(float) CompositeExtract 303 0
+             306:    217(ptr) AccessChain 122(ubo) 305
+             307:   16(float) Load 306
+             308:   16(float) FMul 304 307
+             309:     73(ptr) AccessChain 237(pos) 37
+             310:   16(float) Load 309
+             311:   16(float) FSub 310 308
+             312:     73(ptr) AccessChain 237(pos) 37
+                              Store 312 311
+             320:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 318 318 12 12
+             319:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 316 315(i) 42
+                              Store 315(i) 141
+                              Branch 321
+             321:             Label
+             325:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 56
+             326:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 318 318 12 12
+                              LoopMerge 323 324 None
+                              Branch 327
+             327:             Label
+             329:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 56
+             330:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 318 318 12 12
+             328:    125(int) Load 315(i)
+             331:    48(bool) SLessThan 328 186
+                              BranchConditional 331 322 323
+             322:               Label
+             333:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 56
+             334:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 335 335 12 12
+             332:   19(fvec4)   Load 237(pos)
+             337:    125(int)   Load 315(i)
+             340:    338(ptr)   AccessChain 122(ubo) 336 337
+             341:   19(fvec4)   Load 340
+             342:   16(float)   Dot 332 341
+             344:   16(float)   FAdd 342 343
+             345:    48(bool)   FOrdLessThan 344 148
+                                SelectionMerge 347 None
+                                BranchConditional 345 346 347
+             346:                 Label
+             351:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 348
+             352:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 349 349 12 12
+                                  ReturnValue 350
+             347:               Label
+                                Branch 324
+             324:               Label
+             355:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 56
+             356:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 318 318 12 12
+             354:    125(int)   Load 315(i)
+             357:    125(int)   IAdd 354 128
+                                Store 315(i) 357
+                                Branch 321
+             323:             Label
+             358:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 56
+             359:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 360 360 12 12
+                              ReturnValue 94
                               FunctionEnd
diff --git a/Test/baseResults/spv.debuginfo.glsl.tese.out b/Test/baseResults/spv.debuginfo.glsl.tese.out
index fdb1ee9..bce85b4 100644
--- a/Test/baseResults/spv.debuginfo.glsl.tese.out
+++ b/Test/baseResults/spv.debuginfo.glsl.tese.out
@@ -1,445 +1,549 @@
 spv.debuginfo.glsl.tese
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 332
+// Id's are bound by 359
 
                               Capability Tessellation
                               Extension  "SPV_KHR_non_semantic_info"
-               2:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
                3:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint TessellationEvaluation 14  "main" 42 59 86 105 133 169 280 294 302 314 321
+                              EntryPoint TessellationEvaluation 14  "main" 47 66 93 116 143 183 300 316 324 337 344
                               ExecutionMode 14 Quads
                               ExecutionMode 14 SpacingEqual
                               ExecutionMode 14 VertexOrderCw
-               1:             String  ""
+               2:             String  "spv.debuginfo.glsl.tese"
                8:             String  "uint"
-              15:             String  "main"
-              18:             String  "// OpModuleProcessed auto-map-locations
+              16:             String  "main"
+              19:             String  "// OpModuleProcessed auto-map-locations
 // OpModuleProcessed auto-map-bindings
 // OpModuleProcessed client vulkan100
 // OpModuleProcessed target-env vulkan1.0
 // OpModuleProcessed keep-uncalled
 // OpModuleProcessed entry-point main
 #line 1
+/*
+The MIT License (MIT)
+
+Copyright (c) 2022 Sascha Willems
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+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 Software.
+
+THE SOFTWARE IS 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 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+*/
+
+#version 450
+
+layout (set = 0, binding = 0) uniform UBO
+{
+	mat4 projection;
+	mat4 modelview;
+	vec4 lightPos;
+	vec4 frustumPlanes[6];
+	float displacementFactor;
+	float tessellationFactor;
+	vec2 viewportDim;
+	float tessellatedEdgeSize;
+} ubo;
+
+layout (set = 0, binding = 1) uniform sampler2D displacementMap;
+
+layout(quads, equal_spacing, cw) in;
+
+layout (location = 0) in vec3 inNormal[];
+layout (location = 1) in vec2 inUV[];
+
+layout (location = 0) out vec3 outNormal;
+layout (location = 1) out vec2 outUV;
+layout (location = 2) out vec3 outViewVec;
+layout (location = 3) out vec3 outLightVec;
+layout (location = 4) out vec3 outEyePos;
+layout (location = 5) out vec3 outWorldPos;
+
+void main()
+{
+	// Interpolate UV coordinates
+	vec2 uv1 = mix(inUV[0], inUV[1], gl_TessCoord.x);
+	vec2 uv2 = mix(inUV[3], inUV[2], gl_TessCoord.x);
+	outUV = mix(uv1, uv2, gl_TessCoord.y);
+
+	vec3 n1 = mix(inNormal[0], inNormal[1], gl_TessCoord.x);
+	vec3 n2 = mix(inNormal[3], inNormal[2], gl_TessCoord.x);
+	outNormal = mix(n1, n2, gl_TessCoord.y);
+
+	// Interpolate positions
+	vec4 pos1 = mix(gl_in[0].gl_Position, gl_in[1].gl_Position, gl_TessCoord.x);
+	vec4 pos2 = mix(gl_in[3].gl_Position, gl_in[2].gl_Position, gl_TessCoord.x);
+	vec4 pos = mix(pos1, pos2, gl_TessCoord.y);
+	// Displace
+	pos.y -= textureLod(displacementMap, outUV, 0.0).r * ubo.displacementFactor;
+	// Perspective projection
+	gl_Position = ubo.projection * ubo.modelview * pos;
+
+	// Calculate vectors for lighting based on tessellated position
+	outViewVec = -pos.xyz;
+	outLightVec = normalize(ubo.lightPos.xyz + outViewVec);
+	outWorldPos = pos.xyz;
+	outEyePos = vec3(ubo.modelview * pos);
+}
 "
               29:             String  "float"
-              36:             String  "uv1"
-              44:             String  "inUV"
-              47:             String  "int"
-              61:             String  "gl_TessCoord"
-              71:             String  "uv2"
-              88:             String  "outUV"
-             100:             String  "n1"
-             107:             String  "inNormal"
-             120:             String  "n2"
-             135:             String  "outNormal"
-             149:             String  "pos1"
-             155:             String  "gl_Position"
-             158:             String  "gl_PointSize"
-             161:             String  "gl_CullDistance"
-             165:             String  "gl_PerVertex"
-             171:             String  "gl_in"
-             185:             String  "pos2"
-             199:             String  "pos"
-             211:             String  "type.2d.image"
-             212:             String  "@type.2d.image"
-             216:             String  "type.sampled.image"
-             217:             String  "@type.sampled.image"
-             221:             String  "displacementMap"
-             235:             String  "modelview"
-             240:             String  "lightPos"
-             243:             String  "frustumPlanes"
-             245:             String  "tessellatedEdgeSize"
-             249:             String  "viewportDim"
-             253:             String  "UBO"
-             257:             String  "ubo"
-             296:             String  "outViewVec"
-             304:             String  "outLightVec"
-             316:             String  "outWorldPos"
-             323:             String  "outEyePos"
+              38:             String  "uv1"
+              49:             String  "inUV"
+              52:             String  "int"
+              68:             String  "gl_TessCoord"
+              77:             String  "uv2"
+              95:             String  "outUV"
+             108:             String  "n1"
+             118:             String  "inNormal"
+             129:             String  "n2"
+             145:             String  "outNormal"
+             160:             String  "pos1"
+             168:             String  "gl_Position"
+             171:             String  "gl_PointSize"
+             174:             String  "gl_CullDistance"
+             178:             String  "gl_PerVertex"
+             185:             String  "gl_in"
+             198:             String  "pos2"
+             212:             String  "pos"
+             224:             String  "type.2d.image"
+             226:             String  "@type.2d.image"
+             230:             String  "type.sampled.image"
+             231:             String  "@type.sampled.image"
+             236:             String  "displacementMap"
+             246:             String  "bool"
+             253:             String  "modelview"
+             257:             String  "lightPos"
+             260:             String  "frustumPlanes"
+             262:             String  "tessellatedEdgeSize"
+             266:             String  "viewportDim"
+             270:             String  "UBO"
+             275:             String  "ubo"
+             302:             String  ""
+             318:             String  "outViewVec"
+             326:             String  "outLightVec"
+             339:             String  "outWorldPos"
+             346:             String  "outEyePos"
                               Name 14  "main"
-                              Name 34  "uv1"
-                              Name 42  "inUV"
-                              Name 59  "gl_TessCoord"
-                              Name 69  "uv2"
-                              Name 86  "outUV"
-                              Name 98  "n1"
-                              Name 105  "inNormal"
-                              Name 118  "n2"
-                              Name 133  "outNormal"
-                              Name 147  "pos1"
-                              Name 153  "gl_PerVertex"
-                              MemberName 153(gl_PerVertex) 0  "gl_Position"
-                              MemberName 153(gl_PerVertex) 1  "gl_PointSize"
-                              MemberName 153(gl_PerVertex) 2  "gl_ClipDistance"
-                              MemberName 153(gl_PerVertex) 3  "gl_CullDistance"
-                              Name 169  "gl_in"
-                              Name 183  "pos2"
-                              Name 197  "pos"
-                              Name 219  "displacementMap"
-                              Name 233  "UBO"
-                              MemberName 233(UBO) 0  "projection"
-                              MemberName 233(UBO) 1  "modelview"
-                              MemberName 233(UBO) 2  "lightPos"
-                              MemberName 233(UBO) 3  "frustumPlanes"
-                              MemberName 233(UBO) 4  "displacementFactor"
-                              MemberName 233(UBO) 5  "tessellationFactor"
-                              MemberName 233(UBO) 6  "viewportDim"
-                              MemberName 233(UBO) 7  "tessellatedEdgeSize"
-                              Name 255  "ubo"
-                              Name 270  "gl_PerVertex"
-                              MemberName 270(gl_PerVertex) 0  "gl_Position"
-                              MemberName 270(gl_PerVertex) 1  "gl_PointSize"
-                              MemberName 270(gl_PerVertex) 2  "gl_ClipDistance"
-                              MemberName 270(gl_PerVertex) 3  "gl_CullDistance"
-                              Name 280  ""
-                              Name 294  "outViewVec"
-                              Name 302  "outLightVec"
-                              Name 314  "outWorldPos"
-                              Name 321  "outEyePos"
-                              Decorate 42(inUV) Location 1
-                              Decorate 59(gl_TessCoord) BuiltIn TessCoord
-                              Decorate 86(outUV) Location 1
-                              Decorate 105(inNormal) Location 0
-                              Decorate 133(outNormal) Location 0
-                              MemberDecorate 153(gl_PerVertex) 0 BuiltIn Position
-                              MemberDecorate 153(gl_PerVertex) 1 BuiltIn PointSize
-                              MemberDecorate 153(gl_PerVertex) 2 BuiltIn ClipDistance
-                              MemberDecorate 153(gl_PerVertex) 3 BuiltIn CullDistance
-                              Decorate 153(gl_PerVertex) Block
-                              Decorate 219(displacementMap) DescriptorSet 0
-                              Decorate 219(displacementMap) Binding 1
-                              Decorate 231 ArrayStride 16
-                              MemberDecorate 233(UBO) 0 ColMajor
-                              MemberDecorate 233(UBO) 0 Offset 0
-                              MemberDecorate 233(UBO) 0 MatrixStride 16
-                              MemberDecorate 233(UBO) 1 ColMajor
-                              MemberDecorate 233(UBO) 1 Offset 64
-                              MemberDecorate 233(UBO) 1 MatrixStride 16
-                              MemberDecorate 233(UBO) 2 Offset 128
-                              MemberDecorate 233(UBO) 3 Offset 144
-                              MemberDecorate 233(UBO) 4 Offset 240
-                              MemberDecorate 233(UBO) 5 Offset 244
-                              MemberDecorate 233(UBO) 6 Offset 248
-                              MemberDecorate 233(UBO) 7 Offset 256
-                              Decorate 233(UBO) Block
-                              Decorate 255(ubo) DescriptorSet 0
-                              Decorate 255(ubo) Binding 0
-                              MemberDecorate 270(gl_PerVertex) 0 BuiltIn Position
-                              MemberDecorate 270(gl_PerVertex) 1 BuiltIn PointSize
-                              MemberDecorate 270(gl_PerVertex) 2 BuiltIn ClipDistance
-                              MemberDecorate 270(gl_PerVertex) 3 BuiltIn CullDistance
-                              Decorate 270(gl_PerVertex) Block
-                              Decorate 294(outViewVec) Location 2
-                              Decorate 302(outLightVec) Location 3
-                              Decorate 314(outWorldPos) Location 5
-                              Decorate 321(outEyePos) Location 4
+                              Name 36  "uv1"
+                              Name 47  "inUV"
+                              Name 66  "gl_TessCoord"
+                              Name 75  "uv2"
+                              Name 93  "outUV"
+                              Name 106  "n1"
+                              Name 116  "inNormal"
+                              Name 127  "n2"
+                              Name 143  "outNormal"
+                              Name 158  "pos1"
+                              Name 166  "gl_PerVertex"
+                              MemberName 166(gl_PerVertex) 0  "gl_Position"
+                              MemberName 166(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 166(gl_PerVertex) 2  "gl_ClipDistance"
+                              MemberName 166(gl_PerVertex) 3  "gl_CullDistance"
+                              Name 183  "gl_in"
+                              Name 196  "pos2"
+                              Name 210  "pos"
+                              Name 234  "displacementMap"
+                              Name 251  "UBO"
+                              MemberName 251(UBO) 0  "projection"
+                              MemberName 251(UBO) 1  "modelview"
+                              MemberName 251(UBO) 2  "lightPos"
+                              MemberName 251(UBO) 3  "frustumPlanes"
+                              MemberName 251(UBO) 4  "displacementFactor"
+                              MemberName 251(UBO) 5  "tessellationFactor"
+                              MemberName 251(UBO) 6  "viewportDim"
+                              MemberName 251(UBO) 7  "tessellatedEdgeSize"
+                              Name 273  "ubo"
+                              Name 288  "gl_PerVertex"
+                              MemberName 288(gl_PerVertex) 0  "gl_Position"
+                              MemberName 288(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 288(gl_PerVertex) 2  "gl_ClipDistance"
+                              MemberName 288(gl_PerVertex) 3  "gl_CullDistance"
+                              Name 300  ""
+                              Name 316  "outViewVec"
+                              Name 324  "outLightVec"
+                              Name 337  "outWorldPos"
+                              Name 344  "outEyePos"
+                              Decorate 47(inUV) Location 1
+                              Decorate 66(gl_TessCoord) BuiltIn TessCoord
+                              Decorate 93(outUV) Location 1
+                              Decorate 116(inNormal) Location 0
+                              Decorate 143(outNormal) Location 0
+                              Decorate 166(gl_PerVertex) Block
+                              MemberDecorate 166(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 166(gl_PerVertex) 1 BuiltIn PointSize
+                              MemberDecorate 166(gl_PerVertex) 2 BuiltIn ClipDistance
+                              MemberDecorate 166(gl_PerVertex) 3 BuiltIn CullDistance
+                              Decorate 234(displacementMap) Binding 1
+                              Decorate 234(displacementMap) DescriptorSet 0
+                              Decorate 249 ArrayStride 16
+                              Decorate 251(UBO) Block
+                              MemberDecorate 251(UBO) 0 ColMajor
+                              MemberDecorate 251(UBO) 0 MatrixStride 16
+                              MemberDecorate 251(UBO) 0 Offset 0
+                              MemberDecorate 251(UBO) 1 ColMajor
+                              MemberDecorate 251(UBO) 1 MatrixStride 16
+                              MemberDecorate 251(UBO) 1 Offset 64
+                              MemberDecorate 251(UBO) 2 Offset 128
+                              MemberDecorate 251(UBO) 3 Offset 144
+                              MemberDecorate 251(UBO) 4 Offset 240
+                              MemberDecorate 251(UBO) 5 Offset 244
+                              MemberDecorate 251(UBO) 6 Offset 248
+                              MemberDecorate 251(UBO) 7 Offset 256
+                              Decorate 273(ubo) Binding 0
+                              Decorate 273(ubo) DescriptorSet 0
+                              Decorate 288(gl_PerVertex) Block
+                              MemberDecorate 288(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 288(gl_PerVertex) 1 BuiltIn PointSize
+                              MemberDecorate 288(gl_PerVertex) 2 BuiltIn ClipDistance
+                              MemberDecorate 288(gl_PerVertex) 3 BuiltIn CullDistance
+                              Decorate 316(outViewVec) Location 2
+                              Decorate 324(outLightVec) Location 3
+                              Decorate 337(outWorldPos) Location 5
+                              Decorate 344(outEyePos) Location 4
                4:             TypeVoid
                5:             TypeFunction 4
                7:             TypeInt 32 0
               10:      7(int) Constant 32
               11:      7(int) Constant 6
               12:      7(int) Constant 0
-               9:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 8 10 11 12
+               9:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 8 10 11 12
               13:      7(int) Constant 3
-               6:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4
-              17:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 1 18
-              20:      7(int) Constant 1
-              21:      7(int) Constant 4
-              22:      7(int) Constant 2
-              19:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 20 21 17 22
-              16:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 15 6 17 12 12 19 15 13 12
-              27:      7(int) Constant 56
+               6:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4
+              18:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 2 19
+              20:      7(int) Constant 53
+              22:      7(int) Constant 1
+              23:      7(int) Constant 4
+              24:      7(int) Constant 2
+              21:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 22 23 18 24
+              17:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 16 6 18 20 12 21 16 13 20
               28:             TypeFloat 32
-              30:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 29 10 13 12
+              30:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 29 10 13 12
               31:             TypeVector 28(float) 2
-              32:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 30 22
+              32:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 30 24
               33:             TypePointer Function 31(fvec2)
-              35:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 36 32 17 27 12 16 21
-              38:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
-              39:             TypeArray 31(fvec2) 10
-              40:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 32 10
-              41:             TypePointer Input 39
-        42(inUV):     41(ptr) Variable Input
-              45:      7(int) Constant 8
-              43:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 44 40 17 27 12 19 44 42(inUV) 45
-              46:             TypeInt 32 1
-              48:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 47 10 21 12
-              49:     46(int) Constant 0
-              50:             TypePointer Input 31(fvec2)
-              53:     46(int) Constant 1
-              56:             TypeVector 28(float) 3
-              57:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 30 13
-              58:             TypePointer Input 56(fvec3)
-59(gl_TessCoord):     58(ptr) Variable Input
-              60:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 61 57 17 27 12 19 61 59(gl_TessCoord) 45
-              62:             TypePointer Input 28(float)
-              68:      7(int) Constant 57
-              70:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 71 32 17 68 12 16 21
-              73:     46(int) Constant 3
-              76:     46(int) Constant 2
-              84:      7(int) Constant 58
-              85:             TypePointer Output 31(fvec2)
-       86(outUV):     85(ptr) Variable Output
-              87:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 88 32 17 84 12 19 88 86(outUV) 45
-              96:      7(int) Constant 60
-              97:             TypePointer Function 56(fvec3)
-              99:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 100 57 17 96 12 16 21
-             102:             TypeArray 56(fvec3) 10
-             103:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 57 10
-             104:             TypePointer Input 102
-   105(inNormal):    104(ptr) Variable Input
-             106:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 107 103 17 96 12 19 107 105(inNormal) 45
-             117:      7(int) Constant 61
-             119:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 120 57 17 117 12 16 21
-             131:      7(int) Constant 62
-             132:             TypePointer Output 56(fvec3)
-  133(outNormal):    132(ptr) Variable Output
-             134:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 135 57 17 131 12 19 135 133(outNormal) 45
-             143:      7(int) Constant 65
-             144:             TypeVector 28(float) 4
-             145:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 30 21
-             146:             TypePointer Function 144(fvec4)
-             148:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 149 145 17 143 12 16 21
-             151:             TypeArray 28(float) 20
-             152:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 30 20
-153(gl_PerVertex):             TypeStruct 144(fvec4) 28(float) 151 151
-             156:      7(int) Constant 1756
-             154:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 155 145 17 20 156 12 12 13
-             159:      7(int) Constant 1774
-             157:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 158 30 17 20 159 12 12 13
-             162:      7(int) Constant 1817
-             160:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 161 152 17 20 162 12 12 13
-             163:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 161 152 17 20 162 12 12 13
-             164:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 165 20 17 143 12 19 165 12 13 154 157 160 163
-             166:             TypeArray 153(gl_PerVertex) 10
-             167:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 164 10
-             168:             TypePointer Input 166
-      169(gl_in):    168(ptr) Variable Input
-             170:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 171 167 17 143 12 19 171 169(gl_in) 45
-             172:             TypePointer Input 144(fvec4)
-             182:      7(int) Constant 66
-             184:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 185 145 17 182 12 16 21
-             196:      7(int) Constant 67
-             198:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 199 145 17 196 12 16 21
-             208:      7(int) Constant 69
-             209:             TypeImage 28(float) 2D sampled format:Unknown
-             213:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 0(DebugInfoNone)
-             210:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 211 12 17 208 12 19 212 213 13
-             214:             TypeSampledImage 209
-             215:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 216 12 17 208 12 19 217 213 13
-             218:             TypePointer UniformConstant 214
-219(displacementMap):    218(ptr) Variable UniformConstant
-             220:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 221 215 17 208 12 19 221 219(displacementMap) 45
-             224:   28(float) Constant 0
-             227:             TypeMatrix 144(fvec4) 4
-             229:             TypeBool
-             230:   229(bool) ConstantTrue
-             228:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 145 21 230
-             231:             TypeArray 144(fvec4) 11
-             232:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 145 11
-        233(UBO):             TypeStruct 227 227 144(fvec4) 231 28(float) 28(float) 31(fvec2) 28(float)
-             236:      7(int) Constant 30
-             237:      7(int) Constant 7
-             234:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 235 228 17 236 237 12 12 13
-             238:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 235 228 17 236 237 12 12 13
-             241:      7(int) Constant 31
-             239:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 240 145 17 241 237 12 12 13
-             242:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 243 232 17 10 237 12 12 13
-             246:      7(int) Constant 36
-             244:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 245 30 17 246 45 12 12 13
-             247:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 245 30 17 246 45 12 12 13
-             250:      7(int) Constant 35
-             248:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 249 32 17 250 237 12 12 13
-             251:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 245 30 17 246 45 12 12 13
-             252:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 253 20 17 208 12 19 253 12 13 234 238 239 242 244 247 248 251
-             254:             TypePointer Uniform 233(UBO)
-        255(ubo):    254(ptr) Variable Uniform
-             256:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 257 252 17 208 12 19 257 255(ubo) 45
-             258:     46(int) Constant 4
-             259:             TypePointer Uniform 28(float)
-             263:             TypePointer Function 28(float)
-             269:      7(int) Constant 71
-270(gl_PerVertex):             TypeStruct 144(fvec4) 28(float) 151 151
-             272:      7(int) Constant 165
-             271:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 155 145 17 20 272 12 12 13
-             274:      7(int) Constant 183
-             273:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 158 30 17 20 274 12 12 13
-             276:      7(int) Constant 226
-             275:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 161 152 17 20 276 12 12 13
-             277:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 161 152 17 20 276 12 12 13
-             278:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 165 20 17 269 12 19 165 12 13 271 273 275 277
-             279:             TypePointer Output 270(gl_PerVertex)
-             280:    279(ptr) Variable Output
-             281:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 1 278 17 269 12 19 1 280 45
-             282:             TypePointer Uniform 227
-             290:             TypePointer Output 144(fvec4)
-             293:      7(int) Constant 74
- 294(outViewVec):    132(ptr) Variable Output
-             295:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 296 57 17 293 12 19 296 294(outViewVec) 45
-             301:      7(int) Constant 75
-302(outLightVec):    132(ptr) Variable Output
-             303:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 304 57 17 301 12 19 304 302(outLightVec) 45
-             305:             TypePointer Uniform 144(fvec4)
-             313:      7(int) Constant 76
-314(outWorldPos):    132(ptr) Variable Output
-             315:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 316 57 17 313 12 19 316 314(outWorldPos) 45
-             320:      7(int) Constant 77
-  321(outEyePos):    132(ptr) Variable Output
-             322:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 323 57 17 320 12 19 323 321(outEyePos) 45
-                              Line 1 53 11
+              34:      7(int) Constant 7
+              35:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 32 34 12
+              39:      7(int) Constant 56
+              37:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 38 32 18 39 12 17 23
+              41:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
+              43:             TypeArray 31(fvec2) 10
+              44:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 32 10
+              45:             TypePointer Input 43
+              46:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 44 22 12
+        47(inUV):     45(ptr) Variable Input
+              50:      7(int) Constant 8
+              48:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 49 44 18 39 12 21 49 47(inUV) 50
+              51:             TypeInt 32 1
+              53:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 52 10 23 12
+              54:     51(int) Constant 0
+              55:             TypePointer Input 31(fvec2)
+              56:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 32 22 12
+              59:     51(int) Constant 1
+              62:             TypeVector 28(float) 3
+              63:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 30 13
+              64:             TypePointer Input 62(fvec3)
+              65:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 63 22 12
+66(gl_TessCoord):     64(ptr) Variable Input
+              67:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 68 63 18 39 12 21 68 66(gl_TessCoord) 50
+              69:             TypePointer Input 28(float)
+              70:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 30 22 12
+              78:      7(int) Constant 57
+              76:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 77 32 18 78 12 17 23
+              81:     51(int) Constant 3
+              84:     51(int) Constant 2
+              91:             TypePointer Output 31(fvec2)
+              92:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 32 13 12
+       93(outUV):     91(ptr) Variable Output
+              96:      7(int) Constant 58
+              94:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 95 32 18 96 12 21 95 93(outUV) 50
+             104:             TypePointer Function 62(fvec3)
+             105:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 63 34 12
+             109:      7(int) Constant 60
+             107:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 108 63 18 109 12 17 23
+             112:             TypeArray 62(fvec3) 10
+             113:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 63 10
+             114:             TypePointer Input 112
+             115:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 113 22 12
+   116(inNormal):    114(ptr) Variable Input
+             117:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 118 113 18 109 12 21 118 116(inNormal) 50
+             130:      7(int) Constant 61
+             128:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 129 63 18 130 12 17 23
+             141:             TypePointer Output 62(fvec3)
+             142:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 63 13 12
+  143(outNormal):    141(ptr) Variable Output
+             146:      7(int) Constant 62
+             144:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 145 63 18 146 12 21 145 143(outNormal) 50
+             154:             TypeVector 28(float) 4
+             155:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 30 23
+             156:             TypePointer Function 154(fvec4)
+             157:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 155 34 12
+             161:      7(int) Constant 65
+             159:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 160 155 18 161 12 17 23
+             164:             TypeArray 28(float) 22
+             165:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 30 22
+166(gl_PerVertex):             TypeStruct 154(fvec4) 28(float) 164 164
+             169:      7(int) Constant 1756
+             167:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 168 155 18 22 169 12 12 13
+             172:      7(int) Constant 1774
+             170:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 171 30 18 22 172 12 12 13
+             175:      7(int) Constant 1817
+             173:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 174 165 18 22 175 12 12 13
+             176:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 174 165 18 22 175 12 12 13
+             177:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 178 22 18 161 12 21 178 12 13 167 170 173 176
+             179:             TypeArray 166(gl_PerVertex) 10
+             180:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 177 10
+             181:             TypePointer Input 179
+             182:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 180 22 12
+      183(gl_in):    181(ptr) Variable Input
+             184:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 185 180 18 161 12 21 185 183(gl_in) 50
+             186:             TypePointer Input 154(fvec4)
+             187:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 155 22 12
+             199:      7(int) Constant 66
+             197:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 198 155 18 199 12 17 23
+             213:      7(int) Constant 67
+             211:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 212 155 18 213 12 17 23
+             222:             TypeImage 28(float) 2D sampled format:Unknown
+             225:      7(int) Constant 69
+             227:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 0(DebugInfoNone)
+             223:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 224 12 18 225 12 21 226 227 13
+             228:             TypeSampledImage 222
+             229:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 230 12 18 225 12 21 231 227 13
+             232:             TypePointer UniformConstant 228
+             233:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 229 12 12
+234(displacementMap):    232(ptr) Variable UniformConstant
+             235:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 236 229 18 225 12 21 236 234(displacementMap) 50
+             240:   28(float) Constant 0
+             243:             TypeMatrix 154(fvec4) 4
+             245:             TypeBool
+             247:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 246 10 24 12
+             248:   245(bool) ConstantTrue
+             244:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 155 23 248
+             249:             TypeArray 154(fvec4) 11
+             250:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 155 11
+        251(UBO):             TypeStruct 243 243 154(fvec4) 249 28(float) 28(float) 31(fvec2) 28(float)
+             254:      7(int) Constant 30
+             252:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 253 244 18 254 34 12 12 13
+             255:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 253 244 18 254 34 12 12 13
+             258:      7(int) Constant 31
+             256:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 257 155 18 258 34 12 12 13
+             259:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 260 250 18 10 34 12 12 13
+             263:      7(int) Constant 36
+             261:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 262 30 18 263 50 12 12 13
+             264:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 262 30 18 263 50 12 12 13
+             267:      7(int) Constant 35
+             265:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 266 32 18 267 34 12 12 13
+             268:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 262 30 18 263 50 12 12 13
+             269:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 270 22 18 225 12 21 270 12 13 252 255 256 259 261 264 265 268
+             271:             TypePointer Uniform 251(UBO)
+             272:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 269 24 12
+        273(ubo):    271(ptr) Variable Uniform
+             274:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 275 269 18 225 12 21 275 273(ubo) 50
+             276:     51(int) Constant 4
+             277:             TypePointer Uniform 28(float)
+             278:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 30 24 12
+             282:             TypePointer Function 28(float)
+             283:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 30 34 12
+288(gl_PerVertex):             TypeStruct 154(fvec4) 28(float) 164 164
+             290:      7(int) Constant 165
+             289:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 168 155 18 22 290 12 12 13
+             292:      7(int) Constant 183
+             291:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 171 30 18 22 292 12 12 13
+             294:      7(int) Constant 226
+             293:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 174 165 18 22 294 12 12 13
+             295:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 174 165 18 22 294 12 12 13
+             297:      7(int) Constant 71
+             296:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 178 22 18 297 12 21 178 12 13 289 291 293 295
+             298:             TypePointer Output 288(gl_PerVertex)
+             299:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 296 13 12
+             300:    298(ptr) Variable Output
+             301:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 302 296 18 297 12 21 302 300 50
+             303:             TypePointer Uniform 243
+             304:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 244 24 12
+             313:             TypePointer Output 154(fvec4)
+             314:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 155 13 12
+ 316(outViewVec):    141(ptr) Variable Output
+             319:      7(int) Constant 74
+             317:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 318 63 18 319 12 21 318 316(outViewVec) 50
+324(outLightVec):    141(ptr) Variable Output
+             327:      7(int) Constant 75
+             325:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 326 63 18 327 12 21 326 324(outLightVec) 50
+             328:             TypePointer Uniform 154(fvec4)
+             329:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 155 24 12
+337(outWorldPos):    141(ptr) Variable Output
+             340:      7(int) Constant 76
+             338:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 339 63 18 340 12 21 339 337(outWorldPos) 50
+  344(outEyePos):    141(ptr) Variable Output
+             347:      7(int) Constant 77
+             345:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 346 63 18 347 12 21 346 344(outEyePos) 50
+             358:      7(int) Constant 78
         14(main):           4 Function None 5
-              23:             Label
-         34(uv1):     33(ptr) Variable Function
-         69(uv2):     33(ptr) Variable Function
-          98(n1):     97(ptr) Variable Function
-         118(n2):     97(ptr) Variable Function
-       147(pos1):    146(ptr) Variable Function
-       183(pos2):    146(ptr) Variable Function
-        197(pos):    146(ptr) Variable Function
-              24:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 16 14(main)
-              25:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-              26:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 27 27 12 12
-              37:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 35 34(uv1) 38
-              51:     50(ptr) AccessChain 42(inUV) 49
-              52:   31(fvec2) Load 51
-              54:     50(ptr) AccessChain 42(inUV) 53
-              55:   31(fvec2) Load 54
-              63:     62(ptr) AccessChain 59(gl_TessCoord) 12
-              64:   28(float) Load 63
-              65:   31(fvec2) CompositeConstruct 64 64
-              66:   31(fvec2) ExtInst 3(GLSL.std.450) 46(FMix) 52 55 65
-                              Store 34(uv1) 66
-              67:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 68 68 12 12
-              72:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 70 69(uv2) 38
-              74:     50(ptr) AccessChain 42(inUV) 73
-              75:   31(fvec2) Load 74
-              77:     50(ptr) AccessChain 42(inUV) 76
-              78:   31(fvec2) Load 77
-              79:     62(ptr) AccessChain 59(gl_TessCoord) 12
-              80:   28(float) Load 79
-              81:   31(fvec2) CompositeConstruct 80 80
-              82:   31(fvec2) ExtInst 3(GLSL.std.450) 46(FMix) 75 78 81
-                              Store 69(uv2) 82
-              83:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 84 84 12 12
-              89:   31(fvec2) Load 34(uv1)
-              90:   31(fvec2) Load 69(uv2)
-              91:     62(ptr) AccessChain 59(gl_TessCoord) 20
-              92:   28(float) Load 91
-              93:   31(fvec2) CompositeConstruct 92 92
-              94:   31(fvec2) ExtInst 3(GLSL.std.450) 46(FMix) 89 90 93
-                              Store 86(outUV) 94
-              95:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 96 96 12 12
-             101:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 99 98(n1) 38
-             108:     58(ptr) AccessChain 105(inNormal) 49
-             109:   56(fvec3) Load 108
-             110:     58(ptr) AccessChain 105(inNormal) 53
-             111:   56(fvec3) Load 110
-             112:     62(ptr) AccessChain 59(gl_TessCoord) 12
-             113:   28(float) Load 112
-             114:   56(fvec3) CompositeConstruct 113 113 113
-             115:   56(fvec3) ExtInst 3(GLSL.std.450) 46(FMix) 109 111 114
-                              Store 98(n1) 115
-             116:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 117 117 12 12
-             121:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 119 118(n2) 38
-             122:     58(ptr) AccessChain 105(inNormal) 73
-             123:   56(fvec3) Load 122
-             124:     58(ptr) AccessChain 105(inNormal) 76
-             125:   56(fvec3) Load 124
-             126:     62(ptr) AccessChain 59(gl_TessCoord) 12
-             127:   28(float) Load 126
-             128:   56(fvec3) CompositeConstruct 127 127 127
-             129:   56(fvec3) ExtInst 3(GLSL.std.450) 46(FMix) 123 125 128
-                              Store 118(n2) 129
-             130:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 131 131 12 12
-             136:   56(fvec3) Load 98(n1)
-             137:   56(fvec3) Load 118(n2)
-             138:     62(ptr) AccessChain 59(gl_TessCoord) 20
-             139:   28(float) Load 138
-             140:   56(fvec3) CompositeConstruct 139 139 139
-             141:   56(fvec3) ExtInst 3(GLSL.std.450) 46(FMix) 136 137 140
-                              Store 133(outNormal) 141
-             142:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 143 143 12 12
-             150:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 148 147(pos1) 38
-             173:    172(ptr) AccessChain 169(gl_in) 49 49
-             174:  144(fvec4) Load 173
-             175:    172(ptr) AccessChain 169(gl_in) 53 49
-             176:  144(fvec4) Load 175
-             177:     62(ptr) AccessChain 59(gl_TessCoord) 12
-             178:   28(float) Load 177
-             179:  144(fvec4) CompositeConstruct 178 178 178 178
-             180:  144(fvec4) ExtInst 3(GLSL.std.450) 46(FMix) 174 176 179
-                              Store 147(pos1) 180
-             181:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 182 182 12 12
-             186:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 184 183(pos2) 38
-             187:    172(ptr) AccessChain 169(gl_in) 73 49
-             188:  144(fvec4) Load 187
-             189:    172(ptr) AccessChain 169(gl_in) 76 49
-             190:  144(fvec4) Load 189
-             191:     62(ptr) AccessChain 59(gl_TessCoord) 12
-             192:   28(float) Load 191
-             193:  144(fvec4) CompositeConstruct 192 192 192 192
-             194:  144(fvec4) ExtInst 3(GLSL.std.450) 46(FMix) 188 190 193
-                              Store 183(pos2) 194
-             195:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 196 196 12 12
-             200:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 198 197(pos) 38
-             201:  144(fvec4) Load 147(pos1)
-             202:  144(fvec4) Load 183(pos2)
-             203:     62(ptr) AccessChain 59(gl_TessCoord) 20
-             204:   28(float) Load 203
-             205:  144(fvec4) CompositeConstruct 204 204 204 204
-             206:  144(fvec4) ExtInst 3(GLSL.std.450) 46(FMix) 201 202 205
-                              Store 197(pos) 206
-             207:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 208 208 12 12
-             222:         214 Load 219(displacementMap)
-             223:   31(fvec2) Load 86(outUV)
-             225:  144(fvec4) ImageSampleExplicitLod 222 223 Lod 224
-             226:   28(float) CompositeExtract 225 0
-             260:    259(ptr) AccessChain 255(ubo) 258
-             261:   28(float) Load 260
-             262:   28(float) FMul 226 261
-             264:    263(ptr) AccessChain 197(pos) 20
-             265:   28(float) Load 264
-             266:   28(float) FSub 265 262
-             267:    263(ptr) AccessChain 197(pos) 20
-                              Store 267 266
-             268:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 269 269 12 12
-             283:    282(ptr) AccessChain 255(ubo) 49
-             284:         227 Load 283
-             285:    282(ptr) AccessChain 255(ubo) 53
-             286:         227 Load 285
-             287:         227 MatrixTimesMatrix 284 286
-             288:  144(fvec4) Load 197(pos)
-             289:  144(fvec4) MatrixTimesVector 287 288
-             291:    290(ptr) AccessChain 280 49
-                              Store 291 289
-             292:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 293 293 12 12
-             297:  144(fvec4) Load 197(pos)
-             298:   56(fvec3) VectorShuffle 297 297 0 1 2
-             299:   56(fvec3) FNegate 298
-                              Store 294(outViewVec) 299
-             300:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 301 301 12 12
-             306:    305(ptr) AccessChain 255(ubo) 76
-             307:  144(fvec4) Load 306
-             308:   56(fvec3) VectorShuffle 307 307 0 1 2
-             309:   56(fvec3) Load 294(outViewVec)
-             310:   56(fvec3) FAdd 308 309
-             311:   56(fvec3) ExtInst 3(GLSL.std.450) 69(Normalize) 310
-                              Store 302(outLightVec) 311
-             312:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 313 313 12 12
-             317:  144(fvec4) Load 197(pos)
-             318:   56(fvec3) VectorShuffle 317 317 0 1 2
-                              Store 314(outWorldPos) 318
-             319:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 320 320 12 12
-             324:    282(ptr) AccessChain 255(ubo) 53
-             325:         227 Load 324
-             326:  144(fvec4) Load 197(pos)
-             327:  144(fvec4) MatrixTimesVector 325 326
-             328:   28(float) CompositeExtract 327 0
-             329:   28(float) CompositeExtract 327 1
-             330:   28(float) CompositeExtract 327 2
-             331:   56(fvec3) CompositeConstruct 328 329 330
-                              Store 321(outEyePos) 331
+              15:             Label
+         36(uv1):     33(ptr) Variable Function
+         75(uv2):     33(ptr) Variable Function
+         106(n1):    104(ptr) Variable Function
+         127(n2):    104(ptr) Variable Function
+       158(pos1):    156(ptr) Variable Function
+       196(pos2):    156(ptr) Variable Function
+        210(pos):    156(ptr) Variable Function
+              26:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+              27:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 20 20 12 12
+              25:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 17 14(main)
+              42:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 39 39 12 12
+              40:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 37 36(uv1) 41
+              57:     55(ptr) AccessChain 47(inUV) 54
+              58:   31(fvec2) Load 57
+              60:     55(ptr) AccessChain 47(inUV) 59
+              61:   31(fvec2) Load 60
+              71:     69(ptr) AccessChain 66(gl_TessCoord) 12
+              72:   28(float) Load 71
+              73:   31(fvec2) CompositeConstruct 72 72
+              74:   31(fvec2) ExtInst 3(GLSL.std.450) 46(FMix) 58 61 73
+                              Store 36(uv1) 74
+              80:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 78 78 12 12
+              79:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 76 75(uv2) 41
+              82:     55(ptr) AccessChain 47(inUV) 81
+              83:   31(fvec2) Load 82
+              85:     55(ptr) AccessChain 47(inUV) 84
+              86:   31(fvec2) Load 85
+              87:     69(ptr) AccessChain 66(gl_TessCoord) 12
+              88:   28(float) Load 87
+              89:   31(fvec2) CompositeConstruct 88 88
+              90:   31(fvec2) ExtInst 3(GLSL.std.450) 46(FMix) 83 86 89
+                              Store 75(uv2) 90
+              98:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 96 96 12 12
+              97:   31(fvec2) Load 36(uv1)
+              99:   31(fvec2) Load 75(uv2)
+             100:     69(ptr) AccessChain 66(gl_TessCoord) 22
+             101:   28(float) Load 100
+             102:   31(fvec2) CompositeConstruct 101 101
+             103:   31(fvec2) ExtInst 3(GLSL.std.450) 46(FMix) 97 99 102
+                              Store 93(outUV) 103
+             111:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 109 109 12 12
+             110:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 107 106(n1) 41
+             119:     64(ptr) AccessChain 116(inNormal) 54
+             120:   62(fvec3) Load 119
+             121:     64(ptr) AccessChain 116(inNormal) 59
+             122:   62(fvec3) Load 121
+             123:     69(ptr) AccessChain 66(gl_TessCoord) 12
+             124:   28(float) Load 123
+             125:   62(fvec3) CompositeConstruct 124 124 124
+             126:   62(fvec3) ExtInst 3(GLSL.std.450) 46(FMix) 120 122 125
+                              Store 106(n1) 126
+             132:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 130 130 12 12
+             131:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 128 127(n2) 41
+             133:     64(ptr) AccessChain 116(inNormal) 81
+             134:   62(fvec3) Load 133
+             135:     64(ptr) AccessChain 116(inNormal) 84
+             136:   62(fvec3) Load 135
+             137:     69(ptr) AccessChain 66(gl_TessCoord) 12
+             138:   28(float) Load 137
+             139:   62(fvec3) CompositeConstruct 138 138 138
+             140:   62(fvec3) ExtInst 3(GLSL.std.450) 46(FMix) 134 136 139
+                              Store 127(n2) 140
+             148:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 146 146 12 12
+             147:   62(fvec3) Load 106(n1)
+             149:   62(fvec3) Load 127(n2)
+             150:     69(ptr) AccessChain 66(gl_TessCoord) 22
+             151:   28(float) Load 150
+             152:   62(fvec3) CompositeConstruct 151 151 151
+             153:   62(fvec3) ExtInst 3(GLSL.std.450) 46(FMix) 147 149 152
+                              Store 143(outNormal) 153
+             163:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 161 161 12 12
+             162:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 159 158(pos1) 41
+             188:    186(ptr) AccessChain 183(gl_in) 54 54
+             189:  154(fvec4) Load 188
+             190:    186(ptr) AccessChain 183(gl_in) 59 54
+             191:  154(fvec4) Load 190
+             192:     69(ptr) AccessChain 66(gl_TessCoord) 12
+             193:   28(float) Load 192
+             194:  154(fvec4) CompositeConstruct 193 193 193 193
+             195:  154(fvec4) ExtInst 3(GLSL.std.450) 46(FMix) 189 191 194
+                              Store 158(pos1) 195
+             201:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 199 199 12 12
+             200:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 197 196(pos2) 41
+             202:    186(ptr) AccessChain 183(gl_in) 81 54
+             203:  154(fvec4) Load 202
+             204:    186(ptr) AccessChain 183(gl_in) 84 54
+             205:  154(fvec4) Load 204
+             206:     69(ptr) AccessChain 66(gl_TessCoord) 12
+             207:   28(float) Load 206
+             208:  154(fvec4) CompositeConstruct 207 207 207 207
+             209:  154(fvec4) ExtInst 3(GLSL.std.450) 46(FMix) 203 205 208
+                              Store 196(pos2) 209
+             215:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 213 213 12 12
+             214:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 211 210(pos) 41
+             216:  154(fvec4) Load 158(pos1)
+             217:  154(fvec4) Load 196(pos2)
+             218:     69(ptr) AccessChain 66(gl_TessCoord) 22
+             219:   28(float) Load 218
+             220:  154(fvec4) CompositeConstruct 219 219 219 219
+             221:  154(fvec4) ExtInst 3(GLSL.std.450) 46(FMix) 216 217 220
+                              Store 210(pos) 221
+             238:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 225 225 12 12
+             237:         228 Load 234(displacementMap)
+             239:   31(fvec2) Load 93(outUV)
+             241:  154(fvec4) ImageSampleExplicitLod 237 239 Lod 240
+             242:   28(float) CompositeExtract 241 0
+             279:    277(ptr) AccessChain 273(ubo) 276
+             280:   28(float) Load 279
+             281:   28(float) FMul 242 280
+             284:    282(ptr) AccessChain 210(pos) 22
+             285:   28(float) Load 284
+             286:   28(float) FSub 285 281
+             287:    282(ptr) AccessChain 210(pos) 22
+                              Store 287 286
+             306:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 297 297 12 12
+             305:    303(ptr) AccessChain 273(ubo) 54
+             307:         243 Load 305
+             308:    303(ptr) AccessChain 273(ubo) 59
+             309:         243 Load 308
+             310:         243 MatrixTimesMatrix 307 309
+             311:  154(fvec4) Load 210(pos)
+             312:  154(fvec4) MatrixTimesVector 310 311
+             315:    313(ptr) AccessChain 300 54
+                              Store 315 312
+             321:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 319 319 12 12
+             320:  154(fvec4) Load 210(pos)
+             322:   62(fvec3) VectorShuffle 320 320 0 1 2
+             323:   62(fvec3) FNegate 322
+                              Store 316(outViewVec) 323
+             331:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 327 327 12 12
+             330:    328(ptr) AccessChain 273(ubo) 84
+             332:  154(fvec4) Load 330
+             333:   62(fvec3) VectorShuffle 332 332 0 1 2
+             334:   62(fvec3) Load 316(outViewVec)
+             335:   62(fvec3) FAdd 333 334
+             336:   62(fvec3) ExtInst 3(GLSL.std.450) 69(Normalize) 335
+                              Store 324(outLightVec) 336
+             342:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 340 340 12 12
+             341:  154(fvec4) Load 210(pos)
+             343:   62(fvec3) VectorShuffle 341 341 0 1 2
+                              Store 337(outWorldPos) 343
+             349:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 347 347 12 12
+             348:    303(ptr) AccessChain 273(ubo) 59
+             350:         243 Load 348
+             351:  154(fvec4) Load 210(pos)
+             352:  154(fvec4) MatrixTimesVector 350 351
+             353:   28(float) CompositeExtract 352 0
+             354:   28(float) CompositeExtract 352 1
+             355:   28(float) CompositeExtract 352 2
+             356:   62(fvec3) CompositeConstruct 353 354 355
+                              Store 344(outEyePos) 356
+             357:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 358 358 12 12
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.debuginfo.glsl.vert.out b/Test/baseResults/spv.debuginfo.glsl.vert.out
index c485255..9eef2dd 100644
--- a/Test/baseResults/spv.debuginfo.glsl.vert.out
+++ b/Test/baseResults/spv.debuginfo.glsl.vert.out
@@ -1,541 +1,668 @@
 spv.debuginfo.glsl.vert
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 424
+// Id's are bound by 447
 
                               Capability Shader
                               Extension  "SPV_KHR_non_semantic_info"
-               2:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
                3:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Vertex 14  "main" 34 39 45 51 59 75 289 307 312 337 353 370 409 418
-               1:             String  ""
+                              EntryPoint Vertex 14  "main" 35 42 47 55 65 83 305 323 328 353 371 390 428 437
+               2:             String  "spv.debuginfo.glsl.vert"
                8:             String  "uint"
-              15:             String  "main"
-              18:             String  "// OpModuleProcessed auto-map-locations
+              16:             String  "main"
+              19:             String  "// OpModuleProcessed auto-map-locations
 // OpModuleProcessed auto-map-bindings
 // OpModuleProcessed client vulkan100
 // OpModuleProcessed target-env vulkan1.0
 // OpModuleProcessed keep-uncalled
 // OpModuleProcessed entry-point main
 #line 1
+/*
+The MIT License (MIT)
+
+Copyright (c) 2022 Sascha Willems
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+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 Software.
+
+THE SOFTWARE IS 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 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+*/
+
+#version 450
+
+// Vertex attributes
+layout (location = 0) in vec3 inPos;
+layout (location = 1) in vec3 inNormal;
+layout (location = 2) in vec2 inUV;
+layout (location = 3) in vec3 inColor;
+
+// Instanced attributes
+layout (location = 4) in vec3 instancePos;
+layout (location = 5) in vec3 instanceRot;
+layout (location = 6) in float instanceScale;
+layout (location = 7) in int instanceTexIndex;
+
+layout (binding = 0) uniform UBO
+{
+	mat4 projection;
+	mat4 modelview;
+	vec4 lightPos;
+	float locSpeed;
+	float globSpeed;
+} ubo;
+
+layout (location = 0) out vec3 outNormal;
+layout (location = 1) out vec3 outColor;
+layout (location = 2) out vec3 outUV;
+layout (location = 3) out vec3 outViewVec;
+layout (location = 4) out vec3 outLightVec;
+
+void main()
+{
+	outColor = inColor;
+	outUV = vec3(inUV, instanceTexIndex);
+
+	mat3 mx, my, mz;
+
+	// rotate around x
+	float s = sin(instanceRot.x + ubo.locSpeed);
+	float c = cos(instanceRot.x + ubo.locSpeed);
+
+	mx[0] = vec3(c, s, 0.0);
+	mx[1] = vec3(-s, c, 0.0);
+	mx[2] = vec3(0.0, 0.0, 1.0);
+
+	// rotate around y
+	s = sin(instanceRot.y + ubo.locSpeed);
+	c = cos(instanceRot.y + ubo.locSpeed);
+
+	my[0] = vec3(c, 0.0, s);
+	my[1] = vec3(0.0, 1.0, 0.0);
+	my[2] = vec3(-s, 0.0, c);
+
+	// rot around z
+	s = sin(instanceRot.z + ubo.locSpeed);
+	c = cos(instanceRot.z + ubo.locSpeed);
+
+	mz[0] = vec3(1.0, 0.0, 0.0);
+	mz[1] = vec3(0.0, c, s);
+	mz[2] = vec3(0.0, -s, c);
+
+	mat3 rotMat = mz * my * mx;
+
+	mat4 gRotMat;
+	s = sin(instanceRot.y + ubo.globSpeed);
+	c = cos(instanceRot.y + ubo.globSpeed);
+	gRotMat[0] = vec4(c, 0.0, s, 0.0);
+	gRotMat[1] = vec4(0.0, 1.0, 0.0, 0.0);
+	gRotMat[2] = vec4(-s, 0.0, c, 0.0);
+	gRotMat[3] = vec4(0.0, 0.0, 0.0, 1.0);
+
+	vec4 locPos = vec4(inPos.xyz * rotMat, 1.0);
+	vec4 pos = vec4((locPos.xyz * instanceScale) + instancePos, 1.0);
+
+	gl_Position = ubo.projection * ubo.modelview * gRotMat * pos;
+	outNormal = mat3(ubo.modelview * gRotMat) * inverse(rotMat) * inNormal;
+
+	pos = ubo.modelview * vec4(inPos.xyz + instancePos, 1.0);
+	vec3 lPos = mat3(ubo.modelview) * ubo.lightPos.xyz;
+	outLightVec = lPos - pos.xyz;
+	outViewVec = -pos.xyz;
+}
 "
               29:             String  "float"
-              36:             String  "outColor"
-              41:             String  "inColor"
-              47:             String  "outUV"
-              53:             String  "inUV"
-              56:             String  "int"
-              61:             String  "instanceTexIndex"
-              72:             String  "s"
-              77:             String  "instanceRot"
-              89:             String  "modelview"
-              94:             String  "lightPos"
-              97:             String  "globSpeed"
-             101:             String  "UBO"
-             105:             String  "ubo"
-             116:             String  "c"
-             131:             String  "mx"
-             174:             String  "my"
-             211:             String  "mz"
-             232:             String  "rotMat"
-             261:             String  "gRotMat"
-             287:             String  "locPos"
-             291:             String  "inPos"
-             303:             String  "pos"
-             309:             String  "instanceScale"
-             314:             String  "instancePos"
-             327:             String  "gl_Position"
-             330:             String  "gl_PointSize"
-             332:             String  "gl_CullDistance"
-             335:             String  "gl_PerVertex"
-             355:             String  "outNormal"
-             372:             String  "inNormal"
-             391:             String  "lPos"
-             411:             String  "outLightVec"
-             420:             String  "outViewVec"
+              37:             String  "outColor"
+              44:             String  "inColor"
+              49:             String  "outUV"
+              57:             String  "inUV"
+              61:             String  "int"
+              67:             String  "instanceTexIndex"
+              78:             String  "s"
+              85:             String  "instanceRot"
+              95:             String  "bool"
+             100:             String  "modelview"
+             104:             String  "lightPos"
+             107:             String  "globSpeed"
+             111:             String  "UBO"
+             116:             String  "ubo"
+             126:             String  "c"
+             142:             String  "mx"
+             186:             String  "my"
+             223:             String  "mz"
+             244:             String  "rotMat"
+             274:             String  "gRotMat"
+             301:             String  "locPos"
+             307:             String  "inPos"
+             317:             String  "pos"
+             325:             String  "instanceScale"
+             330:             String  "instancePos"
+             341:             String  "gl_Position"
+             344:             String  "gl_PointSize"
+             346:             String  "gl_CullDistance"
+             349:             String  "gl_PerVertex"
+             355:             String  ""
+             373:             String  "outNormal"
+             392:             String  "inNormal"
+             409:             String  "lPos"
+             430:             String  "outLightVec"
+             439:             String  "outViewVec"
                               Name 14  "main"
-                              Name 34  "outColor"
-                              Name 39  "inColor"
-                              Name 45  "outUV"
-                              Name 51  "inUV"
-                              Name 59  "instanceTexIndex"
-                              Name 70  "s"
-                              Name 75  "instanceRot"
-                              Name 87  "UBO"
-                              MemberName 87(UBO) 0  "projection"
-                              MemberName 87(UBO) 1  "modelview"
-                              MemberName 87(UBO) 2  "lightPos"
-                              MemberName 87(UBO) 3  "locSpeed"
-                              MemberName 87(UBO) 4  "globSpeed"
-                              Name 103  "ubo"
-                              Name 114  "c"
-                              Name 129  "mx"
-                              Name 172  "my"
-                              Name 209  "mz"
-                              Name 230  "rotMat"
-                              Name 259  "gRotMat"
-                              Name 285  "locPos"
-                              Name 289  "inPos"
-                              Name 301  "pos"
-                              Name 307  "instanceScale"
-                              Name 312  "instancePos"
-                              Name 325  "gl_PerVertex"
-                              MemberName 325(gl_PerVertex) 0  "gl_Position"
-                              MemberName 325(gl_PerVertex) 1  "gl_PointSize"
-                              MemberName 325(gl_PerVertex) 2  "gl_ClipDistance"
-                              MemberName 325(gl_PerVertex) 3  "gl_CullDistance"
-                              Name 337  ""
-                              Name 353  "outNormal"
-                              Name 370  "inNormal"
-                              Name 389  "lPos"
-                              Name 409  "outLightVec"
-                              Name 418  "outViewVec"
-                              Decorate 34(outColor) Location 1
-                              Decorate 39(inColor) Location 3
-                              Decorate 45(outUV) Location 2
-                              Decorate 51(inUV) Location 2
-                              Decorate 59(instanceTexIndex) Location 7
-                              Decorate 75(instanceRot) Location 5
-                              MemberDecorate 87(UBO) 0 ColMajor
-                              MemberDecorate 87(UBO) 0 Offset 0
-                              MemberDecorate 87(UBO) 0 MatrixStride 16
-                              MemberDecorate 87(UBO) 1 ColMajor
-                              MemberDecorate 87(UBO) 1 Offset 64
-                              MemberDecorate 87(UBO) 1 MatrixStride 16
-                              MemberDecorate 87(UBO) 2 Offset 128
-                              MemberDecorate 87(UBO) 3 Offset 144
-                              MemberDecorate 87(UBO) 4 Offset 148
-                              Decorate 87(UBO) Block
-                              Decorate 103(ubo) DescriptorSet 0
-                              Decorate 103(ubo) Binding 0
-                              Decorate 289(inPos) Location 0
-                              Decorate 307(instanceScale) Location 6
-                              Decorate 312(instancePos) Location 4
-                              MemberDecorate 325(gl_PerVertex) 0 BuiltIn Position
-                              MemberDecorate 325(gl_PerVertex) 1 BuiltIn PointSize
-                              MemberDecorate 325(gl_PerVertex) 2 BuiltIn ClipDistance
-                              MemberDecorate 325(gl_PerVertex) 3 BuiltIn CullDistance
-                              Decorate 325(gl_PerVertex) Block
-                              Decorate 353(outNormal) Location 0
-                              Decorate 370(inNormal) Location 1
-                              Decorate 409(outLightVec) Location 4
-                              Decorate 418(outViewVec) Location 3
+                              Name 35  "outColor"
+                              Name 42  "inColor"
+                              Name 47  "outUV"
+                              Name 55  "inUV"
+                              Name 65  "instanceTexIndex"
+                              Name 76  "s"
+                              Name 83  "instanceRot"
+                              Name 98  "UBO"
+                              MemberName 98(UBO) 0  "projection"
+                              MemberName 98(UBO) 1  "modelview"
+                              MemberName 98(UBO) 2  "lightPos"
+                              MemberName 98(UBO) 3  "locSpeed"
+                              MemberName 98(UBO) 4  "globSpeed"
+                              Name 114  "ubo"
+                              Name 124  "c"
+                              Name 140  "mx"
+                              Name 184  "my"
+                              Name 221  "mz"
+                              Name 242  "rotMat"
+                              Name 272  "gRotMat"
+                              Name 299  "locPos"
+                              Name 305  "inPos"
+                              Name 315  "pos"
+                              Name 323  "instanceScale"
+                              Name 328  "instancePos"
+                              Name 339  "gl_PerVertex"
+                              MemberName 339(gl_PerVertex) 0  "gl_Position"
+                              MemberName 339(gl_PerVertex) 1  "gl_PointSize"
+                              MemberName 339(gl_PerVertex) 2  "gl_ClipDistance"
+                              MemberName 339(gl_PerVertex) 3  "gl_CullDistance"
+                              Name 353  ""
+                              Name 371  "outNormal"
+                              Name 390  "inNormal"
+                              Name 407  "lPos"
+                              Name 428  "outLightVec"
+                              Name 437  "outViewVec"
+                              Decorate 35(outColor) Location 1
+                              Decorate 42(inColor) Location 3
+                              Decorate 47(outUV) Location 2
+                              Decorate 55(inUV) Location 2
+                              Decorate 65(instanceTexIndex) Location 7
+                              Decorate 83(instanceRot) Location 5
+                              Decorate 98(UBO) Block
+                              MemberDecorate 98(UBO) 0 ColMajor
+                              MemberDecorate 98(UBO) 0 MatrixStride 16
+                              MemberDecorate 98(UBO) 0 Offset 0
+                              MemberDecorate 98(UBO) 1 ColMajor
+                              MemberDecorate 98(UBO) 1 MatrixStride 16
+                              MemberDecorate 98(UBO) 1 Offset 64
+                              MemberDecorate 98(UBO) 2 Offset 128
+                              MemberDecorate 98(UBO) 3 Offset 144
+                              MemberDecorate 98(UBO) 4 Offset 148
+                              Decorate 114(ubo) Binding 0
+                              Decorate 114(ubo) DescriptorSet 0
+                              Decorate 305(inPos) Location 0
+                              Decorate 323(instanceScale) Location 6
+                              Decorate 328(instancePos) Location 4
+                              Decorate 339(gl_PerVertex) Block
+                              MemberDecorate 339(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 339(gl_PerVertex) 1 BuiltIn PointSize
+                              MemberDecorate 339(gl_PerVertex) 2 BuiltIn ClipDistance
+                              MemberDecorate 339(gl_PerVertex) 3 BuiltIn CullDistance
+                              Decorate 371(outNormal) Location 0
+                              Decorate 390(inNormal) Location 1
+                              Decorate 428(outLightVec) Location 4
+                              Decorate 437(outViewVec) Location 3
                4:             TypeVoid
                5:             TypeFunction 4
                7:             TypeInt 32 0
               10:      7(int) Constant 32
               11:      7(int) Constant 6
               12:      7(int) Constant 0
-               9:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 8 10 11 12
+               9:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 8 10 11 12
               13:      7(int) Constant 3
-               6:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4
-              17:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 1 18
-              20:      7(int) Constant 1
-              21:      7(int) Constant 4
-              22:      7(int) Constant 2
-              19:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 20 21 17 22
-              16:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 15 6 17 12 12 19 15 13 12
-              27:      7(int) Constant 56
+               6:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4
+              18:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 2 19
+              20:      7(int) Constant 54
+              22:      7(int) Constant 1
+              23:      7(int) Constant 4
+              24:      7(int) Constant 2
+              21:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 22 23 18 24
+              17:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 16 6 18 20 12 21 16 13 20
               28:             TypeFloat 32
-              30:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 29 10 13 12
+              30:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 29 10 13 12
               31:             TypeVector 28(float) 3
-              32:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 30 13
+              32:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 30 13
               33:             TypePointer Output 31(fvec3)
-    34(outColor):     33(ptr) Variable Output
-              37:      7(int) Constant 8
-              35:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 36 32 17 27 12 19 36 34(outColor) 37
-              38:             TypePointer Input 31(fvec3)
-     39(inColor):     38(ptr) Variable Input
-              40:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 41 32 17 27 12 19 41 39(inColor) 37
-              44:      7(int) Constant 57
-       45(outUV):     33(ptr) Variable Output
-              46:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 47 32 17 44 12 19 47 45(outUV) 37
-              48:             TypeVector 28(float) 2
-              49:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 30 22
-              50:             TypePointer Input 48(fvec2)
-        51(inUV):     50(ptr) Variable Input
-              52:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 53 49 17 44 12 19 53 51(inUV) 37
-              55:             TypeInt 32 1
-              57:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 56 10 21 12
-              58:             TypePointer Input 55(int)
-59(instanceTexIndex):     58(ptr) Variable Input
-              60:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 61 57 17 44 12 19 61 59(instanceTexIndex) 37
-              68:      7(int) Constant 62
-              69:             TypePointer Function 28(float)
-              71:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 72 30 17 68 12 16 21
-              74:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
- 75(instanceRot):     38(ptr) Variable Input
-              76:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 77 32 17 68 12 19 77 75(instanceRot) 37
-              78:             TypePointer Input 28(float)
-              81:             TypeVector 28(float) 4
-              82:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 30 21
-              83:             TypeMatrix 81(fvec4) 4
-              85:             TypeBool
-              86:    85(bool) ConstantTrue
-              84:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 82 21 86
-         87(UBO):             TypeStruct 83 83 81(fvec4) 28(float) 28(float)
-              90:      7(int) Constant 42
-              91:      7(int) Constant 7
-              88:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 89 84 17 90 91 12 12 13
-              92:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 89 84 17 90 91 12 12 13
-              95:      7(int) Constant 43
-              93:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 94 82 17 95 91 12 12 13
-              98:      7(int) Constant 45
-              96:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 97 30 17 98 37 12 12 13
-              99:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 97 30 17 98 37 12 12 13
-             100:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 101 20 17 68 12 19 101 12 13 88 92 93 96 99
-             102:             TypePointer Uniform 87(UBO)
-        103(ubo):    102(ptr) Variable Uniform
-             104:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 105 100 17 68 12 19 105 103(ubo) 37
-             106:     55(int) Constant 3
-             107:             TypePointer Uniform 28(float)
-             113:      7(int) Constant 63
-             115:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 116 30 17 113 12 16 21
-             125:      7(int) Constant 65
-             126:             TypeMatrix 31(fvec3) 3
-             127:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 32 13 86
-             128:             TypePointer Function 126
-             130:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 131 127 17 125 12 16 21
-             133:     55(int) Constant 0
-             136:   28(float) Constant 0
-             138:             TypePointer Function 31(fvec3)
-             141:      7(int) Constant 66
-             142:     55(int) Constant 1
-             149:      7(int) Constant 67
-             150:     55(int) Constant 2
-             151:   28(float) Constant 1065353216
-             152:   31(fvec3) ConstantComposite 136 136 151
-             155:      7(int) Constant 70
-             163:      7(int) Constant 71
-             171:      7(int) Constant 73
-             173:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 174 127 17 171 12 16 21
-             181:      7(int) Constant 74
-             182:   31(fvec3) ConstantComposite 136 151 136
-             185:      7(int) Constant 75
-             192:      7(int) Constant 78
-             200:      7(int) Constant 79
-             208:      7(int) Constant 81
-             210:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 211 127 17 208 12 16 21
-             213:   31(fvec3) ConstantComposite 151 136 136
-             216:      7(int) Constant 82
-             222:      7(int) Constant 83
-             229:      7(int) Constant 85
-             231:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 232 127 17 229 12 16 21
-             240:      7(int) Constant 88
-             243:     55(int) Constant 4
-             249:      7(int) Constant 89
-             257:      7(int) Constant 90
-             258:             TypePointer Function 83
-             260:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 261 84 17 257 12 16 21
-             266:             TypePointer Function 81(fvec4)
-             269:      7(int) Constant 91
-             270:   81(fvec4) ConstantComposite 136 151 136 136
-             273:      7(int) Constant 92
-             280:      7(int) Constant 93
-             281:   81(fvec4) ConstantComposite 136 136 136 151
-             284:      7(int) Constant 95
-             286:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 287 82 17 284 12 16 21
-      289(inPos):     38(ptr) Variable Input
-             290:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 291 32 17 284 12 19 291 289(inPos) 37
-             300:      7(int) Constant 96
-             302:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 303 82 17 300 12 16 21
-307(instanceScale):     78(ptr) Variable Input
-             308:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 309 30 17 300 12 19 309 307(instanceScale) 37
-312(instancePos):     38(ptr) Variable Input
-             313:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 314 32 17 300 12 19 314 312(instancePos) 37
-             322:      7(int) Constant 98
-             323:             TypeArray 28(float) 20
-             324:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 30 20
-325(gl_PerVertex):             TypeStruct 81(fvec4) 28(float) 323 323
-             328:      7(int) Constant 24
-             326:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 327 82 17 20 328 12 12 13
-             329:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 330 30 17 20 90 12 12 13
-             331:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 332 324 17 20 229 12 12 13
-             333:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 332 324 17 20 229 12 12 13
-             334:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 335 20 17 322 12 19 335 12 13 326 329 331 333
-             336:             TypePointer Output 325(gl_PerVertex)
-             337:    336(ptr) Variable Output
-             338:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 1 334 17 322 12 19 1 337 37
-             339:             TypePointer Uniform 83
-             349:             TypePointer Output 81(fvec4)
-             352:      7(int) Constant 99
-  353(outNormal):     33(ptr) Variable Output
-             354:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 355 32 17 352 12 19 355 353(outNormal) 37
-   370(inNormal):     38(ptr) Variable Input
-             371:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 372 32 17 352 12 19 372 370(inNormal) 37
-             376:      7(int) Constant 101
-             388:      7(int) Constant 102
-             390:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 391 32 17 388 12 16 21
-             402:             TypePointer Uniform 81(fvec4)
-             408:      7(int) Constant 103
-409(outLightVec):     33(ptr) Variable Output
-             410:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 411 32 17 408 12 19 411 409(outLightVec) 37
-             417:      7(int) Constant 104
- 418(outViewVec):     33(ptr) Variable Output
-             419:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 420 32 17 417 12 19 420 418(outViewVec) 37
-                              Line 1 54 11
+              34:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 32 13 12
+    35(outColor):     33(ptr) Variable Output
+              38:      7(int) Constant 56
+              39:      7(int) Constant 8
+              36:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 37 32 18 38 12 21 37 35(outColor) 39
+              40:             TypePointer Input 31(fvec3)
+              41:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 32 22 12
+     42(inColor):     40(ptr) Variable Input
+              43:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 44 32 18 38 12 21 44 42(inColor) 39
+       47(outUV):     33(ptr) Variable Output
+              50:      7(int) Constant 57
+              48:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 49 32 18 50 12 21 49 47(outUV) 39
+              51:             TypeVector 28(float) 2
+              52:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 30 24
+              53:             TypePointer Input 51(fvec2)
+              54:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 52 22 12
+        55(inUV):     53(ptr) Variable Input
+              56:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 57 52 18 50 12 21 57 55(inUV) 39
+              60:             TypeInt 32 1
+              62:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 61 10 23 12
+              63:             TypePointer Input 60(int)
+              64:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 62 22 12
+65(instanceTexIndex):     63(ptr) Variable Input
+              66:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 67 62 18 50 12 21 67 65(instanceTexIndex) 39
+              73:             TypePointer Function 28(float)
+              74:      7(int) Constant 7
+              75:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 30 74 12
+              79:      7(int) Constant 62
+              77:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 78 30 18 79 12 17 23
+              81:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
+ 83(instanceRot):     40(ptr) Variable Input
+              84:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 85 32 18 79 12 21 85 83(instanceRot) 39
+              86:             TypePointer Input 28(float)
+              87:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 30 22 12
+              90:             TypeVector 28(float) 4
+              91:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 30 23
+              92:             TypeMatrix 90(fvec4) 4
+              94:             TypeBool
+              96:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 95 10 24 12
+              97:    94(bool) ConstantTrue
+              93:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 91 23 97
+         98(UBO):             TypeStruct 92 92 90(fvec4) 28(float) 28(float)
+             101:      7(int) Constant 42
+              99:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 100 93 18 101 74 12 12 13
+             102:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 100 93 18 101 74 12 12 13
+             105:      7(int) Constant 43
+             103:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 104 91 18 105 74 12 12 13
+             108:      7(int) Constant 45
+             106:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 107 30 18 108 39 12 12 13
+             109:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 107 30 18 108 39 12 12 13
+             110:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 111 22 18 79 12 21 111 12 13 99 102 103 106 109
+             112:             TypePointer Uniform 98(UBO)
+             113:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 110 24 12
+        114(ubo):    112(ptr) Variable Uniform
+             115:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 116 110 18 79 12 21 116 114(ubo) 39
+             117:     60(int) Constant 3
+             118:             TypePointer Uniform 28(float)
+             119:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 30 24 12
+             127:      7(int) Constant 63
+             125:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 126 30 18 127 12 17 23
+             136:             TypeMatrix 31(fvec3) 3
+             137:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 32 13 97
+             138:             TypePointer Function 136
+             139:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 137 74 12
+             143:      7(int) Constant 65
+             141:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 142 137 18 143 12 17 23
+             146:     60(int) Constant 0
+             149:   28(float) Constant 0
+             151:             TypePointer Function 31(fvec3)
+             152:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 32 74 12
+             154:     60(int) Constant 1
+             157:      7(int) Constant 66
+             162:     60(int) Constant 2
+             163:   28(float) Constant 1065353216
+             164:   31(fvec3) ConstantComposite 149 149 163
+             167:      7(int) Constant 67
+             170:      7(int) Constant 70
+             178:      7(int) Constant 71
+             187:      7(int) Constant 73
+             185:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 186 137 18 187 12 17 23
+             194:   31(fvec3) ConstantComposite 149 163 149
+             197:      7(int) Constant 74
+             200:      7(int) Constant 75
+             207:      7(int) Constant 78
+             215:      7(int) Constant 79
+             224:      7(int) Constant 81
+             222:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 223 137 18 224 12 17 23
+             227:   31(fvec3) ConstantComposite 163 149 149
+             231:      7(int) Constant 82
+             237:      7(int) Constant 83
+             245:      7(int) Constant 85
+             243:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 244 137 18 245 12 17 23
+             255:      7(int) Constant 88
+             257:     60(int) Constant 4
+             264:      7(int) Constant 89
+             270:             TypePointer Function 92
+             271:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 93 74 12
+             275:      7(int) Constant 90
+             273:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 274 93 18 275 12 17 23
+             281:             TypePointer Function 90(fvec4)
+             282:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 91 74 12
+             284:   90(fvec4) ConstantComposite 149 163 149 149
+             287:      7(int) Constant 91
+             290:      7(int) Constant 92
+             295:   90(fvec4) ConstantComposite 149 149 149 163
+             298:      7(int) Constant 93
+             302:      7(int) Constant 95
+             300:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 301 91 18 302 12 17 23
+      305(inPos):     40(ptr) Variable Input
+             306:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 307 32 18 302 12 21 307 305(inPos) 39
+             318:      7(int) Constant 96
+             316:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 317 91 18 318 12 17 23
+323(instanceScale):     86(ptr) Variable Input
+             324:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 325 30 18 318 12 21 325 323(instanceScale) 39
+328(instancePos):     40(ptr) Variable Input
+             329:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 330 32 18 318 12 21 330 328(instancePos) 39
+             337:             TypeArray 28(float) 22
+             338:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 30 22
+339(gl_PerVertex):             TypeStruct 90(fvec4) 28(float) 337 337
+             342:      7(int) Constant 24
+             340:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 341 91 18 22 342 12 12 13
+             343:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 344 30 18 22 101 12 12 13
+             345:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 346 338 18 22 245 12 12 13
+             347:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 346 338 18 22 245 12 12 13
+             350:      7(int) Constant 98
+             348:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 349 22 18 350 12 21 349 12 13 340 343 345 347
+             351:             TypePointer Output 339(gl_PerVertex)
+             352:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 348 13 12
+             353:    351(ptr) Variable Output
+             354:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 355 348 18 350 12 21 355 353 39
+             356:             TypePointer Uniform 92
+             357:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 93 24 12
+             368:             TypePointer Output 90(fvec4)
+             369:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 91 13 12
+  371(outNormal):     33(ptr) Variable Output
+             374:      7(int) Constant 99
+             372:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 373 32 18 374 12 21 373 371(outNormal) 39
+   390(inNormal):     40(ptr) Variable Input
+             391:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 392 32 18 374 12 21 392 390(inNormal) 39
+             397:      7(int) Constant 101
+             410:      7(int) Constant 102
+             408:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 409 32 18 410 12 17 23
+             422:             TypePointer Uniform 90(fvec4)
+             423:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 91 24 12
+428(outLightVec):     33(ptr) Variable Output
+             431:      7(int) Constant 103
+             429:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 430 32 18 431 12 21 430 428(outLightVec) 39
+ 437(outViewVec):     33(ptr) Variable Output
+             440:      7(int) Constant 104
+             438:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 439 32 18 440 12 21 439 437(outViewVec) 39
+             446:      7(int) Constant 105
         14(main):           4 Function None 5
-              23:             Label
-           70(s):     69(ptr) Variable Function
-          114(c):     69(ptr) Variable Function
-         129(mx):    128(ptr) Variable Function
-         172(my):    128(ptr) Variable Function
-         209(mz):    128(ptr) Variable Function
-     230(rotMat):    128(ptr) Variable Function
-    259(gRotMat):    258(ptr) Variable Function
-     285(locPos):    266(ptr) Variable Function
-        301(pos):    266(ptr) Variable Function
-       389(lPos):    138(ptr) Variable Function
-              24:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 16 14(main)
-              25:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-              26:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 27 27 12 12
-              42:   31(fvec3) Load 39(inColor)
-                              Store 34(outColor) 42
-              43:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 44 44 12 12
-              54:   48(fvec2) Load 51(inUV)
-              62:     55(int) Load 59(instanceTexIndex)
-              63:   28(float) ConvertSToF 62
-              64:   28(float) CompositeExtract 54 0
-              65:   28(float) CompositeExtract 54 1
-              66:   31(fvec3) CompositeConstruct 64 65 63
-                              Store 45(outUV) 66
-              67:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 68 68 12 12
-              73:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 71 70(s) 74
-              79:     78(ptr) AccessChain 75(instanceRot) 12
-              80:   28(float) Load 79
-             108:    107(ptr) AccessChain 103(ubo) 106
-             109:   28(float) Load 108
-             110:   28(float) FAdd 80 109
-             111:   28(float) ExtInst 3(GLSL.std.450) 13(Sin) 110
-                              Store 70(s) 111
-             112:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 113 113 12 12
-             117:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 115 114(c) 74
-             118:     78(ptr) AccessChain 75(instanceRot) 12
-             119:   28(float) Load 118
-             120:    107(ptr) AccessChain 103(ubo) 106
+              15:             Label
+           76(s):     73(ptr) Variable Function
+          124(c):     73(ptr) Variable Function
+         140(mx):    138(ptr) Variable Function
+         184(my):    138(ptr) Variable Function
+         221(mz):    138(ptr) Variable Function
+     242(rotMat):    138(ptr) Variable Function
+    272(gRotMat):    270(ptr) Variable Function
+     299(locPos):    281(ptr) Variable Function
+        315(pos):    281(ptr) Variable Function
+       407(lPos):    151(ptr) Variable Function
+              26:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+              27:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 20 20 12 12
+              25:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 17 14(main)
+              46:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 38 38 12 12
+              45:   31(fvec3) Load 42(inColor)
+                              Store 35(outColor) 45
+              59:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 50 50 12 12
+              58:   51(fvec2) Load 55(inUV)
+              68:     60(int) Load 65(instanceTexIndex)
+              69:   28(float) ConvertSToF 68
+              70:   28(float) CompositeExtract 58 0
+              71:   28(float) CompositeExtract 58 1
+              72:   31(fvec3) CompositeConstruct 70 71 69
+                              Store 47(outUV) 72
+              82:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 79 79 12 12
+              80:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 77 76(s) 81
+              88:     86(ptr) AccessChain 83(instanceRot) 12
+              89:   28(float) Load 88
+             120:    118(ptr) AccessChain 114(ubo) 117
              121:   28(float) Load 120
-             122:   28(float) FAdd 119 121
-             123:   28(float) ExtInst 3(GLSL.std.450) 14(Cos) 122
-                              Store 114(c) 123
-             124:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 125 125 12 12
-             132:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 130 129(mx) 74
-             134:   28(float) Load 114(c)
-             135:   28(float) Load 70(s)
-             137:   31(fvec3) CompositeConstruct 134 135 136
-             139:    138(ptr) AccessChain 129(mx) 133
-                              Store 139 137
-             140:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 141 141 12 12
-             143:   28(float) Load 70(s)
-             144:   28(float) FNegate 143
-             145:   28(float) Load 114(c)
-             146:   31(fvec3) CompositeConstruct 144 145 136
-             147:    138(ptr) AccessChain 129(mx) 142
-                              Store 147 146
-             148:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 149 149 12 12
-             153:    138(ptr) AccessChain 129(mx) 150
-                              Store 153 152
-             154:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 155 155 12 12
-             156:     78(ptr) AccessChain 75(instanceRot) 20
-             157:   28(float) Load 156
-             158:    107(ptr) AccessChain 103(ubo) 106
-             159:   28(float) Load 158
-             160:   28(float) FAdd 157 159
-             161:   28(float) ExtInst 3(GLSL.std.450) 13(Sin) 160
-                              Store 70(s) 161
-             162:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 163 163 12 12
-             164:     78(ptr) AccessChain 75(instanceRot) 20
-             165:   28(float) Load 164
-             166:    107(ptr) AccessChain 103(ubo) 106
-             167:   28(float) Load 166
-             168:   28(float) FAdd 165 167
-             169:   28(float) ExtInst 3(GLSL.std.450) 14(Cos) 168
-                              Store 114(c) 169
-             170:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 171 171 12 12
-             175:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 173 172(my) 74
-             176:   28(float) Load 114(c)
-             177:   28(float) Load 70(s)
-             178:   31(fvec3) CompositeConstruct 176 136 177
-             179:    138(ptr) AccessChain 172(my) 133
-                              Store 179 178
-             180:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 181 181 12 12
-             183:    138(ptr) AccessChain 172(my) 142
-                              Store 183 182
-             184:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 185 185 12 12
-             186:   28(float) Load 70(s)
-             187:   28(float) FNegate 186
-             188:   28(float) Load 114(c)
-             189:   31(fvec3) CompositeConstruct 187 136 188
-             190:    138(ptr) AccessChain 172(my) 150
-                              Store 190 189
-             191:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 192 192 12 12
-             193:     78(ptr) AccessChain 75(instanceRot) 22
-             194:   28(float) Load 193
-             195:    107(ptr) AccessChain 103(ubo) 106
-             196:   28(float) Load 195
-             197:   28(float) FAdd 194 196
-             198:   28(float) ExtInst 3(GLSL.std.450) 13(Sin) 197
-                              Store 70(s) 198
-             199:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 200 200 12 12
-             201:     78(ptr) AccessChain 75(instanceRot) 22
-             202:   28(float) Load 201
-             203:    107(ptr) AccessChain 103(ubo) 106
-             204:   28(float) Load 203
-             205:   28(float) FAdd 202 204
-             206:   28(float) ExtInst 3(GLSL.std.450) 14(Cos) 205
-                              Store 114(c) 206
-             207:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 208 208 12 12
-             212:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 210 209(mz) 74
-             214:    138(ptr) AccessChain 209(mz) 133
-                              Store 214 213
-             215:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 216 216 12 12
-             217:   28(float) Load 114(c)
-             218:   28(float) Load 70(s)
-             219:   31(fvec3) CompositeConstruct 136 217 218
-             220:    138(ptr) AccessChain 209(mz) 142
-                              Store 220 219
-             221:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 222 222 12 12
-             223:   28(float) Load 70(s)
-             224:   28(float) FNegate 223
-             225:   28(float) Load 114(c)
-             226:   31(fvec3) CompositeConstruct 136 224 225
-             227:    138(ptr) AccessChain 209(mz) 150
-                              Store 227 226
-             228:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 229 229 12 12
-             233:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 231 230(rotMat) 74
-             234:         126 Load 209(mz)
-             235:         126 Load 172(my)
-             236:         126 MatrixTimesMatrix 234 235
-             237:         126 Load 129(mx)
-             238:         126 MatrixTimesMatrix 236 237
-                              Store 230(rotMat) 238
-             239:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 240 240 12 12
-             241:     78(ptr) AccessChain 75(instanceRot) 20
-             242:   28(float) Load 241
-             244:    107(ptr) AccessChain 103(ubo) 243
-             245:   28(float) Load 244
-             246:   28(float) FAdd 242 245
-             247:   28(float) ExtInst 3(GLSL.std.450) 13(Sin) 246
-                              Store 70(s) 247
-             248:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 249 249 12 12
-             250:     78(ptr) AccessChain 75(instanceRot) 20
-             251:   28(float) Load 250
-             252:    107(ptr) AccessChain 103(ubo) 243
-             253:   28(float) Load 252
-             254:   28(float) FAdd 251 253
-             255:   28(float) ExtInst 3(GLSL.std.450) 14(Cos) 254
-                              Store 114(c) 255
-             256:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 257 257 12 12
-             262:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 260 259(gRotMat) 74
-             263:   28(float) Load 114(c)
-             264:   28(float) Load 70(s)
-             265:   81(fvec4) CompositeConstruct 263 136 264 136
-             267:    266(ptr) AccessChain 259(gRotMat) 133
-                              Store 267 265
-             268:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 269 269 12 12
-             271:    266(ptr) AccessChain 259(gRotMat) 142
-                              Store 271 270
-             272:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 273 273 12 12
-             274:   28(float) Load 70(s)
-             275:   28(float) FNegate 274
-             276:   28(float) Load 114(c)
-             277:   81(fvec4) CompositeConstruct 275 136 276 136
-             278:    266(ptr) AccessChain 259(gRotMat) 150
-                              Store 278 277
-             279:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 280 280 12 12
-             282:    266(ptr) AccessChain 259(gRotMat) 106
-                              Store 282 281
-             283:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 284 284 12 12
-             288:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 286 285(locPos) 74
-             292:   31(fvec3) Load 289(inPos)
-             293:         126 Load 230(rotMat)
-             294:   31(fvec3) VectorTimesMatrix 292 293
-             295:   28(float) CompositeExtract 294 0
-             296:   28(float) CompositeExtract 294 1
-             297:   28(float) CompositeExtract 294 2
-             298:   81(fvec4) CompositeConstruct 295 296 297 151
-                              Store 285(locPos) 298
-             299:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 300 300 12 12
-             304:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 302 301(pos) 74
-             305:   81(fvec4) Load 285(locPos)
-             306:   31(fvec3) VectorShuffle 305 305 0 1 2
-             310:   28(float) Load 307(instanceScale)
-             311:   31(fvec3) VectorTimesScalar 306 310
-             315:   31(fvec3) Load 312(instancePos)
-             316:   31(fvec3) FAdd 311 315
-             317:   28(float) CompositeExtract 316 0
-             318:   28(float) CompositeExtract 316 1
-             319:   28(float) CompositeExtract 316 2
-             320:   81(fvec4) CompositeConstruct 317 318 319 151
-                              Store 301(pos) 320
-             321:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 322 322 12 12
-             340:    339(ptr) AccessChain 103(ubo) 133
-             341:          83 Load 340
-             342:    339(ptr) AccessChain 103(ubo) 142
-             343:          83 Load 342
-             344:          83 MatrixTimesMatrix 341 343
-             345:          83 Load 259(gRotMat)
-             346:          83 MatrixTimesMatrix 344 345
-             347:   81(fvec4) Load 301(pos)
-             348:   81(fvec4) MatrixTimesVector 346 347
-             350:    349(ptr) AccessChain 337 133
-                              Store 350 348
-             351:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 352 352 12 12
-             356:    339(ptr) AccessChain 103(ubo) 142
-             357:          83 Load 356
-             358:          83 Load 259(gRotMat)
-             359:          83 MatrixTimesMatrix 357 358
-             360:   81(fvec4) CompositeExtract 359 0
-             361:   31(fvec3) VectorShuffle 360 360 0 1 2
-             362:   81(fvec4) CompositeExtract 359 1
-             363:   31(fvec3) VectorShuffle 362 362 0 1 2
-             364:   81(fvec4) CompositeExtract 359 2
-             365:   31(fvec3) VectorShuffle 364 364 0 1 2
-             366:         126 CompositeConstruct 361 363 365
-             367:         126 Load 230(rotMat)
-             368:         126 ExtInst 3(GLSL.std.450) 34(MatrixInverse) 367
-             369:         126 MatrixTimesMatrix 366 368
-             373:   31(fvec3) Load 370(inNormal)
-             374:   31(fvec3) MatrixTimesVector 369 373
-                              Store 353(outNormal) 374
-             375:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 376 376 12 12
-             377:    339(ptr) AccessChain 103(ubo) 142
-             378:          83 Load 377
-             379:   31(fvec3) Load 289(inPos)
-             380:   31(fvec3) Load 312(instancePos)
-             381:   31(fvec3) FAdd 379 380
-             382:   28(float) CompositeExtract 381 0
-             383:   28(float) CompositeExtract 381 1
-             384:   28(float) CompositeExtract 381 2
-             385:   81(fvec4) CompositeConstruct 382 383 384 151
-             386:   81(fvec4) MatrixTimesVector 378 385
-                              Store 301(pos) 386
-             387:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 388 388 12 12
-             392:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 390 389(lPos) 74
-             393:    339(ptr) AccessChain 103(ubo) 142
-             394:          83 Load 393
-             395:   81(fvec4) CompositeExtract 394 0
-             396:   31(fvec3) VectorShuffle 395 395 0 1 2
-             397:   81(fvec4) CompositeExtract 394 1
-             398:   31(fvec3) VectorShuffle 397 397 0 1 2
-             399:   81(fvec4) CompositeExtract 394 2
-             400:   31(fvec3) VectorShuffle 399 399 0 1 2
-             401:         126 CompositeConstruct 396 398 400
-             403:    402(ptr) AccessChain 103(ubo) 150
-             404:   81(fvec4) Load 403
-             405:   31(fvec3) VectorShuffle 404 404 0 1 2
-             406:   31(fvec3) MatrixTimesVector 401 405
-                              Store 389(lPos) 406
-             407:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 408 408 12 12
-             412:   31(fvec3) Load 389(lPos)
-             413:   81(fvec4) Load 301(pos)
-             414:   31(fvec3) VectorShuffle 413 413 0 1 2
-             415:   31(fvec3) FSub 412 414
-                              Store 409(outLightVec) 415
-             416:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 417 417 12 12
-             421:   81(fvec4) Load 301(pos)
-             422:   31(fvec3) VectorShuffle 421 421 0 1 2
-             423:   31(fvec3) FNegate 422
-                              Store 418(outViewVec) 423
+             122:   28(float) FAdd 89 121
+             123:   28(float) ExtInst 3(GLSL.std.450) 13(Sin) 122
+                              Store 76(s) 123
+             129:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 127 127 12 12
+             128:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 125 124(c) 81
+             130:     86(ptr) AccessChain 83(instanceRot) 12
+             131:   28(float) Load 130
+             132:    118(ptr) AccessChain 114(ubo) 117
+             133:   28(float) Load 132
+             134:   28(float) FAdd 131 133
+             135:   28(float) ExtInst 3(GLSL.std.450) 14(Cos) 134
+                              Store 124(c) 135
+             145:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 143 143 12 12
+             144:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 141 140(mx) 81
+             147:   28(float) Load 124(c)
+             148:   28(float) Load 76(s)
+             150:   31(fvec3) CompositeConstruct 147 148 149
+             153:    151(ptr) AccessChain 140(mx) 146
+                              Store 153 150
+             156:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 157 157 12 12
+             155:   28(float) Load 76(s)
+             158:   28(float) FNegate 155
+             159:   28(float) Load 124(c)
+             160:   31(fvec3) CompositeConstruct 158 159 149
+             161:    151(ptr) AccessChain 140(mx) 154
+                              Store 161 160
+             166:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 167 167 12 12
+             165:    151(ptr) AccessChain 140(mx) 162
+                              Store 165 164
+             169:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 170 170 12 12
+             168:     86(ptr) AccessChain 83(instanceRot) 22
+             171:   28(float) Load 168
+             172:    118(ptr) AccessChain 114(ubo) 117
+             173:   28(float) Load 172
+             174:   28(float) FAdd 171 173
+             175:   28(float) ExtInst 3(GLSL.std.450) 13(Sin) 174
+                              Store 76(s) 175
+             177:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 178 178 12 12
+             176:     86(ptr) AccessChain 83(instanceRot) 22
+             179:   28(float) Load 176
+             180:    118(ptr) AccessChain 114(ubo) 117
+             181:   28(float) Load 180
+             182:   28(float) FAdd 179 181
+             183:   28(float) ExtInst 3(GLSL.std.450) 14(Cos) 182
+                              Store 124(c) 183
+             189:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 187 187 12 12
+             188:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 185 184(my) 81
+             190:   28(float) Load 124(c)
+             191:   28(float) Load 76(s)
+             192:   31(fvec3) CompositeConstruct 190 149 191
+             193:    151(ptr) AccessChain 184(my) 146
+                              Store 193 192
+             196:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 197 197 12 12
+             195:    151(ptr) AccessChain 184(my) 154
+                              Store 195 194
+             199:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 200 200 12 12
+             198:   28(float) Load 76(s)
+             201:   28(float) FNegate 198
+             202:   28(float) Load 124(c)
+             203:   31(fvec3) CompositeConstruct 201 149 202
+             204:    151(ptr) AccessChain 184(my) 162
+                              Store 204 203
+             206:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 207 207 12 12
+             205:     86(ptr) AccessChain 83(instanceRot) 24
+             208:   28(float) Load 205
+             209:    118(ptr) AccessChain 114(ubo) 117
+             210:   28(float) Load 209
+             211:   28(float) FAdd 208 210
+             212:   28(float) ExtInst 3(GLSL.std.450) 13(Sin) 211
+                              Store 76(s) 212
+             214:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 215 215 12 12
+             213:     86(ptr) AccessChain 83(instanceRot) 24
+             216:   28(float) Load 213
+             217:    118(ptr) AccessChain 114(ubo) 117
+             218:   28(float) Load 217
+             219:   28(float) FAdd 216 218
+             220:   28(float) ExtInst 3(GLSL.std.450) 14(Cos) 219
+                              Store 124(c) 220
+             226:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 224 224 12 12
+             225:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 222 221(mz) 81
+             228:    151(ptr) AccessChain 221(mz) 146
+                              Store 228 227
+             230:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 231 231 12 12
+             229:   28(float) Load 124(c)
+             232:   28(float) Load 76(s)
+             233:   31(fvec3) CompositeConstruct 149 229 232
+             234:    151(ptr) AccessChain 221(mz) 154
+                              Store 234 233
+             236:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 237 237 12 12
+             235:   28(float) Load 76(s)
+             238:   28(float) FNegate 235
+             239:   28(float) Load 124(c)
+             240:   31(fvec3) CompositeConstruct 149 238 239
+             241:    151(ptr) AccessChain 221(mz) 162
+                              Store 241 240
+             247:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 245 245 12 12
+             246:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 243 242(rotMat) 81
+             248:         136 Load 221(mz)
+             249:         136 Load 184(my)
+             250:         136 MatrixTimesMatrix 248 249
+             251:         136 Load 140(mx)
+             252:         136 MatrixTimesMatrix 250 251
+                              Store 242(rotMat) 252
+             254:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 255 255 12 12
+             253:     86(ptr) AccessChain 83(instanceRot) 22
+             256:   28(float) Load 253
+             258:    118(ptr) AccessChain 114(ubo) 257
+             259:   28(float) Load 258
+             260:   28(float) FAdd 256 259
+             261:   28(float) ExtInst 3(GLSL.std.450) 13(Sin) 260
+                              Store 76(s) 261
+             263:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 264 264 12 12
+             262:     86(ptr) AccessChain 83(instanceRot) 22
+             265:   28(float) Load 262
+             266:    118(ptr) AccessChain 114(ubo) 257
+             267:   28(float) Load 266
+             268:   28(float) FAdd 265 267
+             269:   28(float) ExtInst 3(GLSL.std.450) 14(Cos) 268
+                              Store 124(c) 269
+             277:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 275 275 12 12
+             276:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 273 272(gRotMat) 81
+             278:   28(float) Load 124(c)
+             279:   28(float) Load 76(s)
+             280:   90(fvec4) CompositeConstruct 278 149 279 149
+             283:    281(ptr) AccessChain 272(gRotMat) 146
+                              Store 283 280
+             286:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 287 287 12 12
+             285:    281(ptr) AccessChain 272(gRotMat) 154
+                              Store 285 284
+             289:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 290 290 12 12
+             288:   28(float) Load 76(s)
+             291:   28(float) FNegate 288
+             292:   28(float) Load 124(c)
+             293:   90(fvec4) CompositeConstruct 291 149 292 149
+             294:    281(ptr) AccessChain 272(gRotMat) 162
+                              Store 294 293
+             297:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 298 298 12 12
+             296:    281(ptr) AccessChain 272(gRotMat) 117
+                              Store 296 295
+             304:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 302 302 12 12
+             303:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 300 299(locPos) 81
+             308:   31(fvec3) Load 305(inPos)
+             309:         136 Load 242(rotMat)
+             310:   31(fvec3) VectorTimesMatrix 308 309
+             311:   28(float) CompositeExtract 310 0
+             312:   28(float) CompositeExtract 310 1
+             313:   28(float) CompositeExtract 310 2
+             314:   90(fvec4) CompositeConstruct 311 312 313 163
+                              Store 299(locPos) 314
+             320:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 318 318 12 12
+             319:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 316 315(pos) 81
+             321:   90(fvec4) Load 299(locPos)
+             322:   31(fvec3) VectorShuffle 321 321 0 1 2
+             326:   28(float) Load 323(instanceScale)
+             327:   31(fvec3) VectorTimesScalar 322 326
+             331:   31(fvec3) Load 328(instancePos)
+             332:   31(fvec3) FAdd 327 331
+             333:   28(float) CompositeExtract 332 0
+             334:   28(float) CompositeExtract 332 1
+             335:   28(float) CompositeExtract 332 2
+             336:   90(fvec4) CompositeConstruct 333 334 335 163
+                              Store 315(pos) 336
+             359:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 350 350 12 12
+             358:    356(ptr) AccessChain 114(ubo) 146
+             360:          92 Load 358
+             361:    356(ptr) AccessChain 114(ubo) 154
+             362:          92 Load 361
+             363:          92 MatrixTimesMatrix 360 362
+             364:          92 Load 272(gRotMat)
+             365:          92 MatrixTimesMatrix 363 364
+             366:   90(fvec4) Load 315(pos)
+             367:   90(fvec4) MatrixTimesVector 365 366
+             370:    368(ptr) AccessChain 353 146
+                              Store 370 367
+             376:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 374 374 12 12
+             375:    356(ptr) AccessChain 114(ubo) 154
+             377:          92 Load 375
+             378:          92 Load 272(gRotMat)
+             379:          92 MatrixTimesMatrix 377 378
+             380:   90(fvec4) CompositeExtract 379 0
+             381:   31(fvec3) VectorShuffle 380 380 0 1 2
+             382:   90(fvec4) CompositeExtract 379 1
+             383:   31(fvec3) VectorShuffle 382 382 0 1 2
+             384:   90(fvec4) CompositeExtract 379 2
+             385:   31(fvec3) VectorShuffle 384 384 0 1 2
+             386:         136 CompositeConstruct 381 383 385
+             387:         136 Load 242(rotMat)
+             388:         136 ExtInst 3(GLSL.std.450) 34(MatrixInverse) 387
+             389:         136 MatrixTimesMatrix 386 388
+             393:   31(fvec3) Load 390(inNormal)
+             394:   31(fvec3) MatrixTimesVector 389 393
+                              Store 371(outNormal) 394
+             396:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 397 397 12 12
+             395:    356(ptr) AccessChain 114(ubo) 154
+             398:          92 Load 395
+             399:   31(fvec3) Load 305(inPos)
+             400:   31(fvec3) Load 328(instancePos)
+             401:   31(fvec3) FAdd 399 400
+             402:   28(float) CompositeExtract 401 0
+             403:   28(float) CompositeExtract 401 1
+             404:   28(float) CompositeExtract 401 2
+             405:   90(fvec4) CompositeConstruct 402 403 404 163
+             406:   90(fvec4) MatrixTimesVector 398 405
+                              Store 315(pos) 406
+             412:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 410 410 12 12
+             411:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 408 407(lPos) 81
+             413:    356(ptr) AccessChain 114(ubo) 154
+             414:          92 Load 413
+             415:   90(fvec4) CompositeExtract 414 0
+             416:   31(fvec3) VectorShuffle 415 415 0 1 2
+             417:   90(fvec4) CompositeExtract 414 1
+             418:   31(fvec3) VectorShuffle 417 417 0 1 2
+             419:   90(fvec4) CompositeExtract 414 2
+             420:   31(fvec3) VectorShuffle 419 419 0 1 2
+             421:         136 CompositeConstruct 416 418 420
+             424:    422(ptr) AccessChain 114(ubo) 162
+             425:   90(fvec4) Load 424
+             426:   31(fvec3) VectorShuffle 425 425 0 1 2
+             427:   31(fvec3) MatrixTimesVector 421 426
+                              Store 407(lPos) 427
+             433:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 431 431 12 12
+             432:   31(fvec3) Load 407(lPos)
+             434:   90(fvec4) Load 315(pos)
+             435:   31(fvec3) VectorShuffle 434 434 0 1 2
+             436:   31(fvec3) FSub 432 435
+                              Store 428(outLightVec) 436
+             442:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 440 440 12 12
+             441:   90(fvec4) Load 315(pos)
+             443:   31(fvec3) VectorShuffle 441 441 0 1 2
+             444:   31(fvec3) FNegate 443
+                              Store 437(outViewVec) 444
+             445:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 446 446 12 12
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.debuginfo.hlsl.comp.out b/Test/baseResults/spv.debuginfo.hlsl.comp.out
index 30cd581..107c848 100644
--- a/Test/baseResults/spv.debuginfo.hlsl.comp.out
+++ b/Test/baseResults/spv.debuginfo.hlsl.comp.out
@@ -1,20 +1,20 @@
 spv.debuginfo.hlsl.comp
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 976
+// Id's are bound by 992
 
                               Capability Shader
                               Extension  "SPV_KHR_non_semantic_info"
-               2:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
                3:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint GLCompute 6  "main" 971
+                              EntryPoint GLCompute 6  "main" 987
                               ExecutionMode 6 LocalSize 10 10 1
-               1:             String  ""
+               2:             String  "spv.debuginfo.hlsl.comp"
                9:             String  "float"
               12:             String  "uint"
-              28:             String  "springForce"
-              31:             String  "// OpModuleProcessed auto-map-locations
+              32:             String  "springForce"
+              35:             String  "// OpModuleProcessed auto-map-locations
 // OpModuleProcessed auto-map-bindings
 // OpModuleProcessed entry-point main
 // OpModuleProcessed client vulkan100
@@ -22,154 +22,340 @@
 // OpModuleProcessed keep-uncalled
 // OpModuleProcessed hlsl-offsets
 #line 1
+/*
+The MIT License (MIT)
+
+Copyright (c) 2022 Google LLC
+Copyright (c) 2022 Sascha Willems
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+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 Software.
+
+THE SOFTWARE IS 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 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+*/
+
+struct Particle {
+	float4 pos;
+	float4 vel;
+	float4 uv;
+	float4 normal;
+	float pinned;
+};
+
+[[vk::binding(0)]]
+StructuredBuffer<Particle> particleIn;
+[[vk::binding(1)]]
+RWStructuredBuffer<Particle> particleOut;
+
+struct UBO
+{
+	float deltaT;
+	float particleMass;
+	float springStiffness;
+	float damping;
+	float restDistH;
+	float restDistV;
+	float restDistD;
+	float sphereRadius;
+	float4 spherePos;
+	float4 gravity;
+	int2 particleCount;
+};
+
+cbuffer ubo : register(b2)
+{
+	UBO params;
+};
+
+#ifdef GLSLANG
+layout ( push_constant ) cbuffer PushConstants
+{
+	uint calculateNormals;
+} pushConstants;
+#else
+struct PushConstants
+{
+	uint calculateNormals;
+};
+
+[[vk::push_constant]]
+PushConstants pushConstants;
+#endif
+
+float3 springForce(float3 p0, float3 p1, float restDist)
+{
+	float3 dist = p0 - p1;
+	return normalize(dist) * params.springStiffness * (length(dist) - restDist);
+}
+
+[numthreads(10, 10, 1)]
+void main(uint3 id : SV_DispatchThreadID)
+{
+	uint index = id.y * params.particleCount.x + id.x;
+	if (index > params.particleCount.x * params.particleCount.y)
+		return;
+
+	// Pinned?
+	if (particleIn[index].pinned == 1.0) {
+		particleOut[index].pos = particleOut[index].pos;
+		particleOut[index].vel = float4(0, 0, 0, 0);
+		return;
+	}
+
+	// Initial force from gravity
+	float3 force = params.gravity.xyz * params.particleMass;
+
+	float3 pos = particleIn[index].pos.xyz;
+	float3 vel = particleIn[index].vel.xyz;
+
+	// Spring forces from neighboring particles
+	// left
+	if (id.x > 0) {
+		force += springForce(particleIn[index-1].pos.xyz, pos, params.restDistH);
+	}
+	// right
+	if (id.x < params.particleCount.x - 1) {
+		force += springForce(particleIn[index + 1].pos.xyz, pos, params.restDistH);
+	}
+	// upper
+	if (id.y < params.particleCount.y - 1) {
+		force += springForce(particleIn[index + params.particleCount.x].pos.xyz, pos, params.restDistV);
+	}
+	// lower
+	if (id.y > 0) {
+		force += springForce(particleIn[index - params.particleCount.x].pos.xyz, pos, params.restDistV);
+	}
+	// upper-left
+	if ((id.x > 0) && (id.y < params.particleCount.y - 1)) {
+		force += springForce(particleIn[index + params.particleCount.x - 1].pos.xyz, pos, params.restDistD);
+	}
+	// lower-left
+	if ((id.x > 0) && (id.y > 0)) {
+		force += springForce(particleIn[index - params.particleCount.x - 1].pos.xyz, pos, params.restDistD);
+	}
+	// upper-right
+	if ((id.x < params.particleCount.x - 1) && (id.y < params.particleCount.y - 1)) {
+		force += springForce(particleIn[index + params.particleCount.x + 1].pos.xyz, pos, params.restDistD);
+	}
+	// lower-right
+	if ((id.x < params.particleCount.x - 1) && (id.y > 0)) {
+		force += springForce(particleIn[index - params.particleCount.x + 1].pos.xyz, pos, params.restDistD);
+	}
+
+	force += (-params.damping * vel);
+
+	// Integrate
+	float3 f = force * (1.0 / params.particleMass);
+	particleOut[index].pos = float4(pos + vel * params.deltaT + 0.5 * f * params.deltaT * params.deltaT, 1.0);
+	particleOut[index].vel = float4(vel + f * params.deltaT, 0.0);
+
+	// Sphere collision
+	float3 sphereDist = particleOut[index].pos.xyz - params.spherePos.xyz;
+	if (length(sphereDist) < params.sphereRadius + 0.01) {
+		// If the particle is inside the sphere, push it to the outer radius
+		particleOut[index].pos.xyz = params.spherePos.xyz + normalize(sphereDist) * (params.sphereRadius + 0.01);
+		// Cancel out velocity
+		particleOut[index].vel = float4(0, 0, 0, 0);
+	}
+
+	// Normals
+	if (pushConstants.calculateNormals == 1) {
+		float3 normal = float3(0, 0, 0);
+		float3 a, b, c;
+		if (id.y > 0) {
+			if (id.x > 0) {
+				a = particleIn[index - 1].pos.xyz - pos;
+				b = particleIn[index - params.particleCount.x - 1].pos.xyz - pos;
+				c = particleIn[index - params.particleCount.x].pos.xyz - pos;
+				normal += cross(a,b) + cross(b,c);
+			}
+			if (id.x < params.particleCount.x - 1) {
+				a = particleIn[index - params.particleCount.x].pos.xyz - pos;
+				b = particleIn[index - params.particleCount.x + 1].pos.xyz - pos;
+				c = particleIn[index + 1].pos.xyz - pos;
+				normal += cross(a,b) + cross(b,c);
+			}
+		}
+		if (id.y < params.particleCount.y - 1) {
+			if (id.x > 0) {
+				a = particleIn[index + params.particleCount.x].pos.xyz - pos;
+				b = particleIn[index + params.particleCount.x - 1].pos.xyz - pos;
+				c = particleIn[index - 1].pos.xyz - pos;
+				normal += cross(a,b) + cross(b,c);
+			}
+			if (id.x < params.particleCount.x - 1) {
+				a = particleIn[index + 1].pos.xyz - pos;
+				b = particleIn[index + params.particleCount.x + 1].pos.xyz - pos;
+				c = particleIn[index + params.particleCount.x].pos.xyz - pos;
+				normal += cross(a,b) + cross(b,c);
+			}
+		}
+		particleOut[index].normal = float4(normalize(normal), 0.0f);
+	}
+}
 "
-              40:             String  "p0"
-              44:             String  "p1"
-              48:             String  "restDist"
-              57:             String  "@main"
-              63:             String  "id"
-              71:             String  "dist"
-              83:             String  "int"
-              89:             String  "sphereRadius"
-             100:             String  "gravity"
-             105:             String  "particleCount"
-             108:             String  "UBO"
-             111:             String  "params"
-             115:             String  "ubo"
-             140:             String  "index"
-             163:             String  "bool"
-             177:             String  "normal"
-             184:             String  "pinned"
-             188:             String  "Particle"
-             193:             String  "@data"
-             197:             String  "particleIn"
-             219:             String  "particleOut"
-             244:             String  "force"
-             257:             String  "pos"
-             267:             String  "vel"
-             567:             String  "f"
-             616:             String  "sphereDist"
-             669:             String  "calculateNormals"
-             673:             String  "PushConstants"
-             676:             String  "pushConstants"
-             679:             String  "$Global"
-             719:             String  "a"
-             732:             String  "b"
-             749:             String  "c"
+              42:             String  "p0"
+              48:             String  "p1"
+              52:             String  "restDist"
+              63:             String  "@main"
+              67:             String  "id"
+              75:             String  "dist"
+              90:             String  "int"
+              96:             String  "sphereRadius"
+             107:             String  "gravity"
+             112:             String  "particleCount"
+             115:             String  "UBO"
+             118:             String  "params"
+             122:             String  "ubo"
+             127:             String  ""
+             151:             String  "index"
+             178:             String  "bool"
+             189:             String  "normal"
+             196:             String  "pinned"
+             200:             String  "Particle"
+             206:             String  "@data"
+             210:             String  "particleIn"
+             232:             String  "particleOut"
+             259:             String  "force"
+             273:             String  "pos"
+             283:             String  "vel"
+             575:             String  "f"
+             624:             String  "sphereDist"
+             676:             String  "calculateNormals"
+             680:             String  "PushConstants"
+             684:             String  "pushConstants"
+             687:             String  "$Global"
+             711:             String  "a"
+             717:             String  "b"
+             721:             String  "c"
                               Name 6  "main"
-                              Name 27  "springForce(vf3;vf3;f1;"
-                              Name 24  "p0"
-                              Name 25  "p1"
-                              Name 26  "restDist"
-                              Name 56  "@main(vu3;"
-                              Name 55  "id"
-                              Name 69  "dist"
-                              Name 87  "UBO"
-                              MemberName 87(UBO) 0  "deltaT"
-                              MemberName 87(UBO) 1  "particleMass"
-                              MemberName 87(UBO) 2  "springStiffness"
-                              MemberName 87(UBO) 3  "damping"
-                              MemberName 87(UBO) 4  "restDistH"
-                              MemberName 87(UBO) 5  "restDistV"
-                              MemberName 87(UBO) 6  "restDistD"
-                              MemberName 87(UBO) 7  "sphereRadius"
-                              MemberName 87(UBO) 8  "spherePos"
-                              MemberName 87(UBO) 9  "gravity"
-                              MemberName 87(UBO) 10  "particleCount"
-                              Name 109  "ubo"
-                              MemberName 109(ubo) 0  "params"
-                              Name 117  ""
-                              Name 138  "index"
-                              Name 175  "Particle"
-                              MemberName 175(Particle) 0  "pos"
-                              MemberName 175(Particle) 1  "vel"
-                              MemberName 175(Particle) 2  "uv"
-                              MemberName 175(Particle) 3  "normal"
-                              MemberName 175(Particle) 4  "pinned"
-                              Name 191  "particleIn"
-                              MemberName 191(particleIn) 0  "@data"
-                              Name 199  "particleIn"
-                              Name 215  "particleOut"
-                              MemberName 215(particleOut) 0  "@data"
-                              Name 221  "particleOut"
-                              Name 242  "force"
-                              Name 255  "pos"
-                              Name 265  "vel"
-                              Name 286  "param"
-                              Name 290  "param"
-                              Name 292  "param"
-                              Name 316  "param"
-                              Name 320  "param"
-                              Name 322  "param"
-                              Name 350  "param"
-                              Name 354  "param"
-                              Name 356  "param"
-                              Name 379  "param"
-                              Name 383  "param"
-                              Name 385  "param"
-                              Name 420  "param"
-                              Name 424  "param"
-                              Name 426  "param"
-                              Name 456  "param"
-                              Name 460  "param"
-                              Name 462  "param"
-                              Name 500  "param"
-                              Name 504  "param"
-                              Name 506  "param"
-                              Name 540  "param"
-                              Name 544  "param"
-                              Name 546  "param"
-                              Name 565  "f"
-                              Name 614  "sphereDist"
-                              Name 667  "PushConstants"
-                              MemberName 667(PushConstants) 0  "calculateNormals"
-                              Name 674  "$Global"
-                              MemberName 674($Global) 0  "pushConstants"
-                              Name 681  ""
-                              Name 693  "normal"
-                              Name 717  "a"
-                              Name 730  "b"
-                              Name 747  "c"
-                              Name 969  "id"
-                              Name 971  "id"
-                              Name 973  "param"
-                              MemberDecorate 87(UBO) 0 Offset 0
-                              MemberDecorate 87(UBO) 1 Offset 4
-                              MemberDecorate 87(UBO) 2 Offset 8
-                              MemberDecorate 87(UBO) 3 Offset 12
-                              MemberDecorate 87(UBO) 4 Offset 16
-                              MemberDecorate 87(UBO) 5 Offset 20
-                              MemberDecorate 87(UBO) 6 Offset 24
-                              MemberDecorate 87(UBO) 7 Offset 28
-                              MemberDecorate 87(UBO) 8 Offset 32
-                              MemberDecorate 87(UBO) 9 Offset 48
-                              MemberDecorate 87(UBO) 10 Offset 64
-                              MemberDecorate 109(ubo) 0 Offset 0
-                              Decorate 109(ubo) Block
-                              Decorate 117 DescriptorSet 0
-                              Decorate 117 Binding 2
-                              MemberDecorate 175(Particle) 0 Offset 0
-                              MemberDecorate 175(Particle) 1 Offset 16
-                              MemberDecorate 175(Particle) 2 Offset 32
-                              MemberDecorate 175(Particle) 3 Offset 48
-                              MemberDecorate 175(Particle) 4 Offset 64
-                              Decorate 189 ArrayStride 80
-                              MemberDecorate 191(particleIn) 0 NonWritable
-                              MemberDecorate 191(particleIn) 0 Offset 0
-                              Decorate 191(particleIn) BufferBlock
-                              Decorate 199(particleIn) DescriptorSet 0
-                              Decorate 199(particleIn) Binding 0
-                              Decorate 213 ArrayStride 80
-                              MemberDecorate 215(particleOut) 0 Offset 0
-                              Decorate 215(particleOut) BufferBlock
-                              Decorate 221(particleOut) DescriptorSet 0
-                              Decorate 221(particleOut) Binding 1
-                              MemberDecorate 667(PushConstants) 0 Offset 0
-                              MemberDecorate 674($Global) 0 Offset 0
-                              Decorate 674($Global) Block
-                              Decorate 681 DescriptorSet 0
-                              Decorate 681 Binding 3
-                              Decorate 971(id) BuiltIn GlobalInvocationId
+                              Name 30  "springForce(vf3;vf3;f1;"
+                              Name 27  "p0"
+                              Name 28  "p1"
+                              Name 29  "restDist"
+                              Name 61  "@main(vu3;"
+                              Name 60  "id"
+                              Name 73  "dist"
+                              Name 94  "UBO"
+                              MemberName 94(UBO) 0  "deltaT"
+                              MemberName 94(UBO) 1  "particleMass"
+                              MemberName 94(UBO) 2  "springStiffness"
+                              MemberName 94(UBO) 3  "damping"
+                              MemberName 94(UBO) 4  "restDistH"
+                              MemberName 94(UBO) 5  "restDistV"
+                              MemberName 94(UBO) 6  "restDistD"
+                              MemberName 94(UBO) 7  "sphereRadius"
+                              MemberName 94(UBO) 8  "spherePos"
+                              MemberName 94(UBO) 9  "gravity"
+                              MemberName 94(UBO) 10  "particleCount"
+                              Name 116  "ubo"
+                              MemberName 116(ubo) 0  "params"
+                              Name 125  ""
+                              Name 149  "index"
+                              Name 187  "Particle"
+                              MemberName 187(Particle) 0  "pos"
+                              MemberName 187(Particle) 1  "vel"
+                              MemberName 187(Particle) 2  "uv"
+                              MemberName 187(Particle) 3  "normal"
+                              MemberName 187(Particle) 4  "pinned"
+                              Name 204  "particleIn"
+                              MemberName 204(particleIn) 0  "@data"
+                              Name 213  "particleIn"
+                              Name 228  "particleOut"
+                              MemberName 228(particleOut) 0  "@data"
+                              Name 236  "particleOut"
+                              Name 257  "force"
+                              Name 271  "pos"
+                              Name 281  "vel"
+                              Name 304  "param"
+                              Name 308  "param"
+                              Name 310  "param"
+                              Name 334  "param"
+                              Name 338  "param"
+                              Name 340  "param"
+                              Name 368  "param"
+                              Name 372  "param"
+                              Name 374  "param"
+                              Name 397  "param"
+                              Name 401  "param"
+                              Name 403  "param"
+                              Name 436  "param"
+                              Name 440  "param"
+                              Name 442  "param"
+                              Name 470  "param"
+                              Name 474  "param"
+                              Name 476  "param"
+                              Name 512  "param"
+                              Name 516  "param"
+                              Name 518  "param"
+                              Name 550  "param"
+                              Name 554  "param"
+                              Name 556  "param"
+                              Name 573  "f"
+                              Name 622  "sphereDist"
+                              Name 674  "PushConstants"
+                              MemberName 674(PushConstants) 0  "calculateNormals"
+                              Name 682  "$Global"
+                              MemberName 682($Global) 0  "pushConstants"
+                              Name 690  ""
+                              Name 702  "normal"
+                              Name 709  "a"
+                              Name 715  "b"
+                              Name 719  "c"
+                              Name 985  "id"
+                              Name 987  "id"
+                              Name 989  "param"
+                              MemberDecorate 94(UBO) 0 Offset 0
+                              MemberDecorate 94(UBO) 1 Offset 4
+                              MemberDecorate 94(UBO) 2 Offset 8
+                              MemberDecorate 94(UBO) 3 Offset 12
+                              MemberDecorate 94(UBO) 4 Offset 16
+                              MemberDecorate 94(UBO) 5 Offset 20
+                              MemberDecorate 94(UBO) 6 Offset 24
+                              MemberDecorate 94(UBO) 7 Offset 28
+                              MemberDecorate 94(UBO) 8 Offset 32
+                              MemberDecorate 94(UBO) 9 Offset 48
+                              MemberDecorate 94(UBO) 10 Offset 64
+                              Decorate 116(ubo) Block
+                              MemberDecorate 116(ubo) 0 Offset 0
+                              Decorate 125 Binding 2
+                              Decorate 125 DescriptorSet 0
+                              MemberDecorate 187(Particle) 0 Offset 0
+                              MemberDecorate 187(Particle) 1 Offset 16
+                              MemberDecorate 187(Particle) 2 Offset 32
+                              MemberDecorate 187(Particle) 3 Offset 48
+                              MemberDecorate 187(Particle) 4 Offset 64
+                              Decorate 202 ArrayStride 80
+                              Decorate 204(particleIn) BufferBlock
+                              MemberDecorate 204(particleIn) 0 NonWritable
+                              MemberDecorate 204(particleIn) 0 Offset 0
+                              Decorate 213(particleIn) NonWritable
+                              Decorate 213(particleIn) Binding 0
+                              Decorate 213(particleIn) DescriptorSet 0
+                              Decorate 226 ArrayStride 80
+                              Decorate 228(particleOut) BufferBlock
+                              MemberDecorate 228(particleOut) 0 Offset 0
+                              Decorate 236(particleOut) Binding 1
+                              Decorate 236(particleOut) DescriptorSet 0
+                              MemberDecorate 674(PushConstants) 0 Offset 0
+                              Decorate 682($Global) Block
+                              MemberDecorate 682($Global) 0 Offset 0
+                              Decorate 690 Binding 3
+                              Decorate 690 DescriptorSet 0
+                              Decorate 987(id) BuiltIn GlobalInvocationId
                4:             TypeVoid
                5:             TypeFunction 4
                8:             TypeFloat 32
@@ -177,1059 +363,1068 @@
               14:     11(int) Constant 32
               15:     11(int) Constant 6
               16:     11(int) Constant 0
-              13:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 12 14 15 16
+              13:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 12 14 15 16
               17:     11(int) Constant 3
-              10:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 9 14 17 16
+              10:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 9 14 17 16
               18:             TypeVector 8(float) 3
-              19:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 17
+              19:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 17
               20:             TypePointer Function 18(fvec3)
-              21:             TypePointer Function 8(float)
-              22:             TypeFunction 18(fvec3) 20(ptr) 20(ptr) 21(ptr)
-              23:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 19 19 19 10
-              30:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 1 31
-              33:     11(int) Constant 1
-              34:     11(int) Constant 4
-              35:     11(int) Constant 5
-              32:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 33 34 30 35
-              29:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 28 23 30 16 16 32 28 17 16
-              39:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 40 19 30 16 16 29 34 33
-              42:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
-              45:     11(int) Constant 2
-              43:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 44 19 30 16 16 29 34 45
-              47:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 48 10 30 16 16 29 34 17
-              50:             TypeVector 11(int) 3
-              51:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 13 17
-              52:             TypePointer Function 50(ivec3)
-              53:             TypeFunction 4 52(ptr)
-              54:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 4 51
-              58:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 57 54 30 16 16 32 57 17 16
-              62:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 63 51 30 16 16 58 34 33
-              68:     11(int) Constant 76
-              70:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 71 19 30 68 16 29 34
-              77:     11(int) Constant 77
-              80:             TypeVector 8(float) 4
-              81:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 34
-              82:             TypeInt 32 1
-              84:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 83 14 34 16
-              85:             TypeVector 82(int) 2
-              86:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 84 45
-         87(UBO):             TypeStruct 8(float) 8(float) 8(float) 8(float) 8(float) 8(float) 8(float) 8(float) 80(fvec4) 80(fvec4) 85(ivec2)
-              90:     11(int) Constant 48
-              91:     11(int) Constant 20
-              88:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 89 10 30 90 91 16 16 17
-              92:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 89 10 30 90 91 16 16 17
-              93:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 89 10 30 90 91 16 16 17
-              94:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 89 10 30 90 91 16 16 17
-              95:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 89 10 30 90 91 16 16 17
-              96:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 89 10 30 90 91 16 16 17
-              97:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 89 10 30 90 91 16 16 17
-              98:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 89 10 30 90 91 16 16 17
-             101:     11(int) Constant 50
-             102:     11(int) Constant 16
-              99:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 100 81 30 101 102 16 16 17
-             103:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 100 81 30 101 102 16 16 17
-             106:     11(int) Constant 51
-             104:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 105 86 30 106 91 16 16 17
-             107:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 108 33 30 77 16 32 108 16 17 88 92 93 94 95 96 97 98 99 103 104
-        109(ubo):             TypeStruct 87(UBO)
-             112:     11(int) Constant 56
-             113:     11(int) Constant 12
-             110:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 111 107 30 112 113 16 16 17
-             114:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 115 33 30 77 16 32 115 16 17 110
-             116:             TypePointer Uniform 109(ubo)
-             117:    116(ptr) Variable Uniform
-             119:     11(int) Constant 8
-             118:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 1 114 30 77 16 32 1 117 119
-             120:     82(int) Constant 0
-             121:     82(int) Constant 2
-             122:             TypePointer Uniform 8(float)
-             136:     11(int) Constant 83
-             137:             TypePointer Function 11(int)
-             139:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 140 13 30 136 16 58 34
-             144:     82(int) Constant 10
-             145:             TypePointer Uniform 82(int)
-             154:     11(int) Constant 84
-             162:             TypeBool
-             164:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
-             170:     11(int) Constant 85
-             174:     11(int) Constant 88
-   175(Particle):             TypeStruct 80(fvec4) 80(fvec4) 80(fvec4) 80(fvec4) 8(float)
-             178:     11(int) Constant 30
-             179:     11(int) Constant 15
-             176:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 177 81 30 178 179 16 16 17
-             180:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 177 81 30 178 179 16 16 17
-             181:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 177 81 30 178 179 16 16 17
-             182:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 177 81 30 178 179 16 16 17
-             185:     11(int) Constant 31
-             186:     11(int) Constant 14
-             183:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 184 10 30 185 186 16 16 17
-             187:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 188 33 30 174 16 32 188 16 17 176 180 181 182 183
-             189:             TypeRuntimeArray 175(Particle)
-             190:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 187 16
- 191(particleIn):             TypeStruct 189
-             194:     11(int) Constant 35
-             195:     11(int) Constant 28
-             192:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 193 190 30 194 195 16 16 17
-             196:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 197 33 30 174 16 32 197 16 17 192
-             198:             TypePointer Uniform 191(particleIn)
- 199(particleIn):    198(ptr) Variable Uniform
-             200:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 197 196 30 174 16 32 197 199(particleIn) 119
-             202:     82(int) Constant 4
-             205:    8(float) Constant 1065353216
-             206:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
-             212:     11(int) Constant 89
-             213:             TypeRuntimeArray 175(Particle)
-             214:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 187 16
-215(particleOut):             TypeStruct 213
-             217:     11(int) Constant 37
-             216:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 193 214 30 217 178 16 16 17
-             218:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 219 33 30 212 16 32 219 16 17 216
-             220:             TypePointer Uniform 215(particleOut)
-221(particleOut):    220(ptr) Variable Uniform
-             222:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 219 218 30 212 16 32 219 221(particleOut) 119
-             225:             TypePointer Uniform 80(fvec4)
-             230:     11(int) Constant 90
-             232:     82(int) Constant 1
-             233:    8(float) Constant 0
-             234:   80(fvec4) ConstantComposite 233 233 233 233
-             237:     11(int) Constant 91
-             241:     11(int) Constant 95
-             243:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 244 19 30 241 16 58 34
-             246:     82(int) Constant 9
-             254:     11(int) Constant 97
-             256:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 257 19 30 254 16 58 34
-             264:     11(int) Constant 98
-             266:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 267 19 30 264 16 58 34
-             274:     11(int) Constant 102
-             277:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
-             283:     11(int) Constant 103
-             300:     11(int) Constant 106
-             307:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
-             313:     11(int) Constant 107
-             330:     11(int) Constant 110
-             337:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
-             343:     11(int) Constant 111
-             349:     82(int) Constant 5
-             364:     11(int) Constant 114
-             367:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
-             373:     11(int) Constant 115
-             393:     11(int) Constant 118
-             396:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
-             404:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
-             406:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
-             412:     11(int) Constant 119
-             419:     82(int) Constant 6
-             434:     11(int) Constant 122
-             437:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
-             441:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
-             443:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
-             449:     11(int) Constant 123
-             470:     11(int) Constant 126
-             477:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
-             485:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
-             487:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
-             493:     11(int) Constant 127
-             514:     11(int) Constant 130
-             521:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
-             525:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
-             527:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
-             533:     11(int) Constant 131
-             554:     11(int) Constant 134
-             555:     82(int) Constant 3
-             564:     11(int) Constant 137
-             566:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 567 19 30 564 16 58 34
-             575:     11(int) Constant 138
-             583:    8(float) Constant 1056964608
-             599:     11(int) Constant 139
-             613:     11(int) Constant 142
-             615:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 616 19 30 613 16 58 34
-             622:     82(int) Constant 8
-             628:     11(int) Constant 143
-             631:     82(int) Constant 7
-             634:    8(float) Constant 1008981770
-             636:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
-             642:     11(int) Constant 145
-             661:     11(int) Constant 147
-             666:     11(int) Constant 151
-667(PushConstants):             TypeStruct 11(int)
-             670:     11(int) Constant 67
-             671:     11(int) Constant 23
-             668:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 669 13 30 670 671 16 16 17
-             672:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 673 33 30 666 16 32 673 16 17 668
-    674($Global):             TypeStruct 667(PushConstants)
-             677:     11(int) Constant 71
-             675:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 676 672 30 677 179 16 16 17
-             678:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 679 33 30 666 16 32 679 16 17 675
-             680:             TypePointer Uniform 674($Global)
-             681:    680(ptr) Variable Uniform
-             682:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 1 678 30 666 16 32 1 681 119
-             683:             TypePointer Uniform 11(int)
-             686:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
-             692:     11(int) Constant 152
-             694:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 177 19 30 692 16 58 34
-             696:   18(fvec3) ConstantComposite 233 233 233
-             698:     11(int) Constant 154
-             701:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
-             707:     11(int) Constant 155
-             710:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
-             716:     11(int) Constant 156
-             718:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 719 19 30 716 16 58 34
-             729:     11(int) Constant 157
-             731:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 732 19 30 729 16 58 34
-             746:     11(int) Constant 158
-             748:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 749 19 30 746 16 58 34
-             762:     11(int) Constant 159
-             774:     11(int) Constant 161
-             781:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
-             787:     11(int) Constant 162
-             799:     11(int) Constant 163
-             812:     11(int) Constant 164
-             821:     11(int) Constant 165
-             833:     11(int) Constant 168
-             840:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
-             846:     11(int) Constant 169
-             849:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
-             855:     11(int) Constant 170
-             867:     11(int) Constant 171
-             880:     11(int) Constant 172
-             889:     11(int) Constant 173
-             901:     11(int) Constant 175
-             908:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 163 14 45 16
-             914:     11(int) Constant 176
-             923:     11(int) Constant 177
-             936:     11(int) Constant 178
-             948:     11(int) Constant 179
-             960:     11(int) Constant 182
-             970:             TypePointer Input 50(ivec3)
-         971(id):    970(ptr) Variable Input
-                              Line 1 82 1
+              21:     11(int) Constant 7
+              22:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 19 21 16
+              23:             TypePointer Function 8(float)
+              24:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 10 21 16
+              25:             TypeFunction 18(fvec3) 20(ptr) 20(ptr) 23(ptr)
+              26:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 19 19 19 10
+              34:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 2 35
+              36:     11(int) Constant 75
+              38:     11(int) Constant 1
+              39:     11(int) Constant 4
+              40:     11(int) Constant 5
+              37:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 38 39 34 40
+              33:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 32 26 34 36 16 37 32 17 36
+              41:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 42 19 34 36 16 33 39 38
+              44:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
+              49:     11(int) Constant 2
+              47:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 48 19 34 36 16 33 39 49
+              51:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 52 10 34 36 16 33 39 17
+              54:             TypeVector 11(int) 3
+              55:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 13 17
+              56:             TypePointer Function 54(ivec3)
+              57:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 55 21 16
+              58:             TypeFunction 4 56(ptr)
+              59:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 4 55
+              65:     11(int) Constant 82
+              64:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 63 59 34 65 16 37 63 17 65
+              66:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 67 55 34 65 16 64 39 38
+              72:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 34 16 16 33
+              76:     11(int) Constant 76
+              74:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 75 19 34 76 16 72 39
+              85:     11(int) Constant 77
+              87:             TypeVector 8(float) 4
+              88:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 39
+              89:             TypeInt 32 1
+              91:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 90 14 39 16
+              92:             TypeVector 89(int) 2
+              93:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 91 49
+         94(UBO):             TypeStruct 8(float) 8(float) 8(float) 8(float) 8(float) 8(float) 8(float) 8(float) 87(fvec4) 87(fvec4) 92(ivec2)
+              97:     11(int) Constant 48
+              98:     11(int) Constant 20
+              95:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 96 10 34 97 98 16 16 17
+              99:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 96 10 34 97 98 16 16 17
+             100:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 96 10 34 97 98 16 16 17
+             101:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 96 10 34 97 98 16 16 17
+             102:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 96 10 34 97 98 16 16 17
+             103:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 96 10 34 97 98 16 16 17
+             104:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 96 10 34 97 98 16 16 17
+             105:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 96 10 34 97 98 16 16 17
+             108:     11(int) Constant 50
+             109:     11(int) Constant 16
+             106:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 107 88 34 108 109 16 16 17
+             110:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 107 88 34 108 109 16 16 17
+             113:     11(int) Constant 51
+             111:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 112 93 34 113 98 16 16 17
+             114:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 115 38 34 85 16 37 115 16 17 95 99 100 101 102 103 104 105 106 110 111
+        116(ubo):             TypeStruct 94(UBO)
+             119:     11(int) Constant 56
+             120:     11(int) Constant 12
+             117:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 118 114 34 119 120 16 16 17
+             121:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 122 38 34 85 16 37 122 16 17 117
+             123:             TypePointer Uniform 116(ubo)
+             124:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 121 49 16
+             125:    123(ptr) Variable Uniform
+             128:     11(int) Constant 8
+             126:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 127 121 34 85 16 37 127 125 128
+             129:     89(int) Constant 0
+             130:     89(int) Constant 2
+             131:             TypePointer Uniform 8(float)
+             132:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 10 49 16
+             146:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 34 16 16 64
+             147:             TypePointer Function 11(int)
+             148:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 13 21 16
+             152:     11(int) Constant 83
+             150:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 151 13 34 152 16 146 39
+             158:     89(int) Constant 10
+             159:             TypePointer Uniform 89(int)
+             160:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 91 49 16
+             170:     11(int) Constant 84
+             177:             TypeBool
+             179:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 178 14 49 16
+             185:     11(int) Constant 85
+   187(Particle):             TypeStruct 87(fvec4) 87(fvec4) 87(fvec4) 87(fvec4) 8(float)
+             190:     11(int) Constant 30
+             191:     11(int) Constant 15
+             188:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 189 88 34 190 191 16 16 17
+             192:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 189 88 34 190 191 16 16 17
+             193:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 189 88 34 190 191 16 16 17
+             194:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 189 88 34 190 191 16 16 17
+             197:     11(int) Constant 31
+             198:     11(int) Constant 14
+             195:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 196 10 34 197 198 16 16 17
+             201:     11(int) Constant 88
+             199:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 200 38 34 201 16 37 200 16 17 188 192 193 194 195
+             202:             TypeRuntimeArray 187(Particle)
+             203:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 199 16
+ 204(particleIn):             TypeStruct 202
+             207:     11(int) Constant 35
+             208:     11(int) Constant 28
+             205:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 206 203 34 207 208 16 16 17
+             209:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 210 38 34 201 16 37 210 16 17 205
+             211:             TypePointer Uniform 204(particleIn)
+             212:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 209 49 16
+ 213(particleIn):    211(ptr) Variable Uniform
+             214:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 210 209 34 201 16 37 210 213(particleIn) 128
+             218:     89(int) Constant 4
+             221:    8(float) Constant 1065353216
+             225:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 34 16 16 146
+             226:             TypeRuntimeArray 187(Particle)
+             227:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 199 16
+228(particleOut):             TypeStruct 226
+             230:     11(int) Constant 37
+             229:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 206 227 34 230 190 16 16 17
+             233:     11(int) Constant 89
+             231:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 232 38 34 233 16 37 232 16 17 229
+             234:             TypePointer Uniform 228(particleOut)
+             235:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 231 49 16
+236(particleOut):    234(ptr) Variable Uniform
+             237:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 232 231 34 233 16 37 232 236(particleOut) 128
+             242:             TypePointer Uniform 87(fvec4)
+             243:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 88 49 16
+             249:     11(int) Constant 90
+             250:     89(int) Constant 1
+             251:    8(float) Constant 0
+             252:   87(fvec4) ConstantComposite 251 251 251 251
+             255:     11(int) Constant 91
+             260:     11(int) Constant 95
+             258:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 259 19 34 260 16 146 39
+             264:     89(int) Constant 9
+             274:     11(int) Constant 97
+             272:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 273 19 34 274 16 146 39
+             284:     11(int) Constant 98
+             282:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 283 19 34 284 16 146 39
+             293:     11(int) Constant 102
+             298:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 34 16 16 146
+             302:     11(int) Constant 103
+             319:     11(int) Constant 106
+             328:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 34 16 16 146
+             332:     11(int) Constant 107
+             349:     11(int) Constant 110
+             358:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 34 16 16 146
+             362:     11(int) Constant 111
+             367:     89(int) Constant 5
+             383:     11(int) Constant 114
+             388:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 34 16 16 146
+             392:     11(int) Constant 115
+             412:     11(int) Constant 118
+             425:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 34 16 16 146
+             429:     11(int) Constant 119
+             435:     89(int) Constant 6
+             451:     11(int) Constant 122
+             460:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 34 16 16 146
+             464:     11(int) Constant 123
+             485:     11(int) Constant 126
+             502:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 34 16 16 146
+             506:     11(int) Constant 127
+             527:     11(int) Constant 130
+             540:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 34 16 16 146
+             544:     11(int) Constant 131
+             562:     89(int) Constant 3
+             566:     11(int) Constant 134
+             576:     11(int) Constant 137
+             574:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 575 19 34 576 16 146 39
+             586:     11(int) Constant 138
+             593:    8(float) Constant 1056964608
+             610:     11(int) Constant 139
+             625:     11(int) Constant 142
+             623:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 624 19 34 625 16 146 39
+             632:     89(int) Constant 8
+             639:     11(int) Constant 143
+             641:     89(int) Constant 7
+             644:    8(float) Constant 1008981770
+             649:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 34 16 16 146
+             653:     11(int) Constant 145
+             672:     11(int) Constant 147
+674(PushConstants):             TypeStruct 11(int)
+             677:     11(int) Constant 67
+             678:     11(int) Constant 23
+             675:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 676 13 34 677 678 16 16 17
+             681:     11(int) Constant 151
+             679:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 680 38 34 681 16 37 680 16 17 675
+    682($Global):             TypeStruct 674(PushConstants)
+             685:     11(int) Constant 71
+             683:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 684 679 34 685 191 16 16 17
+             686:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 687 38 34 681 16 37 687 16 17 683
+             688:             TypePointer Uniform 682($Global)
+             689:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 686 49 16
+             690:    688(ptr) Variable Uniform
+             691:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 127 686 34 681 16 37 127 690 128
+             692:             TypePointer Uniform 11(int)
+             693:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 13 49 16
+             701:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 34 16 16 146
+             704:     11(int) Constant 152
+             703:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 189 19 34 704 16 701 39
+             708:   18(fvec3) ConstantComposite 251 251 251
+             712:     11(int) Constant 153
+             710:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 711 19 34 712 16 701 39
+             716:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 717 19 34 712 16 701 39
+             720:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 721 19 34 712 16 701 39
+             725:     11(int) Constant 154
+             730:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 34 16 16 701
+             734:     11(int) Constant 155
+             739:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 34 16 16 730
+             743:     11(int) Constant 156
+             752:     11(int) Constant 157
+             765:     11(int) Constant 158
+             777:     11(int) Constant 159
+             789:     11(int) Constant 161
+             798:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 34 16 16 730
+             802:     11(int) Constant 162
+             814:     11(int) Constant 163
+             827:     11(int) Constant 164
+             836:     11(int) Constant 165
+             848:     11(int) Constant 168
+             857:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 34 16 16 701
+             861:     11(int) Constant 169
+             866:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 34 16 16 857
+             870:     11(int) Constant 170
+             882:     11(int) Constant 171
+             895:     11(int) Constant 172
+             904:     11(int) Constant 173
+             916:     11(int) Constant 175
+             925:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 34 16 16 857
+             929:     11(int) Constant 176
+             938:     11(int) Constant 177
+             951:     11(int) Constant 178
+             963:     11(int) Constant 179
+             975:     11(int) Constant 182
+             986:             TypePointer Input 54(ivec3)
+         987(id):    986(ptr) Variable Input
          6(main):           4 Function None 5
                7:             Label
-         969(id):     52(ptr) Variable Function
-      973(param):     52(ptr) Variable Function
-                              Line 1 82 0
-             972:   50(ivec3) Load 971(id)
-                              Store 969(id) 972
-             974:   50(ivec3) Load 969(id)
-                              Store 973(param) 974
-             975:           4 FunctionCall 56(@main(vu3;) 973(param)
+         985(id):     56(ptr) Variable Function
+      989(param):     56(ptr) Variable Function
+             988:   54(ivec3) Load 987(id)
+                              Store 985(id) 988
+             990:   54(ivec3) Load 985(id)
+                              Store 989(param) 990
+             991:           4 FunctionCall 61(@main(vu3;) 989(param)
                               Return
                               FunctionEnd
-                              Line 1 75 1
-27(springForce(vf3;vf3;f1;):   18(fvec3) Function None 22
-          24(p0):     20(ptr) FunctionParameter
-          25(p1):     20(ptr) FunctionParameter
-    26(restDist):     21(ptr) FunctionParameter
-              36:             Label
-        69(dist):     20(ptr) Variable Function
-              37:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 29
-              38:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 16 16 16 16
-              41:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 39 24(p0) 42
-              46:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 43 25(p1) 42
-              49:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 47 26(restDist) 42
-              65:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 29 27(springForce(vf3;vf3;f1;)
-              66:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 29
-              67:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 68 68 16 16
-              72:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 70 69(dist) 42
-              73:   18(fvec3) Load 24(p0)
-              74:   18(fvec3) Load 25(p1)
-              75:   18(fvec3) FSub 73 74
-                              Store 69(dist) 75
-              76:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 77 77 16 16
-              78:   18(fvec3) Load 69(dist)
-              79:   18(fvec3) ExtInst 3(GLSL.std.450) 69(Normalize) 78
-             123:    122(ptr) AccessChain 117 120 121
-             124:    8(float) Load 123
-             125:   18(fvec3) VectorTimesScalar 79 124
-             126:   18(fvec3) Load 69(dist)
-             127:    8(float) ExtInst 3(GLSL.std.450) 66(Length) 126
-             128:    8(float) Load 26(restDist)
-             129:    8(float) FSub 127 128
-             130:   18(fvec3) VectorTimesScalar 125 129
-                              ReturnValue 130
+30(springForce(vf3;vf3;f1;):   18(fvec3) Function None 25
+          27(p0):     20(ptr) FunctionParameter
+          28(p1):     20(ptr) FunctionParameter
+    29(restDist):     23(ptr) FunctionParameter
+              31:             Label
+        73(dist):     20(ptr) Variable Function
+              45:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 33
+              46:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 36 36 16 16
+              43:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 41 27(p0) 44
+              50:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 47 28(p1) 44
+              53:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 51 29(restDist) 44
+              71:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 33 30(springForce(vf3;vf3;f1;)
+              78:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 72
+              79:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 76 76 16 16
+              77:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 74 73(dist) 44
+              80:   18(fvec3) Load 27(p0)
+              81:   18(fvec3) Load 28(p1)
+              82:   18(fvec3) FSub 80 81
+                              Store 73(dist) 82
+              84:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 85 85 16 16
+              83:   18(fvec3) Load 73(dist)
+              86:   18(fvec3) ExtInst 3(GLSL.std.450) 69(Normalize) 83
+             133:    131(ptr) AccessChain 125 129 130
+             134:    8(float) Load 133
+             135:   18(fvec3) VectorTimesScalar 86 134
+             136:   18(fvec3) Load 73(dist)
+             137:    8(float) ExtInst 3(GLSL.std.450) 66(Length) 136
+             138:    8(float) Load 29(restDist)
+             139:    8(float) FSub 137 138
+             140:   18(fvec3) VectorTimesScalar 135 139
+                              ReturnValue 140
                               FunctionEnd
-                              Line 1 82 1
-  56(@main(vu3;):           4 Function None 53
-          55(id):     52(ptr) FunctionParameter
-              59:             Label
-      138(index):    137(ptr) Variable Function
-      242(force):     20(ptr) Variable Function
-        255(pos):     20(ptr) Variable Function
-        265(vel):     20(ptr) Variable Function
-      286(param):     20(ptr) Variable Function
-      290(param):     20(ptr) Variable Function
-      292(param):     21(ptr) Variable Function
-      316(param):     20(ptr) Variable Function
-      320(param):     20(ptr) Variable Function
-      322(param):     21(ptr) Variable Function
-      350(param):     20(ptr) Variable Function
-      354(param):     20(ptr) Variable Function
-      356(param):     21(ptr) Variable Function
-      379(param):     20(ptr) Variable Function
-      383(param):     20(ptr) Variable Function
-      385(param):     21(ptr) Variable Function
-      420(param):     20(ptr) Variable Function
-      424(param):     20(ptr) Variable Function
-      426(param):     21(ptr) Variable Function
-      456(param):     20(ptr) Variable Function
-      460(param):     20(ptr) Variable Function
-      462(param):     21(ptr) Variable Function
-      500(param):     20(ptr) Variable Function
-      504(param):     20(ptr) Variable Function
-      506(param):     21(ptr) Variable Function
-      540(param):     20(ptr) Variable Function
-      544(param):     20(ptr) Variable Function
-      546(param):     21(ptr) Variable Function
-          565(f):     20(ptr) Variable Function
- 614(sphereDist):     20(ptr) Variable Function
-     693(normal):     20(ptr) Variable Function
-          717(a):     20(ptr) Variable Function
-          730(b):     20(ptr) Variable Function
-          747(c):     20(ptr) Variable Function
-              60:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
-              61:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 16 16 16 16
-              64:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 62 55(id) 42
-             133:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 58 56(@main(vu3;)
-             134:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
-             135:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 136 136 16 16
-             141:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 139 138(index) 42
-             142:    137(ptr) AccessChain 55(id) 33
-             143:     11(int) Load 142
-             146:    145(ptr) AccessChain 117 120 144 16
-             147:     82(int) Load 146
-             148:     11(int) Bitcast 147
-             149:     11(int) IMul 143 148
-             150:    137(ptr) AccessChain 55(id) 16
-             151:     11(int) Load 150
-             152:     11(int) IAdd 149 151
-                              Store 138(index) 152
-             153:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 154 154 16 16
-             155:     11(int) Load 138(index)
-             156:    145(ptr) AccessChain 117 120 144 16
-             157:     82(int) Load 156
-             158:    145(ptr) AccessChain 117 120 144 33
-             159:     82(int) Load 158
-             160:     82(int) IMul 157 159
-             161:     11(int) Bitcast 160
-             165:   162(bool) UGreaterThan 155 161
-                              SelectionMerge 167 None
-                              BranchConditional 165 166 167
-             166:               Label
-             168:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
-             169:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 170 170 16 16
+  61(@main(vu3;):           4 Function None 58
+          60(id):     56(ptr) FunctionParameter
+              62:             Label
+      149(index):    147(ptr) Variable Function
+      257(force):     20(ptr) Variable Function
+        271(pos):     20(ptr) Variable Function
+        281(vel):     20(ptr) Variable Function
+      304(param):     20(ptr) Variable Function
+      308(param):     20(ptr) Variable Function
+      310(param):     23(ptr) Variable Function
+      334(param):     20(ptr) Variable Function
+      338(param):     20(ptr) Variable Function
+      340(param):     23(ptr) Variable Function
+      368(param):     20(ptr) Variable Function
+      372(param):     20(ptr) Variable Function
+      374(param):     23(ptr) Variable Function
+      397(param):     20(ptr) Variable Function
+      401(param):     20(ptr) Variable Function
+      403(param):     23(ptr) Variable Function
+      436(param):     20(ptr) Variable Function
+      440(param):     20(ptr) Variable Function
+      442(param):     23(ptr) Variable Function
+      470(param):     20(ptr) Variable Function
+      474(param):     20(ptr) Variable Function
+      476(param):     23(ptr) Variable Function
+      512(param):     20(ptr) Variable Function
+      516(param):     20(ptr) Variable Function
+      518(param):     23(ptr) Variable Function
+      550(param):     20(ptr) Variable Function
+      554(param):     20(ptr) Variable Function
+      556(param):     23(ptr) Variable Function
+          573(f):     20(ptr) Variable Function
+ 622(sphereDist):     20(ptr) Variable Function
+     702(normal):     20(ptr) Variable Function
+          709(a):     20(ptr) Variable Function
+          715(b):     20(ptr) Variable Function
+          719(c):     20(ptr) Variable Function
+              69:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 64
+              70:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 65 65 16 16
+              68:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 66 60(id) 44
+             145:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 64 61(@main(vu3;)
+             154:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 146
+             155:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 152 152 16 16
+             153:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 150 149(index) 44
+             156:    147(ptr) AccessChain 60(id) 38
+             157:     11(int) Load 156
+             161:    159(ptr) AccessChain 125 129 158 16
+             162:     89(int) Load 161
+             163:     11(int) Bitcast 162
+             164:     11(int) IMul 157 163
+             165:    147(ptr) AccessChain 60(id) 16
+             166:     11(int) Load 165
+             167:     11(int) IAdd 164 166
+                              Store 149(index) 167
+             169:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 170 170 16 16
+             168:     11(int) Load 149(index)
+             171:    159(ptr) AccessChain 125 129 158 16
+             172:     89(int) Load 171
+             173:    159(ptr) AccessChain 125 129 158 38
+             174:     89(int) Load 173
+             175:     89(int) IMul 172 174
+             176:     11(int) Bitcast 175
+             180:   177(bool) UGreaterThan 168 176
+                              SelectionMerge 182 None
+                              BranchConditional 180 181 182
+             181:               Label
+             183:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 146
+             184:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 185 185 16 16
                                 Return
-             167:             Label
-             172:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
-             173:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 174 174 16 16
-             201:     11(int) Load 138(index)
-             203:    122(ptr) AccessChain 199(particleIn) 120 201 202
-             204:    8(float) Load 203
-             207:   162(bool) FOrdEqual 204 205
-                              SelectionMerge 209 None
-                              BranchConditional 207 208 209
-             208:               Label
-             210:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
-             211:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 212 212 16 16
-             223:     11(int)   Load 138(index)
-             224:     11(int)   Load 138(index)
-             226:    225(ptr)   AccessChain 221(particleOut) 120 224 120
-             227:   80(fvec4)   Load 226
-             228:    225(ptr)   AccessChain 221(particleOut) 120 223 120
-                                Store 228 227
-             229:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 230 230 16 16
-             231:     11(int)   Load 138(index)
-             235:    225(ptr)   AccessChain 221(particleOut) 120 231 232
-                                Store 235 234
-             236:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 237 237 16 16
+             182:             Label
+             216:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 146
+             217:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 201 201 16 16
+             215:     11(int) Load 149(index)
+             219:    131(ptr) AccessChain 213(particleIn) 129 215 218
+             220:    8(float) Load 219
+             222:   177(bool) FOrdEqual 220 221
+                              SelectionMerge 224 None
+                              BranchConditional 222 223 224
+             223:               Label
+             239:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 225
+             240:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 233 233 16 16
+             238:     11(int)   Load 149(index)
+             241:     11(int)   Load 149(index)
+             244:    242(ptr)   AccessChain 236(particleOut) 129 241 129
+             245:   87(fvec4)   Load 244
+             246:    242(ptr)   AccessChain 236(particleOut) 129 238 129
+                                Store 246 245
+             248:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 249 249 16 16
+             247:     11(int)   Load 149(index)
+             253:    242(ptr)   AccessChain 236(particleOut) 129 247 250
+                                Store 253 252
+             254:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 255 255 16 16
                                 Return
-             209:             Label
-             239:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
-             240:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 241 241 16 16
-             245:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 243 242(force) 42
-             247:    225(ptr) AccessChain 117 120 246
-             248:   80(fvec4) Load 247
-             249:   18(fvec3) VectorShuffle 248 248 0 1 2
-             250:    122(ptr) AccessChain 117 120 232
-             251:    8(float) Load 250
-             252:   18(fvec3) VectorTimesScalar 249 251
-                              Store 242(force) 252
-             253:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 254 254 16 16
-             258:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 256 255(pos) 42
-             259:     11(int) Load 138(index)
-             260:    225(ptr) AccessChain 199(particleIn) 120 259 120
-             261:   80(fvec4) Load 260
-             262:   18(fvec3) VectorShuffle 261 261 0 1 2
-                              Store 255(pos) 262
-             263:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 264 264 16 16
-             268:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 266 265(vel) 42
-             269:     11(int) Load 138(index)
-             270:    225(ptr) AccessChain 199(particleIn) 120 269 232
-             271:   80(fvec4) Load 270
-             272:   18(fvec3) VectorShuffle 271 271 0 1 2
-                              Store 265(vel) 272
-             273:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 274 274 16 16
-             275:    137(ptr) AccessChain 55(id) 16
-             276:     11(int) Load 275
-             278:   162(bool) UGreaterThan 276 16
-                              SelectionMerge 280 None
-                              BranchConditional 278 279 280
-             279:               Label
-             281:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
-             282:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 283 283 16 16
-             284:     11(int)   Load 138(index)
-             285:     11(int)   ISub 284 33
-             287:    225(ptr)   AccessChain 199(particleIn) 120 285 120
-             288:   80(fvec4)   Load 287
-             289:   18(fvec3)   VectorShuffle 288 288 0 1 2
-                                Store 286(param) 289
-             291:   18(fvec3)   Load 255(pos)
-                                Store 290(param) 291
-             293:    122(ptr)   AccessChain 117 120 202
-             294:    8(float)   Load 293
-                                Store 292(param) 294
-             295:   18(fvec3)   FunctionCall 27(springForce(vf3;vf3;f1;) 286(param) 290(param) 292(param)
-             296:   18(fvec3)   Load 242(force)
-             297:   18(fvec3)   FAdd 296 295
-                                Store 242(force) 297
-                                Branch 280
-             280:             Label
-             298:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
-             299:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 300 300 16 16
-             301:    137(ptr) AccessChain 55(id) 16
-             302:     11(int) Load 301
-             303:    145(ptr) AccessChain 117 120 144 16
-             304:     82(int) Load 303
-             305:     82(int) ISub 304 232
-             306:     11(int) Bitcast 305
-             308:   162(bool) ULessThan 302 306
-                              SelectionMerge 310 None
-                              BranchConditional 308 309 310
-             309:               Label
-             311:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
-             312:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 313 313 16 16
-             314:     11(int)   Load 138(index)
-             315:     11(int)   IAdd 314 33
-             317:    225(ptr)   AccessChain 199(particleIn) 120 315 120
-             318:   80(fvec4)   Load 317
-             319:   18(fvec3)   VectorShuffle 318 318 0 1 2
-                                Store 316(param) 319
-             321:   18(fvec3)   Load 255(pos)
-                                Store 320(param) 321
-             323:    122(ptr)   AccessChain 117 120 202
-             324:    8(float)   Load 323
-                                Store 322(param) 324
-             325:   18(fvec3)   FunctionCall 27(springForce(vf3;vf3;f1;) 316(param) 320(param) 322(param)
-             326:   18(fvec3)   Load 242(force)
-             327:   18(fvec3)   FAdd 326 325
-                                Store 242(force) 327
-                                Branch 310
-             310:             Label
-             328:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
-             329:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 330 330 16 16
-             331:    137(ptr) AccessChain 55(id) 33
-             332:     11(int) Load 331
-             333:    145(ptr) AccessChain 117 120 144 33
-             334:     82(int) Load 333
-             335:     82(int) ISub 334 232
-             336:     11(int) Bitcast 335
-             338:   162(bool) ULessThan 332 336
-                              SelectionMerge 340 None
-                              BranchConditional 338 339 340
-             339:               Label
-             341:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
-             342:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 343 343 16 16
-             344:     11(int)   Load 138(index)
-             345:    145(ptr)   AccessChain 117 120 144 16
-             346:     82(int)   Load 345
-             347:     11(int)   Bitcast 346
-             348:     11(int)   IAdd 344 347
-             351:    225(ptr)   AccessChain 199(particleIn) 120 348 120
-             352:   80(fvec4)   Load 351
-             353:   18(fvec3)   VectorShuffle 352 352 0 1 2
-                                Store 350(param) 353
-             355:   18(fvec3)   Load 255(pos)
-                                Store 354(param) 355
-             357:    122(ptr)   AccessChain 117 120 349
-             358:    8(float)   Load 357
-                                Store 356(param) 358
-             359:   18(fvec3)   FunctionCall 27(springForce(vf3;vf3;f1;) 350(param) 354(param) 356(param)
-             360:   18(fvec3)   Load 242(force)
-             361:   18(fvec3)   FAdd 360 359
-                                Store 242(force) 361
-                                Branch 340
-             340:             Label
-             362:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
-             363:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 364 364 16 16
-             365:    137(ptr) AccessChain 55(id) 33
-             366:     11(int) Load 365
-             368:   162(bool) UGreaterThan 366 16
-                              SelectionMerge 370 None
-                              BranchConditional 368 369 370
-             369:               Label
-             371:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
-             372:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 373 373 16 16
-             374:     11(int)   Load 138(index)
-             375:    145(ptr)   AccessChain 117 120 144 16
-             376:     82(int)   Load 375
-             377:     11(int)   Bitcast 376
-             378:     11(int)   ISub 374 377
-             380:    225(ptr)   AccessChain 199(particleIn) 120 378 120
-             381:   80(fvec4)   Load 380
-             382:   18(fvec3)   VectorShuffle 381 381 0 1 2
-                                Store 379(param) 382
-             384:   18(fvec3)   Load 255(pos)
-                                Store 383(param) 384
-             386:    122(ptr)   AccessChain 117 120 349
-             387:    8(float)   Load 386
-                                Store 385(param) 387
-             388:   18(fvec3)   FunctionCall 27(springForce(vf3;vf3;f1;) 379(param) 383(param) 385(param)
-             389:   18(fvec3)   Load 242(force)
-             390:   18(fvec3)   FAdd 389 388
-                                Store 242(force) 390
-                                Branch 370
-             370:             Label
-             391:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
-             392:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 393 393 16 16
-             394:    137(ptr) AccessChain 55(id) 16
-             395:     11(int) Load 394
-             397:   162(bool) UGreaterThan 395 16
-             398:    137(ptr) AccessChain 55(id) 33
-             399:     11(int) Load 398
-             400:    145(ptr) AccessChain 117 120 144 33
-             401:     82(int) Load 400
-             402:     82(int) ISub 401 232
-             403:     11(int) Bitcast 402
-             405:   162(bool) ULessThan 399 403
-             407:   162(bool) LogicalAnd 397 405
-                              SelectionMerge 409 None
-                              BranchConditional 407 408 409
-             408:               Label
-             410:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
-             411:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 412 412 16 16
-             413:     11(int)   Load 138(index)
-             414:    145(ptr)   AccessChain 117 120 144 16
-             415:     82(int)   Load 414
-             416:     11(int)   Bitcast 415
-             417:     11(int)   IAdd 413 416
-             418:     11(int)   ISub 417 33
-             421:    225(ptr)   AccessChain 199(particleIn) 120 418 120
-             422:   80(fvec4)   Load 421
-             423:   18(fvec3)   VectorShuffle 422 422 0 1 2
-                                Store 420(param) 423
-             425:   18(fvec3)   Load 255(pos)
-                                Store 424(param) 425
-             427:    122(ptr)   AccessChain 117 120 419
-             428:    8(float)   Load 427
-                                Store 426(param) 428
-             429:   18(fvec3)   FunctionCall 27(springForce(vf3;vf3;f1;) 420(param) 424(param) 426(param)
-             430:   18(fvec3)   Load 242(force)
-             431:   18(fvec3)   FAdd 430 429
-                                Store 242(force) 431
-                                Branch 409
-             409:             Label
-             432:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
-             433:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 434 434 16 16
-             435:    137(ptr) AccessChain 55(id) 16
-             436:     11(int) Load 435
-             438:   162(bool) UGreaterThan 436 16
-             439:    137(ptr) AccessChain 55(id) 33
-             440:     11(int) Load 439
-             442:   162(bool) UGreaterThan 440 16
-             444:   162(bool) LogicalAnd 438 442
-                              SelectionMerge 446 None
-                              BranchConditional 444 445 446
-             445:               Label
-             447:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
-             448:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 449 449 16 16
-             450:     11(int)   Load 138(index)
-             451:    145(ptr)   AccessChain 117 120 144 16
-             452:     82(int)   Load 451
-             453:     11(int)   Bitcast 452
-             454:     11(int)   ISub 450 453
-             455:     11(int)   ISub 454 33
-             457:    225(ptr)   AccessChain 199(particleIn) 120 455 120
-             458:   80(fvec4)   Load 457
-             459:   18(fvec3)   VectorShuffle 458 458 0 1 2
-                                Store 456(param) 459
-             461:   18(fvec3)   Load 255(pos)
-                                Store 460(param) 461
-             463:    122(ptr)   AccessChain 117 120 419
-             464:    8(float)   Load 463
-                                Store 462(param) 464
-             465:   18(fvec3)   FunctionCall 27(springForce(vf3;vf3;f1;) 456(param) 460(param) 462(param)
-             466:   18(fvec3)   Load 242(force)
-             467:   18(fvec3)   FAdd 466 465
-                                Store 242(force) 467
-                                Branch 446
-             446:             Label
-             468:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
-             469:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 470 470 16 16
-             471:    137(ptr) AccessChain 55(id) 16
-             472:     11(int) Load 471
-             473:    145(ptr) AccessChain 117 120 144 16
-             474:     82(int) Load 473
-             475:     82(int) ISub 474 232
-             476:     11(int) Bitcast 475
-             478:   162(bool) ULessThan 472 476
-             479:    137(ptr) AccessChain 55(id) 33
-             480:     11(int) Load 479
-             481:    145(ptr) AccessChain 117 120 144 33
-             482:     82(int) Load 481
-             483:     82(int) ISub 482 232
-             484:     11(int) Bitcast 483
-             486:   162(bool) ULessThan 480 484
-             488:   162(bool) LogicalAnd 478 486
-                              SelectionMerge 490 None
-                              BranchConditional 488 489 490
-             489:               Label
-             491:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
-             492:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 493 493 16 16
-             494:     11(int)   Load 138(index)
-             495:    145(ptr)   AccessChain 117 120 144 16
-             496:     82(int)   Load 495
-             497:     11(int)   Bitcast 496
-             498:     11(int)   IAdd 494 497
-             499:     11(int)   IAdd 498 33
-             501:    225(ptr)   AccessChain 199(particleIn) 120 499 120
-             502:   80(fvec4)   Load 501
-             503:   18(fvec3)   VectorShuffle 502 502 0 1 2
-                                Store 500(param) 503
-             505:   18(fvec3)   Load 255(pos)
-                                Store 504(param) 505
-             507:    122(ptr)   AccessChain 117 120 419
-             508:    8(float)   Load 507
-                                Store 506(param) 508
-             509:   18(fvec3)   FunctionCall 27(springForce(vf3;vf3;f1;) 500(param) 504(param) 506(param)
-             510:   18(fvec3)   Load 242(force)
-             511:   18(fvec3)   FAdd 510 509
-                                Store 242(force) 511
-                                Branch 490
-             490:             Label
-             512:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
-             513:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 514 514 16 16
-             515:    137(ptr) AccessChain 55(id) 16
-             516:     11(int) Load 515
-             517:    145(ptr) AccessChain 117 120 144 16
-             518:     82(int) Load 517
-             519:     82(int) ISub 518 232
-             520:     11(int) Bitcast 519
-             522:   162(bool) ULessThan 516 520
-             523:    137(ptr) AccessChain 55(id) 33
-             524:     11(int) Load 523
-             526:   162(bool) UGreaterThan 524 16
-             528:   162(bool) LogicalAnd 522 526
-                              SelectionMerge 530 None
-                              BranchConditional 528 529 530
-             529:               Label
-             531:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
-             532:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 533 533 16 16
-             534:     11(int)   Load 138(index)
-             535:    145(ptr)   AccessChain 117 120 144 16
-             536:     82(int)   Load 535
-             537:     11(int)   Bitcast 536
-             538:     11(int)   ISub 534 537
-             539:     11(int)   IAdd 538 33
-             541:    225(ptr)   AccessChain 199(particleIn) 120 539 120
-             542:   80(fvec4)   Load 541
-             543:   18(fvec3)   VectorShuffle 542 542 0 1 2
-                                Store 540(param) 543
-             545:   18(fvec3)   Load 255(pos)
-                                Store 544(param) 545
-             547:    122(ptr)   AccessChain 117 120 419
-             548:    8(float)   Load 547
-                                Store 546(param) 548
-             549:   18(fvec3)   FunctionCall 27(springForce(vf3;vf3;f1;) 540(param) 544(param) 546(param)
-             550:   18(fvec3)   Load 242(force)
-             551:   18(fvec3)   FAdd 550 549
-                                Store 242(force) 551
-                                Branch 530
-             530:             Label
-             552:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
-             553:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 554 554 16 16
-             556:    122(ptr) AccessChain 117 120 555
-             557:    8(float) Load 556
-             558:    8(float) FNegate 557
-             559:   18(fvec3) Load 265(vel)
-             560:   18(fvec3) VectorTimesScalar 559 558
-             561:   18(fvec3) Load 242(force)
-             562:   18(fvec3) FAdd 561 560
-                              Store 242(force) 562
-             563:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 564 564 16 16
-             568:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 566 565(f) 42
-             569:   18(fvec3) Load 242(force)
-             570:    122(ptr) AccessChain 117 120 232
-             571:    8(float) Load 570
-             572:    8(float) FDiv 205 571
-             573:   18(fvec3) VectorTimesScalar 569 572
-                              Store 565(f) 573
-             574:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 575 575 16 16
-             576:     11(int) Load 138(index)
-             577:   18(fvec3) Load 255(pos)
-             578:   18(fvec3) Load 265(vel)
-             579:    122(ptr) AccessChain 117 120 120
-             580:    8(float) Load 579
-             581:   18(fvec3) VectorTimesScalar 578 580
-             582:   18(fvec3) FAdd 577 581
-             584:   18(fvec3) Load 565(f)
-             585:   18(fvec3) VectorTimesScalar 584 583
-             586:    122(ptr) AccessChain 117 120 120
-             587:    8(float) Load 586
-             588:   18(fvec3) VectorTimesScalar 585 587
-             589:    122(ptr) AccessChain 117 120 120
+             224:             Label
+             262:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 146
+             263:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 260 260 16 16
+             261:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 258 257(force) 44
+             265:    242(ptr) AccessChain 125 129 264
+             266:   87(fvec4) Load 265
+             267:   18(fvec3) VectorShuffle 266 266 0 1 2
+             268:    131(ptr) AccessChain 125 129 250
+             269:    8(float) Load 268
+             270:   18(fvec3) VectorTimesScalar 267 269
+                              Store 257(force) 270
+             276:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 274 274 16 16
+             275:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 272 271(pos) 44
+             277:     11(int) Load 149(index)
+             278:    242(ptr) AccessChain 213(particleIn) 129 277 129
+             279:   87(fvec4) Load 278
+             280:   18(fvec3) VectorShuffle 279 279 0 1 2
+                              Store 271(pos) 280
+             286:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 284 284 16 16
+             285:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 282 281(vel) 44
+             287:     11(int) Load 149(index)
+             288:    242(ptr) AccessChain 213(particleIn) 129 287 250
+             289:   87(fvec4) Load 288
+             290:   18(fvec3) VectorShuffle 289 289 0 1 2
+                              Store 281(vel) 290
+             292:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 293 293 16 16
+             291:    147(ptr) AccessChain 60(id) 16
+             294:     11(int) Load 291
+             295:   177(bool) UGreaterThan 294 16
+                              SelectionMerge 297 None
+                              BranchConditional 295 296 297
+             296:               Label
+             300:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 298
+             301:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 302 302 16 16
+             299:     11(int)   Load 149(index)
+             303:     11(int)   ISub 299 38
+             305:    242(ptr)   AccessChain 213(particleIn) 129 303 129
+             306:   87(fvec4)   Load 305
+             307:   18(fvec3)   VectorShuffle 306 306 0 1 2
+                                Store 304(param) 307
+             309:   18(fvec3)   Load 271(pos)
+                                Store 308(param) 309
+             311:    131(ptr)   AccessChain 125 129 218
+             312:    8(float)   Load 311
+                                Store 310(param) 312
+             313:   18(fvec3)   FunctionCall 30(springForce(vf3;vf3;f1;) 304(param) 308(param) 310(param)
+             314:   18(fvec3)   Load 257(force)
+             315:   18(fvec3)   FAdd 314 313
+                                Store 257(force) 315
+                                Branch 297
+             297:             Label
+             317:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 146
+             318:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 319 319 16 16
+             316:    147(ptr) AccessChain 60(id) 16
+             320:     11(int) Load 316
+             321:    159(ptr) AccessChain 125 129 158 16
+             322:     89(int) Load 321
+             323:     89(int) ISub 322 250
+             324:     11(int) Bitcast 323
+             325:   177(bool) ULessThan 320 324
+                              SelectionMerge 327 None
+                              BranchConditional 325 326 327
+             326:               Label
+             330:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 328
+             331:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 332 332 16 16
+             329:     11(int)   Load 149(index)
+             333:     11(int)   IAdd 329 38
+             335:    242(ptr)   AccessChain 213(particleIn) 129 333 129
+             336:   87(fvec4)   Load 335
+             337:   18(fvec3)   VectorShuffle 336 336 0 1 2
+                                Store 334(param) 337
+             339:   18(fvec3)   Load 271(pos)
+                                Store 338(param) 339
+             341:    131(ptr)   AccessChain 125 129 218
+             342:    8(float)   Load 341
+                                Store 340(param) 342
+             343:   18(fvec3)   FunctionCall 30(springForce(vf3;vf3;f1;) 334(param) 338(param) 340(param)
+             344:   18(fvec3)   Load 257(force)
+             345:   18(fvec3)   FAdd 344 343
+                                Store 257(force) 345
+                                Branch 327
+             327:             Label
+             347:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 146
+             348:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 349 349 16 16
+             346:    147(ptr) AccessChain 60(id) 38
+             350:     11(int) Load 346
+             351:    159(ptr) AccessChain 125 129 158 38
+             352:     89(int) Load 351
+             353:     89(int) ISub 352 250
+             354:     11(int) Bitcast 353
+             355:   177(bool) ULessThan 350 354
+                              SelectionMerge 357 None
+                              BranchConditional 355 356 357
+             356:               Label
+             360:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 358
+             361:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 362 362 16 16
+             359:     11(int)   Load 149(index)
+             363:    159(ptr)   AccessChain 125 129 158 16
+             364:     89(int)   Load 363
+             365:     11(int)   Bitcast 364
+             366:     11(int)   IAdd 359 365
+             369:    242(ptr)   AccessChain 213(particleIn) 129 366 129
+             370:   87(fvec4)   Load 369
+             371:   18(fvec3)   VectorShuffle 370 370 0 1 2
+                                Store 368(param) 371
+             373:   18(fvec3)   Load 271(pos)
+                                Store 372(param) 373
+             375:    131(ptr)   AccessChain 125 129 367
+             376:    8(float)   Load 375
+                                Store 374(param) 376
+             377:   18(fvec3)   FunctionCall 30(springForce(vf3;vf3;f1;) 368(param) 372(param) 374(param)
+             378:   18(fvec3)   Load 257(force)
+             379:   18(fvec3)   FAdd 378 377
+                                Store 257(force) 379
+                                Branch 357
+             357:             Label
+             381:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 146
+             382:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 383 383 16 16
+             380:    147(ptr) AccessChain 60(id) 38
+             384:     11(int) Load 380
+             385:   177(bool) UGreaterThan 384 16
+                              SelectionMerge 387 None
+                              BranchConditional 385 386 387
+             386:               Label
+             390:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 388
+             391:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 392 392 16 16
+             389:     11(int)   Load 149(index)
+             393:    159(ptr)   AccessChain 125 129 158 16
+             394:     89(int)   Load 393
+             395:     11(int)   Bitcast 394
+             396:     11(int)   ISub 389 395
+             398:    242(ptr)   AccessChain 213(particleIn) 129 396 129
+             399:   87(fvec4)   Load 398
+             400:   18(fvec3)   VectorShuffle 399 399 0 1 2
+                                Store 397(param) 400
+             402:   18(fvec3)   Load 271(pos)
+                                Store 401(param) 402
+             404:    131(ptr)   AccessChain 125 129 367
+             405:    8(float)   Load 404
+                                Store 403(param) 405
+             406:   18(fvec3)   FunctionCall 30(springForce(vf3;vf3;f1;) 397(param) 401(param) 403(param)
+             407:   18(fvec3)   Load 257(force)
+             408:   18(fvec3)   FAdd 407 406
+                                Store 257(force) 408
+                                Branch 387
+             387:             Label
+             410:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 146
+             411:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 412 412 16 16
+             409:    147(ptr) AccessChain 60(id) 16
+             413:     11(int) Load 409
+             414:   177(bool) UGreaterThan 413 16
+             415:    147(ptr) AccessChain 60(id) 38
+             416:     11(int) Load 415
+             417:    159(ptr) AccessChain 125 129 158 38
+             418:     89(int) Load 417
+             419:     89(int) ISub 418 250
+             420:     11(int) Bitcast 419
+             421:   177(bool) ULessThan 416 420
+             422:   177(bool) LogicalAnd 414 421
+                              SelectionMerge 424 None
+                              BranchConditional 422 423 424
+             423:               Label
+             427:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 425
+             428:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 429 429 16 16
+             426:     11(int)   Load 149(index)
+             430:    159(ptr)   AccessChain 125 129 158 16
+             431:     89(int)   Load 430
+             432:     11(int)   Bitcast 431
+             433:     11(int)   IAdd 426 432
+             434:     11(int)   ISub 433 38
+             437:    242(ptr)   AccessChain 213(particleIn) 129 434 129
+             438:   87(fvec4)   Load 437
+             439:   18(fvec3)   VectorShuffle 438 438 0 1 2
+                                Store 436(param) 439
+             441:   18(fvec3)   Load 271(pos)
+                                Store 440(param) 441
+             443:    131(ptr)   AccessChain 125 129 435
+             444:    8(float)   Load 443
+                                Store 442(param) 444
+             445:   18(fvec3)   FunctionCall 30(springForce(vf3;vf3;f1;) 436(param) 440(param) 442(param)
+             446:   18(fvec3)   Load 257(force)
+             447:   18(fvec3)   FAdd 446 445
+                                Store 257(force) 447
+                                Branch 424
+             424:             Label
+             449:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 146
+             450:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 451 451 16 16
+             448:    147(ptr) AccessChain 60(id) 16
+             452:     11(int) Load 448
+             453:   177(bool) UGreaterThan 452 16
+             454:    147(ptr) AccessChain 60(id) 38
+             455:     11(int) Load 454
+             456:   177(bool) UGreaterThan 455 16
+             457:   177(bool) LogicalAnd 453 456
+                              SelectionMerge 459 None
+                              BranchConditional 457 458 459
+             458:               Label
+             462:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 460
+             463:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 464 464 16 16
+             461:     11(int)   Load 149(index)
+             465:    159(ptr)   AccessChain 125 129 158 16
+             466:     89(int)   Load 465
+             467:     11(int)   Bitcast 466
+             468:     11(int)   ISub 461 467
+             469:     11(int)   ISub 468 38
+             471:    242(ptr)   AccessChain 213(particleIn) 129 469 129
+             472:   87(fvec4)   Load 471
+             473:   18(fvec3)   VectorShuffle 472 472 0 1 2
+                                Store 470(param) 473
+             475:   18(fvec3)   Load 271(pos)
+                                Store 474(param) 475
+             477:    131(ptr)   AccessChain 125 129 435
+             478:    8(float)   Load 477
+                                Store 476(param) 478
+             479:   18(fvec3)   FunctionCall 30(springForce(vf3;vf3;f1;) 470(param) 474(param) 476(param)
+             480:   18(fvec3)   Load 257(force)
+             481:   18(fvec3)   FAdd 480 479
+                                Store 257(force) 481
+                                Branch 459
+             459:             Label
+             483:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 146
+             484:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 485 485 16 16
+             482:    147(ptr) AccessChain 60(id) 16
+             486:     11(int) Load 482
+             487:    159(ptr) AccessChain 125 129 158 16
+             488:     89(int) Load 487
+             489:     89(int) ISub 488 250
+             490:     11(int) Bitcast 489
+             491:   177(bool) ULessThan 486 490
+             492:    147(ptr) AccessChain 60(id) 38
+             493:     11(int) Load 492
+             494:    159(ptr) AccessChain 125 129 158 38
+             495:     89(int) Load 494
+             496:     89(int) ISub 495 250
+             497:     11(int) Bitcast 496
+             498:   177(bool) ULessThan 493 497
+             499:   177(bool) LogicalAnd 491 498
+                              SelectionMerge 501 None
+                              BranchConditional 499 500 501
+             500:               Label
+             504:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 502
+             505:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 506 506 16 16
+             503:     11(int)   Load 149(index)
+             507:    159(ptr)   AccessChain 125 129 158 16
+             508:     89(int)   Load 507
+             509:     11(int)   Bitcast 508
+             510:     11(int)   IAdd 503 509
+             511:     11(int)   IAdd 510 38
+             513:    242(ptr)   AccessChain 213(particleIn) 129 511 129
+             514:   87(fvec4)   Load 513
+             515:   18(fvec3)   VectorShuffle 514 514 0 1 2
+                                Store 512(param) 515
+             517:   18(fvec3)   Load 271(pos)
+                                Store 516(param) 517
+             519:    131(ptr)   AccessChain 125 129 435
+             520:    8(float)   Load 519
+                                Store 518(param) 520
+             521:   18(fvec3)   FunctionCall 30(springForce(vf3;vf3;f1;) 512(param) 516(param) 518(param)
+             522:   18(fvec3)   Load 257(force)
+             523:   18(fvec3)   FAdd 522 521
+                                Store 257(force) 523
+                                Branch 501
+             501:             Label
+             525:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 146
+             526:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 527 527 16 16
+             524:    147(ptr) AccessChain 60(id) 16
+             528:     11(int) Load 524
+             529:    159(ptr) AccessChain 125 129 158 16
+             530:     89(int) Load 529
+             531:     89(int) ISub 530 250
+             532:     11(int) Bitcast 531
+             533:   177(bool) ULessThan 528 532
+             534:    147(ptr) AccessChain 60(id) 38
+             535:     11(int) Load 534
+             536:   177(bool) UGreaterThan 535 16
+             537:   177(bool) LogicalAnd 533 536
+                              SelectionMerge 539 None
+                              BranchConditional 537 538 539
+             538:               Label
+             542:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 540
+             543:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 544 544 16 16
+             541:     11(int)   Load 149(index)
+             545:    159(ptr)   AccessChain 125 129 158 16
+             546:     89(int)   Load 545
+             547:     11(int)   Bitcast 546
+             548:     11(int)   ISub 541 547
+             549:     11(int)   IAdd 548 38
+             551:    242(ptr)   AccessChain 213(particleIn) 129 549 129
+             552:   87(fvec4)   Load 551
+             553:   18(fvec3)   VectorShuffle 552 552 0 1 2
+                                Store 550(param) 553
+             555:   18(fvec3)   Load 271(pos)
+                                Store 554(param) 555
+             557:    131(ptr)   AccessChain 125 129 435
+             558:    8(float)   Load 557
+                                Store 556(param) 558
+             559:   18(fvec3)   FunctionCall 30(springForce(vf3;vf3;f1;) 550(param) 554(param) 556(param)
+             560:   18(fvec3)   Load 257(force)
+             561:   18(fvec3)   FAdd 560 559
+                                Store 257(force) 561
+                                Branch 539
+             539:             Label
+             564:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 146
+             565:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 566 566 16 16
+             563:    131(ptr) AccessChain 125 129 562
+             567:    8(float) Load 563
+             568:    8(float) FNegate 567
+             569:   18(fvec3) Load 281(vel)
+             570:   18(fvec3) VectorTimesScalar 569 568
+             571:   18(fvec3) Load 257(force)
+             572:   18(fvec3) FAdd 571 570
+                              Store 257(force) 572
+             578:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 576 576 16 16
+             577:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 574 573(f) 44
+             579:   18(fvec3) Load 257(force)
+             580:    131(ptr) AccessChain 125 129 250
+             581:    8(float) Load 580
+             582:    8(float) FDiv 221 581
+             583:   18(fvec3) VectorTimesScalar 579 582
+                              Store 573(f) 583
+             585:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 586 586 16 16
+             584:     11(int) Load 149(index)
+             587:   18(fvec3) Load 271(pos)
+             588:   18(fvec3) Load 281(vel)
+             589:    131(ptr) AccessChain 125 129 129
              590:    8(float) Load 589
              591:   18(fvec3) VectorTimesScalar 588 590
-             592:   18(fvec3) FAdd 582 591
-             593:    8(float) CompositeExtract 592 0
-             594:    8(float) CompositeExtract 592 1
-             595:    8(float) CompositeExtract 592 2
-             596:   80(fvec4) CompositeConstruct 593 594 595 205
-             597:    225(ptr) AccessChain 221(particleOut) 120 576 120
-                              Store 597 596
-             598:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 599 599 16 16
-             600:     11(int) Load 138(index)
-             601:   18(fvec3) Load 265(vel)
-             602:   18(fvec3) Load 565(f)
-             603:    122(ptr) AccessChain 117 120 120
-             604:    8(float) Load 603
-             605:   18(fvec3) VectorTimesScalar 602 604
-             606:   18(fvec3) FAdd 601 605
-             607:    8(float) CompositeExtract 606 0
-             608:    8(float) CompositeExtract 606 1
-             609:    8(float) CompositeExtract 606 2
-             610:   80(fvec4) CompositeConstruct 607 608 609 233
-             611:    225(ptr) AccessChain 221(particleOut) 120 600 232
-                              Store 611 610
-             612:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 613 613 16 16
-             617:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 615 614(sphereDist) 42
-             618:     11(int) Load 138(index)
-             619:    225(ptr) AccessChain 221(particleOut) 120 618 120
-             620:   80(fvec4) Load 619
-             621:   18(fvec3) VectorShuffle 620 620 0 1 2
-             623:    225(ptr) AccessChain 117 120 622
-             624:   80(fvec4) Load 623
-             625:   18(fvec3) VectorShuffle 624 624 0 1 2
-             626:   18(fvec3) FSub 621 625
-                              Store 614(sphereDist) 626
-             627:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 628 628 16 16
-             629:   18(fvec3) Load 614(sphereDist)
-             630:    8(float) ExtInst 3(GLSL.std.450) 66(Length) 629
-             632:    122(ptr) AccessChain 117 120 631
-             633:    8(float) Load 632
-             635:    8(float) FAdd 633 634
-             637:   162(bool) FOrdLessThan 630 635
-                              SelectionMerge 639 None
-                              BranchConditional 637 638 639
-             638:               Label
-             640:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
-             641:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 642 642 16 16
-             643:     11(int)   Load 138(index)
-             644:    225(ptr)   AccessChain 117 120 622
-             645:   80(fvec4)   Load 644
-             646:   18(fvec3)   VectorShuffle 645 645 0 1 2
-             647:   18(fvec3)   Load 614(sphereDist)
-             648:   18(fvec3)   ExtInst 3(GLSL.std.450) 69(Normalize) 647
-             649:    122(ptr)   AccessChain 117 120 631
-             650:    8(float)   Load 649
-             651:    8(float)   FAdd 650 634
-             652:   18(fvec3)   VectorTimesScalar 648 651
-             653:   18(fvec3)   FAdd 646 652
-             654:    122(ptr)   AccessChain 221(particleOut) 120 643 120 16
-             655:    8(float)   CompositeExtract 653 0
-                                Store 654 655
-             656:    122(ptr)   AccessChain 221(particleOut) 120 643 120 33
-             657:    8(float)   CompositeExtract 653 1
-                                Store 656 657
-             658:    122(ptr)   AccessChain 221(particleOut) 120 643 120 45
-             659:    8(float)   CompositeExtract 653 2
-                                Store 658 659
-             660:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 661 661 16 16
-             662:     11(int)   Load 138(index)
-             663:    225(ptr)   AccessChain 221(particleOut) 120 662 232
-                                Store 663 234
-                                Branch 639
-             639:             Label
-             664:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
-             665:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 666 666 16 16
-             684:    683(ptr) AccessChain 681 120 120
-             685:     11(int) Load 684
-             687:   162(bool) IEqual 685 33
-                              SelectionMerge 689 None
-                              BranchConditional 687 688 689
-             688:               Label
-             690:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
-             691:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 692 692 16 16
-             695:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 694 693(normal) 42
-                                Store 693(normal) 696
-             697:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 698 698 16 16
-             699:    137(ptr)   AccessChain 55(id) 33
-             700:     11(int)   Load 699
-             702:   162(bool)   UGreaterThan 700 16
-                                SelectionMerge 704 None
-                                BranchConditional 702 703 704
-             703:                 Label
-             705:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
-             706:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 707 707 16 16
-             708:    137(ptr)     AccessChain 55(id) 16
-             709:     11(int)     Load 708
-             711:   162(bool)     UGreaterThan 709 16
-                                  SelectionMerge 713 None
-                                  BranchConditional 711 712 713
-             712:                   Label
-             714:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
-             715:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 716 716 16 16
-             720:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 718 717(a) 42
-             721:     11(int)       Load 138(index)
-             722:     11(int)       ISub 721 33
-             723:    225(ptr)       AccessChain 199(particleIn) 120 722 120
-             724:   80(fvec4)       Load 723
-             725:   18(fvec3)       VectorShuffle 724 724 0 1 2
-             726:   18(fvec3)       Load 255(pos)
-             727:   18(fvec3)       FSub 725 726
-                                    Store 717(a) 727
-             728:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 729 729 16 16
-             733:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 731 730(b) 42
-             734:     11(int)       Load 138(index)
-             735:    145(ptr)       AccessChain 117 120 144 16
-             736:     82(int)       Load 735
-             737:     11(int)       Bitcast 736
-             738:     11(int)       ISub 734 737
-             739:     11(int)       ISub 738 33
-             740:    225(ptr)       AccessChain 199(particleIn) 120 739 120
-             741:   80(fvec4)       Load 740
-             742:   18(fvec3)       VectorShuffle 741 741 0 1 2
-             743:   18(fvec3)       Load 255(pos)
-             744:   18(fvec3)       FSub 742 743
-                                    Store 730(b) 744
-             745:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 746 746 16 16
-             750:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 748 747(c) 42
-             751:     11(int)       Load 138(index)
-             752:    145(ptr)       AccessChain 117 120 144 16
-             753:     82(int)       Load 752
-             754:     11(int)       Bitcast 753
-             755:     11(int)       ISub 751 754
-             756:    225(ptr)       AccessChain 199(particleIn) 120 755 120
-             757:   80(fvec4)       Load 756
-             758:   18(fvec3)       VectorShuffle 757 757 0 1 2
-             759:   18(fvec3)       Load 255(pos)
-             760:   18(fvec3)       FSub 758 759
-                                    Store 747(c) 760
-             761:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 762 762 16 16
-             763:   18(fvec3)       Load 717(a)
-             764:   18(fvec3)       Load 730(b)
-             765:   18(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 763 764
-             766:   18(fvec3)       Load 730(b)
-             767:   18(fvec3)       Load 747(c)
-             768:   18(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 766 767
-             769:   18(fvec3)       FAdd 765 768
-             770:   18(fvec3)       Load 693(normal)
-             771:   18(fvec3)       FAdd 770 769
-                                    Store 693(normal) 771
-                                    Branch 713
-             713:                 Label
-             772:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
-             773:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 774 774 16 16
-             775:    137(ptr)     AccessChain 55(id) 16
-             776:     11(int)     Load 775
-             777:    145(ptr)     AccessChain 117 120 144 16
-             778:     82(int)     Load 777
-             779:     82(int)     ISub 778 232
-             780:     11(int)     Bitcast 779
-             782:   162(bool)     ULessThan 776 780
-                                  SelectionMerge 784 None
-                                  BranchConditional 782 783 784
-             783:                   Label
-             785:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
-             786:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 787 787 16 16
-             788:     11(int)       Load 138(index)
-             789:    145(ptr)       AccessChain 117 120 144 16
-             790:     82(int)       Load 789
-             791:     11(int)       Bitcast 790
-             792:     11(int)       ISub 788 791
-             793:    225(ptr)       AccessChain 199(particleIn) 120 792 120
-             794:   80(fvec4)       Load 793
-             795:   18(fvec3)       VectorShuffle 794 794 0 1 2
-             796:   18(fvec3)       Load 255(pos)
-             797:   18(fvec3)       FSub 795 796
-                                    Store 717(a) 797
-             798:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 799 799 16 16
-             800:     11(int)       Load 138(index)
-             801:    145(ptr)       AccessChain 117 120 144 16
-             802:     82(int)       Load 801
-             803:     11(int)       Bitcast 802
-             804:     11(int)       ISub 800 803
-             805:     11(int)       IAdd 804 33
-             806:    225(ptr)       AccessChain 199(particleIn) 120 805 120
-             807:   80(fvec4)       Load 806
-             808:   18(fvec3)       VectorShuffle 807 807 0 1 2
-             809:   18(fvec3)       Load 255(pos)
-             810:   18(fvec3)       FSub 808 809
-                                    Store 730(b) 810
-             811:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 812 812 16 16
-             813:     11(int)       Load 138(index)
-             814:     11(int)       IAdd 813 33
-             815:    225(ptr)       AccessChain 199(particleIn) 120 814 120
-             816:   80(fvec4)       Load 815
-             817:   18(fvec3)       VectorShuffle 816 816 0 1 2
-             818:   18(fvec3)       Load 255(pos)
-             819:   18(fvec3)       FSub 817 818
-                                    Store 747(c) 819
-             820:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 821 821 16 16
-             822:   18(fvec3)       Load 717(a)
-             823:   18(fvec3)       Load 730(b)
-             824:   18(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 822 823
-             825:   18(fvec3)       Load 730(b)
-             826:   18(fvec3)       Load 747(c)
-             827:   18(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 825 826
-             828:   18(fvec3)       FAdd 824 827
-             829:   18(fvec3)       Load 693(normal)
-             830:   18(fvec3)       FAdd 829 828
-                                    Store 693(normal) 830
-                                    Branch 784
-             784:                 Label
-                                  Branch 704
-             704:               Label
-             831:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
-             832:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 833 833 16 16
-             834:    137(ptr)   AccessChain 55(id) 33
-             835:     11(int)   Load 834
-             836:    145(ptr)   AccessChain 117 120 144 33
-             837:     82(int)   Load 836
-             838:     82(int)   ISub 837 232
-             839:     11(int)   Bitcast 838
-             841:   162(bool)   ULessThan 835 839
-                                SelectionMerge 843 None
-                                BranchConditional 841 842 843
-             842:                 Label
-             844:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
-             845:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 846 846 16 16
-             847:    137(ptr)     AccessChain 55(id) 16
-             848:     11(int)     Load 847
-             850:   162(bool)     UGreaterThan 848 16
-                                  SelectionMerge 852 None
-                                  BranchConditional 850 851 852
-             851:                   Label
-             853:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
-             854:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 855 855 16 16
-             856:     11(int)       Load 138(index)
-             857:    145(ptr)       AccessChain 117 120 144 16
-             858:     82(int)       Load 857
-             859:     11(int)       Bitcast 858
-             860:     11(int)       IAdd 856 859
-             861:    225(ptr)       AccessChain 199(particleIn) 120 860 120
-             862:   80(fvec4)       Load 861
-             863:   18(fvec3)       VectorShuffle 862 862 0 1 2
-             864:   18(fvec3)       Load 255(pos)
-             865:   18(fvec3)       FSub 863 864
-                                    Store 717(a) 865
-             866:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 867 867 16 16
-             868:     11(int)       Load 138(index)
-             869:    145(ptr)       AccessChain 117 120 144 16
-             870:     82(int)       Load 869
-             871:     11(int)       Bitcast 870
-             872:     11(int)       IAdd 868 871
-             873:     11(int)       ISub 872 33
-             874:    225(ptr)       AccessChain 199(particleIn) 120 873 120
-             875:   80(fvec4)       Load 874
-             876:   18(fvec3)       VectorShuffle 875 875 0 1 2
-             877:   18(fvec3)       Load 255(pos)
-             878:   18(fvec3)       FSub 876 877
-                                    Store 730(b) 878
-             879:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 880 880 16 16
-             881:     11(int)       Load 138(index)
-             882:     11(int)       ISub 881 33
-             883:    225(ptr)       AccessChain 199(particleIn) 120 882 120
-             884:   80(fvec4)       Load 883
-             885:   18(fvec3)       VectorShuffle 884 884 0 1 2
-             886:   18(fvec3)       Load 255(pos)
-             887:   18(fvec3)       FSub 885 886
-                                    Store 747(c) 887
-             888:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 889 889 16 16
-             890:   18(fvec3)       Load 717(a)
-             891:   18(fvec3)       Load 730(b)
-             892:   18(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 890 891
-             893:   18(fvec3)       Load 730(b)
-             894:   18(fvec3)       Load 747(c)
-             895:   18(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 893 894
-             896:   18(fvec3)       FAdd 892 895
-             897:   18(fvec3)       Load 693(normal)
-             898:   18(fvec3)       FAdd 897 896
-                                    Store 693(normal) 898
-                                    Branch 852
-             852:                 Label
-             899:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
-             900:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 901 901 16 16
-             902:    137(ptr)     AccessChain 55(id) 16
-             903:     11(int)     Load 902
-             904:    145(ptr)     AccessChain 117 120 144 16
-             905:     82(int)     Load 904
-             906:     82(int)     ISub 905 232
-             907:     11(int)     Bitcast 906
-             909:   162(bool)     ULessThan 903 907
-                                  SelectionMerge 911 None
-                                  BranchConditional 909 910 911
-             910:                   Label
-             912:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
-             913:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 914 914 16 16
-             915:     11(int)       Load 138(index)
-             916:     11(int)       IAdd 915 33
-             917:    225(ptr)       AccessChain 199(particleIn) 120 916 120
-             918:   80(fvec4)       Load 917
-             919:   18(fvec3)       VectorShuffle 918 918 0 1 2
-             920:   18(fvec3)       Load 255(pos)
-             921:   18(fvec3)       FSub 919 920
-                                    Store 717(a) 921
-             922:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 923 923 16 16
-             924:     11(int)       Load 138(index)
-             925:    145(ptr)       AccessChain 117 120 144 16
-             926:     82(int)       Load 925
-             927:     11(int)       Bitcast 926
-             928:     11(int)       IAdd 924 927
-             929:     11(int)       IAdd 928 33
-             930:    225(ptr)       AccessChain 199(particleIn) 120 929 120
-             931:   80(fvec4)       Load 930
-             932:   18(fvec3)       VectorShuffle 931 931 0 1 2
-             933:   18(fvec3)       Load 255(pos)
-             934:   18(fvec3)       FSub 932 933
-                                    Store 730(b) 934
-             935:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 936 936 16 16
-             937:     11(int)       Load 138(index)
-             938:    145(ptr)       AccessChain 117 120 144 16
-             939:     82(int)       Load 938
-             940:     11(int)       Bitcast 939
-             941:     11(int)       IAdd 937 940
-             942:    225(ptr)       AccessChain 199(particleIn) 120 941 120
-             943:   80(fvec4)       Load 942
-             944:   18(fvec3)       VectorShuffle 943 943 0 1 2
-             945:   18(fvec3)       Load 255(pos)
-             946:   18(fvec3)       FSub 944 945
-                                    Store 747(c) 946
-             947:           4       ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 948 948 16 16
-             949:   18(fvec3)       Load 717(a)
-             950:   18(fvec3)       Load 730(b)
-             951:   18(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 949 950
-             952:   18(fvec3)       Load 730(b)
-             953:   18(fvec3)       Load 747(c)
-             954:   18(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 952 953
-             955:   18(fvec3)       FAdd 951 954
-             956:   18(fvec3)       Load 693(normal)
-             957:   18(fvec3)       FAdd 956 955
-                                    Store 693(normal) 957
-                                    Branch 911
-             911:                 Label
-                                  Branch 843
-             843:               Label
-             958:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
-             959:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 960 960 16 16
-             961:     11(int)   Load 138(index)
-             962:   18(fvec3)   Load 693(normal)
-             963:   18(fvec3)   ExtInst 3(GLSL.std.450) 69(Normalize) 962
-             964:    8(float)   CompositeExtract 963 0
-             965:    8(float)   CompositeExtract 963 1
-             966:    8(float)   CompositeExtract 963 2
-             967:   80(fvec4)   CompositeConstruct 964 965 966 233
-             968:    225(ptr)   AccessChain 221(particleOut) 120 961 555
-                                Store 968 967
-                                Branch 689
-             689:             Label
+             592:   18(fvec3) FAdd 587 591
+             594:   18(fvec3) Load 573(f)
+             595:   18(fvec3) VectorTimesScalar 594 593
+             596:    131(ptr) AccessChain 125 129 129
+             597:    8(float) Load 596
+             598:   18(fvec3) VectorTimesScalar 595 597
+             599:    131(ptr) AccessChain 125 129 129
+             600:    8(float) Load 599
+             601:   18(fvec3) VectorTimesScalar 598 600
+             602:   18(fvec3) FAdd 592 601
+             603:    8(float) CompositeExtract 602 0
+             604:    8(float) CompositeExtract 602 1
+             605:    8(float) CompositeExtract 602 2
+             606:   87(fvec4) CompositeConstruct 603 604 605 221
+             607:    242(ptr) AccessChain 236(particleOut) 129 584 129
+                              Store 607 606
+             609:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 610 610 16 16
+             608:     11(int) Load 149(index)
+             611:   18(fvec3) Load 281(vel)
+             612:   18(fvec3) Load 573(f)
+             613:    131(ptr) AccessChain 125 129 129
+             614:    8(float) Load 613
+             615:   18(fvec3) VectorTimesScalar 612 614
+             616:   18(fvec3) FAdd 611 615
+             617:    8(float) CompositeExtract 616 0
+             618:    8(float) CompositeExtract 616 1
+             619:    8(float) CompositeExtract 616 2
+             620:   87(fvec4) CompositeConstruct 617 618 619 251
+             621:    242(ptr) AccessChain 236(particleOut) 129 608 250
+                              Store 621 620
+             627:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 625 625 16 16
+             626:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 623 622(sphereDist) 44
+             628:     11(int) Load 149(index)
+             629:    242(ptr) AccessChain 236(particleOut) 129 628 129
+             630:   87(fvec4) Load 629
+             631:   18(fvec3) VectorShuffle 630 630 0 1 2
+             633:    242(ptr) AccessChain 125 129 632
+             634:   87(fvec4) Load 633
+             635:   18(fvec3) VectorShuffle 634 634 0 1 2
+             636:   18(fvec3) FSub 631 635
+                              Store 622(sphereDist) 636
+             638:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 639 639 16 16
+             637:   18(fvec3) Load 622(sphereDist)
+             640:    8(float) ExtInst 3(GLSL.std.450) 66(Length) 637
+             642:    131(ptr) AccessChain 125 129 641
+             643:    8(float) Load 642
+             645:    8(float) FAdd 643 644
+             646:   177(bool) FOrdLessThan 640 645
+                              SelectionMerge 648 None
+                              BranchConditional 646 647 648
+             647:               Label
+             651:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 649
+             652:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 653 653 16 16
+             650:     11(int)   Load 149(index)
+             654:    242(ptr)   AccessChain 125 129 632
+             655:   87(fvec4)   Load 654
+             656:   18(fvec3)   VectorShuffle 655 655 0 1 2
+             657:   18(fvec3)   Load 622(sphereDist)
+             658:   18(fvec3)   ExtInst 3(GLSL.std.450) 69(Normalize) 657
+             659:    131(ptr)   AccessChain 125 129 641
+             660:    8(float)   Load 659
+             661:    8(float)   FAdd 660 644
+             662:   18(fvec3)   VectorTimesScalar 658 661
+             663:   18(fvec3)   FAdd 656 662
+             664:    131(ptr)   AccessChain 236(particleOut) 129 650 129 16
+             665:    8(float)   CompositeExtract 663 0
+                                Store 664 665
+             666:    131(ptr)   AccessChain 236(particleOut) 129 650 129 38
+             667:    8(float)   CompositeExtract 663 1
+                                Store 666 667
+             668:    131(ptr)   AccessChain 236(particleOut) 129 650 129 49
+             669:    8(float)   CompositeExtract 663 2
+                                Store 668 669
+             671:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 672 672 16 16
+             670:     11(int)   Load 149(index)
+             673:    242(ptr)   AccessChain 236(particleOut) 129 670 250
+                                Store 673 252
+                                Branch 648
+             648:             Label
+             695:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 146
+             696:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 681 681 16 16
+             694:    692(ptr) AccessChain 690 129 129
+             697:     11(int) Load 694
+             698:   177(bool) IEqual 697 38
+                              SelectionMerge 700 None
+                              BranchConditional 698 699 700
+             699:               Label
+             706:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 701
+             707:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 704 704 16 16
+             705:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 703 702(normal) 44
+                                Store 702(normal) 708
+             714:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 712 712 16 16
+             713:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 710 709(a) 44
+             718:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 716 715(b) 44
+             722:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 720 719(c) 44
+             724:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 725 725 16 16
+             723:    147(ptr)   AccessChain 60(id) 38
+             726:     11(int)   Load 723
+             727:   177(bool)   UGreaterThan 726 16
+                                SelectionMerge 729 None
+                                BranchConditional 727 728 729
+             728:                 Label
+             732:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 730
+             733:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 734 734 16 16
+             731:    147(ptr)     AccessChain 60(id) 16
+             735:     11(int)     Load 731
+             736:   177(bool)     UGreaterThan 735 16
+                                  SelectionMerge 738 None
+                                  BranchConditional 736 737 738
+             737:                   Label
+             741:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 739
+             742:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 743 743 16 16
+             740:     11(int)       Load 149(index)
+             744:     11(int)       ISub 740 38
+             745:    242(ptr)       AccessChain 213(particleIn) 129 744 129
+             746:   87(fvec4)       Load 745
+             747:   18(fvec3)       VectorShuffle 746 746 0 1 2
+             748:   18(fvec3)       Load 271(pos)
+             749:   18(fvec3)       FSub 747 748
+                                    Store 709(a) 749
+             751:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 752 752 16 16
+             750:     11(int)       Load 149(index)
+             753:    159(ptr)       AccessChain 125 129 158 16
+             754:     89(int)       Load 753
+             755:     11(int)       Bitcast 754
+             756:     11(int)       ISub 750 755
+             757:     11(int)       ISub 756 38
+             758:    242(ptr)       AccessChain 213(particleIn) 129 757 129
+             759:   87(fvec4)       Load 758
+             760:   18(fvec3)       VectorShuffle 759 759 0 1 2
+             761:   18(fvec3)       Load 271(pos)
+             762:   18(fvec3)       FSub 760 761
+                                    Store 715(b) 762
+             764:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 765 765 16 16
+             763:     11(int)       Load 149(index)
+             766:    159(ptr)       AccessChain 125 129 158 16
+             767:     89(int)       Load 766
+             768:     11(int)       Bitcast 767
+             769:     11(int)       ISub 763 768
+             770:    242(ptr)       AccessChain 213(particleIn) 129 769 129
+             771:   87(fvec4)       Load 770
+             772:   18(fvec3)       VectorShuffle 771 771 0 1 2
+             773:   18(fvec3)       Load 271(pos)
+             774:   18(fvec3)       FSub 772 773
+                                    Store 719(c) 774
+             776:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 777 777 16 16
+             775:   18(fvec3)       Load 709(a)
+             778:   18(fvec3)       Load 715(b)
+             779:   18(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 775 778
+             780:   18(fvec3)       Load 715(b)
+             781:   18(fvec3)       Load 719(c)
+             782:   18(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 780 781
+             783:   18(fvec3)       FAdd 779 782
+             784:   18(fvec3)       Load 702(normal)
+             785:   18(fvec3)       FAdd 784 783
+                                    Store 702(normal) 785
+                                    Branch 738
+             738:                 Label
+             787:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 730
+             788:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 789 789 16 16
+             786:    147(ptr)     AccessChain 60(id) 16
+             790:     11(int)     Load 786
+             791:    159(ptr)     AccessChain 125 129 158 16
+             792:     89(int)     Load 791
+             793:     89(int)     ISub 792 250
+             794:     11(int)     Bitcast 793
+             795:   177(bool)     ULessThan 790 794
+                                  SelectionMerge 797 None
+                                  BranchConditional 795 796 797
+             796:                   Label
+             800:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 798
+             801:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 802 802 16 16
+             799:     11(int)       Load 149(index)
+             803:    159(ptr)       AccessChain 125 129 158 16
+             804:     89(int)       Load 803
+             805:     11(int)       Bitcast 804
+             806:     11(int)       ISub 799 805
+             807:    242(ptr)       AccessChain 213(particleIn) 129 806 129
+             808:   87(fvec4)       Load 807
+             809:   18(fvec3)       VectorShuffle 808 808 0 1 2
+             810:   18(fvec3)       Load 271(pos)
+             811:   18(fvec3)       FSub 809 810
+                                    Store 709(a) 811
+             813:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 814 814 16 16
+             812:     11(int)       Load 149(index)
+             815:    159(ptr)       AccessChain 125 129 158 16
+             816:     89(int)       Load 815
+             817:     11(int)       Bitcast 816
+             818:     11(int)       ISub 812 817
+             819:     11(int)       IAdd 818 38
+             820:    242(ptr)       AccessChain 213(particleIn) 129 819 129
+             821:   87(fvec4)       Load 820
+             822:   18(fvec3)       VectorShuffle 821 821 0 1 2
+             823:   18(fvec3)       Load 271(pos)
+             824:   18(fvec3)       FSub 822 823
+                                    Store 715(b) 824
+             826:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 827 827 16 16
+             825:     11(int)       Load 149(index)
+             828:     11(int)       IAdd 825 38
+             829:    242(ptr)       AccessChain 213(particleIn) 129 828 129
+             830:   87(fvec4)       Load 829
+             831:   18(fvec3)       VectorShuffle 830 830 0 1 2
+             832:   18(fvec3)       Load 271(pos)
+             833:   18(fvec3)       FSub 831 832
+                                    Store 719(c) 833
+             835:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 836 836 16 16
+             834:   18(fvec3)       Load 709(a)
+             837:   18(fvec3)       Load 715(b)
+             838:   18(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 834 837
+             839:   18(fvec3)       Load 715(b)
+             840:   18(fvec3)       Load 719(c)
+             841:   18(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 839 840
+             842:   18(fvec3)       FAdd 838 841
+             843:   18(fvec3)       Load 702(normal)
+             844:   18(fvec3)       FAdd 843 842
+                                    Store 702(normal) 844
+                                    Branch 797
+             797:                 Label
+                                  Branch 729
+             729:               Label
+             846:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 701
+             847:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 848 848 16 16
+             845:    147(ptr)   AccessChain 60(id) 38
+             849:     11(int)   Load 845
+             850:    159(ptr)   AccessChain 125 129 158 38
+             851:     89(int)   Load 850
+             852:     89(int)   ISub 851 250
+             853:     11(int)   Bitcast 852
+             854:   177(bool)   ULessThan 849 853
+                                SelectionMerge 856 None
+                                BranchConditional 854 855 856
+             855:                 Label
+             859:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 857
+             860:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 861 861 16 16
+             858:    147(ptr)     AccessChain 60(id) 16
+             862:     11(int)     Load 858
+             863:   177(bool)     UGreaterThan 862 16
+                                  SelectionMerge 865 None
+                                  BranchConditional 863 864 865
+             864:                   Label
+             868:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 866
+             869:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 870 870 16 16
+             867:     11(int)       Load 149(index)
+             871:    159(ptr)       AccessChain 125 129 158 16
+             872:     89(int)       Load 871
+             873:     11(int)       Bitcast 872
+             874:     11(int)       IAdd 867 873
+             875:    242(ptr)       AccessChain 213(particleIn) 129 874 129
+             876:   87(fvec4)       Load 875
+             877:   18(fvec3)       VectorShuffle 876 876 0 1 2
+             878:   18(fvec3)       Load 271(pos)
+             879:   18(fvec3)       FSub 877 878
+                                    Store 709(a) 879
+             881:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 882 882 16 16
+             880:     11(int)       Load 149(index)
+             883:    159(ptr)       AccessChain 125 129 158 16
+             884:     89(int)       Load 883
+             885:     11(int)       Bitcast 884
+             886:     11(int)       IAdd 880 885
+             887:     11(int)       ISub 886 38
+             888:    242(ptr)       AccessChain 213(particleIn) 129 887 129
+             889:   87(fvec4)       Load 888
+             890:   18(fvec3)       VectorShuffle 889 889 0 1 2
+             891:   18(fvec3)       Load 271(pos)
+             892:   18(fvec3)       FSub 890 891
+                                    Store 715(b) 892
+             894:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 895 895 16 16
+             893:     11(int)       Load 149(index)
+             896:     11(int)       ISub 893 38
+             897:    242(ptr)       AccessChain 213(particleIn) 129 896 129
+             898:   87(fvec4)       Load 897
+             899:   18(fvec3)       VectorShuffle 898 898 0 1 2
+             900:   18(fvec3)       Load 271(pos)
+             901:   18(fvec3)       FSub 899 900
+                                    Store 719(c) 901
+             903:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 904 904 16 16
+             902:   18(fvec3)       Load 709(a)
+             905:   18(fvec3)       Load 715(b)
+             906:   18(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 902 905
+             907:   18(fvec3)       Load 715(b)
+             908:   18(fvec3)       Load 719(c)
+             909:   18(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 907 908
+             910:   18(fvec3)       FAdd 906 909
+             911:   18(fvec3)       Load 702(normal)
+             912:   18(fvec3)       FAdd 911 910
+                                    Store 702(normal) 912
+                                    Branch 865
+             865:                 Label
+             914:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 857
+             915:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 916 916 16 16
+             913:    147(ptr)     AccessChain 60(id) 16
+             917:     11(int)     Load 913
+             918:    159(ptr)     AccessChain 125 129 158 16
+             919:     89(int)     Load 918
+             920:     89(int)     ISub 919 250
+             921:     11(int)     Bitcast 920
+             922:   177(bool)     ULessThan 917 921
+                                  SelectionMerge 924 None
+                                  BranchConditional 922 923 924
+             923:                   Label
+             927:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 925
+             928:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 929 929 16 16
+             926:     11(int)       Load 149(index)
+             930:     11(int)       IAdd 926 38
+             931:    242(ptr)       AccessChain 213(particleIn) 129 930 129
+             932:   87(fvec4)       Load 931
+             933:   18(fvec3)       VectorShuffle 932 932 0 1 2
+             934:   18(fvec3)       Load 271(pos)
+             935:   18(fvec3)       FSub 933 934
+                                    Store 709(a) 935
+             937:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 938 938 16 16
+             936:     11(int)       Load 149(index)
+             939:    159(ptr)       AccessChain 125 129 158 16
+             940:     89(int)       Load 939
+             941:     11(int)       Bitcast 940
+             942:     11(int)       IAdd 936 941
+             943:     11(int)       IAdd 942 38
+             944:    242(ptr)       AccessChain 213(particleIn) 129 943 129
+             945:   87(fvec4)       Load 944
+             946:   18(fvec3)       VectorShuffle 945 945 0 1 2
+             947:   18(fvec3)       Load 271(pos)
+             948:   18(fvec3)       FSub 946 947
+                                    Store 715(b) 948
+             950:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 951 951 16 16
+             949:     11(int)       Load 149(index)
+             952:    159(ptr)       AccessChain 125 129 158 16
+             953:     89(int)       Load 952
+             954:     11(int)       Bitcast 953
+             955:     11(int)       IAdd 949 954
+             956:    242(ptr)       AccessChain 213(particleIn) 129 955 129
+             957:   87(fvec4)       Load 956
+             958:   18(fvec3)       VectorShuffle 957 957 0 1 2
+             959:   18(fvec3)       Load 271(pos)
+             960:   18(fvec3)       FSub 958 959
+                                    Store 719(c) 960
+             962:           4       ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 963 963 16 16
+             961:   18(fvec3)       Load 709(a)
+             964:   18(fvec3)       Load 715(b)
+             965:   18(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 961 964
+             966:   18(fvec3)       Load 715(b)
+             967:   18(fvec3)       Load 719(c)
+             968:   18(fvec3)       ExtInst 3(GLSL.std.450) 68(Cross) 966 967
+             969:   18(fvec3)       FAdd 965 968
+             970:   18(fvec3)       Load 702(normal)
+             971:   18(fvec3)       FAdd 970 969
+                                    Store 702(normal) 971
+                                    Branch 924
+             924:                 Label
+                                  Branch 856
+             856:               Label
+             973:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 701
+             974:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 975 975 16 16
+             972:     11(int)   Load 149(index)
+             976:   18(fvec3)   Load 702(normal)
+             977:   18(fvec3)   ExtInst 3(GLSL.std.450) 69(Normalize) 976
+             978:    8(float)   CompositeExtract 977 0
+             979:    8(float)   CompositeExtract 977 1
+             980:    8(float)   CompositeExtract 977 2
+             981:   87(fvec4)   CompositeConstruct 978 979 980 251
+             982:    242(ptr)   AccessChain 236(particleOut) 129 972 562
+                                Store 982 981
+                                Branch 700
+             700:             Label
+             983:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 64
+             984:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 34 975 975 16 16
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.debuginfo.hlsl.frag.out b/Test/baseResults/spv.debuginfo.hlsl.frag.out
index 600976c..d8367e1 100644
--- a/Test/baseResults/spv.debuginfo.hlsl.frag.out
+++ b/Test/baseResults/spv.debuginfo.hlsl.frag.out
@@ -1,21 +1,21 @@
 spv.debuginfo.hlsl.frag
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 886
+// Id's are bound by 931
 
                               Capability Shader
                               Capability ImageQuery
                               Extension  "SPV_KHR_non_semantic_info"
-               2:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
                3:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 6  "main" 879 882
+                              EntryPoint Fragment 6  "main" 924 927
                               ExecutionMode 6 OriginUpperLeft
-               1:             String  ""
+               2:             String  "spv.debuginfo.hlsl.frag"
                9:             String  "float"
               12:             String  "uint"
-              33:             String  "textureProj"
-              36:             String  "// OpModuleProcessed auto-map-locations
+              38:             String  "textureProj"
+              41:             String  "// OpModuleProcessed auto-map-locations
 // OpModuleProcessed auto-map-bindings
 // OpModuleProcessed entry-point main
 // OpModuleProcessed client vulkan100
@@ -23,192 +23,390 @@
 // OpModuleProcessed keep-uncalled
 // OpModuleProcessed hlsl-offsets
 #line 1
+/*
+The MIT License (MIT)
+
+Copyright (c) 2022 Google LLC
+Copyright (c) 2022 Sascha Willems
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+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 Software.
+
+THE SOFTWARE IS 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 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+*/
+
+Texture2D textureposition : register(t1);
+SamplerState samplerposition : register(s1);
+Texture2D textureNormal : register(t2);
+SamplerState samplerNormal : register(s2);
+Texture2D textureAlbedo : register(t3);
+SamplerState samplerAlbedo : register(s3);
+// Depth from the light's point of view
+//layout (binding = 5) uniform sampler2DShadow samplerShadowMap;
+Texture2DArray textureShadowMap : register(t5);
+SamplerState samplerShadowMap : register(s5);
+
+#define LIGHT_COUNT 3
+#define SHADOW_FACTOR 0.25
+#define AMBIENT_LIGHT 0.1
+#define USE_PCF
+
+struct Light
+{
+	float4 position;
+	float4 target;
+	float4 color;
+	float4x4 viewMatrix;
+};
+
+struct UBO
+{
+	float4 viewPos;
+	Light lights[LIGHT_COUNT];
+	int useShadows;
+	int displayDebugTarget;
+};
+
+cbuffer ubo : register(b4) { UBO ubo; }
+
+float textureProj(float4 P, float layer, float2 offset)
+{
+	float shadow = 1.0;
+	float4 shadowCoord = P / P.w;
+	shadowCoord.xy = shadowCoord.xy * 0.5 + 0.5;
+
+	if (shadowCoord.z > -1.0 && shadowCoord.z < 1.0)
+	{
+		float dist = textureShadowMap.Sample(samplerShadowMap, float3(shadowCoord.xy + offset, layer)).r;
+		if (shadowCoord.w > 0.0 && dist < shadowCoord.z)
+		{
+			shadow = SHADOW_FACTOR;
+		}
+	}
+	return shadow;
+}
+
+float filterPCF(float4 sc, float layer)
+{
+	int2 texDim; int elements; int levels;
+	textureShadowMap.GetDimensions(0, texDim.x, texDim.y, elements, levels);
+	float scale = 1.5;
+	float dx = scale * 1.0 / float(texDim.x);
+	float dy = scale * 1.0 / float(texDim.y);
+
+	float shadowFactor = 0.0;
+	int count = 0;
+	int range = 1;
+
+	for (int x = -range; x <= range; x++)
+	{
+		for (int y = -range; y <= range; y++)
+		{
+			shadowFactor += textureProj(sc, layer, float2(dx*x, dy*y));
+			count++;
+		}
+
+	}
+	return shadowFactor / count;
+}
+
+float3 shadow(float3 fragcolor, float3 fragPos) {
+	for (int i = 0; i < LIGHT_COUNT; ++i)
+	{
+		float4 shadowClip = mul(ubo.lights[i].viewMatrix, float4(fragPos.xyz, 1.0));
+
+		float shadowFactor;
+		#ifdef USE_PCF
+			shadowFactor= filterPCF(shadowClip, i);
+		#else
+			shadowFactor = textureProj(shadowClip, i, float2(0.0, 0.0));
+		#endif
+
+		fragcolor *= shadowFactor;
+	}
+	return fragcolor;
+}
+
+float4 main([[vk::location(0)]] float2 inUV : TEXCOORD0) : SV_TARGET
+{
+	// Get G-Buffer values
+	float3 fragPos = textureposition.Sample(samplerposition, inUV).rgb;
+	float3 normal = textureNormal.Sample(samplerNormal, inUV).rgb;
+	float4 albedo = textureAlbedo.Sample(samplerAlbedo, inUV);
+
+	float3 fragcolor;
+
+	// Debug display
+	if (ubo.displayDebugTarget > 0) {
+		switch (ubo.displayDebugTarget) {
+			case 1: 
+				fragcolor.rgb = shadow(float3(1.0, 1.0, 1.0), fragPos);
+				break;
+			case 2: 
+				fragcolor.rgb = fragPos;
+				break;
+			case 3: 
+				fragcolor.rgb = normal;
+				break;
+			case 4: 
+				fragcolor.rgb = albedo.rgb;
+				break;
+			case 5: 
+				fragcolor.rgb = albedo.aaa;
+				break;
+		}		
+		return float4(fragcolor, 1.0);
+	}
+
+	// Ambient part
+	fragcolor  = albedo.rgb * AMBIENT_LIGHT;
+
+	float3 N = normalize(normal);
+
+	for(int i = 0; i < LIGHT_COUNT; ++i)
+	{
+		// Vector to light
+		float3 L = ubo.lights[i].position.xyz - fragPos;
+		// Distance from light to fragment position
+		float dist = length(L);
+		L = normalize(L);
+
+		// Viewer to fragment
+		float3 V = ubo.viewPos.xyz - fragPos;
+		V = normalize(V);
+
+		float lightCosInnerAngle = cos(radians(15.0));
+		float lightCosOuterAngle = cos(radians(25.0));
+		float lightRange = 100.0;
+
+		// Direction vector from source to target
+		float3 dir = normalize(ubo.lights[i].position.xyz - ubo.lights[i].target.xyz);
+
+		// Dual cone spot light with smooth transition between inner and outer angle
+		float cosDir = dot(L, dir);
+		float spotEffect = smoothstep(lightCosOuterAngle, lightCosInnerAngle, cosDir);
+		float heightAttenuation = smoothstep(lightRange, 0.0f, dist);
+
+		// Diffuse lighting
+		float NdotL = max(0.0, dot(N, L));
+		float3 diff = NdotL.xxx;
+
+		// Specular lighting
+		float3 R = reflect(-L, N);
+		float NdotR = max(0.0, dot(R, V));
+		float3 spec = (pow(NdotR, 16.0) * albedo.a * 2.5).xxx;
+
+		fragcolor += float3((diff + spec) * spotEffect * heightAttenuation) * ubo.lights[i].color.rgb * albedo.rgb;
+	}
+
+	// Shadow calculations in a separate pass
+	if (ubo.useShadows > 0)
+	{
+		fragcolor = shadow(fragcolor, fragPos);
+	}
+
+	return float4(fragcolor, 1);
+}
 "
-              44:             String  "P"
-              48:             String  "layer"
-              51:             String  "offset"
-              58:             String  "filterPCF"
-              64:             String  "sc"
-              76:             String  "shadow"
-              82:             String  "fragcolor"
-              85:             String  "fragPos"
-              91:             String  "@main"
-              97:             String  "inUV"
-             111:             String  "shadowCoord"
-             136:             String  "bool"
-             152:             String  "dist"
-             156:             String  "type.2d.image"
-             157:             String  "@type.2d.image"
-             162:             String  "textureShadowMap"
-             167:             String  "type.sampler"
-             168:             String  "@type.sampler"
-             172:             String  "samplerShadowMap"
-             176:             String  "type.sampled.image"
-             177:             String  "@type.sampled.image"
-             224:             String  "sizeQueryTemp"
+              47:             String  "P"
+              53:             String  "layer"
+              56:             String  "offset"
+              64:             String  "filterPCF"
+              68:             String  "sc"
+              84:             String  "shadow"
+              88:             String  "fragcolor"
+              93:             String  "fragPos"
+             100:             String  "@main"
+             104:             String  "inUV"
+             119:             String  "shadowCoord"
+             146:             String  "bool"
+             158:             String  "dist"
+             165:             String  "type.2d.image"
+             166:             String  "@type.2d.image"
+             172:             String  "textureShadowMap"
+             177:             String  "type.sampler"
+             178:             String  "@type.sampler"
+             183:             String  "samplerShadowMap"
+             187:             String  "type.sampled.image"
+             188:             String  "@type.sampled.image"
              229:             String  "int"
-             236:             String  "texDim"
-             250:             String  "elements"
-             257:             String  "levels"
-             266:             String  "scale"
-             273:             String  "dx"
-             285:             String  "dy"
-             297:             String  "shadowFactor"
-             303:             String  "count"
-             310:             String  "range"
-             317:             String  "x"
-             339:             String  "y"
-             403:             String  "i"
-             423:             String  "shadowClip"
-             435:             String  "color"
-             441:             String  "viewMatrix"
-             445:             String  "Light"
-             451:             String  "lights"
-             454:             String  "displayDebugTarget"
-             459:             String  "UBO"
-             462:             String  "ubo"
-             512:             String  "textureposition"
-             517:             String  "samplerposition"
-             529:             String  "normal"
-             533:             String  "textureNormal"
-             538:             String  "samplerNormal"
-             548:             String  "albedo"
-             552:             String  "textureAlbedo"
-             557:             String  "samplerAlbedo"
-             647:             String  "N"
-             673:             String  "L"
-             697:             String  "V"
-             712:             String  "lightCosInnerAngle"
-             719:             String  "lightCosOuterAngle"
-             726:             String  "lightRange"
-             733:             String  "dir"
-             749:             String  "cosDir"
-             758:             String  "spotEffect"
-             768:             String  "heightAttenuation"
-             777:             String  "NdotL"
-             787:             String  "diff"
-             795:             String  "R"
-             805:             String  "NdotR"
-             815:             String  "spec"
+             237:             String  "texDim"
+             246:             String  "elements"
+             250:             String  "levels"
+             258:             String  "sizeQueryTemp"
+             282:             String  "scale"
+             289:             String  "dx"
+             301:             String  "dy"
+             313:             String  "shadowFactor"
+             319:             String  "count"
+             326:             String  "range"
+             336:             String  "x"
+             360:             String  "y"
+             428:             String  "i"
+             447:             String  "shadowClip"
+             462:             String  "color"
+             468:             String  "viewMatrix"
+             472:             String  "Light"
+             478:             String  "lights"
+             481:             String  "displayDebugTarget"
+             486:             String  "UBO"
+             489:             String  "ubo"
+             497:             String  ""
+             548:             String  "textureposition"
+             553:             String  "samplerposition"
+             563:             String  "normal"
+             569:             String  "textureNormal"
+             574:             String  "samplerNormal"
+             582:             String  "albedo"
+             588:             String  "textureAlbedo"
+             593:             String  "samplerAlbedo"
+             684:             String  "N"
+             712:             String  "L"
+             738:             String  "V"
+             753:             String  "lightCosInnerAngle"
+             760:             String  "lightCosOuterAngle"
+             767:             String  "lightRange"
+             774:             String  "dir"
+             790:             String  "cosDir"
+             799:             String  "spotEffect"
+             809:             String  "heightAttenuation"
+             818:             String  "NdotL"
+             828:             String  "diff"
+             836:             String  "R"
+             846:             String  "NdotR"
+             856:             String  "spec"
                               Name 6  "main"
-                              Name 32  "textureProj(vf4;f1;vf2;"
-                              Name 29  "P"
-                              Name 30  "layer"
-                              Name 31  "offset"
-                              Name 57  "filterPCF(vf4;f1;"
-                              Name 55  "sc"
-                              Name 56  "layer"
-                              Name 75  "shadow(vf3;vf3;"
-                              Name 73  "fragcolor"
-                              Name 74  "fragPos"
-                              Name 90  "@main(vf2;"
-                              Name 89  "inUV"
-                              Name 103  "shadow"
-                              Name 109  "shadowCoord"
-                              Name 150  "dist"
-                              Name 160  "textureShadowMap"
-                              Name 170  "samplerShadowMap"
-                              Name 222  "sizeQueryTemp"
-                              Name 234  "texDim"
-                              Name 248  "elements"
-                              Name 255  "levels"
-                              Name 264  "scale"
-                              Name 271  "dx"
-                              Name 283  "dy"
-                              Name 295  "shadowFactor"
-                              Name 301  "count"
-                              Name 308  "range"
-                              Name 315  "x"
-                              Name 337  "y"
-                              Name 368  "param"
-                              Name 370  "param"
-                              Name 372  "param"
-                              Name 401  "i"
-                              Name 421  "shadowClip"
-                              Name 433  "Light"
-                              MemberName 433(Light) 0  "position"
-                              MemberName 433(Light) 1  "target"
-                              MemberName 433(Light) 2  "color"
-                              MemberName 433(Light) 3  "viewMatrix"
-                              Name 448  "UBO"
-                              MemberName 448(UBO) 0  "viewPos"
-                              MemberName 448(UBO) 1  "lights"
-                              MemberName 448(UBO) 2  "useShadows"
-                              MemberName 448(UBO) 3  "displayDebugTarget"
-                              Name 460  "ubo"
-                              MemberName 460(ubo) 0  "ubo"
-                              Name 467  ""
-                              Name 476  "shadowFactor"
-                              Name 481  "param"
-                              Name 483  "param"
-                              Name 504  "fragPos"
-                              Name 510  "textureposition"
-                              Name 515  "samplerposition"
-                              Name 527  "normal"
-                              Name 531  "textureNormal"
-                              Name 536  "samplerNormal"
-                              Name 546  "albedo"
-                              Name 550  "textureAlbedo"
-                              Name 555  "samplerAlbedo"
-                              Name 585  "fragcolor"
-                              Name 589  "param"
-                              Name 590  "param"
-                              Name 645  "N"
-                              Name 653  "i"
-                              Name 671  "L"
-                              Name 684  "dist"
-                              Name 695  "V"
-                              Name 710  "lightCosInnerAngle"
-                              Name 717  "lightCosOuterAngle"
-                              Name 724  "lightRange"
-                              Name 731  "dir"
-                              Name 747  "cosDir"
-                              Name 756  "spotEffect"
-                              Name 766  "heightAttenuation"
-                              Name 775  "NdotL"
-                              Name 785  "diff"
-                              Name 793  "R"
-                              Name 803  "NdotR"
-                              Name 813  "spec"
-                              Name 862  "param"
-                              Name 864  "param"
-                              Name 877  "inUV"
-                              Name 879  "inUV"
-                              Name 882  "@entryPointOutput"
-                              Name 883  "param"
-                              Decorate 160(textureShadowMap) DescriptorSet 0
-                              Decorate 160(textureShadowMap) Binding 5
-                              Decorate 170(samplerShadowMap) DescriptorSet 0
-                              Decorate 170(samplerShadowMap) Binding 5
-                              MemberDecorate 433(Light) 0 Offset 0
-                              MemberDecorate 433(Light) 1 Offset 16
-                              MemberDecorate 433(Light) 2 Offset 32
-                              MemberDecorate 433(Light) 3 RowMajor
-                              MemberDecorate 433(Light) 3 Offset 48
-                              MemberDecorate 433(Light) 3 MatrixStride 16
-                              Decorate 446 ArrayStride 112
-                              MemberDecorate 448(UBO) 0 Offset 0
-                              MemberDecorate 448(UBO) 1 Offset 16
-                              MemberDecorate 448(UBO) 2 Offset 352
-                              MemberDecorate 448(UBO) 3 Offset 356
-                              MemberDecorate 460(ubo) 0 Offset 0
-                              Decorate 460(ubo) Block
-                              Decorate 467 DescriptorSet 0
-                              Decorate 467 Binding 4
-                              Decorate 510(textureposition) DescriptorSet 0
-                              Decorate 510(textureposition) Binding 1
-                              Decorate 515(samplerposition) DescriptorSet 0
-                              Decorate 515(samplerposition) Binding 1
-                              Decorate 531(textureNormal) DescriptorSet 0
-                              Decorate 531(textureNormal) Binding 2
-                              Decorate 536(samplerNormal) DescriptorSet 0
-                              Decorate 536(samplerNormal) Binding 2
-                              Decorate 550(textureAlbedo) DescriptorSet 0
-                              Decorate 550(textureAlbedo) Binding 3
-                              Decorate 555(samplerAlbedo) DescriptorSet 0
-                              Decorate 555(samplerAlbedo) Binding 3
-                              Decorate 879(inUV) Location 0
-                              Decorate 882(@entryPointOutput) Location 0
+                              Name 36  "textureProj(vf4;f1;vf2;"
+                              Name 33  "P"
+                              Name 34  "layer"
+                              Name 35  "offset"
+                              Name 62  "filterPCF(vf4;f1;"
+                              Name 60  "sc"
+                              Name 61  "layer"
+                              Name 82  "shadow(vf3;vf3;"
+                              Name 80  "fragcolor"
+                              Name 81  "fragPos"
+                              Name 98  "@main(vf2;"
+                              Name 97  "inUV"
+                              Name 110  "shadow"
+                              Name 117  "shadowCoord"
+                              Name 156  "dist"
+                              Name 170  "textureShadowMap"
+                              Name 181  "samplerShadowMap"
+                              Name 235  "texDim"
+                              Name 244  "elements"
+                              Name 248  "levels"
+                              Name 256  "sizeQueryTemp"
+                              Name 280  "scale"
+                              Name 287  "dx"
+                              Name 299  "dy"
+                              Name 311  "shadowFactor"
+                              Name 317  "count"
+                              Name 324  "range"
+                              Name 334  "x"
+                              Name 358  "y"
+                              Name 391  "param"
+                              Name 393  "param"
+                              Name 395  "param"
+                              Name 426  "i"
+                              Name 445  "shadowClip"
+                              Name 460  "Light"
+                              MemberName 460(Light) 0  "position"
+                              MemberName 460(Light) 1  "target"
+                              MemberName 460(Light) 2  "color"
+                              MemberName 460(Light) 3  "viewMatrix"
+                              Name 475  "UBO"
+                              MemberName 475(UBO) 0  "viewPos"
+                              MemberName 475(UBO) 1  "lights"
+                              MemberName 475(UBO) 2  "useShadows"
+                              MemberName 475(UBO) 3  "displayDebugTarget"
+                              Name 487  "ubo"
+                              MemberName 487(ubo) 0  "ubo"
+                              Name 495  ""
+                              Name 504  "shadowFactor"
+                              Name 513  "param"
+                              Name 515  "param"
+                              Name 536  "fragPos"
+                              Name 546  "textureposition"
+                              Name 551  "samplerposition"
+                              Name 561  "normal"
+                              Name 567  "textureNormal"
+                              Name 572  "samplerNormal"
+                              Name 580  "albedo"
+                              Name 586  "textureAlbedo"
+                              Name 591  "samplerAlbedo"
+                              Name 598  "fragcolor"
+                              Name 625  "param"
+                              Name 629  "param"
+                              Name 682  "N"
+                              Name 693  "i"
+                              Name 710  "L"
+                              Name 725  "dist"
+                              Name 736  "V"
+                              Name 751  "lightCosInnerAngle"
+                              Name 758  "lightCosOuterAngle"
+                              Name 765  "lightRange"
+                              Name 772  "dir"
+                              Name 788  "cosDir"
+                              Name 797  "spotEffect"
+                              Name 807  "heightAttenuation"
+                              Name 816  "NdotL"
+                              Name 826  "diff"
+                              Name 834  "R"
+                              Name 844  "NdotR"
+                              Name 854  "spec"
+                              Name 902  "param"
+                              Name 907  "param"
+                              Name 922  "inUV"
+                              Name 924  "inUV"
+                              Name 927  "@entryPointOutput"
+                              Name 928  "param"
+                              Decorate 170(textureShadowMap) Binding 5
+                              Decorate 170(textureShadowMap) DescriptorSet 0
+                              Decorate 181(samplerShadowMap) Binding 5
+                              Decorate 181(samplerShadowMap) DescriptorSet 0
+                              MemberDecorate 460(Light) 0 Offset 0
+                              MemberDecorate 460(Light) 1 Offset 16
+                              MemberDecorate 460(Light) 2 Offset 32
+                              MemberDecorate 460(Light) 3 RowMajor
+                              MemberDecorate 460(Light) 3 MatrixStride 16
+                              MemberDecorate 460(Light) 3 Offset 48
+                              Decorate 473 ArrayStride 112
+                              MemberDecorate 475(UBO) 0 Offset 0
+                              MemberDecorate 475(UBO) 1 Offset 16
+                              MemberDecorate 475(UBO) 2 Offset 352
+                              MemberDecorate 475(UBO) 3 Offset 356
+                              Decorate 487(ubo) Block
+                              MemberDecorate 487(ubo) 0 Offset 0
+                              Decorate 495 Binding 4
+                              Decorate 495 DescriptorSet 0
+                              Decorate 546(textureposition) Binding 1
+                              Decorate 546(textureposition) DescriptorSet 0
+                              Decorate 551(samplerposition) Binding 1
+                              Decorate 551(samplerposition) DescriptorSet 0
+                              Decorate 567(textureNormal) Binding 2
+                              Decorate 567(textureNormal) DescriptorSet 0
+                              Decorate 572(samplerNormal) Binding 2
+                              Decorate 572(samplerNormal) DescriptorSet 0
+                              Decorate 586(textureAlbedo) Binding 3
+                              Decorate 586(textureAlbedo) DescriptorSet 0
+                              Decorate 591(samplerAlbedo) Binding 3
+                              Decorate 591(samplerAlbedo) DescriptorSet 0
+                              Decorate 924(inUV) Location 0
+                              Decorate 927(@entryPointOutput) Location 0
                4:             TypeVoid
                5:             TypeFunction 4
                8:             TypeFloat 32
@@ -216,928 +414,958 @@
               14:     11(int) Constant 32
               15:     11(int) Constant 6
               16:     11(int) Constant 0
-              13:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 12 14 15 16
+              13:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 12 14 15 16
               17:     11(int) Constant 3
-              10:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 9 14 17 16
+              10:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 9 14 17 16
               18:             TypeVector 8(float) 4
               19:     11(int) Constant 4
-              20:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 19
+              20:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 19
               21:             TypePointer Function 18(fvec4)
-              22:             TypePointer Function 8(float)
-              23:             TypeVector 8(float) 2
-              24:     11(int) Constant 2
-              25:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 24
-              26:             TypePointer Function 23(fvec2)
-              27:             TypeFunction 8(float) 21(ptr) 22(ptr) 26(ptr)
-              28:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 10 20 10 25
-              35:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 1 36
-              38:     11(int) Constant 1
-              39:     11(int) Constant 5
-              37:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 38 19 35 39
-              34:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 33 28 35 16 16 37 33 17 16
-              43:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 44 20 35 16 16 34 19 38
-              46:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
-              47:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 48 10 35 16 16 34 19 24
-              50:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 51 25 35 16 16 34 19 17
-              53:             TypeFunction 8(float) 21(ptr) 22(ptr)
-              54:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 10 20 10
-              59:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 58 54 35 16 16 37 58 17 16
-              63:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 64 20 35 16 16 59 19 38
-              66:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 48 10 35 16 16 59 19 24
-              68:             TypeVector 8(float) 3
-              69:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 17
-              70:             TypePointer Function 68(fvec3)
-              71:             TypeFunction 68(fvec3) 70(ptr) 70(ptr)
-              72:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 69 69 69
-              77:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 76 72 35 16 16 37 76 17 16
-              81:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 82 69 35 16 16 77 19 38
-              84:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 85 69 35 16 16 77 19 24
-              87:             TypeFunction 18(fvec4) 26(ptr)
-              88:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 20 25
-              92:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 91 88 35 16 16 37 91 17 16
-              96:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 97 25 35 16 16 92 19 38
-             102:     11(int) Constant 62
-             104:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 76 10 35 102 16 34 19
-             106:    8(float) Constant 1065353216
-             108:     11(int) Constant 63
-             110:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 111 20 35 108 16 34 19
-             119:     11(int) Constant 64
-             122:    8(float) Constant 1056964608
-             131:     11(int) Constant 66
-             134:    8(float) Constant 3212836864
-             135:             TypeBool
-             137:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 136 14 24 16
-             141:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 136 14 24 16
-             143:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 136 14 24 16
-             149:     11(int) Constant 68
-             151:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 152 10 35 149 16 34 19
-             154:             TypeImage 8(float) 2D array sampled format:Unknown
-             158:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 0(DebugInfoNone)
-             155:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 156 16 35 149 16 37 157 158 17
-             159:             TypePointer UniformConstant 154
-160(textureShadowMap):    159(ptr) Variable UniformConstant
-             163:     11(int) Constant 8
-             161:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 162 155 35 149 16 37 162 160(textureShadowMap) 163
-             165:             TypeSampler
-             166:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 167 38 35 149 16 37 168 158 17
-             169:             TypePointer UniformConstant 165
-170(samplerShadowMap):    169(ptr) Variable UniformConstant
-             171:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 172 166 35 149 16 37 172 170(samplerShadowMap) 163
-             174:             TypeSampledImage 154
-             175:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 176 16 35 149 16 37 177 158 17
-             190:     11(int) Constant 69
-             193:    8(float) Constant 0
-             194:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 136 14 24 16
-             199:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 136 14 24 16
-             201:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 136 14 24 16
-             207:     11(int) Constant 71
-             208:    8(float) Constant 1048576000
-             211:     11(int) Constant 74
-             218:     11(int) Constant 80
-             219:             TypeVector 11(int) 3
-             220:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 13 17
-             221:             TypePointer Function 219(ivec3)
-             223:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 224 220 35 218 16 59 19
+              22:     11(int) Constant 7
+              23:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 20 22 16
+              24:             TypePointer Function 8(float)
+              25:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 10 22 16
+              26:             TypeVector 8(float) 2
+              27:     11(int) Constant 2
+              28:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 27
+              29:             TypePointer Function 26(fvec2)
+              30:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 28 22 16
+              31:             TypeFunction 8(float) 21(ptr) 24(ptr) 29(ptr)
+              32:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 10 20 10 28
+              40:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 2 41
+              42:     11(int) Constant 61
+              44:     11(int) Constant 1
+              45:     11(int) Constant 5
+              43:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 44 19 40 45
+              39:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 38 32 40 42 16 43 38 17 42
+              46:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 47 20 40 42 16 39 19 44
+              49:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
+              52:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 53 10 40 42 16 39 19 27
+              55:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 56 28 40 42 16 39 19 17
+              58:             TypeFunction 8(float) 21(ptr) 24(ptr)
+              59:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 10 20 10
+              66:     11(int) Constant 78
+              65:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 64 59 40 66 16 43 64 17 66
+              67:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 68 20 40 66 16 65 19 44
+              72:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 53 10 40 66 16 65 19 27
+              74:             TypeVector 8(float) 3
+              75:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 17
+              76:             TypePointer Function 74(fvec3)
+              77:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 75 22 16
+              78:             TypeFunction 74(fvec3) 76(ptr) 76(ptr)
+              79:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 75 75 75
+              86:     11(int) Constant 101
+              85:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 84 79 40 86 16 43 84 17 86
+              87:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 88 75 40 86 16 85 19 44
+              92:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 93 75 40 86 16 85 19 27
+              95:             TypeFunction 18(fvec4) 29(ptr)
+              96:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 20 28
+             102:     11(int) Constant 119
+             101:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 100 96 40 102 16 43 100 17 102
+             103:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 104 28 40 102 16 101 19 44
+             109:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 40 16 16 39
+             112:     11(int) Constant 62
+             111:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 84 10 40 112 16 109 19
+             116:    8(float) Constant 1065353216
+             120:     11(int) Constant 63
+             118:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 119 20 40 120 16 109 19
+             130:     11(int) Constant 64
+             132:    8(float) Constant 1056964608
+             142:     11(int) Constant 66
+             144:    8(float) Constant 3212836864
+             145:             TypeBool
+             147:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 146 14 27 16
+             155:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 40 16 16 109
+             159:     11(int) Constant 68
+             157:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 158 10 40 159 16 155 19
+             163:             TypeImage 8(float) 2D array sampled format:Unknown
+             167:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 0(DebugInfoNone)
+             164:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 165 16 40 159 16 43 166 167 17
+             168:             TypePointer UniformConstant 163
+             169:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 164 16 16
+170(textureShadowMap):    168(ptr) Variable UniformConstant
+             173:     11(int) Constant 8
+             171:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 172 164 40 159 16 43 172 170(textureShadowMap) 173
+             175:             TypeSampler
+             176:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 177 44 40 159 16 43 178 167 17
+             179:             TypePointer UniformConstant 175
+             180:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 176 16 16
+181(samplerShadowMap):    179(ptr) Variable UniformConstant
+             182:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 183 176 40 159 16 43 183 181(samplerShadowMap) 173
+             185:             TypeSampledImage 163
+             186:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 187 16 40 159 16 43 188 167 17
+             202:     11(int) Constant 69
+             204:    8(float) Constant 0
+             213:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 40 16 16 155
+             214:    8(float) Constant 1048576000
+             217:     11(int) Constant 71
+             221:     11(int) Constant 74
+             227:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 40 16 16 65
              228:             TypeInt 32 1
-             230:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 229 14 19 16
+             230:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 229 14 19 16
              231:             TypeVector 228(int) 2
-             232:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 230 24
+             232:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 230 27
              233:             TypePointer Function 231(ivec2)
-             235:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 236 232 35 218 16 59 19
-             238:             TypePointer Function 11(int)
+             234:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 232 22 16
+             238:     11(int) Constant 79
+             236:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 237 232 40 238 16 227 19
              242:             TypePointer Function 228(int)
-             249:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 250 230 35 218 16 59 19
-             256:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 257 230 35 218 16 59 19
-             263:     11(int) Constant 81
-             265:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 266 10 35 263 16 59 19
-             268:    8(float) Constant 1069547520
-             270:     11(int) Constant 82
-             272:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 273 10 35 270 16 59 19
-             282:     11(int) Constant 83
-             284:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 285 10 35 282 16 59 19
-             294:     11(int) Constant 85
-             296:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 297 10 35 294 16 59 19
-             300:     11(int) Constant 86
-             302:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 303 230 35 300 16 59 19
-             305:    228(int) Constant 0
-             307:     11(int) Constant 87
-             309:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 310 230 35 307 16 59 19
-             312:    228(int) Constant 1
-             314:     11(int) Constant 89
-             316:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 317 230 35 314 16 59 19
-             332:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 136 14 24 16
-             336:     11(int) Constant 91
-             338:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 339 230 35 336 16 59 19
-             354:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 136 14 24 16
-             358:     11(int) Constant 93
-             377:     11(int) Constant 94
-             390:     11(int) Constant 98
-             400:     11(int) Constant 102
-             402:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 403 230 35 400 16 77 19
-             415:    228(int) Constant 3
-             416:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 136 14 24 16
-             420:     11(int) Constant 104
-             422:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 423 20 35 420 16 77 19
-             430:             TypeMatrix 18(fvec4) 4
-             432:   135(bool) ConstantTrue
-             431:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 20 19 432
-      433(Light):             TypeStruct 18(fvec4) 18(fvec4) 18(fvec4) 430
-             436:     11(int) Constant 46
-             437:     11(int) Constant 14
-             434:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 435 20 35 436 437 16 16 17
-             438:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 435 20 35 436 437 16 16 17
-             439:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 435 20 35 436 437 16 16 17
-             442:     11(int) Constant 47
-             443:     11(int) Constant 21
-             440:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 441 431 35 442 443 16 16 17
-             444:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 445 38 35 420 16 37 445 16 17 434 438 439 440
-             446:             TypeArray 433(Light) 17
-             447:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 444 17
-        448(UBO):             TypeStruct 18(fvec4) 446 228(int) 228(int)
-             449:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 435 20 35 436 437 16 16 17
-             452:     11(int) Constant 53
-             450:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 451 447 35 452 437 16 16 17
-             455:     11(int) Constant 55
-             456:     11(int) Constant 24
-             453:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 454 230 35 455 456 16 16 17
-             457:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 454 230 35 455 456 16 16 17
-             458:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 459 38 35 420 16 37 459 16 17 449 450 453 457
-        460(ubo):             TypeStruct 448(UBO)
-             463:     11(int) Constant 58
-             464:     11(int) Constant 37
-             461:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 462 458 35 463 464 16 16 17
-             465:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 462 38 35 420 16 37 462 16 17 461
-             466:             TypePointer Uniform 460(ubo)
-             467:    466(ptr) Variable Uniform
-             468:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 1 465 35 420 16 37 1 467 163
-             470:             TypePointer Uniform 430
-             475:     11(int) Constant 108
-             477:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 297 10 35 475 16 77 19
-             486:     11(int) Constant 113
-             496:     11(int) Constant 115
-             503:     11(int) Constant 121
-             505:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 85 69 35 503 16 92 19
-             507:             TypeImage 8(float) 2D sampled format:Unknown
-             508:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 156 16 35 503 16 37 157 158 17
-             509:             TypePointer UniformConstant 507
-510(textureposition):    509(ptr) Variable UniformConstant
-             511:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 512 508 35 503 16 37 512 510(textureposition) 163
-             514:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 167 38 35 503 16 37 168 158 17
-515(samplerposition):    169(ptr) Variable UniformConstant
-             516:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 517 514 35 503 16 37 517 515(samplerposition) 163
-             519:             TypeSampledImage 507
-             520:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 176 16 35 503 16 37 177 158 17
-             526:     11(int) Constant 122
-             528:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 529 69 35 526 16 92 19
-531(textureNormal):    509(ptr) Variable UniformConstant
-             532:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 533 508 35 526 16 37 533 531(textureNormal) 163
-             535:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 167 38 35 526 16 37 168 158 17
-536(samplerNormal):    169(ptr) Variable UniformConstant
-             537:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 538 535 35 526 16 37 538 536(samplerNormal) 163
-             545:     11(int) Constant 123
-             547:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 548 20 35 545 16 92 19
-550(textureAlbedo):    509(ptr) Variable UniformConstant
-             551:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 552 508 35 545 16 37 552 550(textureAlbedo) 163
-             554:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 167 38 35 545 16 37 168 158 17
-555(samplerAlbedo):    169(ptr) Variable UniformConstant
-             556:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 557 554 35 545 16 37 557 555(samplerAlbedo) 163
-             563:     11(int) Constant 128
-             564:             TypePointer Uniform 228(int)
-             567:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 136 14 24 16
-             573:     11(int) Constant 129
-             584:     11(int) Constant 131
-             586:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 82 69 35 584 16 92 19
-             588:   68(fvec3) ConstantComposite 106 106 106
-             594:     11(int) Constant 132
-             598:     11(int) Constant 134
-             601:     11(int) Constant 135
-             605:     11(int) Constant 137
-             608:     11(int) Constant 138
-             612:     11(int) Constant 140
-             616:     11(int) Constant 141
-             620:     11(int) Constant 143
-             624:     11(int) Constant 144
-             629:     11(int) Constant 146
-             638:     11(int) Constant 150
-             641:    8(float) Constant 1036831949
-             644:     11(int) Constant 152
-             646:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 647 69 35 644 16 92 19
-             652:     11(int) Constant 154
-             654:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 403 230 35 652 16 92 19
-             666:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 136 14 24 16
-             670:     11(int) Constant 157
-             672:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 673 69 35 670 16 92 19
-             676:             TypePointer Uniform 18(fvec4)
-             683:     11(int) Constant 159
-             685:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 152 10 35 683 16 92 19
-             690:     11(int) Constant 160
-             694:     11(int) Constant 163
-             696:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 697 69 35 694 16 92 19
-             705:     11(int) Constant 164
-             709:     11(int) Constant 166
-             711:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 712 10 35 709 16 92 19
-             714:    8(float) Constant 1064781546
-             716:     11(int) Constant 167
-             718:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 719 10 35 716 16 92 19
-             721:    8(float) Constant 1063781322
-             723:     11(int) Constant 168
-             725:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 726 10 35 723 16 92 19
-             728:    8(float) Constant 1120403456
-             730:     11(int) Constant 171
-             732:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 733 69 35 730 16 92 19
-             746:     11(int) Constant 174
-             748:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 749 10 35 746 16 92 19
-             755:     11(int) Constant 175
-             757:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 758 10 35 755 16 92 19
-             765:     11(int) Constant 176
-             767:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 768 10 35 765 16 92 19
-             774:     11(int) Constant 179
-             776:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 777 10 35 774 16 92 19
-             784:     11(int) Constant 180
-             786:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 787 69 35 784 16 92 19
-             792:     11(int) Constant 183
-             794:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 795 69 35 792 16 92 19
-             802:     11(int) Constant 184
-             804:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 805 10 35 802 16 92 19
-             812:     11(int) Constant 185
-             814:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 815 69 35 812 16 92 19
-             818:    8(float) Constant 1098907648
-             823:    8(float) Constant 1075838976
-             827:     11(int) Constant 187
-             836:    228(int) Constant 2
-             852:     11(int) Constant 191
-             855:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 136 14 24 16
-             861:     11(int) Constant 193
-             869:     11(int) Constant 196
-             878:             TypePointer Input 23(fvec2)
-       879(inUV):    878(ptr) Variable Input
-             881:             TypePointer Output 18(fvec4)
-882(@entryPointOutput):    881(ptr) Variable Output
-                              Line 1 119 1
+             243:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 230 22 16
+             245:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 246 230 40 238 16 227 19
+             249:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 250 230 40 238 16 227 19
+             252:             TypeVector 11(int) 3
+             253:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 13 17
+             254:             TypePointer Function 252(ivec3)
+             255:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 253 22 16
+             259:     11(int) Constant 80
+             257:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 258 253 40 259 16 227 19
+             264:             TypePointer Function 11(int)
+             265:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 13 22 16
+             283:     11(int) Constant 81
+             281:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 282 10 40 283 16 227 19
+             286:    8(float) Constant 1069547520
+             290:     11(int) Constant 82
+             288:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 289 10 40 290 16 227 19
+             302:     11(int) Constant 83
+             300:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 301 10 40 302 16 227 19
+             314:     11(int) Constant 85
+             312:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 313 10 40 314 16 227 19
+             320:     11(int) Constant 86
+             318:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 319 230 40 320 16 227 19
+             323:    228(int) Constant 0
+             327:     11(int) Constant 87
+             325:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 326 230 40 327 16 227 19
+             330:    228(int) Constant 1
+             332:     11(int) Constant 89
+             333:     11(int) Constant 11
+             331:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 40 332 333 227
+             335:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 336 230 40 332 16 331 19
+             354:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 40 16 16 331
+             356:     11(int) Constant 91
+             357:     11(int) Constant 12
+             355:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 40 356 357 354
+             359:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 360 230 40 356 16 355 19
+             378:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 40 16 16 355
+             382:     11(int) Constant 93
+             401:     11(int) Constant 94
+             414:     11(int) Constant 98
+             423:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 40 16 16 85
+             425:     11(int) Constant 102
+             424:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 40 425 333 423
+             427:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 428 230 40 425 16 424 19
+             442:    228(int) Constant 3
+             444:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 40 16 16 424
+             448:     11(int) Constant 104
+             446:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 447 20 40 448 16 444 19
+             457:             TypeMatrix 18(fvec4) 4
+             459:   145(bool) ConstantTrue
+             458:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 20 19 459
+      460(Light):             TypeStruct 18(fvec4) 18(fvec4) 18(fvec4) 457
+             463:     11(int) Constant 46
+             464:     11(int) Constant 14
+             461:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 462 20 40 463 464 16 16 17
+             465:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 462 20 40 463 464 16 16 17
+             466:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 462 20 40 463 464 16 16 17
+             469:     11(int) Constant 47
+             470:     11(int) Constant 21
+             467:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 468 458 40 469 470 16 16 17
+             471:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 472 44 40 448 16 43 472 16 17 461 465 466 467
+             473:             TypeArray 460(Light) 17
+             474:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 471 17
+        475(UBO):             TypeStruct 18(fvec4) 473 228(int) 228(int)
+             476:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 462 20 40 463 464 16 16 17
+             479:     11(int) Constant 53
+             477:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 478 474 40 479 464 16 16 17
+             482:     11(int) Constant 55
+             483:     11(int) Constant 24
+             480:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 481 230 40 482 483 16 16 17
+             484:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 481 230 40 482 483 16 16 17
+             485:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 486 44 40 448 16 43 486 16 17 476 477 480 484
+        487(ubo):             TypeStruct 475(UBO)
+             490:     11(int) Constant 58
+             491:     11(int) Constant 37
+             488:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 489 485 40 490 491 16 16 17
+             492:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 489 44 40 448 16 43 489 16 17 488
+             493:             TypePointer Uniform 487(ubo)
+             494:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 492 27 16
+             495:    493(ptr) Variable Uniform
+             496:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 497 492 40 448 16 43 497 495 173
+             499:             TypePointer Uniform 457
+             500:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 458 27 16
+             506:     11(int) Constant 106
+             505:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 313 10 40 506 16 444 19
+             511:     11(int) Constant 108
+             519:     11(int) Constant 113
+             529:     11(int) Constant 115
+             535:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 40 16 16 101
+             538:     11(int) Constant 121
+             537:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 93 75 40 538 16 535 19
+             542:             TypeImage 8(float) 2D sampled format:Unknown
+             543:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 165 16 40 538 16 43 166 167 17
+             544:             TypePointer UniformConstant 542
+             545:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 543 16 16
+546(textureposition):    544(ptr) Variable UniformConstant
+             547:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 548 543 40 538 16 43 548 546(textureposition) 173
+             550:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 177 44 40 538 16 43 178 167 17
+551(samplerposition):    179(ptr) Variable UniformConstant
+             552:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 553 550 40 538 16 43 553 551(samplerposition) 173
+             555:             TypeSampledImage 542
+             556:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 187 16 40 538 16 43 188 167 17
+             564:     11(int) Constant 122
+             562:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 563 75 40 564 16 535 19
+567(textureNormal):    544(ptr) Variable UniformConstant
+             568:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 569 543 40 564 16 43 569 567(textureNormal) 173
+             571:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 177 44 40 564 16 43 178 167 17
+572(samplerNormal):    179(ptr) Variable UniformConstant
+             573:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 574 571 40 564 16 43 574 572(samplerNormal) 173
+             583:     11(int) Constant 123
+             581:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 582 20 40 583 16 535 19
+586(textureAlbedo):    544(ptr) Variable UniformConstant
+             587:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 588 543 40 583 16 43 588 586(textureAlbedo) 173
+             590:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 177 44 40 583 16 43 178 167 17
+591(samplerAlbedo):    179(ptr) Variable UniformConstant
+             592:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 593 590 40 583 16 43 593 591(samplerAlbedo) 173
+             600:     11(int) Constant 125
+             599:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 88 75 40 600 16 535 19
+             603:             TypePointer Uniform 228(int)
+             604:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 230 27 16
+             607:     11(int) Constant 128
+             612:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 40 16 16 535
+             616:     11(int) Constant 129
+             624:   74(fvec3) ConstantComposite 116 116 116
+             628:     11(int) Constant 131
+             633:     11(int) Constant 132
+             638:     11(int) Constant 134
+             640:     11(int) Constant 135
+             645:     11(int) Constant 137
+             647:     11(int) Constant 138
+             652:     11(int) Constant 140
+             655:     11(int) Constant 141
+             660:     11(int) Constant 143
+             663:     11(int) Constant 144
+             669:     11(int) Constant 146
+             678:     11(int) Constant 150
+             680:    8(float) Constant 1036831949
+             685:     11(int) Constant 152
+             683:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 684 75 40 685 16 535 19
+             691:     11(int) Constant 154
+             692:     11(int) Constant 10
+             690:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 40 691 692 535
+             694:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 428 230 40 691 16 690 19
+             709:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 40 16 16 690
+             713:     11(int) Constant 157
+             711:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 712 75 40 713 16 709 19
+             718:             TypePointer Uniform 18(fvec4)
+             719:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 20 27 16
+             727:     11(int) Constant 159
+             726:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 158 10 40 727 16 709 19
+             734:     11(int) Constant 160
+             739:     11(int) Constant 163
+             737:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 738 75 40 739 16 709 19
+             749:     11(int) Constant 164
+             754:     11(int) Constant 166
+             752:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 753 10 40 754 16 709 19
+             757:    8(float) Constant 1064781546
+             761:     11(int) Constant 167
+             759:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 760 10 40 761 16 709 19
+             764:    8(float) Constant 1063781322
+             768:     11(int) Constant 168
+             766:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 767 10 40 768 16 709 19
+             771:    8(float) Constant 1120403456
+             775:     11(int) Constant 171
+             773:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 774 75 40 775 16 709 19
+             791:     11(int) Constant 174
+             789:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 790 10 40 791 16 709 19
+             800:     11(int) Constant 175
+             798:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 799 10 40 800 16 709 19
+             810:     11(int) Constant 176
+             808:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 809 10 40 810 16 709 19
+             819:     11(int) Constant 179
+             817:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 818 10 40 819 16 709 19
+             829:     11(int) Constant 180
+             827:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 828 75 40 829 16 709 19
+             837:     11(int) Constant 183
+             835:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 836 75 40 837 16 709 19
+             847:     11(int) Constant 184
+             845:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 846 10 40 847 16 709 19
+             857:     11(int) Constant 185
+             855:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 856 75 40 857 16 709 19
+             861:    8(float) Constant 1098907648
+             866:    8(float) Constant 1075838976
+             871:     11(int) Constant 187
+             879:    228(int) Constant 2
+             896:     11(int) Constant 191
+             901:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 40 16 16 535
+             906:     11(int) Constant 193
+             913:     11(int) Constant 196
+             923:             TypePointer Input 26(fvec2)
+       924(inUV):    923(ptr) Variable Input
+             926:             TypePointer Output 18(fvec4)
+927(@entryPointOutput):    926(ptr) Variable Output
          6(main):           4 Function None 5
                7:             Label
-       877(inUV):     26(ptr) Variable Function
-      883(param):     26(ptr) Variable Function
-                              Line 1 119 0
-             880:   23(fvec2) Load 879(inUV)
-                              Store 877(inUV) 880
-             884:   23(fvec2) Load 877(inUV)
-                              Store 883(param) 884
-             885:   18(fvec4) FunctionCall 90(@main(vf2;) 883(param)
-                              Store 882(@entryPointOutput) 885
+       922(inUV):     29(ptr) Variable Function
+      928(param):     29(ptr) Variable Function
+             925:   26(fvec2) Load 924(inUV)
+                              Store 922(inUV) 925
+             929:   26(fvec2) Load 922(inUV)
+                              Store 928(param) 929
+             930:   18(fvec4) FunctionCall 98(@main(vf2;) 928(param)
+                              Store 927(@entryPointOutput) 930
                               Return
                               FunctionEnd
-                              Line 1 61 1
-32(textureProj(vf4;f1;vf2;):    8(float) Function None 27
-           29(P):     21(ptr) FunctionParameter
-       30(layer):     22(ptr) FunctionParameter
-      31(offset):     26(ptr) FunctionParameter
-              40:             Label
-     103(shadow):     22(ptr) Variable Function
-109(shadowCoord):     21(ptr) Variable Function
-       150(dist):     22(ptr) Variable Function
-              41:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 34
-              42:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 16 16 16 16
-              45:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 43 29(P) 46
-              49:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 47 30(layer) 46
-              52:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 50 31(offset) 46
-              99:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 34 32(textureProj(vf4;f1;vf2;)
-             100:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 34
-             101:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 102 102 16 16
-             105:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 104 103(shadow) 46
-                              Store 103(shadow) 106
-             107:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 108 108 16 16
-             112:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 110 109(shadowCoord) 46
-             113:   18(fvec4) Load 29(P)
-             114:     22(ptr) AccessChain 29(P) 17
-             115:    8(float) Load 114
-             116:   18(fvec4) CompositeConstruct 115 115 115 115
-             117:   18(fvec4) FDiv 113 116
-                              Store 109(shadowCoord) 117
-             118:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 119 119 16 16
-             120:   18(fvec4) Load 109(shadowCoord)
-             121:   23(fvec2) VectorShuffle 120 120 0 1
-             123:   23(fvec2) VectorTimesScalar 121 122
-             124:   23(fvec2) CompositeConstruct 122 122
-             125:   23(fvec2) FAdd 123 124
-             126:     22(ptr) AccessChain 109(shadowCoord) 16
-             127:    8(float) CompositeExtract 125 0
-                              Store 126 127
-             128:     22(ptr) AccessChain 109(shadowCoord) 38
-             129:    8(float) CompositeExtract 125 1
-                              Store 128 129
-             130:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 131 131 16 16
-             132:     22(ptr) AccessChain 109(shadowCoord) 24
-             133:    8(float) Load 132
-             138:   135(bool) FOrdGreaterThan 133 134
-             139:     22(ptr) AccessChain 109(shadowCoord) 24
-             140:    8(float) Load 139
-             142:   135(bool) FOrdLessThan 140 106
-             144:   135(bool) LogicalAnd 138 142
-                              SelectionMerge 146 None
-                              BranchConditional 144 145 146
-             145:               Label
-             147:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 34
-             148:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 149 149 16 16
-             153:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 151 150(dist) 46
-             164:         154   Load 160(textureShadowMap)
-             173:         165   Load 170(samplerShadowMap)
-             178:         174   SampledImage 164 173
-             179:   18(fvec4)   Load 109(shadowCoord)
-             180:   23(fvec2)   VectorShuffle 179 179 0 1
-             181:   23(fvec2)   Load 31(offset)
-             182:   23(fvec2)   FAdd 180 181
-             183:    8(float)   Load 30(layer)
-             184:    8(float)   CompositeExtract 182 0
-             185:    8(float)   CompositeExtract 182 1
-             186:   68(fvec3)   CompositeConstruct 184 185 183
-             187:   18(fvec4)   ImageSampleImplicitLod 178 186
-             188:    8(float)   CompositeExtract 187 0
-                                Store 150(dist) 188
-             189:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 190 190 16 16
-             191:     22(ptr)   AccessChain 109(shadowCoord) 17
-             192:    8(float)   Load 191
-             195:   135(bool)   FOrdGreaterThan 192 193
-             196:    8(float)   Load 150(dist)
-             197:     22(ptr)   AccessChain 109(shadowCoord) 24
-             198:    8(float)   Load 197
-             200:   135(bool)   FOrdLessThan 196 198
-             202:   135(bool)   LogicalAnd 195 200
-                                SelectionMerge 204 None
-                                BranchConditional 202 203 204
-             203:                 Label
-             205:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 34
-             206:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 207 207 16 16
-                                  Store 103(shadow) 208
-                                  Branch 204
-             204:               Label
-                                Branch 146
-             146:             Label
-             209:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 34
-             210:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 211 211 16 16
-             212:    8(float) Load 103(shadow)
-                              ReturnValue 212
+36(textureProj(vf4;f1;vf2;):    8(float) Function None 31
+           33(P):     21(ptr) FunctionParameter
+       34(layer):     24(ptr) FunctionParameter
+      35(offset):     29(ptr) FunctionParameter
+              37:             Label
+     110(shadow):     24(ptr) Variable Function
+117(shadowCoord):     21(ptr) Variable Function
+       156(dist):     24(ptr) Variable Function
+              50:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 39
+              51:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 42 42 16 16
+              48:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 46 33(P) 49
+              54:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 52 34(layer) 49
+              57:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 55 35(offset) 49
+             108:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 39 36(textureProj(vf4;f1;vf2;)
+             114:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 109
+             115:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 112 112 16 16
+             113:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 111 110(shadow) 49
+                              Store 110(shadow) 116
+             122:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 120 120 16 16
+             121:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 118 117(shadowCoord) 49
+             123:   18(fvec4) Load 33(P)
+             124:     24(ptr) AccessChain 33(P) 17
+             125:    8(float) Load 124
+             126:   18(fvec4) CompositeConstruct 125 125 125 125
+             127:   18(fvec4) FDiv 123 126
+                              Store 117(shadowCoord) 127
+             129:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 130 130 16 16
+             128:   18(fvec4) Load 117(shadowCoord)
+             131:   26(fvec2) VectorShuffle 128 128 0 1
+             133:   26(fvec2) VectorTimesScalar 131 132
+             134:   26(fvec2) CompositeConstruct 132 132
+             135:   26(fvec2) FAdd 133 134
+             136:     24(ptr) AccessChain 117(shadowCoord) 16
+             137:    8(float) CompositeExtract 135 0
+                              Store 136 137
+             138:     24(ptr) AccessChain 117(shadowCoord) 44
+             139:    8(float) CompositeExtract 135 1
+                              Store 138 139
+             141:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 142 142 16 16
+             140:     24(ptr) AccessChain 117(shadowCoord) 27
+             143:    8(float) Load 140
+             148:   145(bool) FOrdGreaterThan 143 144
+             149:     24(ptr) AccessChain 117(shadowCoord) 27
+             150:    8(float) Load 149
+             151:   145(bool) FOrdLessThan 150 116
+             152:   145(bool) LogicalAnd 148 151
+                              SelectionMerge 154 None
+                              BranchConditional 152 153 154
+             153:               Label
+             161:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 155
+             162:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 159 159 16 16
+             160:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 157 156(dist) 49
+             174:         163   Load 170(textureShadowMap)
+             184:         175   Load 181(samplerShadowMap)
+             189:         185   SampledImage 174 184
+             190:   18(fvec4)   Load 117(shadowCoord)
+             191:   26(fvec2)   VectorShuffle 190 190 0 1
+             192:   26(fvec2)   Load 35(offset)
+             193:   26(fvec2)   FAdd 191 192
+             194:    8(float)   Load 34(layer)
+             195:    8(float)   CompositeExtract 193 0
+             196:    8(float)   CompositeExtract 193 1
+             197:   74(fvec3)   CompositeConstruct 195 196 194
+             198:   18(fvec4)   ImageSampleImplicitLod 189 197
+             199:    8(float)   CompositeExtract 198 0
+                                Store 156(dist) 199
+             201:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 202 202 16 16
+             200:     24(ptr)   AccessChain 117(shadowCoord) 17
+             203:    8(float)   Load 200
+             205:   145(bool)   FOrdGreaterThan 203 204
+             206:    8(float)   Load 156(dist)
+             207:     24(ptr)   AccessChain 117(shadowCoord) 27
+             208:    8(float)   Load 207
+             209:   145(bool)   FOrdLessThan 206 208
+             210:   145(bool)   LogicalAnd 205 209
+                                SelectionMerge 212 None
+                                BranchConditional 210 211 212
+             211:                 Label
+             215:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 213
+             216:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 217 217 16 16
+                                  Store 110(shadow) 214
+                                  Branch 212
+             212:               Label
+                                Branch 154
+             154:             Label
+             219:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 109
+             220:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 221 221 16 16
+             218:    8(float) Load 110(shadow)
+                              ReturnValue 218
                               FunctionEnd
-                              Line 1 78 1
-57(filterPCF(vf4;f1;):    8(float) Function None 53
-          55(sc):     21(ptr) FunctionParameter
-       56(layer):     22(ptr) FunctionParameter
-              60:             Label
-222(sizeQueryTemp):    221(ptr) Variable Function
-     234(texDim):    233(ptr) Variable Function
-   248(elements):    242(ptr) Variable Function
-     255(levels):    242(ptr) Variable Function
-      264(scale):     22(ptr) Variable Function
-         271(dx):     22(ptr) Variable Function
-         283(dy):     22(ptr) Variable Function
-295(shadowFactor):     22(ptr) Variable Function
-      301(count):    242(ptr) Variable Function
-      308(range):    242(ptr) Variable Function
-          315(x):    242(ptr) Variable Function
-          337(y):    242(ptr) Variable Function
-      368(param):     21(ptr) Variable Function
-      370(param):     22(ptr) Variable Function
-      372(param):     26(ptr) Variable Function
-              61:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 59
-              62:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 16 16 16 16
-              65:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 63 55(sc) 46
-              67:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 66 56(layer) 46
-             215:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 59 57(filterPCF(vf4;f1;)
-             216:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 59
-             217:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 218 218 16 16
-             225:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 223 222(sizeQueryTemp) 46
-             226:         154 Load 160(textureShadowMap)
-             227:  219(ivec3) ImageQuerySizeLod 226 16
-                              Store 222(sizeQueryTemp) 227
-             237:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 235 234(texDim) 46
-             239:    238(ptr) AccessChain 222(sizeQueryTemp) 16
-             240:     11(int) Load 239
-             241:    228(int) Bitcast 240
-             243:    242(ptr) AccessChain 234(texDim) 16
-                              Store 243 241
-             244:    238(ptr) AccessChain 222(sizeQueryTemp) 38
-             245:     11(int) Load 244
-             246:    228(int) Bitcast 245
-             247:    242(ptr) AccessChain 234(texDim) 38
-                              Store 247 246
-             251:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 249 248(elements) 46
-             252:    238(ptr) AccessChain 222(sizeQueryTemp) 24
-             253:     11(int) Load 252
-             254:    228(int) Bitcast 253
-                              Store 248(elements) 254
-             258:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 256 255(levels) 46
-             259:         154 Load 160(textureShadowMap)
-             260:     11(int) ImageQueryLevels 259
-             261:    228(int) Bitcast 260
-                              Store 255(levels) 261
-             262:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 263 263 16 16
-             267:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 265 264(scale) 46
-                              Store 264(scale) 268
-             269:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 270 270 16 16
-             274:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 272 271(dx) 46
-             275:    8(float) Load 264(scale)
-             276:    8(float) FMul 275 106
-             277:    242(ptr) AccessChain 234(texDim) 16
-             278:    228(int) Load 277
-             279:    8(float) ConvertSToF 278
-             280:    8(float) FDiv 276 279
-                              Store 271(dx) 280
-             281:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 282 282 16 16
-             286:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 284 283(dy) 46
-             287:    8(float) Load 264(scale)
-             288:    8(float) FMul 287 106
-             289:    242(ptr) AccessChain 234(texDim) 38
-             290:    228(int) Load 289
-             291:    8(float) ConvertSToF 290
-             292:    8(float) FDiv 288 291
-                              Store 283(dy) 292
-             293:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 294 294 16 16
-             298:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 296 295(shadowFactor) 46
-                              Store 295(shadowFactor) 193
-             299:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 300 300 16 16
-             304:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 302 301(count) 46
-                              Store 301(count) 305
-             306:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 307 307 16 16
-             311:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 309 308(range) 46
-                              Store 308(range) 312
-             313:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 314 314 16 16
-             318:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 316 315(x) 46
-             319:    228(int) Load 308(range)
-             320:    228(int) SNegate 319
-                              Store 315(x) 320
-                              Branch 321
-             321:             Label
-             325:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 59
-             326:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 314 314 16 16
-                              LoopMerge 323 324 None
-                              Branch 327
-             327:             Label
-             328:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 59
-             329:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 314 314 16 16
-             330:    228(int) Load 315(x)
-             331:    228(int) Load 308(range)
-             333:   135(bool) SLessThanEqual 330 331
-                              BranchConditional 333 322 323
-             322:               Label
-             334:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 59
-             335:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 336 336 16 16
-             340:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 338 337(y) 46
-             341:    228(int)   Load 308(range)
-             342:    228(int)   SNegate 341
-                                Store 337(y) 342
-                                Branch 343
+62(filterPCF(vf4;f1;):    8(float) Function None 58
+          60(sc):     21(ptr) FunctionParameter
+       61(layer):     24(ptr) FunctionParameter
+              63:             Label
+     235(texDim):    233(ptr) Variable Function
+   244(elements):    242(ptr) Variable Function
+     248(levels):    242(ptr) Variable Function
+256(sizeQueryTemp):    254(ptr) Variable Function
+      280(scale):     24(ptr) Variable Function
+         287(dx):     24(ptr) Variable Function
+         299(dy):     24(ptr) Variable Function
+311(shadowFactor):     24(ptr) Variable Function
+      317(count):    242(ptr) Variable Function
+      324(range):    242(ptr) Variable Function
+          334(x):    242(ptr) Variable Function
+          358(y):    242(ptr) Variable Function
+      391(param):     21(ptr) Variable Function
+      393(param):     24(ptr) Variable Function
+      395(param):     29(ptr) Variable Function
+              70:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 65
+              71:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 66 66 16 16
+              69:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 67 60(sc) 49
+              73:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 72 61(layer) 49
+             226:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 65 62(filterPCF(vf4;f1;)
+             240:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 227
+             241:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 238 238 16 16
+             239:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 236 235(texDim) 49
+             247:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 245 244(elements) 49
+             251:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 249 248(levels) 49
+             261:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 259 259 16 16
+             260:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 257 256(sizeQueryTemp) 49
+             262:         163 Load 170(textureShadowMap)
+             263:  252(ivec3) ImageQuerySizeLod 262 16
+                              Store 256(sizeQueryTemp) 263
+             266:    264(ptr) AccessChain 256(sizeQueryTemp) 16
+             267:     11(int) Load 266
+             268:    228(int) Bitcast 267
+             269:    242(ptr) AccessChain 235(texDim) 16
+                              Store 269 268
+             270:    264(ptr) AccessChain 256(sizeQueryTemp) 44
+             271:     11(int) Load 270
+             272:    228(int) Bitcast 271
+             273:    242(ptr) AccessChain 235(texDim) 44
+                              Store 273 272
+             274:    264(ptr) AccessChain 256(sizeQueryTemp) 27
+             275:     11(int) Load 274
+             276:    228(int) Bitcast 275
+                              Store 244(elements) 276
+             277:         163 Load 170(textureShadowMap)
+             278:     11(int) ImageQueryLevels 277
+             279:    228(int) Bitcast 278
+                              Store 248(levels) 279
+             285:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 283 283 16 16
+             284:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 281 280(scale) 49
+                              Store 280(scale) 286
+             292:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 290 290 16 16
+             291:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 288 287(dx) 49
+             293:    8(float) Load 280(scale)
+             294:    8(float) FMul 293 116
+             295:    242(ptr) AccessChain 235(texDim) 16
+             296:    228(int) Load 295
+             297:    8(float) ConvertSToF 296
+             298:    8(float) FDiv 294 297
+                              Store 287(dx) 298
+             304:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 302 302 16 16
+             303:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 300 299(dy) 49
+             305:    8(float) Load 280(scale)
+             306:    8(float) FMul 305 116
+             307:    242(ptr) AccessChain 235(texDim) 44
+             308:    228(int) Load 307
+             309:    8(float) ConvertSToF 308
+             310:    8(float) FDiv 306 309
+                              Store 299(dy) 310
+             316:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 314 314 16 16
+             315:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 312 311(shadowFactor) 49
+                              Store 311(shadowFactor) 204
+             322:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 320 320 16 16
+             321:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 318 317(count) 49
+                              Store 317(count) 323
+             329:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 327 327 16 16
+             328:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 325 324(range) 49
+                              Store 324(range) 330
+             338:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 331
+             339:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 332 332 16 16
+             337:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 335 334(x) 49
+             340:    228(int) Load 324(range)
+             341:    228(int) SNegate 340
+                              Store 334(x) 341
+                              Branch 342
+             342:             Label
+             346:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 331
+             347:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 332 332 16 16
+                              LoopMerge 344 345 None
+                              Branch 348
+             348:             Label
+             350:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 331
+             351:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 332 332 16 16
+             349:    228(int) Load 334(x)
+             352:    228(int) Load 324(range)
+             353:   145(bool) SLessThanEqual 349 352
+                              BranchConditional 353 343 344
              343:               Label
-             347:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 59
-             348:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 336 336 16 16
-                                LoopMerge 345 346 None
-                                Branch 349
-             349:               Label
-             350:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 59
-             351:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 336 336 16 16
-             352:    228(int)   Load 337(y)
-             353:    228(int)   Load 308(range)
-             355:   135(bool)   SLessThanEqual 352 353
-                                BranchConditional 355 344 345
-             344:                 Label
-             356:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 59
-             357:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 358 358 16 16
-             359:    8(float)     Load 271(dx)
-             360:    228(int)     Load 315(x)
-             361:    8(float)     ConvertSToF 360
-             362:    8(float)     FMul 359 361
-             363:    8(float)     Load 283(dy)
-             364:    228(int)     Load 337(y)
-             365:    8(float)     ConvertSToF 364
-             366:    8(float)     FMul 363 365
-             367:   23(fvec2)     CompositeConstruct 362 366
-             369:   18(fvec4)     Load 55(sc)
-                                  Store 368(param) 369
-             371:    8(float)     Load 56(layer)
-                                  Store 370(param) 371
-                                  Store 372(param) 367
-             373:    8(float)     FunctionCall 32(textureProj(vf4;f1;vf2;) 368(param) 370(param) 372(param)
-             374:    8(float)     Load 295(shadowFactor)
-             375:    8(float)     FAdd 374 373
-                                  Store 295(shadowFactor) 375
-             376:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 377 377 16 16
-             378:    228(int)     Load 301(count)
-             379:    228(int)     IAdd 378 312
-                                  Store 301(count) 379
-                                  Branch 346
-             346:                 Label
-             380:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 59
-             381:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 336 336 16 16
-             382:    228(int)     Load 337(y)
-             383:    228(int)     IAdd 382 312
-                                  Store 337(y) 383
-                                  Branch 343
+             362:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 355
+             363:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 356 356 16 16
+             361:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 359 358(y) 49
+             364:    228(int)   Load 324(range)
+             365:    228(int)   SNegate 364
+                                Store 358(y) 365
+                                Branch 366
+             366:               Label
+             370:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 355
+             371:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 356 356 16 16
+                                LoopMerge 368 369 None
+                                Branch 372
+             372:               Label
+             374:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 355
+             375:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 356 356 16 16
+             373:    228(int)   Load 358(y)
+             376:    228(int)   Load 324(range)
+             377:   145(bool)   SLessThanEqual 373 376
+                                BranchConditional 377 367 368
+             367:                 Label
+             380:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 378
+             381:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 382 382 16 16
+             379:    8(float)     Load 287(dx)
+             383:    228(int)     Load 334(x)
+             384:    8(float)     ConvertSToF 383
+             385:    8(float)     FMul 379 384
+             386:    8(float)     Load 299(dy)
+             387:    228(int)     Load 358(y)
+             388:    8(float)     ConvertSToF 387
+             389:    8(float)     FMul 386 388
+             390:   26(fvec2)     CompositeConstruct 385 389
+             392:   18(fvec4)     Load 60(sc)
+                                  Store 391(param) 392
+             394:    8(float)     Load 61(layer)
+                                  Store 393(param) 394
+                                  Store 395(param) 390
+             396:    8(float)     FunctionCall 36(textureProj(vf4;f1;vf2;) 391(param) 393(param) 395(param)
+             397:    8(float)     Load 311(shadowFactor)
+             398:    8(float)     FAdd 397 396
+                                  Store 311(shadowFactor) 398
+             400:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 401 401 16 16
+             399:    228(int)     Load 317(count)
+             402:    228(int)     IAdd 399 330
+                                  Store 317(count) 402
+                                  Branch 369
+             369:                 Label
+             404:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 355
+             405:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 356 356 16 16
+             403:    228(int)     Load 358(y)
+             406:    228(int)     IAdd 403 330
+                                  Store 358(y) 406
+                                  Branch 366
+             368:               Label
+                                Branch 345
              345:               Label
-                                Branch 324
-             324:               Label
-             384:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 59
-             385:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 314 314 16 16
-             386:    228(int)   Load 315(x)
-             387:    228(int)   IAdd 386 312
-                                Store 315(x) 387
-                                Branch 321
-             323:             Label
-             388:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 59
-             389:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 390 390 16 16
-             391:    8(float) Load 295(shadowFactor)
-             392:    228(int) Load 301(count)
-             393:    8(float) ConvertSToF 392
-             394:    8(float) FDiv 391 393
-                              ReturnValue 394
+             408:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 331
+             409:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 332 332 16 16
+             407:    228(int)   Load 334(x)
+             410:    228(int)   IAdd 407 330
+                                Store 334(x) 410
+                                Branch 342
+             344:             Label
+             412:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 227
+             413:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 414 414 16 16
+             411:    8(float) Load 311(shadowFactor)
+             415:    228(int) Load 317(count)
+             416:    8(float) ConvertSToF 415
+             417:    8(float) FDiv 411 416
+                              ReturnValue 417
                               FunctionEnd
-                              Line 1 101 49
-75(shadow(vf3;vf3;):   68(fvec3) Function None 71
-   73(fragcolor):     70(ptr) FunctionParameter
-     74(fragPos):     70(ptr) FunctionParameter
-              78:             Label
-          401(i):    242(ptr) Variable Function
- 421(shadowClip):     21(ptr) Variable Function
-476(shadowFactor):     22(ptr) Variable Function
-      481(param):     21(ptr) Variable Function
-      483(param):     22(ptr) Variable Function
-              79:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 77
-              80:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 16 16 16 16
-              83:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 81 73(fragcolor) 46
-              86:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 84 74(fragPos) 46
-             397:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 77 75(shadow(vf3;vf3;)
-             398:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 77
-             399:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 400 400 16 16
-             404:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 402 401(i) 46
-                              Store 401(i) 305
-                              Branch 405
-             405:             Label
-             409:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 77
-             410:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 400 400 16 16
-                              LoopMerge 407 408 None
-                              Branch 411
-             411:             Label
-             412:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 77
-             413:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 400 400 16 16
-             414:    228(int) Load 401(i)
-             417:   135(bool) SLessThan 414 415
-                              BranchConditional 417 406 407
-             406:               Label
-             418:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 77
-             419:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 420 420 16 16
-             424:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 422 421(shadowClip) 46
-             425:   68(fvec3)   Load 74(fragPos)
-             426:    8(float)   CompositeExtract 425 0
-             427:    8(float)   CompositeExtract 425 1
-             428:    8(float)   CompositeExtract 425 2
-             429:   18(fvec4)   CompositeConstruct 426 427 428 106
-             469:    228(int)   Load 401(i)
-             471:    470(ptr)   AccessChain 467 305 312 469 415
-             472:         430   Load 471
-             473:   18(fvec4)   VectorTimesMatrix 429 472
-                                Store 421(shadowClip) 473
-             474:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 475 475 16 16
-             478:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 477 476(shadowFactor) 46
-             479:    228(int)   Load 401(i)
-             480:    8(float)   ConvertSToF 479
-             482:   18(fvec4)   Load 421(shadowClip)
-                                Store 481(param) 482
-                                Store 483(param) 480
-             484:    8(float)   FunctionCall 57(filterPCF(vf4;f1;) 481(param) 483(param)
-                                Store 476(shadowFactor) 484
-             485:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 486 486 16 16
-             487:    8(float)   Load 476(shadowFactor)
-             488:   68(fvec3)   Load 73(fragcolor)
-             489:   68(fvec3)   VectorTimesScalar 488 487
-                                Store 73(fragcolor) 489
-                                Branch 408
-             408:               Label
-             490:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 77
-             491:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 400 400 16 16
-             492:    228(int)   Load 401(i)
-             493:    228(int)   IAdd 492 312
-                                Store 401(i) 493
-                                Branch 405
-             407:             Label
-             494:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 77
-             495:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 496 496 16 16
-             497:   68(fvec3) Load 73(fragcolor)
-                              ReturnValue 497
+82(shadow(vf3;vf3;):   74(fvec3) Function None 78
+   80(fragcolor):     76(ptr) FunctionParameter
+     81(fragPos):     76(ptr) FunctionParameter
+              83:             Label
+          426(i):    242(ptr) Variable Function
+ 445(shadowClip):     21(ptr) Variable Function
+504(shadowFactor):     24(ptr) Variable Function
+      513(param):     21(ptr) Variable Function
+      515(param):     24(ptr) Variable Function
+              90:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 85
+              91:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 86 86 16 16
+              89:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 87 80(fragcolor) 49
+              94:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 92 81(fragPos) 49
+             422:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 85 82(shadow(vf3;vf3;)
+             430:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 424
+             431:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 425 425 16 16
+             429:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 427 426(i) 49
+                              Store 426(i) 323
+                              Branch 432
+             432:             Label
+             436:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 424
+             437:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 425 425 16 16
+                              LoopMerge 434 435 None
+                              Branch 438
+             438:             Label
+             440:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 424
+             441:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 425 425 16 16
+             439:    228(int) Load 426(i)
+             443:   145(bool) SLessThan 439 442
+                              BranchConditional 443 433 434
+             433:               Label
+             450:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 444
+             451:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 448 448 16 16
+             449:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 446 445(shadowClip) 49
+             452:   74(fvec3)   Load 81(fragPos)
+             453:    8(float)   CompositeExtract 452 0
+             454:    8(float)   CompositeExtract 452 1
+             455:    8(float)   CompositeExtract 452 2
+             456:   18(fvec4)   CompositeConstruct 453 454 455 116
+             498:    228(int)   Load 426(i)
+             501:    499(ptr)   AccessChain 495 323 330 498 442
+             502:         457   Load 501
+             503:   18(fvec4)   VectorTimesMatrix 456 502
+                                Store 445(shadowClip) 503
+             508:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 506 506 16 16
+             507:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 505 504(shadowFactor) 49
+             510:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 511 511 16 16
+             509:    228(int)   Load 426(i)
+             512:    8(float)   ConvertSToF 509
+             514:   18(fvec4)   Load 445(shadowClip)
+                                Store 513(param) 514
+                                Store 515(param) 512
+             516:    8(float)   FunctionCall 62(filterPCF(vf4;f1;) 513(param) 515(param)
+                                Store 504(shadowFactor) 516
+             518:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 519 519 16 16
+             517:    8(float)   Load 504(shadowFactor)
+             520:   74(fvec3)   Load 80(fragcolor)
+             521:   74(fvec3)   VectorTimesScalar 520 517
+                                Store 80(fragcolor) 521
+                                Branch 435
+             435:               Label
+             523:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 424
+             524:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 425 425 16 16
+             522:    228(int)   Load 426(i)
+             525:    228(int)   IAdd 522 330
+                                Store 426(i) 525
+                                Branch 432
+             434:             Label
+             527:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 423
+             528:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 529 529 16 16
+             526:   74(fvec3) Load 80(fragcolor)
+                              ReturnValue 526
                               FunctionEnd
-                              Line 1 119 1
-  90(@main(vf2;):   18(fvec4) Function None 87
-        89(inUV):     26(ptr) FunctionParameter
-              93:             Label
-    504(fragPos):     70(ptr) Variable Function
-     527(normal):     70(ptr) Variable Function
-     546(albedo):     21(ptr) Variable Function
-  585(fragcolor):     70(ptr) Variable Function
-      589(param):     70(ptr) Variable Function
-      590(param):     70(ptr) Variable Function
-          645(N):     70(ptr) Variable Function
-          653(i):    242(ptr) Variable Function
-          671(L):     70(ptr) Variable Function
-       684(dist):     22(ptr) Variable Function
-          695(V):     70(ptr) Variable Function
-710(lightCosInnerAngle):     22(ptr) Variable Function
-717(lightCosOuterAngle):     22(ptr) Variable Function
- 724(lightRange):     22(ptr) Variable Function
-        731(dir):     70(ptr) Variable Function
-     747(cosDir):     22(ptr) Variable Function
- 756(spotEffect):     22(ptr) Variable Function
-766(heightAttenuation):     22(ptr) Variable Function
-      775(NdotL):     22(ptr) Variable Function
-       785(diff):     70(ptr) Variable Function
-          793(R):     70(ptr) Variable Function
-      803(NdotR):     22(ptr) Variable Function
-       813(spec):     70(ptr) Variable Function
-      862(param):     70(ptr) Variable Function
-      864(param):     70(ptr) Variable Function
-              94:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 92
-              95:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 16 16 16 16
-              98:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 96 89(inUV) 46
-             500:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 92 90(@main(vf2;)
-             501:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 92
-             502:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 503 503 16 16
-             506:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 505 504(fragPos) 46
-             513:         507 Load 510(textureposition)
-             518:         165 Load 515(samplerposition)
-             521:         519 SampledImage 513 518
-             522:   23(fvec2) Load 89(inUV)
-             523:   18(fvec4) ImageSampleImplicitLod 521 522
-             524:   68(fvec3) VectorShuffle 523 523 0 1 2
-                              Store 504(fragPos) 524
-             525:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 526 526 16 16
-             530:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 528 527(normal) 46
-             534:         507 Load 531(textureNormal)
-             539:         165 Load 536(samplerNormal)
-             540:         519 SampledImage 534 539
-             541:   23(fvec2) Load 89(inUV)
-             542:   18(fvec4) ImageSampleImplicitLod 540 541
-             543:   68(fvec3) VectorShuffle 542 542 0 1 2
-                              Store 527(normal) 543
-             544:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 545 545 16 16
-             549:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 547 546(albedo) 46
-             553:         507 Load 550(textureAlbedo)
-             558:         165 Load 555(samplerAlbedo)
-             559:         519 SampledImage 553 558
-             560:   23(fvec2) Load 89(inUV)
-             561:   18(fvec4) ImageSampleImplicitLod 559 560
-                              Store 546(albedo) 561
-             562:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 563 563 16 16
-             565:    564(ptr) AccessChain 467 305 415
-             566:    228(int) Load 565
-             568:   135(bool) SGreaterThan 566 305
-                              SelectionMerge 570 None
-                              BranchConditional 568 569 570
-             569:               Label
-             571:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 92
-             572:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 573 573 16 16
-             574:    564(ptr)   AccessChain 467 305 415
-             575:    228(int)   Load 574
-                                SelectionMerge 581 None
-                                Switch 575 581 
-                                       case 1: 576
-                                       case 2: 577
-                                       case 3: 578
-                                       case 4: 579
-                                       case 5: 580
-             576:                 Label
-             582:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 92
-             583:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 584 584 16 16
-             587:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 586 585(fragcolor) 46
-                                  Store 589(param) 588
-             591:   68(fvec3)     Load 504(fragPos)
-                                  Store 590(param) 591
-             592:   68(fvec3)     FunctionCall 75(shadow(vf3;vf3;) 589(param) 590(param)
-                                  Store 585(fragcolor) 592
-             593:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 594 594 16 16
-                                  Branch 581
-             577:                 Label
-             596:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 92
-             597:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 598 598 16 16
-             599:   68(fvec3)     Load 504(fragPos)
-                                  Store 585(fragcolor) 599
-             600:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 601 601 16 16
-                                  Branch 581
-             578:                 Label
-             603:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 92
-             604:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 605 605 16 16
-             606:   68(fvec3)     Load 527(normal)
-                                  Store 585(fragcolor) 606
-             607:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 608 608 16 16
-                                  Branch 581
-             579:                 Label
-             610:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 92
-             611:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 612 612 16 16
-             613:   18(fvec4)     Load 546(albedo)
-             614:   68(fvec3)     VectorShuffle 613 613 0 1 2
-                                  Store 585(fragcolor) 614
-             615:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 616 616 16 16
-                                  Branch 581
-             580:                 Label
-             618:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 92
-             619:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 620 620 16 16
-             621:   18(fvec4)     Load 546(albedo)
-             622:   68(fvec3)     VectorShuffle 621 621 3 3 3
-                                  Store 585(fragcolor) 622
-             623:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 624 624 16 16
-                                  Branch 581
-             581:               Label
-             627:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 92
-             628:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 629 629 16 16
-             630:   68(fvec3)   Load 585(fragcolor)
-             631:    8(float)   CompositeExtract 630 0
-             632:    8(float)   CompositeExtract 630 1
-             633:    8(float)   CompositeExtract 630 2
-             634:   18(fvec4)   CompositeConstruct 631 632 633 106
-                                ReturnValue 634
-             570:             Label
-             636:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 92
-             637:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 638 638 16 16
-             639:   18(fvec4) Load 546(albedo)
-             640:   68(fvec3) VectorShuffle 639 639 0 1 2
-             642:   68(fvec3) VectorTimesScalar 640 641
-                              Store 585(fragcolor) 642
-             643:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 644 644 16 16
-             648:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 646 645(N) 46
-             649:   68(fvec3) Load 527(normal)
-             650:   68(fvec3) ExtInst 3(GLSL.std.450) 69(Normalize) 649
-                              Store 645(N) 650
-             651:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 652 652 16 16
-             655:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 654 653(i) 46
-                              Store 653(i) 305
-                              Branch 656
-             656:             Label
-             660:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 92
-             661:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 652 652 16 16
-                              LoopMerge 658 659 None
-                              Branch 662
-             662:             Label
-             663:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 92
-             664:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 652 652 16 16
-             665:    228(int) Load 653(i)
-             667:   135(bool) SLessThan 665 415
-                              BranchConditional 667 657 658
-             657:               Label
-             668:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 92
-             669:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 670 670 16 16
-             674:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 672 671(L) 46
-             675:    228(int)   Load 653(i)
-             677:    676(ptr)   AccessChain 467 305 312 675 305
-             678:   18(fvec4)   Load 677
-             679:   68(fvec3)   VectorShuffle 678 678 0 1 2
-             680:   68(fvec3)   Load 504(fragPos)
-             681:   68(fvec3)   FSub 679 680
-                                Store 671(L) 681
-             682:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 683 683 16 16
-             686:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 685 684(dist) 46
-             687:   68(fvec3)   Load 671(L)
-             688:    8(float)   ExtInst 3(GLSL.std.450) 66(Length) 687
-                                Store 684(dist) 688
-             689:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 690 690 16 16
-             691:   68(fvec3)   Load 671(L)
-             692:   68(fvec3)   ExtInst 3(GLSL.std.450) 69(Normalize) 691
-                                Store 671(L) 692
-             693:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 694 694 16 16
-             698:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 696 695(V) 46
-             699:    676(ptr)   AccessChain 467 305 305
-             700:   18(fvec4)   Load 699
-             701:   68(fvec3)   VectorShuffle 700 700 0 1 2
-             702:   68(fvec3)   Load 504(fragPos)
-             703:   68(fvec3)   FSub 701 702
-                                Store 695(V) 703
-             704:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 705 705 16 16
-             706:   68(fvec3)   Load 695(V)
-             707:   68(fvec3)   ExtInst 3(GLSL.std.450) 69(Normalize) 706
-                                Store 695(V) 707
-             708:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 709 709 16 16
-             713:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 711 710(lightCosInnerAngle) 46
-                                Store 710(lightCosInnerAngle) 714
-             715:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 716 716 16 16
-             720:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 718 717(lightCosOuterAngle) 46
-                                Store 717(lightCosOuterAngle) 721
-             722:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 723 723 16 16
-             727:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 725 724(lightRange) 46
-                                Store 724(lightRange) 728
-             729:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 730 730 16 16
-             734:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 732 731(dir) 46
-             735:    228(int)   Load 653(i)
-             736:    676(ptr)   AccessChain 467 305 312 735 305
-             737:   18(fvec4)   Load 736
-             738:   68(fvec3)   VectorShuffle 737 737 0 1 2
-             739:    228(int)   Load 653(i)
-             740:    676(ptr)   AccessChain 467 305 312 739 312
-             741:   18(fvec4)   Load 740
-             742:   68(fvec3)   VectorShuffle 741 741 0 1 2
-             743:   68(fvec3)   FSub 738 742
-             744:   68(fvec3)   ExtInst 3(GLSL.std.450) 69(Normalize) 743
-                                Store 731(dir) 744
-             745:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 746 746 16 16
-             750:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 748 747(cosDir) 46
-             751:   68(fvec3)   Load 671(L)
-             752:   68(fvec3)   Load 731(dir)
-             753:    8(float)   Dot 751 752
-                                Store 747(cosDir) 753
-             754:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 755 755 16 16
-             759:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 757 756(spotEffect) 46
-             760:    8(float)   Load 717(lightCosOuterAngle)
-             761:    8(float)   Load 710(lightCosInnerAngle)
-             762:    8(float)   Load 747(cosDir)
-             763:    8(float)   ExtInst 3(GLSL.std.450) 49(SmoothStep) 760 761 762
-                                Store 756(spotEffect) 763
-             764:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 765 765 16 16
-             769:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 767 766(heightAttenuation) 46
-             770:    8(float)   Load 724(lightRange)
-             771:    8(float)   Load 684(dist)
-             772:    8(float)   ExtInst 3(GLSL.std.450) 49(SmoothStep) 770 193 771
-                                Store 766(heightAttenuation) 772
-             773:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 774 774 16 16
-             778:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 776 775(NdotL) 46
-             779:   68(fvec3)   Load 645(N)
-             780:   68(fvec3)   Load 671(L)
-             781:    8(float)   Dot 779 780
-             782:    8(float)   ExtInst 3(GLSL.std.450) 40(FMax) 193 781
-                                Store 775(NdotL) 782
-             783:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 784 784 16 16
-             788:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 786 785(diff) 46
-             789:    8(float)   Load 775(NdotL)
-             790:   68(fvec3)   CompositeConstruct 789 789 789
-                                Store 785(diff) 790
-             791:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 792 792 16 16
-             796:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 794 793(R) 46
-             797:   68(fvec3)   Load 671(L)
-             798:   68(fvec3)   FNegate 797
-             799:   68(fvec3)   Load 645(N)
-             800:   68(fvec3)   ExtInst 3(GLSL.std.450) 71(Reflect) 798 799
-                                Store 793(R) 800
-             801:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 802 802 16 16
-             806:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 804 803(NdotR) 46
-             807:   68(fvec3)   Load 793(R)
-             808:   68(fvec3)   Load 695(V)
-             809:    8(float)   Dot 807 808
-             810:    8(float)   ExtInst 3(GLSL.std.450) 40(FMax) 193 809
-                                Store 803(NdotR) 810
-             811:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 812 812 16 16
-             816:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 814 813(spec) 46
-             817:    8(float)   Load 803(NdotR)
-             819:    8(float)   ExtInst 3(GLSL.std.450) 26(Pow) 817 818
-             820:     22(ptr)   AccessChain 546(albedo) 17
-             821:    8(float)   Load 820
-             822:    8(float)   FMul 819 821
-             824:    8(float)   FMul 822 823
-             825:   68(fvec3)   CompositeConstruct 824 824 824
-                                Store 813(spec) 825
-             826:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 827 827 16 16
-             828:   68(fvec3)   Load 785(diff)
-             829:   68(fvec3)   Load 813(spec)
-             830:   68(fvec3)   FAdd 828 829
-             831:    8(float)   Load 756(spotEffect)
-             832:   68(fvec3)   VectorTimesScalar 830 831
-             833:    8(float)   Load 766(heightAttenuation)
-             834:   68(fvec3)   VectorTimesScalar 832 833
-             835:    228(int)   Load 653(i)
-             837:    676(ptr)   AccessChain 467 305 312 835 836
-             838:   18(fvec4)   Load 837
-             839:   68(fvec3)   VectorShuffle 838 838 0 1 2
-             840:   68(fvec3)   FMul 834 839
-             841:   18(fvec4)   Load 546(albedo)
-             842:   68(fvec3)   VectorShuffle 841 841 0 1 2
-             843:   68(fvec3)   FMul 840 842
-             844:   68(fvec3)   Load 585(fragcolor)
-             845:   68(fvec3)   FAdd 844 843
-                                Store 585(fragcolor) 845
-                                Branch 659
-             659:               Label
-             846:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 92
-             847:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 652 652 16 16
-             848:    228(int)   Load 653(i)
-             849:    228(int)   IAdd 848 312
-                                Store 653(i) 849
-                                Branch 656
-             658:             Label
-             850:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 92
-             851:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 852 852 16 16
-             853:    564(ptr) AccessChain 467 305 836
-             854:    228(int) Load 853
-             856:   135(bool) SGreaterThan 854 305
-                              SelectionMerge 858 None
-                              BranchConditional 856 857 858
-             857:               Label
-             859:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 92
-             860:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 861 861 16 16
-             863:   68(fvec3)   Load 585(fragcolor)
-                                Store 862(param) 863
-             865:   68(fvec3)   Load 504(fragPos)
-                                Store 864(param) 865
-             866:   68(fvec3)   FunctionCall 75(shadow(vf3;vf3;) 862(param) 864(param)
-                                Store 585(fragcolor) 866
-                                Branch 858
-             858:             Label
-             867:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 92
-             868:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 35 869 869 16 16
-             870:   68(fvec3) Load 585(fragcolor)
-             871:    8(float) CompositeExtract 870 0
-             872:    8(float) CompositeExtract 870 1
-             873:    8(float) CompositeExtract 870 2
-             874:   18(fvec4) CompositeConstruct 871 872 873 106
-                              ReturnValue 874
+  98(@main(vf2;):   18(fvec4) Function None 95
+        97(inUV):     29(ptr) FunctionParameter
+              99:             Label
+    536(fragPos):     76(ptr) Variable Function
+     561(normal):     76(ptr) Variable Function
+     580(albedo):     21(ptr) Variable Function
+  598(fragcolor):     76(ptr) Variable Function
+      625(param):     76(ptr) Variable Function
+      629(param):     76(ptr) Variable Function
+          682(N):     76(ptr) Variable Function
+          693(i):    242(ptr) Variable Function
+          710(L):     76(ptr) Variable Function
+       725(dist):     24(ptr) Variable Function
+          736(V):     76(ptr) Variable Function
+751(lightCosInnerAngle):     24(ptr) Variable Function
+758(lightCosOuterAngle):     24(ptr) Variable Function
+ 765(lightRange):     24(ptr) Variable Function
+        772(dir):     76(ptr) Variable Function
+     788(cosDir):     24(ptr) Variable Function
+ 797(spotEffect):     24(ptr) Variable Function
+807(heightAttenuation):     24(ptr) Variable Function
+      816(NdotL):     24(ptr) Variable Function
+       826(diff):     76(ptr) Variable Function
+          834(R):     76(ptr) Variable Function
+      844(NdotR):     24(ptr) Variable Function
+       854(spec):     76(ptr) Variable Function
+      902(param):     76(ptr) Variable Function
+      907(param):     76(ptr) Variable Function
+             106:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 101
+             107:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 102 102 16 16
+             105:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 103 97(inUV) 49
+             534:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 101 98(@main(vf2;)
+             540:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 535
+             541:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 538 538 16 16
+             539:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 537 536(fragPos) 49
+             549:         542 Load 546(textureposition)
+             554:         175 Load 551(samplerposition)
+             557:         555 SampledImage 549 554
+             558:   26(fvec2) Load 97(inUV)
+             559:   18(fvec4) ImageSampleImplicitLod 557 558
+             560:   74(fvec3) VectorShuffle 559 559 0 1 2
+                              Store 536(fragPos) 560
+             566:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 564 564 16 16
+             565:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 562 561(normal) 49
+             570:         542 Load 567(textureNormal)
+             575:         175 Load 572(samplerNormal)
+             576:         555 SampledImage 570 575
+             577:   26(fvec2) Load 97(inUV)
+             578:   18(fvec4) ImageSampleImplicitLod 576 577
+             579:   74(fvec3) VectorShuffle 578 578 0 1 2
+                              Store 561(normal) 579
+             585:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 583 583 16 16
+             584:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 581 580(albedo) 49
+             589:         542 Load 586(textureAlbedo)
+             594:         175 Load 591(samplerAlbedo)
+             595:         555 SampledImage 589 594
+             596:   26(fvec2) Load 97(inUV)
+             597:   18(fvec4) ImageSampleImplicitLod 595 596
+                              Store 580(albedo) 597
+             602:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 600 600 16 16
+             601:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 599 598(fragcolor) 49
+             606:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 607 607 16 16
+             605:    603(ptr) AccessChain 495 323 442
+             608:    228(int) Load 605
+             609:   145(bool) SGreaterThan 608 323
+                              SelectionMerge 611 None
+                              BranchConditional 609 610 611
+             610:               Label
+             614:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 612
+             615:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 616 616 16 16
+             613:    603(ptr)   AccessChain 495 323 442
+             617:    228(int)   Load 613
+                                SelectionMerge 623 None
+                                Switch 617 623 
+                                       case 1: 618
+                                       case 2: 619
+                                       case 3: 620
+                                       case 4: 621
+                                       case 5: 622
+             618:                 Label
+             626:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 612
+             627:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 628 628 16 16
+                                  Store 625(param) 624
+             630:   74(fvec3)     Load 536(fragPos)
+                                  Store 629(param) 630
+             631:   74(fvec3)     FunctionCall 82(shadow(vf3;vf3;) 625(param) 629(param)
+                                  Store 598(fragcolor) 631
+             632:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 633 633 16 16
+                                  Branch 623
+             619:                 Label
+             636:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 612
+             637:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 638 638 16 16
+             635:   74(fvec3)     Load 536(fragPos)
+                                  Store 598(fragcolor) 635
+             639:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 640 640 16 16
+                                  Branch 623
+             620:                 Label
+             643:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 612
+             644:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 645 645 16 16
+             642:   74(fvec3)     Load 561(normal)
+                                  Store 598(fragcolor) 642
+             646:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 647 647 16 16
+                                  Branch 623
+             621:                 Label
+             650:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 612
+             651:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 652 652 16 16
+             649:   18(fvec4)     Load 580(albedo)
+             653:   74(fvec3)     VectorShuffle 649 649 0 1 2
+                                  Store 598(fragcolor) 653
+             654:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 655 655 16 16
+                                  Branch 623
+             622:                 Label
+             658:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 612
+             659:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 660 660 16 16
+             657:   18(fvec4)     Load 580(albedo)
+             661:   74(fvec3)     VectorShuffle 657 657 3 3 3
+                                  Store 598(fragcolor) 661
+             662:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 663 663 16 16
+                                  Branch 623
+             623:               Label
+             667:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 612
+             668:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 669 669 16 16
+             666:   74(fvec3)   Load 598(fragcolor)
+             670:    8(float)   CompositeExtract 666 0
+             671:    8(float)   CompositeExtract 666 1
+             672:    8(float)   CompositeExtract 666 2
+             673:   18(fvec4)   CompositeConstruct 670 671 672 116
+                                ReturnValue 673
+             611:             Label
+             676:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 535
+             677:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 678 678 16 16
+             675:   18(fvec4) Load 580(albedo)
+             679:   74(fvec3) VectorShuffle 675 675 0 1 2
+             681:   74(fvec3) VectorTimesScalar 679 680
+                              Store 598(fragcolor) 681
+             687:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 685 685 16 16
+             686:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 683 682(N) 49
+             688:   74(fvec3) Load 561(normal)
+             689:   74(fvec3) ExtInst 3(GLSL.std.450) 69(Normalize) 688
+                              Store 682(N) 689
+             696:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 690
+             697:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 691 691 16 16
+             695:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 694 693(i) 49
+                              Store 693(i) 323
+                              Branch 698
+             698:             Label
+             702:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 690
+             703:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 691 691 16 16
+                              LoopMerge 700 701 None
+                              Branch 704
+             704:             Label
+             706:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 690
+             707:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 691 691 16 16
+             705:    228(int) Load 693(i)
+             708:   145(bool) SLessThan 705 442
+                              BranchConditional 708 699 700
+             699:               Label
+             715:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 709
+             716:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 713 713 16 16
+             714:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 711 710(L) 49
+             717:    228(int)   Load 693(i)
+             720:    718(ptr)   AccessChain 495 323 330 717 323
+             721:   18(fvec4)   Load 720
+             722:   74(fvec3)   VectorShuffle 721 721 0 1 2
+             723:   74(fvec3)   Load 536(fragPos)
+             724:   74(fvec3)   FSub 722 723
+                                Store 710(L) 724
+             729:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 727 727 16 16
+             728:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 726 725(dist) 49
+             730:   74(fvec3)   Load 710(L)
+             731:    8(float)   ExtInst 3(GLSL.std.450) 66(Length) 730
+                                Store 725(dist) 731
+             733:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 734 734 16 16
+             732:   74(fvec3)   Load 710(L)
+             735:   74(fvec3)   ExtInst 3(GLSL.std.450) 69(Normalize) 732
+                                Store 710(L) 735
+             741:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 739 739 16 16
+             740:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 737 736(V) 49
+             742:    718(ptr)   AccessChain 495 323 323
+             743:   18(fvec4)   Load 742
+             744:   74(fvec3)   VectorShuffle 743 743 0 1 2
+             745:   74(fvec3)   Load 536(fragPos)
+             746:   74(fvec3)   FSub 744 745
+                                Store 736(V) 746
+             748:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 749 749 16 16
+             747:   74(fvec3)   Load 736(V)
+             750:   74(fvec3)   ExtInst 3(GLSL.std.450) 69(Normalize) 747
+                                Store 736(V) 750
+             756:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 754 754 16 16
+             755:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 752 751(lightCosInnerAngle) 49
+                                Store 751(lightCosInnerAngle) 757
+             763:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 761 761 16 16
+             762:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 759 758(lightCosOuterAngle) 49
+                                Store 758(lightCosOuterAngle) 764
+             770:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 768 768 16 16
+             769:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 766 765(lightRange) 49
+                                Store 765(lightRange) 771
+             777:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 775 775 16 16
+             776:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 773 772(dir) 49
+             778:    228(int)   Load 693(i)
+             779:    718(ptr)   AccessChain 495 323 330 778 323
+             780:   18(fvec4)   Load 779
+             781:   74(fvec3)   VectorShuffle 780 780 0 1 2
+             782:    228(int)   Load 693(i)
+             783:    718(ptr)   AccessChain 495 323 330 782 330
+             784:   18(fvec4)   Load 783
+             785:   74(fvec3)   VectorShuffle 784 784 0 1 2
+             786:   74(fvec3)   FSub 781 785
+             787:   74(fvec3)   ExtInst 3(GLSL.std.450) 69(Normalize) 786
+                                Store 772(dir) 787
+             793:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 791 791 16 16
+             792:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 789 788(cosDir) 49
+             794:   74(fvec3)   Load 710(L)
+             795:   74(fvec3)   Load 772(dir)
+             796:    8(float)   Dot 794 795
+                                Store 788(cosDir) 796
+             802:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 800 800 16 16
+             801:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 798 797(spotEffect) 49
+             803:    8(float)   Load 758(lightCosOuterAngle)
+             804:    8(float)   Load 751(lightCosInnerAngle)
+             805:    8(float)   Load 788(cosDir)
+             806:    8(float)   ExtInst 3(GLSL.std.450) 49(SmoothStep) 803 804 805
+                                Store 797(spotEffect) 806
+             812:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 810 810 16 16
+             811:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 808 807(heightAttenuation) 49
+             813:    8(float)   Load 765(lightRange)
+             814:    8(float)   Load 725(dist)
+             815:    8(float)   ExtInst 3(GLSL.std.450) 49(SmoothStep) 813 204 814
+                                Store 807(heightAttenuation) 815
+             821:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 819 819 16 16
+             820:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 817 816(NdotL) 49
+             822:   74(fvec3)   Load 682(N)
+             823:   74(fvec3)   Load 710(L)
+             824:    8(float)   Dot 822 823
+             825:    8(float)   ExtInst 3(GLSL.std.450) 40(FMax) 204 824
+                                Store 816(NdotL) 825
+             831:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 829 829 16 16
+             830:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 827 826(diff) 49
+             832:    8(float)   Load 816(NdotL)
+             833:   74(fvec3)   CompositeConstruct 832 832 832
+                                Store 826(diff) 833
+             839:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 837 837 16 16
+             838:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 835 834(R) 49
+             840:   74(fvec3)   Load 710(L)
+             841:   74(fvec3)   FNegate 840
+             842:   74(fvec3)   Load 682(N)
+             843:   74(fvec3)   ExtInst 3(GLSL.std.450) 71(Reflect) 841 842
+                                Store 834(R) 843
+             849:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 847 847 16 16
+             848:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 845 844(NdotR) 49
+             850:   74(fvec3)   Load 834(R)
+             851:   74(fvec3)   Load 736(V)
+             852:    8(float)   Dot 850 851
+             853:    8(float)   ExtInst 3(GLSL.std.450) 40(FMax) 204 852
+                                Store 844(NdotR) 853
+             859:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 857 857 16 16
+             858:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 855 854(spec) 49
+             860:    8(float)   Load 844(NdotR)
+             862:    8(float)   ExtInst 3(GLSL.std.450) 26(Pow) 860 861
+             863:     24(ptr)   AccessChain 580(albedo) 17
+             864:    8(float)   Load 863
+             865:    8(float)   FMul 862 864
+             867:    8(float)   FMul 865 866
+             868:   74(fvec3)   CompositeConstruct 867 867 867
+                                Store 854(spec) 868
+             870:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 871 871 16 16
+             869:   74(fvec3)   Load 826(diff)
+             872:   74(fvec3)   Load 854(spec)
+             873:   74(fvec3)   FAdd 869 872
+             874:    8(float)   Load 797(spotEffect)
+             875:   74(fvec3)   VectorTimesScalar 873 874
+             876:    8(float)   Load 807(heightAttenuation)
+             877:   74(fvec3)   VectorTimesScalar 875 876
+             878:    228(int)   Load 693(i)
+             880:    718(ptr)   AccessChain 495 323 330 878 879
+             881:   18(fvec4)   Load 880
+             882:   74(fvec3)   VectorShuffle 881 881 0 1 2
+             883:   74(fvec3)   FMul 877 882
+             884:   18(fvec4)   Load 580(albedo)
+             885:   74(fvec3)   VectorShuffle 884 884 0 1 2
+             886:   74(fvec3)   FMul 883 885
+             887:   74(fvec3)   Load 598(fragcolor)
+             888:   74(fvec3)   FAdd 887 886
+                                Store 598(fragcolor) 888
+                                Branch 701
+             701:               Label
+             890:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 690
+             891:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 691 691 16 16
+             889:    228(int)   Load 693(i)
+             892:    228(int)   IAdd 889 330
+                                Store 693(i) 892
+                                Branch 698
+             700:             Label
+             894:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 535
+             895:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 896 896 16 16
+             893:    603(ptr) AccessChain 495 323 879
+             897:    228(int) Load 893
+             898:   145(bool) SGreaterThan 897 323
+                              SelectionMerge 900 None
+                              BranchConditional 898 899 900
+             899:               Label
+             904:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 901
+             905:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 906 906 16 16
+             903:   74(fvec3)   Load 598(fragcolor)
+                                Store 902(param) 903
+             908:   74(fvec3)   Load 536(fragPos)
+                                Store 907(param) 908
+             909:   74(fvec3)   FunctionCall 82(shadow(vf3;vf3;) 902(param) 907(param)
+                                Store 598(fragcolor) 909
+                                Branch 900
+             900:             Label
+             911:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 535
+             912:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 40 913 913 16 16
+             910:   74(fvec3) Load 598(fragcolor)
+             914:    8(float) CompositeExtract 910 0
+             915:    8(float) CompositeExtract 910 1
+             916:    8(float) CompositeExtract 910 2
+             917:   18(fvec4) CompositeConstruct 914 915 916 116
+                              ReturnValue 917
                               FunctionEnd
diff --git a/Test/baseResults/spv.debuginfo.hlsl.geom.out b/Test/baseResults/spv.debuginfo.hlsl.geom.out
index c4d39a1..f4503ba 100644
--- a/Test/baseResults/spv.debuginfo.hlsl.geom.out
+++ b/Test/baseResults/spv.debuginfo.hlsl.geom.out
@@ -1,20 +1,20 @@
 spv.debuginfo.hlsl.geom
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 353
+// Id's are bound by 373
 
                               Capability Geometry
                               Capability MultiViewport
                               Extension  "SPV_KHR_non_semantic_info"
-               2:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
                3:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Geometry 6  "main" 255 261 266 272 277 282 287 302 309 314 338 341
+                              EntryPoint Geometry 6  "main" 270 279 284 291 296 301 306 322 329 334 358 361
                               ExecutionMode 6 Triangles
                               ExecutionMode 6 Invocations 2
                               ExecutionMode 6 OutputTriangleStrip
                               ExecutionMode 6 OutputVertices 3
-               1:             String  ""
+               2:             String  "spv.debuginfo.hlsl.geom"
                9:             String  "float"
               12:             String  "uint"
               25:             String  "Pos"
@@ -26,110 +26,190 @@
 // OpModuleProcessed keep-uncalled
 // OpModuleProcessed hlsl-offsets
 #line 1
+/*
+The MIT License (MIT)
+
+Copyright (c) 2022 Google LLC
+Copyright (c) 2022 Sascha Willems
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+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 Software.
+
+THE SOFTWARE IS 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 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+*/
+
+struct UBO
+{
+	float4x4 projection[2];
+	float4x4 modelview[2];
+	float4 lightPos;
+};
+
+cbuffer ubo : register(b0) { UBO ubo; }
+
+struct VSOutput
+{
+	float4 Pos : SV_POSITION;
+[[vk::location(0)]] float3 Normal : NORMAL0;
+[[vk::location(1)]] float3 Color : COLOR0;
+};
+
+struct GSOutput
+{
+	float4 Pos : SV_POSITION;
+	uint ViewportIndex : SV_ViewportArrayIndex;
+	uint PrimitiveID : SV_PrimitiveID;
+[[vk::location(0)]] float3 Normal : NORMAL0;
+[[vk::location(1)]] float3 Color : COLOR0;
+[[vk::location(2)]] float3 ViewVec : TEXCOOR1;
+[[vk::location(3)]] float3 LightVec : TEXCOOR2;
+};
+
+[maxvertexcount(3)]
+[instance(2)]
+void main(triangle VSOutput input[3], inout TriangleStream<GSOutput> outStream, uint InvocationID : SV_GSInstanceID, uint PrimitiveID : SV_PrimitiveID)
+{
+	for(int i = 0; i < 3; i++)
+	{
+		GSOutput output = (GSOutput)0;
+		output.Normal = mul((float3x3)ubo.modelview[InvocationID], input[i].Normal);
+		output.Color = input[i].Color;
+
+		float4 pos = input[i].Pos;
+		float4 worldPos = mul(ubo.modelview[InvocationID], pos);
+
+		float3 lPos = mul(ubo.modelview[InvocationID], ubo.lightPos).xyz;
+		output.LightVec = lPos - worldPos.xyz;
+		output.ViewVec = -worldPos.xyz;
+
+		output.Pos = mul(ubo.projection[InvocationID], worldPos);
+
+		// Set the viewport index that the vertex will be emitted to
+		output.ViewportIndex = InvocationID;
+      	output.PrimitiveID = PrimitiveID;
+		outStream.Append( output );
+	}
+
+	outStream.RestartStrip();
+}
 "
               31:             String  "Color"
               36:             String  "VSOutput"
-              47:             String  "PrimitiveID"
-              52:             String  "LightVec"
-              58:             String  "GSOutput"
-              68:             String  "@main"
-              74:             String  "input"
-              78:             String  "outStream"
-              82:             String  "InvocationID"
-              91:             String  "int"
-              96:             String  "i"
-             111:             String  "bool"
-             119:             String  "output"
-             141:             String  "projection"
-             145:             String  "modelview"
-             149:             String  "lightPos"
-             153:             String  "UBO"
-             156:             String  "ubo"
-             191:             String  "pos"
-             200:             String  "worldPos"
-             211:             String  "lPos"
-             257:             String  "outStream.Pos"
-             263:             String  "outStream.ViewportIndex"
-             268:             String  "outStream.PrimitiveID"
-             274:             String  "outStream.Normal"
-             279:             String  "outStream.Color"
-             284:             String  "outStream.ViewVec"
-             289:             String  "outStream.LightVec"
+              50:             String  "PrimitiveID"
+              55:             String  "LightVec"
+              61:             String  "GSOutput"
+              74:             String  "@main"
+              77:             String  "input"
+              83:             String  "outStream"
+              87:             String  "InvocationID"
+              97:             String  "int"
+             103:             String  "i"
+             120:             String  "bool"
+             126:             String  "output"
+             152:             String  "projection"
+             156:             String  "modelview"
+             160:             String  "lightPos"
+             164:             String  "UBO"
+             167:             String  "ubo"
+             174:             String  ""
+             204:             String  "pos"
+             213:             String  "worldPos"
+             224:             String  "lPos"
+             272:             String  "outStream.Pos"
+             281:             String  "outStream.ViewportIndex"
+             286:             String  "outStream.PrimitiveID"
+             293:             String  "outStream.Normal"
+             298:             String  "outStream.Color"
+             303:             String  "outStream.ViewVec"
+             308:             String  "outStream.LightVec"
                               Name 6  "main"
                               Name 23  "VSOutput"
                               MemberName 23(VSOutput) 0  "Pos"
                               MemberName 23(VSOutput) 1  "Normal"
                               MemberName 23(VSOutput) 2  "Color"
-                              Name 43  "GSOutput"
-                              MemberName 43(GSOutput) 0  "Pos"
-                              MemberName 43(GSOutput) 1  "ViewportIndex"
-                              MemberName 43(GSOutput) 2  "PrimitiveID"
-                              MemberName 43(GSOutput) 3  "Normal"
-                              MemberName 43(GSOutput) 4  "Color"
-                              MemberName 43(GSOutput) 5  "ViewVec"
-                              MemberName 43(GSOutput) 6  "LightVec"
-                              Name 67  "@main(struct-VSOutput-vf4-vf3-vf31[3];struct-GSOutput-vf4-u1-u1-vf3-vf3-vf3-vf31;u1;u1;"
-                              Name 63  "input"
-                              Name 64  "outStream"
-                              Name 65  "InvocationID"
-                              Name 66  "PrimitiveID"
-                              Name 94  "i"
-                              Name 117  "output"
-                              Name 139  "UBO"
-                              MemberName 139(UBO) 0  "projection"
-                              MemberName 139(UBO) 1  "modelview"
-                              MemberName 139(UBO) 2  "lightPos"
-                              Name 154  "ubo"
-                              MemberName 154(ubo) 0  "ubo"
-                              Name 160  ""
-                              Name 189  "pos"
-                              Name 198  "worldPos"
-                              Name 209  "lPos"
-                              Name 255  "outStream.Pos"
-                              Name 261  "outStream.ViewportIndex"
-                              Name 266  "outStream.PrimitiveID"
-                              Name 272  "outStream.Normal"
-                              Name 277  "outStream.Color"
-                              Name 282  "outStream.ViewVec"
-                              Name 287  "outStream.LightVec"
-                              Name 299  "input"
-                              Name 302  "input.Pos"
-                              Name 309  "input.Normal"
-                              Name 314  "input.Color"
-                              Name 336  "InvocationID"
-                              Name 338  "InvocationID"
-                              Name 340  "PrimitiveID"
-                              Name 341  "PrimitiveID"
-                              Name 343  "outStream"
-                              Name 344  "param"
-                              Name 346  "param"
-                              Name 347  "param"
-                              Name 349  "param"
-                              Decorate 135 ArrayStride 64
-                              Decorate 137 ArrayStride 64
-                              MemberDecorate 139(UBO) 0 RowMajor
-                              MemberDecorate 139(UBO) 0 Offset 0
-                              MemberDecorate 139(UBO) 0 MatrixStride 16
-                              MemberDecorate 139(UBO) 1 RowMajor
-                              MemberDecorate 139(UBO) 1 Offset 128
-                              MemberDecorate 139(UBO) 1 MatrixStride 16
-                              MemberDecorate 139(UBO) 2 Offset 256
-                              MemberDecorate 154(ubo) 0 Offset 0
-                              Decorate 154(ubo) Block
-                              Decorate 160 DescriptorSet 0
-                              Decorate 160 Binding 0
-                              Decorate 255(outStream.Pos) BuiltIn Position
-                              Decorate 261(outStream.ViewportIndex) BuiltIn ViewportIndex
-                              Decorate 266(outStream.PrimitiveID) BuiltIn PrimitiveId
-                              Decorate 272(outStream.Normal) Location 0
-                              Decorate 277(outStream.Color) Location 1
-                              Decorate 282(outStream.ViewVec) Location 2
-                              Decorate 287(outStream.LightVec) Location 3
-                              Decorate 302(input.Pos) BuiltIn Position
-                              Decorate 309(input.Normal) Location 0
-                              Decorate 314(input.Color) Location 1
-                              Decorate 338(InvocationID) BuiltIn InvocationId
-                              Decorate 341(PrimitiveID) BuiltIn PrimitiveId
+                              Name 46  "GSOutput"
+                              MemberName 46(GSOutput) 0  "Pos"
+                              MemberName 46(GSOutput) 1  "ViewportIndex"
+                              MemberName 46(GSOutput) 2  "PrimitiveID"
+                              MemberName 46(GSOutput) 3  "Normal"
+                              MemberName 46(GSOutput) 4  "Color"
+                              MemberName 46(GSOutput) 5  "ViewVec"
+                              MemberName 46(GSOutput) 6  "LightVec"
+                              Name 72  "@main(struct-VSOutput-vf4-vf3-vf31[3];struct-GSOutput-vf4-u1-u1-vf3-vf3-vf3-vf31;u1;u1;"
+                              Name 68  "input"
+                              Name 69  "outStream"
+                              Name 70  "InvocationID"
+                              Name 71  "PrimitiveID"
+                              Name 101  "i"
+                              Name 124  "output"
+                              Name 150  "UBO"
+                              MemberName 150(UBO) 0  "projection"
+                              MemberName 150(UBO) 1  "modelview"
+                              MemberName 150(UBO) 2  "lightPos"
+                              Name 165  "ubo"
+                              MemberName 165(ubo) 0  "ubo"
+                              Name 172  ""
+                              Name 202  "pos"
+                              Name 211  "worldPos"
+                              Name 222  "lPos"
+                              Name 270  "outStream.Pos"
+                              Name 279  "outStream.ViewportIndex"
+                              Name 284  "outStream.PrimitiveID"
+                              Name 291  "outStream.Normal"
+                              Name 296  "outStream.Color"
+                              Name 301  "outStream.ViewVec"
+                              Name 306  "outStream.LightVec"
+                              Name 319  "input"
+                              Name 322  "input.Pos"
+                              Name 329  "input.Normal"
+                              Name 334  "input.Color"
+                              Name 356  "InvocationID"
+                              Name 358  "InvocationID"
+                              Name 360  "PrimitiveID"
+                              Name 361  "PrimitiveID"
+                              Name 363  "outStream"
+                              Name 364  "param"
+                              Name 366  "param"
+                              Name 367  "param"
+                              Name 369  "param"
+                              Decorate 146 ArrayStride 64
+                              Decorate 148 ArrayStride 64
+                              MemberDecorate 150(UBO) 0 RowMajor
+                              MemberDecorate 150(UBO) 0 MatrixStride 16
+                              MemberDecorate 150(UBO) 0 Offset 0
+                              MemberDecorate 150(UBO) 1 RowMajor
+                              MemberDecorate 150(UBO) 1 MatrixStride 16
+                              MemberDecorate 150(UBO) 1 Offset 128
+                              MemberDecorate 150(UBO) 2 Offset 256
+                              Decorate 165(ubo) Block
+                              MemberDecorate 165(ubo) 0 Offset 0
+                              Decorate 172 Binding 0
+                              Decorate 172 DescriptorSet 0
+                              Decorate 270(outStream.Pos) BuiltIn Position
+                              Decorate 279(outStream.ViewportIndex) BuiltIn ViewportIndex
+                              Decorate 284(outStream.PrimitiveID) BuiltIn PrimitiveId
+                              Decorate 291(outStream.Normal) Location 0
+                              Decorate 296(outStream.Color) Location 1
+                              Decorate 301(outStream.ViewVec) Location 2
+                              Decorate 306(outStream.LightVec) Location 3
+                              Decorate 322(input.Pos) BuiltIn Position
+                              Decorate 329(input.Normal) Location 0
+                              Decorate 334(input.Color) Location 1
+                              Decorate 358(InvocationID) BuiltIn InvocationId
+                              Decorate 361(PrimitiveID) BuiltIn PrimitiveId
                4:             TypeVoid
                5:             TypeFunction 4
                8:             TypeFloat 32
@@ -137,363 +217,379 @@
               14:     11(int) Constant 32
               15:     11(int) Constant 6
               16:     11(int) Constant 0
-              13:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 12 14 15 16
+              13:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 12 14 15 16
               17:     11(int) Constant 3
-              10:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 9 14 17 16
+              10:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 9 14 17 16
               18:             TypeVector 8(float) 4
               19:     11(int) Constant 4
-              20:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 19
+              20:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 19
               21:             TypeVector 8(float) 3
-              22:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 17
+              22:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 17
     23(VSOutput):             TypeStruct 18(fvec4) 21(fvec3) 21(fvec3)
-              26:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 1 27
+              26:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 2 27
               28:     11(int) Constant 37
               29:     11(int) Constant 13
-              24:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 25 20 26 28 29 16 16 17
+              24:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 25 20 26 28 29 16 16 17
               32:     11(int) Constant 39
               33:     11(int) Constant 34
-              30:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 31 22 26 32 33 16 16 17
-              34:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 31 22 26 32 33 16 16 17
+              30:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 31 22 26 32 33 16 16 17
+              34:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 31 22 26 32 33 16 16 17
               37:     11(int) Constant 1
-              39:     11(int) Constant 5
-              38:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 37 19 26 39
-              35:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 36 37 26 16 16 38 36 16 17 24 30 34
-              40:             TypeArray 23(VSOutput) 17
-              41:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 35 17
-              42:             TypePointer Function 40
-    43(GSOutput):             TypeStruct 18(fvec4) 11(int) 11(int) 21(fvec3) 21(fvec3) 21(fvec3) 21(fvec3)
-              45:     11(int) Constant 44
-              44:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 25 20 26 45 29 16 16 17
-              48:     11(int) Constant 46
-              49:     11(int) Constant 19
-              46:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 47 13 26 48 49 16 16 17
-              50:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 47 13 26 48 49 16 16 17
-              53:     11(int) Constant 50
-              51:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 52 22 26 53 28 16 16 17
-              54:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 52 22 26 53 28 16 16 17
-              55:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 52 22 26 53 28 16 16 17
-              56:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 52 22 26 53 28 16 16 17
-              57:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 58 37 26 16 16 38 58 16 17 44 46 50 51 54 55 56
-              59:             TypePointer Function 43(GSOutput)
-              60:             TypePointer Function 11(int)
-              61:             TypeFunction 4 42(ptr) 59(ptr) 60(ptr) 60(ptr)
-              62:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 4 41 57 13 13
-              69:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 68 62 26 16 16 38 68 17 16
-              73:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 74 41 26 16 16 69 19 37
-              76:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
-              79:     11(int) Constant 2
-              77:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 78 57 26 16 16 69 19 79
-              81:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 82 13 26 16 16 69 19 17
-              84:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 47 13 26 16 16 69 19 19
-              89:     11(int) Constant 57
-              90:             TypeInt 32 1
-              92:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 91 14 19 16
-              93:             TypePointer Function 90(int)
-              95:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 96 92 26 89 16 69 19
-              98:     90(int) Constant 0
-             109:     90(int) Constant 3
-             110:             TypeBool
-             112:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 111 14 79 16
-             116:     11(int) Constant 59
-             118:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 119 57 26 116 16 69 19
-             121:    8(float) Constant 0
-             122:   18(fvec4) ConstantComposite 121 121 121 121
-             123:   21(fvec3) ConstantComposite 121 121 121
-             124:43(GSOutput) ConstantComposite 122 16 16 123 123 123 123
-             126:     11(int) Constant 60
-             128:     90(int) Constant 1
-             129:             TypePointer Function 21(fvec3)
-             132:             TypeMatrix 18(fvec4) 4
-             134:   110(bool) ConstantTrue
-             133:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 20 19 134
-             135:             TypeArray 132 79
-             136:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 133 79
-             137:             TypeArray 132 79
-             138:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 133 79
-        139(UBO):             TypeStruct 135 137 18(fvec4)
-             142:     11(int) Constant 28
-             143:     11(int) Constant 21
-             140:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 141 136 26 142 143 16 16 17
-             146:     11(int) Constant 29
-             147:     11(int) Constant 20
-             144:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 145 138 26 146 147 16 16 17
-             150:     11(int) Constant 30
-             151:     11(int) Constant 17
-             148:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 149 20 26 150 151 16 16 17
-             152:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 153 37 26 126 16 38 153 16 17 140 144 148
-        154(ubo):             TypeStruct 139(UBO)
-             157:     11(int) Constant 33
-             155:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 156 152 26 157 28 16 16 17
-             158:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 156 37 26 126 16 38 156 16 17 155
-             159:             TypePointer Uniform 154(ubo)
-             160:    159(ptr) Variable Uniform
-             162:     11(int) Constant 8
-             161:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 1 158 26 126 16 38 1 160 162
-             164:             TypePointer Uniform 132
-             167:             TypeMatrix 21(fvec3) 3
-             168:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 22 17 134
-             179:     11(int) Constant 61
-             180:     90(int) Constant 4
-             182:     90(int) Constant 2
-             187:     11(int) Constant 63
-             188:             TypePointer Function 18(fvec4)
-             190:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 191 20 26 187 16 69 19
-             197:     11(int) Constant 64
-             199:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 200 20 26 197 16 69 19
-             208:     11(int) Constant 66
-             210:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 211 22 26 208 16 69 19
-             213:             TypePointer Uniform 18(fvec4)
-             222:     11(int) Constant 67
-             223:     90(int) Constant 6
-             230:     11(int) Constant 68
-             231:     90(int) Constant 5
-             237:     11(int) Constant 70
-             245:     11(int) Constant 73
-             249:     11(int) Constant 74
-             253:     11(int) Constant 75
-             254:             TypePointer Output 18(fvec4)
-255(outStream.Pos):    254(ptr) Variable Output
-             256:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 257 20 26 253 16 38 257 255(outStream.Pos) 162
-             260:             TypePointer Output 11(int)
-261(outStream.ViewportIndex):    260(ptr) Variable Output
-             262:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 263 13 26 253 16 38 263 261(outStream.ViewportIndex) 162
-266(outStream.PrimitiveID):    260(ptr) Variable Output
-             267:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 268 13 26 253 16 38 268 266(outStream.PrimitiveID) 162
-             271:             TypePointer Output 21(fvec3)
-272(outStream.Normal):    271(ptr) Variable Output
-             273:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 274 22 26 253 16 38 274 272(outStream.Normal) 162
-277(outStream.Color):    271(ptr) Variable Output
-             278:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 279 22 26 253 16 38 279 277(outStream.Color) 162
-282(outStream.ViewVec):    271(ptr) Variable Output
-             283:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 284 22 26 253 16 38 284 282(outStream.ViewVec) 162
-287(outStream.LightVec):    271(ptr) Variable Output
-             288:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 289 22 26 253 16 38 289 287(outStream.LightVec) 162
-             298:     11(int) Constant 78
-             300:             TypeArray 18(fvec4) 17
-             301:             TypePointer Input 300
-  302(input.Pos):    301(ptr) Variable Input
-             303:             TypePointer Input 18(fvec4)
-             307:             TypeArray 21(fvec3) 17
-             308:             TypePointer Input 307
-309(input.Normal):    308(ptr) Variable Input
-             310:             TypePointer Input 21(fvec3)
-314(input.Color):    308(ptr) Variable Input
-             337:             TypePointer Input 11(int)
-338(InvocationID):    337(ptr) Variable Input
-341(PrimitiveID):    337(ptr) Variable Input
-                              Line 1 56 1
+              38:     11(int) Constant 56
+              40:     11(int) Constant 5
+              39:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 37 19 26 40
+              35:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 36 37 26 38 16 39 36 16 17 24 30 34
+              41:             TypeArray 23(VSOutput) 17
+              42:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 35 17
+              43:             TypePointer Function 41
+              44:     11(int) Constant 7
+              45:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 42 44 16
+    46(GSOutput):             TypeStruct 18(fvec4) 11(int) 11(int) 21(fvec3) 21(fvec3) 21(fvec3) 21(fvec3)
+              48:     11(int) Constant 44
+              47:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 25 20 26 48 29 16 16 17
+              51:     11(int) Constant 46
+              52:     11(int) Constant 19
+              49:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 50 13 26 51 52 16 16 17
+              53:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 50 13 26 51 52 16 16 17
+              56:     11(int) Constant 50
+              54:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 55 22 26 56 28 16 16 17
+              57:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 55 22 26 56 28 16 16 17
+              58:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 55 22 26 56 28 16 16 17
+              59:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 55 22 26 56 28 16 16 17
+              60:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 61 37 26 38 16 39 61 16 17 47 49 53 54 57 58 59
+              62:             TypePointer Function 46(GSOutput)
+              63:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 60 44 16
+              64:             TypePointer Function 11(int)
+              65:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 13 44 16
+              66:             TypeFunction 4 43(ptr) 62(ptr) 64(ptr) 64(ptr)
+              67:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 4 42 60 13 13
+              75:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 74 67 26 38 16 39 74 17 38
+              76:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 77 42 26 38 16 75 19 37
+              79:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
+              84:     11(int) Constant 2
+              82:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 83 60 26 38 16 75 19 84
+              86:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 87 13 26 38 16 75 19 17
+              89:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 50 13 26 38 16 75 19 19
+              92:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 26 16 16 75
+              94:     11(int) Constant 57
+              95:     11(int) Constant 10
+              93:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 26 94 95 92
+              96:             TypeInt 32 1
+              98:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 97 14 19 16
+              99:             TypePointer Function 96(int)
+             100:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 98 44 16
+             102:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 103 98 26 94 16 93 19
+             107:     96(int) Constant 0
+             118:     96(int) Constant 3
+             119:             TypeBool
+             121:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 120 14 84 16
+             123:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 26 16 16 93
+             127:     11(int) Constant 59
+             125:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 126 60 26 127 16 123 19
+             131:    8(float) Constant 0
+             132:   18(fvec4) ConstantComposite 131 131 131 131
+             133:   21(fvec3) ConstantComposite 131 131 131
+             134:46(GSOutput) ConstantComposite 132 16 16 133 133 133 133
+             137:     11(int) Constant 60
+             138:     96(int) Constant 1
+             139:             TypePointer Function 21(fvec3)
+             140:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 22 44 16
+             143:             TypeMatrix 18(fvec4) 4
+             145:   119(bool) ConstantTrue
+             144:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 20 19 145
+             146:             TypeArray 143 84
+             147:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 144 84
+             148:             TypeArray 143 84
+             149:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 144 84
+        150(UBO):             TypeStruct 146 148 18(fvec4)
+             153:     11(int) Constant 28
+             154:     11(int) Constant 21
+             151:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 152 147 26 153 154 16 16 17
+             157:     11(int) Constant 29
+             158:     11(int) Constant 20
+             155:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 156 149 26 157 158 16 16 17
+             161:     11(int) Constant 30
+             162:     11(int) Constant 17
+             159:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 160 20 26 161 162 16 16 17
+             163:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 164 37 26 137 16 39 164 16 17 151 155 159
+        165(ubo):             TypeStruct 150(UBO)
+             168:     11(int) Constant 33
+             166:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 167 163 26 168 28 16 16 17
+             169:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 167 37 26 137 16 39 167 16 17 166
+             170:             TypePointer Uniform 165(ubo)
+             171:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 169 84 16
+             172:    170(ptr) Variable Uniform
+             175:     11(int) Constant 8
+             173:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 174 169 26 137 16 39 174 172 175
+             177:             TypePointer Uniform 143
+             178:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 144 84 16
+             181:             TypeMatrix 21(fvec3) 3
+             182:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 22 17 145
+             192:     96(int) Constant 4
+             195:     11(int) Constant 61
+             196:     96(int) Constant 2
+             200:             TypePointer Function 18(fvec4)
+             201:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 20 44 16
+             205:     11(int) Constant 63
+             203:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 204 20 26 205 16 123 19
+             214:     11(int) Constant 64
+             212:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 213 20 26 214 16 123 19
+             225:     11(int) Constant 66
+             223:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 224 22 26 225 16 123 19
+             228:             TypePointer Uniform 18(fvec4)
+             229:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 20 84 16
+             237:     96(int) Constant 6
+             240:     11(int) Constant 67
+             245:     96(int) Constant 5
+             248:     11(int) Constant 68
+             254:     11(int) Constant 70
+             262:     11(int) Constant 73
+             266:     11(int) Constant 74
+             268:             TypePointer Output 18(fvec4)
+             269:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 20 17 16
+270(outStream.Pos):    268(ptr) Variable Output
+             273:     11(int) Constant 75
+             271:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 272 20 26 273 16 39 272 270(outStream.Pos) 175
+             277:             TypePointer Output 11(int)
+             278:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 13 17 16
+279(outStream.ViewportIndex):    277(ptr) Variable Output
+             280:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 281 13 26 273 16 39 281 279(outStream.ViewportIndex) 175
+284(outStream.PrimitiveID):    277(ptr) Variable Output
+             285:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 286 13 26 273 16 39 286 284(outStream.PrimitiveID) 175
+             289:             TypePointer Output 21(fvec3)
+             290:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 22 17 16
+291(outStream.Normal):    289(ptr) Variable Output
+             292:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 293 22 26 273 16 39 293 291(outStream.Normal) 175
+296(outStream.Color):    289(ptr) Variable Output
+             297:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 298 22 26 273 16 39 298 296(outStream.Color) 175
+301(outStream.ViewVec):    289(ptr) Variable Output
+             302:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 303 22 26 273 16 39 303 301(outStream.ViewVec) 175
+306(outStream.LightVec):    289(ptr) Variable Output
+             307:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 308 22 26 273 16 39 308 306(outStream.LightVec) 175
+             317:     11(int) Constant 78
+             320:             TypeArray 18(fvec4) 17
+             321:             TypePointer Input 320
+  322(input.Pos):    321(ptr) Variable Input
+             323:             TypePointer Input 18(fvec4)
+             327:             TypeArray 21(fvec3) 17
+             328:             TypePointer Input 327
+329(input.Normal):    328(ptr) Variable Input
+             330:             TypePointer Input 21(fvec3)
+334(input.Color):    328(ptr) Variable Input
+             357:             TypePointer Input 11(int)
+358(InvocationID):    357(ptr) Variable Input
+361(PrimitiveID):    357(ptr) Variable Input
          6(main):           4 Function None 5
                7:             Label
-      299(input):     42(ptr) Variable Function
-336(InvocationID):     60(ptr) Variable Function
-340(PrimitiveID):     60(ptr) Variable Function
-  343(outStream):     59(ptr) Variable Function
-      344(param):     42(ptr) Variable Function
-      346(param):     59(ptr) Variable Function
-      347(param):     60(ptr) Variable Function
-      349(param):     60(ptr) Variable Function
-                              Line 1 56 0
-             304:    303(ptr) AccessChain 302(input.Pos) 98
-             305:   18(fvec4) Load 304
-             306:    188(ptr) AccessChain 299(input) 98 98
-                              Store 306 305
-             311:    310(ptr) AccessChain 309(input.Normal) 98
-             312:   21(fvec3) Load 311
-             313:    129(ptr) AccessChain 299(input) 98 128
-                              Store 313 312
-             315:    310(ptr) AccessChain 314(input.Color) 98
-             316:   21(fvec3) Load 315
-             317:    129(ptr) AccessChain 299(input) 98 182
-                              Store 317 316
-             318:    303(ptr) AccessChain 302(input.Pos) 128
-             319:   18(fvec4) Load 318
-             320:    188(ptr) AccessChain 299(input) 128 98
-                              Store 320 319
-             321:    310(ptr) AccessChain 309(input.Normal) 128
-             322:   21(fvec3) Load 321
-             323:    129(ptr) AccessChain 299(input) 128 128
-                              Store 323 322
-             324:    310(ptr) AccessChain 314(input.Color) 128
-             325:   21(fvec3) Load 324
-             326:    129(ptr) AccessChain 299(input) 128 182
+      319(input):     43(ptr) Variable Function
+356(InvocationID):     64(ptr) Variable Function
+360(PrimitiveID):     64(ptr) Variable Function
+  363(outStream):     62(ptr) Variable Function
+      364(param):     43(ptr) Variable Function
+      366(param):     62(ptr) Variable Function
+      367(param):     64(ptr) Variable Function
+      369(param):     64(ptr) Variable Function
+             324:    323(ptr) AccessChain 322(input.Pos) 107
+             325:   18(fvec4) Load 324
+             326:    200(ptr) AccessChain 319(input) 107 107
                               Store 326 325
-             327:    303(ptr) AccessChain 302(input.Pos) 182
-             328:   18(fvec4) Load 327
-             329:    188(ptr) AccessChain 299(input) 182 98
-                              Store 329 328
-             330:    310(ptr) AccessChain 309(input.Normal) 182
-             331:   21(fvec3) Load 330
-             332:    129(ptr) AccessChain 299(input) 182 128
-                              Store 332 331
-             333:    310(ptr) AccessChain 314(input.Color) 182
-             334:   21(fvec3) Load 333
-             335:    129(ptr) AccessChain 299(input) 182 182
-                              Store 335 334
-             339:     11(int) Load 338(InvocationID)
-                              Store 336(InvocationID) 339
-             342:     11(int) Load 341(PrimitiveID)
-                              Store 340(PrimitiveID) 342
-             345:          40 Load 299(input)
-                              Store 344(param) 345
-             348:     11(int) Load 336(InvocationID)
-                              Store 347(param) 348
-             350:     11(int) Load 340(PrimitiveID)
-                              Store 349(param) 350
-             351:           4 FunctionCall 67(@main(struct-VSOutput-vf4-vf3-vf31[3];struct-GSOutput-vf4-u1-u1-vf3-vf3-vf3-vf31;u1;u1;) 344(param) 346(param) 347(param) 349(param)
-             352:43(GSOutput) Load 346(param)
-                              Store 343(outStream) 352
+             331:    330(ptr) AccessChain 329(input.Normal) 107
+             332:   21(fvec3) Load 331
+             333:    139(ptr) AccessChain 319(input) 107 138
+                              Store 333 332
+             335:    330(ptr) AccessChain 334(input.Color) 107
+             336:   21(fvec3) Load 335
+             337:    139(ptr) AccessChain 319(input) 107 196
+                              Store 337 336
+             338:    323(ptr) AccessChain 322(input.Pos) 138
+             339:   18(fvec4) Load 338
+             340:    200(ptr) AccessChain 319(input) 138 107
+                              Store 340 339
+             341:    330(ptr) AccessChain 329(input.Normal) 138
+             342:   21(fvec3) Load 341
+             343:    139(ptr) AccessChain 319(input) 138 138
+                              Store 343 342
+             344:    330(ptr) AccessChain 334(input.Color) 138
+             345:   21(fvec3) Load 344
+             346:    139(ptr) AccessChain 319(input) 138 196
+                              Store 346 345
+             347:    323(ptr) AccessChain 322(input.Pos) 196
+             348:   18(fvec4) Load 347
+             349:    200(ptr) AccessChain 319(input) 196 107
+                              Store 349 348
+             350:    330(ptr) AccessChain 329(input.Normal) 196
+             351:   21(fvec3) Load 350
+             352:    139(ptr) AccessChain 319(input) 196 138
+                              Store 352 351
+             353:    330(ptr) AccessChain 334(input.Color) 196
+             354:   21(fvec3) Load 353
+             355:    139(ptr) AccessChain 319(input) 196 196
+                              Store 355 354
+             359:     11(int) Load 358(InvocationID)
+                              Store 356(InvocationID) 359
+             362:     11(int) Load 361(PrimitiveID)
+                              Store 360(PrimitiveID) 362
+             365:          41 Load 319(input)
+                              Store 364(param) 365
+             368:     11(int) Load 356(InvocationID)
+                              Store 367(param) 368
+             370:     11(int) Load 360(PrimitiveID)
+                              Store 369(param) 370
+             371:           4 FunctionCall 72(@main(struct-VSOutput-vf4-vf3-vf31[3];struct-GSOutput-vf4-u1-u1-vf3-vf3-vf3-vf31;u1;u1;) 364(param) 366(param) 367(param) 369(param)
+             372:46(GSOutput) Load 366(param)
+                              Store 363(outStream) 372
                               Return
                               FunctionEnd
-                              Line 1 56 1
-67(@main(struct-VSOutput-vf4-vf3-vf31[3];struct-GSOutput-vf4-u1-u1-vf3-vf3-vf3-vf31;u1;u1;):           4 Function None 61
-       63(input):     42(ptr) FunctionParameter
-   64(outStream):     59(ptr) FunctionParameter
-65(InvocationID):     60(ptr) FunctionParameter
- 66(PrimitiveID):     60(ptr) FunctionParameter
-              70:             Label
-           94(i):     93(ptr) Variable Function
-     117(output):     59(ptr) Variable Function
-        189(pos):    188(ptr) Variable Function
-   198(worldPos):    188(ptr) Variable Function
-       209(lPos):    129(ptr) Variable Function
-              71:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 69
-              72:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 16 16 16 16
-              75:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 73 63(input) 76
-              80:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 77 64(outStream) 76
-              83:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 81 65(InvocationID) 76
-              85:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 84 66(PrimitiveID) 76
-              86:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 69 67(@main(struct-VSOutput-vf4-vf3-vf31[3];struct-GSOutput-vf4-u1-u1-vf3-vf3-vf3-vf31;u1;u1;)
-              87:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 69
-              88:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 89 89 16 16
-              97:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 95 94(i) 76
-                              Store 94(i) 98
-                              Branch 99
-              99:             Label
-             103:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 69
-             104:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 89 89 16 16
-                              LoopMerge 101 102 None
-                              Branch 105
-             105:             Label
-             106:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 69
-             107:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 89 89 16 16
-             108:     90(int) Load 94(i)
-             113:   110(bool) SLessThan 108 109
-                              BranchConditional 113 100 101
-             100:               Label
-             114:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 69
-             115:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 116 116 16 16
-             120:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 118 117(output) 76
-                                Store 117(output) 124
-             125:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 126 126 16 16
-             127:     90(int)   Load 94(i)
-             130:    129(ptr)   AccessChain 63(input) 127 128
-             131:   21(fvec3)   Load 130
-             163:     11(int)   Load 65(InvocationID)
-             165:    164(ptr)   AccessChain 160 98 128 163
-             166:         132   Load 165
-             169:   18(fvec4)   CompositeExtract 166 0
-             170:   21(fvec3)   VectorShuffle 169 169 0 1 2
-             171:   18(fvec4)   CompositeExtract 166 1
-             172:   21(fvec3)   VectorShuffle 171 171 0 1 2
-             173:   18(fvec4)   CompositeExtract 166 2
-             174:   21(fvec3)   VectorShuffle 173 173 0 1 2
-             175:         167   CompositeConstruct 170 172 174
-             176:   21(fvec3)   VectorTimesMatrix 131 175
-             177:    129(ptr)   AccessChain 117(output) 109
-                                Store 177 176
-             178:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 179 179 16 16
-             181:     90(int)   Load 94(i)
-             183:    129(ptr)   AccessChain 63(input) 181 182
-             184:   21(fvec3)   Load 183
-             185:    129(ptr)   AccessChain 117(output) 180
-                                Store 185 184
-             186:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 187 187 16 16
-             192:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 190 189(pos) 76
-             193:     90(int)   Load 94(i)
-             194:    188(ptr)   AccessChain 63(input) 193 98
-             195:   18(fvec4)   Load 194
-                                Store 189(pos) 195
-             196:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 197 197 16 16
-             201:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 199 198(worldPos) 76
-             202:   18(fvec4)   Load 189(pos)
-             203:     11(int)   Load 65(InvocationID)
-             204:    164(ptr)   AccessChain 160 98 128 203
-             205:         132   Load 204
-             206:   18(fvec4)   VectorTimesMatrix 202 205
-                                Store 198(worldPos) 206
-             207:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 208 208 16 16
-             212:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 210 209(lPos) 76
-             214:    213(ptr)   AccessChain 160 98 182
-             215:   18(fvec4)   Load 214
-             216:     11(int)   Load 65(InvocationID)
-             217:    164(ptr)   AccessChain 160 98 128 216
-             218:         132   Load 217
-             219:   18(fvec4)   VectorTimesMatrix 215 218
-             220:   21(fvec3)   VectorShuffle 219 219 0 1 2
-                                Store 209(lPos) 220
-             221:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 222 222 16 16
-             224:   21(fvec3)   Load 209(lPos)
-             225:   18(fvec4)   Load 198(worldPos)
-             226:   21(fvec3)   VectorShuffle 225 225 0 1 2
-             227:   21(fvec3)   FSub 224 226
-             228:    129(ptr)   AccessChain 117(output) 223
-                                Store 228 227
-             229:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 230 230 16 16
-             232:   18(fvec4)   Load 198(worldPos)
-             233:   21(fvec3)   VectorShuffle 232 232 0 1 2
-             234:   21(fvec3)   FNegate 233
-             235:    129(ptr)   AccessChain 117(output) 231
-                                Store 235 234
-             236:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 237 237 16 16
-             238:   18(fvec4)   Load 198(worldPos)
-             239:     11(int)   Load 65(InvocationID)
-             240:    164(ptr)   AccessChain 160 98 98 239
-             241:         132   Load 240
-             242:   18(fvec4)   VectorTimesMatrix 238 241
-             243:    188(ptr)   AccessChain 117(output) 98
-                                Store 243 242
-             244:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 245 245 16 16
-             246:     11(int)   Load 65(InvocationID)
-             247:     60(ptr)   AccessChain 117(output) 128
-                                Store 247 246
-             248:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 249 249 16 16
-             250:     11(int)   Load 66(PrimitiveID)
-             251:     60(ptr)   AccessChain 117(output) 182
+72(@main(struct-VSOutput-vf4-vf3-vf31[3];struct-GSOutput-vf4-u1-u1-vf3-vf3-vf3-vf31;u1;u1;):           4 Function None 66
+       68(input):     43(ptr) FunctionParameter
+   69(outStream):     62(ptr) FunctionParameter
+70(InvocationID):     64(ptr) FunctionParameter
+ 71(PrimitiveID):     64(ptr) FunctionParameter
+              73:             Label
+          101(i):     99(ptr) Variable Function
+     124(output):     62(ptr) Variable Function
+        202(pos):    200(ptr) Variable Function
+   211(worldPos):    200(ptr) Variable Function
+       222(lPos):    139(ptr) Variable Function
+              80:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 75
+              81:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 38 38 16 16
+              78:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 76 68(input) 79
+              85:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 82 69(outStream) 79
+              88:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 86 70(InvocationID) 79
+              90:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 89 71(PrimitiveID) 79
+              91:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 75 72(@main(struct-VSOutput-vf4-vf3-vf31[3];struct-GSOutput-vf4-u1-u1-vf3-vf3-vf3-vf31;u1;u1;)
+             105:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 93
+             106:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 94 94 16 16
+             104:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 102 101(i) 79
+                              Store 101(i) 107
+                              Branch 108
+             108:             Label
+             112:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 93
+             113:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 94 94 16 16
+                              LoopMerge 110 111 None
+                              Branch 114
+             114:             Label
+             116:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 93
+             117:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 94 94 16 16
+             115:     96(int) Load 101(i)
+             122:   119(bool) SLessThan 115 118
+                              BranchConditional 122 109 110
+             109:               Label
+             129:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 123
+             130:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 127 127 16 16
+             128:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 125 124(output) 79
+                                Store 124(output) 134
+             136:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 137 137 16 16
+             135:     96(int)   Load 101(i)
+             141:    139(ptr)   AccessChain 68(input) 135 138
+             142:   21(fvec3)   Load 141
+             176:     11(int)   Load 70(InvocationID)
+             179:    177(ptr)   AccessChain 172 107 138 176
+             180:         143   Load 179
+             183:   18(fvec4)   CompositeExtract 180 0
+             184:   21(fvec3)   VectorShuffle 183 183 0 1 2
+             185:   18(fvec4)   CompositeExtract 180 1
+             186:   21(fvec3)   VectorShuffle 185 185 0 1 2
+             187:   18(fvec4)   CompositeExtract 180 2
+             188:   21(fvec3)   VectorShuffle 187 187 0 1 2
+             189:         181   CompositeConstruct 184 186 188
+             190:   21(fvec3)   VectorTimesMatrix 142 189
+             191:    139(ptr)   AccessChain 124(output) 118
+                                Store 191 190
+             194:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 195 195 16 16
+             193:     96(int)   Load 101(i)
+             197:    139(ptr)   AccessChain 68(input) 193 196
+             198:   21(fvec3)   Load 197
+             199:    139(ptr)   AccessChain 124(output) 192
+                                Store 199 198
+             207:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 205 205 16 16
+             206:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 203 202(pos) 79
+             208:     96(int)   Load 101(i)
+             209:    200(ptr)   AccessChain 68(input) 208 107
+             210:   18(fvec4)   Load 209
+                                Store 202(pos) 210
+             216:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 214 214 16 16
+             215:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 212 211(worldPos) 79
+             217:   18(fvec4)   Load 202(pos)
+             218:     11(int)   Load 70(InvocationID)
+             219:    177(ptr)   AccessChain 172 107 138 218
+             220:         143   Load 219
+             221:   18(fvec4)   VectorTimesMatrix 217 220
+                                Store 211(worldPos) 221
+             227:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 225 225 16 16
+             226:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 223 222(lPos) 79
+             230:    228(ptr)   AccessChain 172 107 196
+             231:   18(fvec4)   Load 230
+             232:     11(int)   Load 70(InvocationID)
+             233:    177(ptr)   AccessChain 172 107 138 232
+             234:         143   Load 233
+             235:   18(fvec4)   VectorTimesMatrix 231 234
+             236:   21(fvec3)   VectorShuffle 235 235 0 1 2
+                                Store 222(lPos) 236
+             239:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 240 240 16 16
+             238:   21(fvec3)   Load 222(lPos)
+             241:   18(fvec4)   Load 211(worldPos)
+             242:   21(fvec3)   VectorShuffle 241 241 0 1 2
+             243:   21(fvec3)   FSub 238 242
+             244:    139(ptr)   AccessChain 124(output) 237
+                                Store 244 243
+             247:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 248 248 16 16
+             246:   18(fvec4)   Load 211(worldPos)
+             249:   21(fvec3)   VectorShuffle 246 246 0 1 2
+             250:   21(fvec3)   FNegate 249
+             251:    139(ptr)   AccessChain 124(output) 245
                                 Store 251 250
-             252:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 253 253 16 16
-             258:    188(ptr)   AccessChain 117(output) 98
-             259:   18(fvec4)   Load 258
-                                Store 255(outStream.Pos) 259
-             264:     60(ptr)   AccessChain 117(output) 128
-             265:     11(int)   Load 264
-                                Store 261(outStream.ViewportIndex) 265
-             269:     60(ptr)   AccessChain 117(output) 182
-             270:     11(int)   Load 269
-                                Store 266(outStream.PrimitiveID) 270
-             275:    129(ptr)   AccessChain 117(output) 109
-             276:   21(fvec3)   Load 275
-                                Store 272(outStream.Normal) 276
-             280:    129(ptr)   AccessChain 117(output) 180
-             281:   21(fvec3)   Load 280
-                                Store 277(outStream.Color) 281
-             285:    129(ptr)   AccessChain 117(output) 231
-             286:   21(fvec3)   Load 285
-                                Store 282(outStream.ViewVec) 286
-             290:    129(ptr)   AccessChain 117(output) 223
-             291:   21(fvec3)   Load 290
-                                Store 287(outStream.LightVec) 291
+             253:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 254 254 16 16
+             252:   18(fvec4)   Load 211(worldPos)
+             255:     11(int)   Load 70(InvocationID)
+             256:    177(ptr)   AccessChain 172 107 107 255
+             257:         143   Load 256
+             258:   18(fvec4)   VectorTimesMatrix 252 257
+             259:    200(ptr)   AccessChain 124(output) 107
+                                Store 259 258
+             261:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 262 262 16 16
+             260:     11(int)   Load 70(InvocationID)
+             263:     64(ptr)   AccessChain 124(output) 138
+                                Store 263 260
+             265:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 266 266 16 16
+             264:     11(int)   Load 71(PrimitiveID)
+             267:     64(ptr)   AccessChain 124(output) 196
+                                Store 267 264
+             275:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 273 273 16 16
+             274:    200(ptr)   AccessChain 124(output) 107
+             276:   18(fvec4)   Load 274
+                                Store 270(outStream.Pos) 276
+             282:     64(ptr)   AccessChain 124(output) 138
+             283:     11(int)   Load 282
+                                Store 279(outStream.ViewportIndex) 283
+             287:     64(ptr)   AccessChain 124(output) 196
+             288:     11(int)   Load 287
+                                Store 284(outStream.PrimitiveID) 288
+             294:    139(ptr)   AccessChain 124(output) 118
+             295:   21(fvec3)   Load 294
+                                Store 291(outStream.Normal) 295
+             299:    139(ptr)   AccessChain 124(output) 192
+             300:   21(fvec3)   Load 299
+                                Store 296(outStream.Color) 300
+             304:    139(ptr)   AccessChain 124(output) 245
+             305:   21(fvec3)   Load 304
+                                Store 301(outStream.ViewVec) 305
+             309:    139(ptr)   AccessChain 124(output) 237
+             310:   21(fvec3)   Load 309
+                                Store 306(outStream.LightVec) 310
                                 EmitVertex
-                                Branch 102
-             102:               Label
-             292:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 69
-             293:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 89 89 16 16
-             294:     90(int)   Load 94(i)
-             295:     90(int)   IAdd 294 128
-                                Store 94(i) 295
-                                Branch 99
-             101:             Label
-             296:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 69
-             297:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 298 298 16 16
+                                Branch 111
+             111:               Label
+             312:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 93
+             313:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 94 94 16 16
+             311:     96(int)   Load 101(i)
+             314:     96(int)   IAdd 311 138
+                                Store 101(i) 314
+                                Branch 108
+             110:             Label
+             315:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 92
+             316:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 26 317 317 16 16
                               EndPrimitive
+             318:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 75
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.debuginfo.hlsl.tesc.out b/Test/baseResults/spv.debuginfo.hlsl.tesc.out
index 998eef5..494878c 100644
--- a/Test/baseResults/spv.debuginfo.hlsl.tesc.out
+++ b/Test/baseResults/spv.debuginfo.hlsl.tesc.out
@@ -1,25 +1,25 @@
 spv.debuginfo.hlsl.tesc
-WARNING: 0:158: '' : attribute does not apply to entry point 
+WARNING: spv.debuginfo.hlsl.tesc:158: '' : attribute does not apply to entry point 
 
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 688
+// Id's are bound by 724
 
                               Capability Tessellation
                               Extension  "SPV_KHR_non_semantic_info"
-               2:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
                3:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint TessellationControl 6  "main" 580 587 594 628 637 644 651 666 681
+                              EntryPoint TessellationControl 6  "main" 616 623 630 664 673 680 687 702 717
                               ExecutionMode 6 OutputVertices 4
                               ExecutionMode 6 Quads
                               ExecutionMode 6 SpacingEqual
                               ExecutionMode 6 VertexOrderCw
-               1:             String  ""
+               2:             String  "spv.debuginfo.hlsl.tesc"
                9:             String  "float"
               12:             String  "uint"
-              27:             String  "screenSpaceTessFactor"
-              30:             String  "// OpModuleProcessed auto-map-locations
+              30:             String  "screenSpaceTessFactor"
+              33:             String  "// OpModuleProcessed auto-map-locations
 // OpModuleProcessed auto-map-bindings
 // OpModuleProcessed entry-point main
 // OpModuleProcessed client vulkan100
@@ -27,152 +27,317 @@
 // OpModuleProcessed keep-uncalled
 // OpModuleProcessed hlsl-offsets
 #line 1
+/*
+The MIT License (MIT)
+
+Copyright (c) 2022 Google LLC
+Copyright (c) 2022 Sascha Willems
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+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 Software.
+
+THE SOFTWARE IS 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 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+*/
+
+struct UBO
+{
+	float4x4 projection;
+	float4x4 modelview;
+	float4 lightPos;
+	float4 frustumPlanes[6];
+	float displacementFactor;
+	float tessellationFactor;
+	float2 viewportDim;
+	float tessellatedEdgeSize;
+};
+cbuffer ubo : register(b0) { UBO ubo; };
+
+Texture2D textureHeight : register(t1);
+SamplerState samplerHeight : register(s1);
+
+struct VSOutput
+{
+	float4 Pos : SV_POSITION;
+[[vk::location(0)]] float3 Normal : NORMAL0;
+[[vk::location(1)]] float2 UV : TEXCOORD0;
+};
+
+struct HSOutput
+{
+[[vk::location(2)]]	float4 Pos : SV_POSITION;
+[[vk::location(0)]] float3 Normal : NORMAL0;
+[[vk::location(1)]] float2 UV : TEXCOORD0;
+};
+
+struct ConstantsHSOutput
+{
+    float TessLevelOuter[4] : SV_TessFactor;
+    float TessLevelInner[2] : SV_InsideTessFactor;
+};
+
+// Calculate the tessellation factor based on screen space
+// dimensions of the edge
+float screenSpaceTessFactor(float4 p0, float4 p1)
+{
+	// Calculate edge mid point
+	float4 midPoint = 0.5 * (p0 + p1);
+	// Sphere radius as distance between the control points
+	float radius = distance(p0, p1) / 2.0;
+
+	// View space
+	float4 v0 = mul(ubo.modelview, midPoint);
+
+	// Project into clip space
+	float4 clip0 = mul(ubo.projection, (v0 - float4(radius, float3(0.0, 0.0, 0.0))));
+	float4 clip1 = mul(ubo.projection, (v0 + float4(radius, float3(0.0, 0.0, 0.0))));
+
+	// Get normalized device coordinates
+	clip0 /= clip0.w;
+	clip1 /= clip1.w;
+
+	// Convert to viewport coordinates
+	clip0.xy *= ubo.viewportDim;
+	clip1.xy *= ubo.viewportDim;
+
+	// Return the tessellation factor based on the screen size
+	// given by the distance of the two edge control points in screen space
+	// and a reference (min.) tessellation size for the edge set by the application
+	return clamp(distance(clip0, clip1) / ubo.tessellatedEdgeSize * ubo.tessellationFactor, 1.0, 64.0);
+}
+
+// Checks the current's patch visibility against the frustum using a sphere check
+// Sphere radius is given by the patch size
+bool frustumCheck(float4 Pos, float2 inUV)
+{
+	// Fixed radius (increase if patch size is increased in example)
+	const float radius = 8.0f;
+	float4 pos = Pos;
+	pos.y -= textureHeight.SampleLevel(samplerHeight, inUV, 0.0).r * ubo.displacementFactor;
+
+	// Check sphere against frustum planes
+	for (int i = 0; i < 6; i++) {
+		if (dot(pos, ubo.frustumPlanes[i]) + radius < 0.0)
+		{
+			return false;
+		}
+	}
+	return true;
+}
+
+ConstantsHSOutput ConstantsHS(InputPatch<VSOutput, 4> patch)
+{
+    ConstantsHSOutput output = (ConstantsHSOutput)0;
+
+	if (!frustumCheck(patch[0].Pos, patch[0].UV))
+	{
+		output.TessLevelInner[0] = 0.0;
+		output.TessLevelInner[1] = 0.0;
+		output.TessLevelOuter[0] = 0.0;
+		output.TessLevelOuter[1] = 0.0;
+		output.TessLevelOuter[2] = 0.0;
+		output.TessLevelOuter[3] = 0.0;
+	}
+	else
+	{
+		if (ubo.tessellationFactor > 0.0)
+		{
+			output.TessLevelOuter[0] = screenSpaceTessFactor(patch[3].Pos, patch[0].Pos);
+			output.TessLevelOuter[1] = screenSpaceTessFactor(patch[0].Pos, patch[1].Pos);
+			output.TessLevelOuter[2] = screenSpaceTessFactor(patch[1].Pos, patch[2].Pos);
+			output.TessLevelOuter[3] = screenSpaceTessFactor(patch[2].Pos, patch[3].Pos);
+			output.TessLevelInner[0] = lerp(output.TessLevelOuter[0], output.TessLevelOuter[3], 0.5);
+			output.TessLevelInner[1] = lerp(output.TessLevelOuter[2], output.TessLevelOuter[1], 0.5);
+		}
+		else
+		{
+			// Tessellation factor can be set to zero by example
+			// to demonstrate a simple passthrough
+			output.TessLevelInner[0] = 1.0;
+			output.TessLevelInner[1] = 1.0;
+			output.TessLevelOuter[0] = 1.0;
+			output.TessLevelOuter[1] = 1.0;
+			output.TessLevelOuter[2] = 1.0;
+			output.TessLevelOuter[3] = 1.0;
+		}
+	}
+
+    return output;
+}
+
+[domain("quad")]
+[partitioning("integer")]
+[outputtopology("triangle_cw")]
+[outputcontrolpoints(4)]
+[patchconstantfunc("ConstantsHS")]
+[maxtessfactor(20.0f)]
+HSOutput main(InputPatch<VSOutput, 4> patch, uint InvocationID : SV_OutputControlPointID)
+{
+	HSOutput output = (HSOutput)0;
+	output.Pos = patch[InvocationID].Pos;
+	output.Normal = patch[InvocationID].Normal;
+	output.UV = patch[InvocationID].UV;
+	return output;
+}
 "
-              38:             String  "p0"
-              42:             String  "p1"
-              49:             String  "bool"
-              56:             String  "frustumCheck"
-              62:             String  "Pos"
-              65:             String  "inUV"
-              74:             String  "Normal"
-              78:             String  "UV"
-              82:             String  "VSOutput"
-              92:             String  "TessLevelOuter"
-              96:             String  "TessLevelInner"
-              99:             String  "ConstantsHSOutput"
-             104:             String  "ConstantsHS"
-             110:             String  "patch"
-             121:             String  "HSOutput"
-             127:             String  "@main"
-             135:             String  "InvocationID"
-             143:             String  "midPoint"
-             155:             String  "radius"
-             166:             String  "v0"
-             176:             String  "modelview"
-             181:             String  "lightPos"
-             185:             String  "frustumPlanes"
-             188:             String  "tessellatedEdgeSize"
-             192:             String  "viewportDim"
-             196:             String  "UBO"
-             199:             String  "ubo"
-             207:             String  "int"
-             219:             String  "clip0"
-             237:             String  "clip1"
-             312:             String  "pos"
-             319:             String  "type.2d.image"
-             320:             String  "@type.2d.image"
-             325:             String  "textureHeight"
-             329:             String  "type.sampler"
-             330:             String  "@type.sampler"
-             334:             String  "samplerHeight"
-             338:             String  "type.sampled.image"
-             339:             String  "@type.sampled.image"
-             357:             String  "i"
-             410:             String  "output"
+              39:             String  "p0"
+              45:             String  "p1"
+              53:             String  "bool"
+              61:             String  "frustumCheck"
+              65:             String  "Pos"
+              70:             String  "inUV"
+              79:             String  "Normal"
+              83:             String  "UV"
+              87:             String  "VSOutput"
+              99:             String  "TessLevelOuter"
+             103:             String  "TessLevelInner"
+             106:             String  "ConstantsHSOutput"
+             112:             String  "ConstantsHS"
+             115:             String  "patch"
+             129:             String  "HSOutput"
+             137:             String  "@main"
+             144:             String  "InvocationID"
+             150:             String  "midPoint"
+             164:             String  "radius"
+             175:             String  "v0"
+             187:             String  "modelview"
+             192:             String  "lightPos"
+             196:             String  "frustumPlanes"
+             199:             String  "tessellatedEdgeSize"
+             203:             String  "viewportDim"
+             207:             String  "UBO"
+             210:             String  "ubo"
+             217:             String  ""
+             220:             String  "int"
+             231:             String  "clip0"
+             249:             String  "clip1"
+             328:             String  "pos"
+             336:             String  "type.2d.image"
+             338:             String  "@type.2d.image"
+             344:             String  "textureHeight"
+             349:             String  "type.sampler"
+             350:             String  "@type.sampler"
+             355:             String  "samplerHeight"
+             359:             String  "type.sampled.image"
+             360:             String  "@type.sampled.image"
+             380:             String  "i"
+             435:             String  "output"
                               Name 6  "main"
-                              Name 26  "screenSpaceTessFactor(vf4;vf4;"
-                              Name 24  "p0"
-                              Name 25  "p1"
-                              Name 55  "frustumCheck(vf4;vf2;"
-                              Name 53  "Pos"
-                              Name 54  "inUV"
-                              Name 69  "VSOutput"
-                              MemberName 69(VSOutput) 0  "Pos"
-                              MemberName 69(VSOutput) 1  "Normal"
-                              MemberName 69(VSOutput) 2  "UV"
-                              Name 90  "ConstantsHSOutput"
-                              MemberName 90(ConstantsHSOutput) 0  "TessLevelOuter"
-                              MemberName 90(ConstantsHSOutput) 1  "TessLevelInner"
-                              Name 103  "ConstantsHS(struct-VSOutput-vf4-vf3-vf21[4];"
-                              Name 102  "patch"
-                              Name 113  "HSOutput"
-                              MemberName 113(HSOutput) 0  "Pos"
-                              MemberName 113(HSOutput) 1  "Normal"
-                              MemberName 113(HSOutput) 2  "UV"
-                              Name 126  "@main(struct-VSOutput-vf4-vf3-vf21[4];u1;"
-                              Name 124  "patch"
-                              Name 125  "InvocationID"
-                              Name 141  "midPoint"
-                              Name 153  "radius"
-                              Name 164  "v0"
-                              Name 174  "UBO"
-                              MemberName 174(UBO) 0  "projection"
-                              MemberName 174(UBO) 1  "modelview"
-                              MemberName 174(UBO) 2  "lightPos"
-                              MemberName 174(UBO) 3  "frustumPlanes"
-                              MemberName 174(UBO) 4  "displacementFactor"
-                              MemberName 174(UBO) 5  "tessellationFactor"
-                              MemberName 174(UBO) 6  "viewportDim"
-                              MemberName 174(UBO) 7  "tessellatedEdgeSize"
-                              Name 197  "ubo"
-                              MemberName 197(ubo) 0  "ubo"
-                              Name 203  ""
-                              Name 217  "clip0"
-                              Name 235  "clip1"
-                              Name 310  "pos"
-                              Name 323  "textureHeight"
-                              Name 332  "samplerHeight"
-                              Name 355  "i"
-                              Name 408  "output"
-                              Name 418  "param"
-                              Name 421  "param"
-                              Name 462  "param"
-                              Name 465  "param"
-                              Name 472  "param"
-                              Name 475  "param"
-                              Name 482  "param"
-                              Name 485  "param"
-                              Name 492  "param"
-                              Name 495  "param"
-                              Name 547  "output"
-                              Name 577  "patch"
-                              Name 580  "patch.Pos"
-                              Name 587  "patch.Normal"
-                              Name 594  "patch.UV"
-                              Name 626  "InvocationID"
-                              Name 628  "InvocationID"
-                              Name 630  "flattenTemp"
-                              Name 631  "param"
-                              Name 633  "param"
-                              Name 637  "@entryPointOutput.Pos"
-                              Name 644  "@entryPointOutput.Normal"
-                              Name 651  "@entryPointOutput.UV"
-                              Name 661  "@patchConstantResult"
-                              Name 662  "param"
-                              Name 666  "@patchConstantOutput.TessLevelOuter"
-                              Name 681  "@patchConstantOutput.TessLevelInner"
-                              Decorate 172 ArrayStride 16
-                              MemberDecorate 174(UBO) 0 RowMajor
-                              MemberDecorate 174(UBO) 0 Offset 0
-                              MemberDecorate 174(UBO) 0 MatrixStride 16
-                              MemberDecorate 174(UBO) 1 RowMajor
-                              MemberDecorate 174(UBO) 1 Offset 64
-                              MemberDecorate 174(UBO) 1 MatrixStride 16
-                              MemberDecorate 174(UBO) 2 Offset 128
-                              MemberDecorate 174(UBO) 3 Offset 144
-                              MemberDecorate 174(UBO) 4 Offset 240
-                              MemberDecorate 174(UBO) 5 Offset 244
-                              MemberDecorate 174(UBO) 6 Offset 248
-                              MemberDecorate 174(UBO) 7 Offset 256
-                              MemberDecorate 197(ubo) 0 Offset 0
-                              Decorate 197(ubo) Block
-                              Decorate 203 DescriptorSet 0
-                              Decorate 203 Binding 0
-                              Decorate 323(textureHeight) DescriptorSet 0
-                              Decorate 323(textureHeight) Binding 1
-                              Decorate 332(samplerHeight) DescriptorSet 0
-                              Decorate 332(samplerHeight) Binding 1
-                              Decorate 580(patch.Pos) BuiltIn Position
-                              Decorate 587(patch.Normal) Location 0
-                              Decorate 594(patch.UV) Location 1
-                              Decorate 628(InvocationID) BuiltIn InvocationId
-                              Decorate 637(@entryPointOutput.Pos) BuiltIn Position
-                              Decorate 644(@entryPointOutput.Normal) Location 0
-                              Decorate 651(@entryPointOutput.UV) Location 1
-                              Decorate 666(@patchConstantOutput.TessLevelOuter) Patch
-                              Decorate 666(@patchConstantOutput.TessLevelOuter) BuiltIn TessLevelOuter
-                              Decorate 681(@patchConstantOutput.TessLevelInner) Patch
-                              Decorate 681(@patchConstantOutput.TessLevelInner) BuiltIn TessLevelInner
+                              Name 28  "screenSpaceTessFactor(vf4;vf4;"
+                              Name 26  "p0"
+                              Name 27  "p1"
+                              Name 59  "frustumCheck(vf4;vf2;"
+                              Name 57  "Pos"
+                              Name 58  "inUV"
+                              Name 74  "VSOutput"
+                              MemberName 74(VSOutput) 0  "Pos"
+                              MemberName 74(VSOutput) 1  "Normal"
+                              MemberName 74(VSOutput) 2  "UV"
+                              Name 97  "ConstantsHSOutput"
+                              MemberName 97(ConstantsHSOutput) 0  "TessLevelOuter"
+                              MemberName 97(ConstantsHSOutput) 1  "TessLevelInner"
+                              Name 110  "ConstantsHS(struct-VSOutput-vf4-vf3-vf21[4];"
+                              Name 109  "patch"
+                              Name 121  "HSOutput"
+                              MemberName 121(HSOutput) 0  "Pos"
+                              MemberName 121(HSOutput) 1  "Normal"
+                              MemberName 121(HSOutput) 2  "UV"
+                              Name 135  "@main(struct-VSOutput-vf4-vf3-vf21[4];u1;"
+                              Name 133  "patch"
+                              Name 134  "InvocationID"
+                              Name 148  "midPoint"
+                              Name 162  "radius"
+                              Name 173  "v0"
+                              Name 185  "UBO"
+                              MemberName 185(UBO) 0  "projection"
+                              MemberName 185(UBO) 1  "modelview"
+                              MemberName 185(UBO) 2  "lightPos"
+                              MemberName 185(UBO) 3  "frustumPlanes"
+                              MemberName 185(UBO) 4  "displacementFactor"
+                              MemberName 185(UBO) 5  "tessellationFactor"
+                              MemberName 185(UBO) 6  "viewportDim"
+                              MemberName 185(UBO) 7  "tessellatedEdgeSize"
+                              Name 208  "ubo"
+                              MemberName 208(ubo) 0  "ubo"
+                              Name 215  ""
+                              Name 229  "clip0"
+                              Name 247  "clip1"
+                              Name 326  "pos"
+                              Name 342  "textureHeight"
+                              Name 353  "samplerHeight"
+                              Name 378  "i"
+                              Name 433  "output"
+                              Name 444  "param"
+                              Name 449  "param"
+                              Name 487  "param"
+                              Name 493  "param"
+                              Name 498  "param"
+                              Name 503  "param"
+                              Name 508  "param"
+                              Name 513  "param"
+                              Name 518  "param"
+                              Name 523  "param"
+                              Name 577  "output"
+                              Name 613  "patch"
+                              Name 616  "patch.Pos"
+                              Name 623  "patch.Normal"
+                              Name 630  "patch.UV"
+                              Name 662  "InvocationID"
+                              Name 664  "InvocationID"
+                              Name 666  "flattenTemp"
+                              Name 667  "param"
+                              Name 669  "param"
+                              Name 673  "@entryPointOutput.Pos"
+                              Name 680  "@entryPointOutput.Normal"
+                              Name 687  "@entryPointOutput.UV"
+                              Name 697  "@patchConstantResult"
+                              Name 698  "param"
+                              Name 702  "@patchConstantOutput.TessLevelOuter"
+                              Name 717  "@patchConstantOutput.TessLevelInner"
+                              Decorate 183 ArrayStride 16
+                              MemberDecorate 185(UBO) 0 RowMajor
+                              MemberDecorate 185(UBO) 0 MatrixStride 16
+                              MemberDecorate 185(UBO) 0 Offset 0
+                              MemberDecorate 185(UBO) 1 RowMajor
+                              MemberDecorate 185(UBO) 1 MatrixStride 16
+                              MemberDecorate 185(UBO) 1 Offset 64
+                              MemberDecorate 185(UBO) 2 Offset 128
+                              MemberDecorate 185(UBO) 3 Offset 144
+                              MemberDecorate 185(UBO) 4 Offset 240
+                              MemberDecorate 185(UBO) 5 Offset 244
+                              MemberDecorate 185(UBO) 6 Offset 248
+                              MemberDecorate 185(UBO) 7 Offset 256
+                              Decorate 208(ubo) Block
+                              MemberDecorate 208(ubo) 0 Offset 0
+                              Decorate 215 Binding 0
+                              Decorate 215 DescriptorSet 0
+                              Decorate 342(textureHeight) Binding 1
+                              Decorate 342(textureHeight) DescriptorSet 0
+                              Decorate 353(samplerHeight) Binding 1
+                              Decorate 353(samplerHeight) DescriptorSet 0
+                              Decorate 616(patch.Pos) BuiltIn Position
+                              Decorate 623(patch.Normal) Location 0
+                              Decorate 630(patch.UV) Location 1
+                              Decorate 664(InvocationID) BuiltIn InvocationId
+                              Decorate 673(@entryPointOutput.Pos) BuiltIn Position
+                              Decorate 680(@entryPointOutput.Normal) Location 0
+                              Decorate 687(@entryPointOutput.UV) Location 1
+                              Decorate 702(@patchConstantOutput.TessLevelOuter) BuiltIn TessLevelOuter
+                              Decorate 702(@patchConstantOutput.TessLevelOuter) Patch
+                              Decorate 717(@patchConstantOutput.TessLevelInner) BuiltIn TessLevelInner
+                              Decorate 717(@patchConstantOutput.TessLevelInner) Patch
                4:             TypeVoid
                5:             TypeFunction 4
                8:             TypeFloat 32
@@ -180,738 +345,759 @@
               14:     11(int) Constant 32
               15:     11(int) Constant 6
               16:     11(int) Constant 0
-              13:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 12 14 15 16
+              13:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 12 14 15 16
               17:     11(int) Constant 3
-              10:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 9 14 17 16
+              10:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 9 14 17 16
               18:             TypeVector 8(float) 4
               19:     11(int) Constant 4
-              20:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 19
+              20:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 19
               21:             TypePointer Function 18(fvec4)
-              22:             TypeFunction 8(float) 21(ptr) 21(ptr)
-              23:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 10 20 20
-              29:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 1 30
-              32:     11(int) Constant 1
-              33:     11(int) Constant 5
-              31:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 32 19 29 33
-              28:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 27 23 29 16 16 31 27 17 16
-              37:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 38 20 29 16 16 28 19 32
-              40:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
-              43:     11(int) Constant 2
-              41:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 42 20 29 16 16 28 19 43
-              45:             TypeVector 8(float) 2
-              46:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 43
-              47:             TypePointer Function 45(fvec2)
-              48:             TypeBool
-              50:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 49 14 43 16
-              51:             TypeFunction 48(bool) 21(ptr) 47(ptr)
-              52:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 50 20 46
-              57:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 56 52 29 16 16 31 56 17 16
-              61:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 62 20 29 16 16 57 19 32
-              64:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 65 46 29 16 16 57 19 43
-              67:             TypeVector 8(float) 3
-              68:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 17
-    69(VSOutput):             TypeStruct 18(fvec4) 67(fvec3) 45(fvec2)
-              71:     11(int) Constant 44
-              72:     11(int) Constant 13
-              70:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 62 20 29 71 72 16 16 17
-              75:     11(int) Constant 45
-              76:     11(int) Constant 35
-              73:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 74 68 29 75 76 16 16 17
-              79:     11(int) Constant 46
-              80:     11(int) Constant 31
-              77:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 78 46 29 79 80 16 16 17
-              81:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 82 32 29 16 16 31 82 16 17 70 73 77
-              83:             TypeArray 69(VSOutput) 19
-              84:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 81 19
-              85:             TypePointer Function 83
-              86:             TypeArray 8(float) 19
-              87:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 10 19
-              88:             TypeArray 8(float) 43
-              89:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 10 43
-90(ConstantsHSOutput):             TypeStruct 86 88
-              93:     11(int) Constant 58
-              94:     11(int) Constant 25
-              91:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 92 87 29 93 94 16 16 17
-              97:     11(int) Constant 59
-              95:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 96 89 29 97 94 16 16 17
-              98:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 99 32 29 16 16 31 99 16 17 91 95
-             100:             TypeFunction 90(ConstantsHSOutput) 85(ptr)
-             101:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 98 84
-             105:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 104 101 29 16 16 31 104 17 16
-             109:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 110 84 29 16 16 105 19 32
-             112:             TypePointer Function 11(int)
-   113(HSOutput):             TypeStruct 18(fvec4) 67(fvec3) 45(fvec2)
-             115:     11(int) Constant 51
-             114:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 62 20 29 115 14 16 16 17
-             117:     11(int) Constant 52
-             116:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 74 68 29 117 76 16 16 17
-             119:     11(int) Constant 53
-             118:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 78 46 29 119 80 16 16 17
-             120:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 121 32 29 16 16 31 121 16 17 114 116 118
-             122:             TypeFunction 113(HSOutput) 85(ptr) 112(ptr)
-             123:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 120 84 13
-             128:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 127 123 29 16 16 31 127 17 16
-             132:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 110 84 29 16 16 128 19 32
-             134:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 135 13 29 16 16 128 19 43
-             140:     11(int) Constant 67
-             142:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 143 20 29 140 16 28 19
-             145:    8(float) Constant 1056964608
-             151:     11(int) Constant 69
-             152:             TypePointer Function 8(float)
-             154:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 155 10 29 151 16 28 19
-             160:    8(float) Constant 1073741824
-             163:     11(int) Constant 72
-             165:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 166 20 29 163 16 28 19
-             169:             TypeMatrix 18(fvec4) 4
-             171:    48(bool) ConstantTrue
-             170:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 20 19 171
-             172:             TypeArray 18(fvec4) 15
-             173:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 20 15
-        174(UBO):             TypeStruct 169 169 18(fvec4) 172 8(float) 8(float) 45(fvec2) 8(float)
-             177:     11(int) Constant 29
-             178:     11(int) Constant 20
-             175:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 176 170 29 177 178 16 16 17
-             179:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 176 170 29 177 178 16 16 17
-             182:     11(int) Constant 30
-             183:     11(int) Constant 17
-             180:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 181 20 29 182 183 16 16 17
-             186:     11(int) Constant 22
-             184:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 185 173 29 80 186 16 16 17
-             189:     11(int) Constant 27
-             187:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 188 10 29 76 189 16 16 17
-             190:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 188 10 29 76 189 16 16 17
-             193:     11(int) Constant 34
-             191:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 192 46 29 193 178 16 16 17
-             194:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 188 10 29 76 189 16 16 17
-             195:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 196 32 29 163 16 31 196 16 17 175 179 180 184 187 190 191 194
-        197(ubo):             TypeStruct 174(UBO)
-             200:     11(int) Constant 37
-             198:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 199 195 29 200 200 16 16 17
-             201:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 199 32 29 163 16 31 199 16 17 198
-             202:             TypePointer Uniform 197(ubo)
-             203:    202(ptr) Variable Uniform
-             205:     11(int) Constant 8
-             204:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 1 201 29 163 16 31 1 203 205
-             206:             TypeInt 32 1
-             208:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 207 14 19 16
-             209:    206(int) Constant 0
-             210:    206(int) Constant 1
-             211:             TypePointer Uniform 169
-             216:     11(int) Constant 75
-             218:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 219 20 29 216 16 28 19
-             223:    8(float) Constant 0
-             224:   67(fvec3) ConstantComposite 223 223 223
-             234:     11(int) Constant 76
-             236:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 237 20 29 234 16 28 19
-             250:     11(int) Constant 79
-             257:     11(int) Constant 80
-             264:     11(int) Constant 83
-             265:    206(int) Constant 6
-             266:             TypePointer Uniform 45(fvec2)
-             277:     11(int) Constant 84
-             288:     11(int) Constant 89
-             292:    206(int) Constant 7
-             293:             TypePointer Uniform 8(float)
-             297:    206(int) Constant 5
-             301:    8(float) Constant 1065353216
-             302:    8(float) Constant 1115684864
-             309:     11(int) Constant 98
-             311:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 312 20 29 309 16 57 19
-             316:     11(int) Constant 99
-             317:             TypeImage 8(float) 2D sampled format:Unknown
-             321:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 0(DebugInfoNone)
-             318:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 319 16 29 316 16 31 320 321 17
-             322:             TypePointer UniformConstant 317
-323(textureHeight):    322(ptr) Variable UniformConstant
-             324:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 325 318 29 316 16 31 325 323(textureHeight) 205
-             327:             TypeSampler
-             328:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 329 32 29 316 16 31 330 321 17
-             331:             TypePointer UniformConstant 327
-332(samplerHeight):    331(ptr) Variable UniformConstant
-             333:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 334 328 29 316 16 31 334 332(samplerHeight) 205
-             336:             TypeSampledImage 317
-             337:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 338 16 29 316 16 31 339 321 17
-             344:    206(int) Constant 4
-             353:     11(int) Constant 102
-             354:             TypePointer Function 206(int)
-             356:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 357 208 29 353 16 57 19
-             369:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 49 14 43 16
-             373:     11(int) Constant 103
-             375:    206(int) Constant 3
-             377:             TypePointer Uniform 18(fvec4)
-             381:    8(float) Constant 1090519040
-             383:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 49 14 43 16
-             387:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 49 14 43 16
-             388:    48(bool) ConstantFalse
-             391:     11(int) Constant 105
-             397:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 49 14 43 16
-             400:     11(int) Constant 108
-             406:     11(int) Constant 113
-             407:             TypePointer Function 90(ConstantsHSOutput)
-             409:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 410 98 29 406 16 105 19
-             412:          86 ConstantComposite 223 223 223 223
-             413:          88 ConstantComposite 223 223
-             414:90(ConstantsHSOutput) ConstantComposite 412 413
-             416:     11(int) Constant 115
-             417:    206(int) Constant 2
-             425:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 49 14 43 16
-             426:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 49 14 43 16
-             432:     11(int) Constant 117
-             435:     11(int) Constant 118
-             438:     11(int) Constant 119
-             441:     11(int) Constant 120
-             444:     11(int) Constant 121
-             447:     11(int) Constant 122
-             452:     11(int) Constant 126
-             455:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 49 14 43 16
-             461:     11(int) Constant 128
-             471:     11(int) Constant 129
-             481:     11(int) Constant 130
-             491:     11(int) Constant 131
-             501:     11(int) Constant 132
-             509:     11(int) Constant 133
-             519:     11(int) Constant 139
-             522:     11(int) Constant 140
-             525:     11(int) Constant 141
-             528:     11(int) Constant 142
-             531:     11(int) Constant 143
-             534:     11(int) Constant 144
-             538:     11(int) Constant 148
-             545:     11(int) Constant 159
-             546:             TypePointer Function 113(HSOutput)
-             548:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 410 120 29 545 16 128 19
-             550:   18(fvec4) ConstantComposite 223 223 223 223
-             551:   45(fvec2) ConstantComposite 223 223
-             552:113(HSOutput) ConstantComposite 550 224 551
-             554:     11(int) Constant 160
-             560:     11(int) Constant 161
-             562:             TypePointer Function 67(fvec3)
-             567:     11(int) Constant 162
-             573:     11(int) Constant 163
-             578:             TypeArray 18(fvec4) 19
-             579:             TypePointer Input 578
-  580(patch.Pos):    579(ptr) Variable Input
-             581:             TypePointer Input 18(fvec4)
-             585:             TypeArray 67(fvec3) 19
-             586:             TypePointer Input 585
-587(patch.Normal):    586(ptr) Variable Input
-             588:             TypePointer Input 67(fvec3)
-             592:             TypeArray 45(fvec2) 19
-             593:             TypePointer Input 592
-   594(patch.UV):    593(ptr) Variable Input
-             595:             TypePointer Input 45(fvec2)
-             627:             TypePointer Input 11(int)
-628(InvocationID):    627(ptr) Variable Input
-             636:             TypePointer Output 578
-637(@entryPointOutput.Pos):    636(ptr) Variable Output
-             641:             TypePointer Output 18(fvec4)
-             643:             TypePointer Output 585
-644(@entryPointOutput.Normal):    643(ptr) Variable Output
-             648:             TypePointer Output 67(fvec3)
-             650:             TypePointer Output 592
-651(@entryPointOutput.UV):    650(ptr) Variable Output
-             655:             TypePointer Output 45(fvec2)
-             665:             TypePointer Output 86
-666(@patchConstantOutput.TessLevelOuter):    665(ptr) Variable Output
-             669:             TypePointer Output 8(float)
-             680:             TypePointer Output 88
-681(@patchConstantOutput.TessLevelInner):    680(ptr) Variable Output
-                              Line 1 158 1
+              22:     11(int) Constant 7
+              23:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 20 22 16
+              24:             TypeFunction 8(float) 21(ptr) 21(ptr)
+              25:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 10 20 20
+              32:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 2 33
+              34:     11(int) Constant 65
+              36:     11(int) Constant 1
+              37:     11(int) Constant 5
+              35:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 36 19 32 37
+              31:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 30 25 32 34 16 35 30 17 34
+              38:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 39 20 32 34 16 31 19 36
+              41:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
+              46:     11(int) Constant 2
+              44:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 45 20 32 34 16 31 19 46
+              48:             TypeVector 8(float) 2
+              49:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 46
+              50:             TypePointer Function 48(fvec2)
+              51:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 49 22 16
+              52:             TypeBool
+              54:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 53 14 46 16
+              55:             TypeFunction 52(bool) 21(ptr) 50(ptr)
+              56:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 54 20 49
+              63:     11(int) Constant 95
+              62:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 61 56 32 63 16 35 61 17 63
+              64:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 65 20 32 63 16 62 19 36
+              69:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 70 49 32 63 16 62 19 46
+              72:             TypeVector 8(float) 3
+              73:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 17
+    74(VSOutput):             TypeStruct 18(fvec4) 72(fvec3) 48(fvec2)
+              76:     11(int) Constant 44
+              77:     11(int) Constant 13
+              75:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 65 20 32 76 77 16 16 17
+              80:     11(int) Constant 45
+              81:     11(int) Constant 35
+              78:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 79 73 32 80 81 16 16 17
+              84:     11(int) Constant 46
+              85:     11(int) Constant 31
+              82:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 83 49 32 84 85 16 16 17
+              88:     11(int) Constant 112
+              86:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 87 36 32 88 16 35 87 16 17 75 78 82
+              89:             TypeArray 74(VSOutput) 19
+              90:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 86 19
+              91:             TypePointer Function 89
+              92:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 90 22 16
+              93:             TypeArray 8(float) 19
+              94:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 10 19
+              95:             TypeArray 8(float) 46
+              96:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 10 46
+97(ConstantsHSOutput):             TypeStruct 93 95
+             100:     11(int) Constant 58
+             101:     11(int) Constant 25
+              98:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 99 94 32 100 101 16 16 17
+             104:     11(int) Constant 59
+             102:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 103 96 32 104 101 16 16 17
+             105:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 106 36 32 88 16 35 106 16 17 98 102
+             107:             TypeFunction 97(ConstantsHSOutput) 91(ptr)
+             108:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 105 90
+             113:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 112 108 32 88 16 35 112 17 88
+             114:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 115 90 32 88 16 113 19 36
+             119:             TypePointer Function 11(int)
+             120:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 13 22 16
+   121(HSOutput):             TypeStruct 18(fvec4) 72(fvec3) 48(fvec2)
+             123:     11(int) Constant 51
+             122:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 65 20 32 123 14 16 16 17
+             125:     11(int) Constant 52
+             124:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 79 73 32 125 81 16 16 17
+             127:     11(int) Constant 53
+             126:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 83 49 32 127 85 16 16 17
+             130:     11(int) Constant 158
+             128:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 129 36 32 130 16 35 129 16 17 122 124 126
+             131:             TypeFunction 121(HSOutput) 91(ptr) 119(ptr)
+             132:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 128 90 13
+             138:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 137 132 32 130 16 35 137 17 130
+             139:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 115 90 32 130 16 138 19 36
+             143:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 144 13 32 130 16 138 19 46
+             147:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 32 16 16 31
+             151:     11(int) Constant 67
+             149:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 150 20 32 151 16 147 19
+             155:    8(float) Constant 1056964608
+             160:             TypePointer Function 8(float)
+             161:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 10 22 16
+             165:     11(int) Constant 69
+             163:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 164 10 32 165 16 147 19
+             171:    8(float) Constant 1073741824
+             176:     11(int) Constant 72
+             174:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 175 20 32 176 16 147 19
+             180:             TypeMatrix 18(fvec4) 4
+             182:    52(bool) ConstantTrue
+             181:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 20 19 182
+             183:             TypeArray 18(fvec4) 15
+             184:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 20 15
+        185(UBO):             TypeStruct 180 180 18(fvec4) 183 8(float) 8(float) 48(fvec2) 8(float)
+             188:     11(int) Constant 29
+             189:     11(int) Constant 20
+             186:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 187 181 32 188 189 16 16 17
+             190:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 187 181 32 188 189 16 16 17
+             193:     11(int) Constant 30
+             194:     11(int) Constant 17
+             191:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 192 20 32 193 194 16 16 17
+             197:     11(int) Constant 22
+             195:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 196 184 32 85 197 16 16 17
+             200:     11(int) Constant 27
+             198:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 199 10 32 81 200 16 16 17
+             201:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 199 10 32 81 200 16 16 17
+             204:     11(int) Constant 34
+             202:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 203 49 32 204 189 16 16 17
+             205:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 199 10 32 81 200 16 16 17
+             206:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 207 36 32 176 16 35 207 16 17 186 190 191 195 198 201 202 205
+        208(ubo):             TypeStruct 185(UBO)
+             211:     11(int) Constant 37
+             209:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 210 206 32 211 211 16 16 17
+             212:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 210 36 32 176 16 35 210 16 17 209
+             213:             TypePointer Uniform 208(ubo)
+             214:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 212 46 16
+             215:    213(ptr) Variable Uniform
+             218:     11(int) Constant 8
+             216:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 217 212 32 176 16 35 217 215 218
+             219:             TypeInt 32 1
+             221:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 220 14 19 16
+             222:    219(int) Constant 0
+             223:    219(int) Constant 1
+             224:             TypePointer Uniform 180
+             225:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 181 46 16
+             232:     11(int) Constant 75
+             230:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 231 20 32 232 16 147 19
+             237:    8(float) Constant 0
+             238:   72(fvec3) ConstantComposite 237 237 237
+             250:     11(int) Constant 76
+             248:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 249 20 32 250 16 147 19
+             265:     11(int) Constant 79
+             272:     11(int) Constant 80
+             277:    219(int) Constant 6
+             278:             TypePointer Uniform 48(fvec2)
+             279:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 49 46 16
+             282:     11(int) Constant 83
+             293:     11(int) Constant 84
+             304:     11(int) Constant 89
+             307:    219(int) Constant 7
+             308:             TypePointer Uniform 8(float)
+             309:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 10 46 16
+             313:    219(int) Constant 5
+             317:    8(float) Constant 1065353216
+             318:    8(float) Constant 1115684864
+             325:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 32 16 16 62
+             329:     11(int) Constant 98
+             327:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 328 20 32 329 16 325 19
+             334:             TypeImage 8(float) 2D sampled format:Unknown
+             337:     11(int) Constant 99
+             339:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 0(DebugInfoNone)
+             335:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 336 16 32 337 16 35 338 339 17
+             340:             TypePointer UniformConstant 334
+             341:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 335 16 16
+342(textureHeight):    340(ptr) Variable UniformConstant
+             343:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 344 335 32 337 16 35 344 342(textureHeight) 218
+             347:             TypeSampler
+             348:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 349 36 32 337 16 35 350 339 17
+             351:             TypePointer UniformConstant 347
+             352:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 348 16 16
+353(samplerHeight):    351(ptr) Variable UniformConstant
+             354:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 355 348 32 337 16 35 355 353(samplerHeight) 218
+             357:             TypeSampledImage 334
+             358:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 359 16 32 337 16 35 360 339 17
+             365:    219(int) Constant 4
+             374:     11(int) Constant 102
+             375:     11(int) Constant 11
+             373:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 32 374 375 325
+             376:             TypePointer Function 219(int)
+             377:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 221 22 16
+             379:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 380 221 32 374 16 373 19
+             395:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 32 16 16 373
+             399:     11(int) Constant 103
+             400:    219(int) Constant 3
+             402:             TypePointer Uniform 18(fvec4)
+             403:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 20 46 16
+             407:    8(float) Constant 1090519040
+             412:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 32 16 16 395
+             413:    52(bool) ConstantFalse
+             416:     11(int) Constant 105
+             424:     11(int) Constant 108
+             430:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 32 16 16 113
+             431:             TypePointer Function 97(ConstantsHSOutput)
+             432:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 105 22 16
+             436:     11(int) Constant 113
+             434:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 435 105 32 436 16 430 19
+             440:          93 ConstantComposite 237 237 237 237
+             441:          95 ConstantComposite 237 237
+             442:97(ConstantsHSOutput) ConstantComposite 440 441
+             443:    219(int) Constant 2
+             447:     11(int) Constant 115
+             456:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 32 16 16 430
+             460:     11(int) Constant 117
+             463:     11(int) Constant 118
+             466:     11(int) Constant 119
+             469:     11(int) Constant 120
+             472:     11(int) Constant 121
+             475:     11(int) Constant 122
+             477:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 32 16 16 430
+             481:     11(int) Constant 126
+             486:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 32 16 16 477
+             491:     11(int) Constant 128
+             501:     11(int) Constant 129
+             511:     11(int) Constant 130
+             521:     11(int) Constant 131
+             530:     11(int) Constant 132
+             538:     11(int) Constant 133
+             545:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 32 16 16 477
+             549:     11(int) Constant 139
+             552:     11(int) Constant 140
+             555:     11(int) Constant 141
+             558:     11(int) Constant 142
+             561:     11(int) Constant 143
+             564:     11(int) Constant 144
+             568:     11(int) Constant 148
+             574:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 32 16 16 138
+             575:             TypePointer Function 121(HSOutput)
+             576:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 128 22 16
+             579:     11(int) Constant 159
+             578:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 435 128 32 579 16 574 19
+             583:   18(fvec4) ConstantComposite 237 237 237 237
+             584:   48(fvec2) ConstantComposite 237 237
+             585:121(HSOutput) ConstantComposite 583 238 584
+             588:     11(int) Constant 160
+             594:     11(int) Constant 161
+             595:             TypePointer Function 72(fvec3)
+             596:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 73 22 16
+             602:     11(int) Constant 162
+             608:     11(int) Constant 163
+             614:             TypeArray 18(fvec4) 19
+             615:             TypePointer Input 614
+  616(patch.Pos):    615(ptr) Variable Input
+             617:             TypePointer Input 18(fvec4)
+             621:             TypeArray 72(fvec3) 19
+             622:             TypePointer Input 621
+623(patch.Normal):    622(ptr) Variable Input
+             624:             TypePointer Input 72(fvec3)
+             628:             TypeArray 48(fvec2) 19
+             629:             TypePointer Input 628
+   630(patch.UV):    629(ptr) Variable Input
+             631:             TypePointer Input 48(fvec2)
+             663:             TypePointer Input 11(int)
+664(InvocationID):    663(ptr) Variable Input
+             672:             TypePointer Output 614
+673(@entryPointOutput.Pos):    672(ptr) Variable Output
+             677:             TypePointer Output 18(fvec4)
+             679:             TypePointer Output 621
+680(@entryPointOutput.Normal):    679(ptr) Variable Output
+             684:             TypePointer Output 72(fvec3)
+             686:             TypePointer Output 628
+687(@entryPointOutput.UV):    686(ptr) Variable Output
+             691:             TypePointer Output 48(fvec2)
+             701:             TypePointer Output 93
+702(@patchConstantOutput.TessLevelOuter):    701(ptr) Variable Output
+             705:             TypePointer Output 8(float)
+             716:             TypePointer Output 95
+717(@patchConstantOutput.TessLevelInner):    716(ptr) Variable Output
          6(main):           4 Function None 5
                7:             Label
-      577(patch):     85(ptr) Variable Function
-626(InvocationID):    112(ptr) Variable Function
-630(flattenTemp):    546(ptr) Variable Function
-      631(param):     85(ptr) Variable Function
-      633(param):    112(ptr) Variable Function
-661(@patchConstantResult):    407(ptr) Variable Function
-      662(param):     85(ptr) Variable Function
-                              Line 1 158 0
-             582:    581(ptr) AccessChain 580(patch.Pos) 209
-             583:   18(fvec4) Load 582
-             584:     21(ptr) AccessChain 577(patch) 209 209
-                              Store 584 583
-             589:    588(ptr) AccessChain 587(patch.Normal) 209
-             590:   67(fvec3) Load 589
-             591:    562(ptr) AccessChain 577(patch) 209 210
-                              Store 591 590
-             596:    595(ptr) AccessChain 594(patch.UV) 209
-             597:   45(fvec2) Load 596
-             598:     47(ptr) AccessChain 577(patch) 209 417
-                              Store 598 597
-             599:    581(ptr) AccessChain 580(patch.Pos) 210
-             600:   18(fvec4) Load 599
-             601:     21(ptr) AccessChain 577(patch) 210 209
-                              Store 601 600
-             602:    588(ptr) AccessChain 587(patch.Normal) 210
-             603:   67(fvec3) Load 602
-             604:    562(ptr) AccessChain 577(patch) 210 210
-                              Store 604 603
-             605:    595(ptr) AccessChain 594(patch.UV) 210
-             606:   45(fvec2) Load 605
-             607:     47(ptr) AccessChain 577(patch) 210 417
-                              Store 607 606
-             608:    581(ptr) AccessChain 580(patch.Pos) 417
-             609:   18(fvec4) Load 608
-             610:     21(ptr) AccessChain 577(patch) 417 209
-                              Store 610 609
-             611:    588(ptr) AccessChain 587(patch.Normal) 417
-             612:   67(fvec3) Load 611
-             613:    562(ptr) AccessChain 577(patch) 417 210
-                              Store 613 612
-             614:    595(ptr) AccessChain 594(patch.UV) 417
-             615:   45(fvec2) Load 614
-             616:     47(ptr) AccessChain 577(patch) 417 417
-                              Store 616 615
-             617:    581(ptr) AccessChain 580(patch.Pos) 375
-             618:   18(fvec4) Load 617
-             619:     21(ptr) AccessChain 577(patch) 375 209
-                              Store 619 618
-             620:    588(ptr) AccessChain 587(patch.Normal) 375
-             621:   67(fvec3) Load 620
-             622:    562(ptr) AccessChain 577(patch) 375 210
-                              Store 622 621
-             623:    595(ptr) AccessChain 594(patch.UV) 375
-             624:   45(fvec2) Load 623
-             625:     47(ptr) AccessChain 577(patch) 375 417
-                              Store 625 624
-             629:     11(int) Load 628(InvocationID)
-                              Store 626(InvocationID) 629
-             632:          83 Load 577(patch)
-                              Store 631(param) 632
-             634:     11(int) Load 626(InvocationID)
-                              Store 633(param) 634
-             635:113(HSOutput) FunctionCall 126(@main(struct-VSOutput-vf4-vf3-vf21[4];u1;) 631(param) 633(param)
-                              Store 630(flattenTemp) 635
-             638:     11(int) Load 628(InvocationID)
-             639:     21(ptr) AccessChain 630(flattenTemp) 209
-             640:   18(fvec4) Load 639
-             642:    641(ptr) AccessChain 637(@entryPointOutput.Pos) 638
-                              Store 642 640
-             645:     11(int) Load 628(InvocationID)
-             646:    562(ptr) AccessChain 630(flattenTemp) 210
-             647:   67(fvec3) Load 646
-             649:    648(ptr) AccessChain 644(@entryPointOutput.Normal) 645
-                              Store 649 647
-             652:     11(int) Load 628(InvocationID)
-             653:     47(ptr) AccessChain 630(flattenTemp) 417
-             654:   45(fvec2) Load 653
-             656:    655(ptr) AccessChain 651(@entryPointOutput.UV) 652
-                              Store 656 654
-                              ControlBarrier 43 19 16
-             657:     11(int) Load 628(InvocationID)
-             658:    48(bool) IEqual 657 209
-                              SelectionMerge 660 None
-                              BranchConditional 658 659 660
-             659:               Label
-             663:          83   Load 577(patch)
-                                Store 662(param) 663
-             664:90(ConstantsHSOutput)   FunctionCall 103(ConstantsHS(struct-VSOutput-vf4-vf3-vf21[4];) 662(param)
-                                Store 661(@patchConstantResult) 664
-             667:    152(ptr)   AccessChain 661(@patchConstantResult) 209 209
-             668:    8(float)   Load 667
-             670:    669(ptr)   AccessChain 666(@patchConstantOutput.TessLevelOuter) 209
-                                Store 670 668
-             671:    152(ptr)   AccessChain 661(@patchConstantResult) 209 210
-             672:    8(float)   Load 671
-             673:    669(ptr)   AccessChain 666(@patchConstantOutput.TessLevelOuter) 210
-                                Store 673 672
-             674:    152(ptr)   AccessChain 661(@patchConstantResult) 209 417
-             675:    8(float)   Load 674
-             676:    669(ptr)   AccessChain 666(@patchConstantOutput.TessLevelOuter) 417
-                                Store 676 675
-             677:    152(ptr)   AccessChain 661(@patchConstantResult) 209 375
-             678:    8(float)   Load 677
-             679:    669(ptr)   AccessChain 666(@patchConstantOutput.TessLevelOuter) 375
-                                Store 679 678
-             682:    152(ptr)   AccessChain 661(@patchConstantResult) 210 209
-             683:    8(float)   Load 682
-             684:    669(ptr)   AccessChain 681(@patchConstantOutput.TessLevelInner) 209
-                                Store 684 683
-             685:    152(ptr)   AccessChain 661(@patchConstantResult) 210 210
-             686:    8(float)   Load 685
-             687:    669(ptr)   AccessChain 681(@patchConstantOutput.TessLevelInner) 210
-                                Store 687 686
-                                Branch 660
-             660:             Label
+      613(patch):     91(ptr) Variable Function
+662(InvocationID):    119(ptr) Variable Function
+666(flattenTemp):    575(ptr) Variable Function
+      667(param):     91(ptr) Variable Function
+      669(param):    119(ptr) Variable Function
+697(@patchConstantResult):    431(ptr) Variable Function
+      698(param):     91(ptr) Variable Function
+             618:    617(ptr) AccessChain 616(patch.Pos) 222
+             619:   18(fvec4) Load 618
+             620:     21(ptr) AccessChain 613(patch) 222 222
+                              Store 620 619
+             625:    624(ptr) AccessChain 623(patch.Normal) 222
+             626:   72(fvec3) Load 625
+             627:    595(ptr) AccessChain 613(patch) 222 223
+                              Store 627 626
+             632:    631(ptr) AccessChain 630(patch.UV) 222
+             633:   48(fvec2) Load 632
+             634:     50(ptr) AccessChain 613(patch) 222 443
+                              Store 634 633
+             635:    617(ptr) AccessChain 616(patch.Pos) 223
+             636:   18(fvec4) Load 635
+             637:     21(ptr) AccessChain 613(patch) 223 222
+                              Store 637 636
+             638:    624(ptr) AccessChain 623(patch.Normal) 223
+             639:   72(fvec3) Load 638
+             640:    595(ptr) AccessChain 613(patch) 223 223
+                              Store 640 639
+             641:    631(ptr) AccessChain 630(patch.UV) 223
+             642:   48(fvec2) Load 641
+             643:     50(ptr) AccessChain 613(patch) 223 443
+                              Store 643 642
+             644:    617(ptr) AccessChain 616(patch.Pos) 443
+             645:   18(fvec4) Load 644
+             646:     21(ptr) AccessChain 613(patch) 443 222
+                              Store 646 645
+             647:    624(ptr) AccessChain 623(patch.Normal) 443
+             648:   72(fvec3) Load 647
+             649:    595(ptr) AccessChain 613(patch) 443 223
+                              Store 649 648
+             650:    631(ptr) AccessChain 630(patch.UV) 443
+             651:   48(fvec2) Load 650
+             652:     50(ptr) AccessChain 613(patch) 443 443
+                              Store 652 651
+             653:    617(ptr) AccessChain 616(patch.Pos) 400
+             654:   18(fvec4) Load 653
+             655:     21(ptr) AccessChain 613(patch) 400 222
+                              Store 655 654
+             656:    624(ptr) AccessChain 623(patch.Normal) 400
+             657:   72(fvec3) Load 656
+             658:    595(ptr) AccessChain 613(patch) 400 223
+                              Store 658 657
+             659:    631(ptr) AccessChain 630(patch.UV) 400
+             660:   48(fvec2) Load 659
+             661:     50(ptr) AccessChain 613(patch) 400 443
+                              Store 661 660
+             665:     11(int) Load 664(InvocationID)
+                              Store 662(InvocationID) 665
+             668:          89 Load 613(patch)
+                              Store 667(param) 668
+             670:     11(int) Load 662(InvocationID)
+                              Store 669(param) 670
+             671:121(HSOutput) FunctionCall 135(@main(struct-VSOutput-vf4-vf3-vf21[4];u1;) 667(param) 669(param)
+                              Store 666(flattenTemp) 671
+             674:     11(int) Load 664(InvocationID)
+             675:     21(ptr) AccessChain 666(flattenTemp) 222
+             676:   18(fvec4) Load 675
+             678:    677(ptr) AccessChain 673(@entryPointOutput.Pos) 674
+                              Store 678 676
+             681:     11(int) Load 664(InvocationID)
+             682:    595(ptr) AccessChain 666(flattenTemp) 223
+             683:   72(fvec3) Load 682
+             685:    684(ptr) AccessChain 680(@entryPointOutput.Normal) 681
+                              Store 685 683
+             688:     11(int) Load 664(InvocationID)
+             689:     50(ptr) AccessChain 666(flattenTemp) 443
+             690:   48(fvec2) Load 689
+             692:    691(ptr) AccessChain 687(@entryPointOutput.UV) 688
+                              Store 692 690
+                              ControlBarrier 46 19 16
+             693:     11(int) Load 664(InvocationID)
+             694:    52(bool) IEqual 693 222
+                              SelectionMerge 696 None
+                              BranchConditional 694 695 696
+             695:               Label
+             699:          89   Load 613(patch)
+                                Store 698(param) 699
+             700:97(ConstantsHSOutput)   FunctionCall 110(ConstantsHS(struct-VSOutput-vf4-vf3-vf21[4];) 698(param)
+                                Store 697(@patchConstantResult) 700
+             703:    160(ptr)   AccessChain 697(@patchConstantResult) 222 222
+             704:    8(float)   Load 703
+             706:    705(ptr)   AccessChain 702(@patchConstantOutput.TessLevelOuter) 222
+                                Store 706 704
+             707:    160(ptr)   AccessChain 697(@patchConstantResult) 222 223
+             708:    8(float)   Load 707
+             709:    705(ptr)   AccessChain 702(@patchConstantOutput.TessLevelOuter) 223
+                                Store 709 708
+             710:    160(ptr)   AccessChain 697(@patchConstantResult) 222 443
+             711:    8(float)   Load 710
+             712:    705(ptr)   AccessChain 702(@patchConstantOutput.TessLevelOuter) 443
+                                Store 712 711
+             713:    160(ptr)   AccessChain 697(@patchConstantResult) 222 400
+             714:    8(float)   Load 713
+             715:    705(ptr)   AccessChain 702(@patchConstantOutput.TessLevelOuter) 400
+                                Store 715 714
+             718:    160(ptr)   AccessChain 697(@patchConstantResult) 223 222
+             719:    8(float)   Load 718
+             720:    705(ptr)   AccessChain 717(@patchConstantOutput.TessLevelInner) 222
+                                Store 720 719
+             721:    160(ptr)   AccessChain 697(@patchConstantResult) 223 223
+             722:    8(float)   Load 721
+             723:    705(ptr)   AccessChain 717(@patchConstantOutput.TessLevelInner) 223
+                                Store 723 722
+                                Branch 696
+             696:             Label
                               Return
                               FunctionEnd
-                              Line 1 65 1
-26(screenSpaceTessFactor(vf4;vf4;):    8(float) Function None 22
-          24(p0):     21(ptr) FunctionParameter
-          25(p1):     21(ptr) FunctionParameter
-              34:             Label
-   141(midPoint):     21(ptr) Variable Function
-     153(radius):    152(ptr) Variable Function
-         164(v0):     21(ptr) Variable Function
-      217(clip0):     21(ptr) Variable Function
-      235(clip1):     21(ptr) Variable Function
-              35:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 28
-              36:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 16 16 16 16
-              39:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 37 24(p0) 40
-              44:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 41 25(p1) 40
-             137:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 28 26(screenSpaceTessFactor(vf4;vf4;)
-             138:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 28
-             139:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 140 140 16 16
-             144:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 142 141(midPoint) 40
-             146:   18(fvec4) Load 24(p0)
-             147:   18(fvec4) Load 25(p1)
-             148:   18(fvec4) FAdd 146 147
-             149:   18(fvec4) VectorTimesScalar 148 145
-                              Store 141(midPoint) 149
-             150:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 151 151 16 16
-             156:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 154 153(radius) 40
-             157:   18(fvec4) Load 24(p0)
-             158:   18(fvec4) Load 25(p1)
-             159:    8(float) ExtInst 3(GLSL.std.450) 67(Distance) 157 158
-             161:    8(float) FDiv 159 160
-                              Store 153(radius) 161
-             162:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 163 163 16 16
-             167:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 165 164(v0) 40
-             168:   18(fvec4) Load 141(midPoint)
-             212:    211(ptr) AccessChain 203 209 210
-             213:         169 Load 212
-             214:   18(fvec4) VectorTimesMatrix 168 213
-                              Store 164(v0) 214
-             215:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 216 216 16 16
-             220:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 218 217(clip0) 40
-             221:   18(fvec4) Load 164(v0)
-             222:    8(float) Load 153(radius)
-             225:    8(float) CompositeExtract 224 0
-             226:    8(float) CompositeExtract 224 1
-             227:    8(float) CompositeExtract 224 2
-             228:   18(fvec4) CompositeConstruct 222 225 226 227
-             229:   18(fvec4) FSub 221 228
-             230:    211(ptr) AccessChain 203 209 209
-             231:         169 Load 230
-             232:   18(fvec4) VectorTimesMatrix 229 231
-                              Store 217(clip0) 232
-             233:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 234 234 16 16
-             238:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 236 235(clip1) 40
-             239:   18(fvec4) Load 164(v0)
-             240:    8(float) Load 153(radius)
-             241:    8(float) CompositeExtract 224 0
-             242:    8(float) CompositeExtract 224 1
-             243:    8(float) CompositeExtract 224 2
-             244:   18(fvec4) CompositeConstruct 240 241 242 243
-             245:   18(fvec4) FAdd 239 244
-             246:    211(ptr) AccessChain 203 209 209
-             247:         169 Load 246
-             248:   18(fvec4) VectorTimesMatrix 245 247
-                              Store 235(clip1) 248
-             249:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 250 250 16 16
-             251:    152(ptr) AccessChain 217(clip0) 17
-             252:    8(float) Load 251
-             253:   18(fvec4) Load 217(clip0)
-             254:   18(fvec4) CompositeConstruct 252 252 252 252
-             255:   18(fvec4) FDiv 253 254
-                              Store 217(clip0) 255
-             256:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 257 257 16 16
-             258:    152(ptr) AccessChain 235(clip1) 17
-             259:    8(float) Load 258
-             260:   18(fvec4) Load 235(clip1)
-             261:   18(fvec4) CompositeConstruct 259 259 259 259
-             262:   18(fvec4) FDiv 260 261
-                              Store 235(clip1) 262
-             263:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 264 264 16 16
-             267:    266(ptr) AccessChain 203 209 265
-             268:   45(fvec2) Load 267
-             269:   18(fvec4) Load 217(clip0)
-             270:   45(fvec2) VectorShuffle 269 269 0 1
-             271:   45(fvec2) FMul 270 268
-             272:    152(ptr) AccessChain 217(clip0) 16
-             273:    8(float) CompositeExtract 271 0
-                              Store 272 273
-             274:    152(ptr) AccessChain 217(clip0) 32
-             275:    8(float) CompositeExtract 271 1
-                              Store 274 275
-             276:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 277 277 16 16
-             278:    266(ptr) AccessChain 203 209 265
-             279:   45(fvec2) Load 278
-             280:   18(fvec4) Load 235(clip1)
-             281:   45(fvec2) VectorShuffle 280 280 0 1
-             282:   45(fvec2) FMul 281 279
-             283:    152(ptr) AccessChain 235(clip1) 16
-             284:    8(float) CompositeExtract 282 0
-                              Store 283 284
-             285:    152(ptr) AccessChain 235(clip1) 32
-             286:    8(float) CompositeExtract 282 1
-                              Store 285 286
-             287:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 288 288 16 16
-             289:   18(fvec4) Load 217(clip0)
-             290:   18(fvec4) Load 235(clip1)
-             291:    8(float) ExtInst 3(GLSL.std.450) 67(Distance) 289 290
-             294:    293(ptr) AccessChain 203 209 292
-             295:    8(float) Load 294
-             296:    8(float) FDiv 291 295
-             298:    293(ptr) AccessChain 203 209 297
-             299:    8(float) Load 298
-             300:    8(float) FMul 296 299
-             303:    8(float) ExtInst 3(GLSL.std.450) 43(FClamp) 300 301 302
-                              ReturnValue 303
+28(screenSpaceTessFactor(vf4;vf4;):    8(float) Function None 24
+          26(p0):     21(ptr) FunctionParameter
+          27(p1):     21(ptr) FunctionParameter
+              29:             Label
+   148(midPoint):     21(ptr) Variable Function
+     162(radius):    160(ptr) Variable Function
+         173(v0):     21(ptr) Variable Function
+      229(clip0):     21(ptr) Variable Function
+      247(clip1):     21(ptr) Variable Function
+              42:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 31
+              43:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 34 34 16 16
+              40:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 38 26(p0) 41
+              47:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 44 27(p1) 41
+             146:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 31 28(screenSpaceTessFactor(vf4;vf4;)
+             153:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 147
+             154:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 151 151 16 16
+             152:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 149 148(midPoint) 41
+             156:   18(fvec4) Load 26(p0)
+             157:   18(fvec4) Load 27(p1)
+             158:   18(fvec4) FAdd 156 157
+             159:   18(fvec4) VectorTimesScalar 158 155
+                              Store 148(midPoint) 159
+             167:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 165 165 16 16
+             166:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 163 162(radius) 41
+             168:   18(fvec4) Load 26(p0)
+             169:   18(fvec4) Load 27(p1)
+             170:    8(float) ExtInst 3(GLSL.std.450) 67(Distance) 168 169
+             172:    8(float) FDiv 170 171
+                              Store 162(radius) 172
+             178:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 176 176 16 16
+             177:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 174 173(v0) 41
+             179:   18(fvec4) Load 148(midPoint)
+             226:    224(ptr) AccessChain 215 222 223
+             227:         180 Load 226
+             228:   18(fvec4) VectorTimesMatrix 179 227
+                              Store 173(v0) 228
+             234:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 232 232 16 16
+             233:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 230 229(clip0) 41
+             235:   18(fvec4) Load 173(v0)
+             236:    8(float) Load 162(radius)
+             239:    8(float) CompositeExtract 238 0
+             240:    8(float) CompositeExtract 238 1
+             241:    8(float) CompositeExtract 238 2
+             242:   18(fvec4) CompositeConstruct 236 239 240 241
+             243:   18(fvec4) FSub 235 242
+             244:    224(ptr) AccessChain 215 222 222
+             245:         180 Load 244
+             246:   18(fvec4) VectorTimesMatrix 243 245
+                              Store 229(clip0) 246
+             252:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 250 250 16 16
+             251:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 248 247(clip1) 41
+             253:   18(fvec4) Load 173(v0)
+             254:    8(float) Load 162(radius)
+             255:    8(float) CompositeExtract 238 0
+             256:    8(float) CompositeExtract 238 1
+             257:    8(float) CompositeExtract 238 2
+             258:   18(fvec4) CompositeConstruct 254 255 256 257
+             259:   18(fvec4) FAdd 253 258
+             260:    224(ptr) AccessChain 215 222 222
+             261:         180 Load 260
+             262:   18(fvec4) VectorTimesMatrix 259 261
+                              Store 247(clip1) 262
+             264:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 265 265 16 16
+             263:    160(ptr) AccessChain 229(clip0) 17
+             266:    8(float) Load 263
+             267:   18(fvec4) Load 229(clip0)
+             268:   18(fvec4) CompositeConstruct 266 266 266 266
+             269:   18(fvec4) FDiv 267 268
+                              Store 229(clip0) 269
+             271:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 272 272 16 16
+             270:    160(ptr) AccessChain 247(clip1) 17
+             273:    8(float) Load 270
+             274:   18(fvec4) Load 247(clip1)
+             275:   18(fvec4) CompositeConstruct 273 273 273 273
+             276:   18(fvec4) FDiv 274 275
+                              Store 247(clip1) 276
+             281:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 282 282 16 16
+             280:    278(ptr) AccessChain 215 222 277
+             283:   48(fvec2) Load 280
+             284:   18(fvec4) Load 229(clip0)
+             285:   48(fvec2) VectorShuffle 284 284 0 1
+             286:   48(fvec2) FMul 285 283
+             287:    160(ptr) AccessChain 229(clip0) 16
+             288:    8(float) CompositeExtract 286 0
+                              Store 287 288
+             289:    160(ptr) AccessChain 229(clip0) 36
+             290:    8(float) CompositeExtract 286 1
+                              Store 289 290
+             292:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 293 293 16 16
+             291:    278(ptr) AccessChain 215 222 277
+             294:   48(fvec2) Load 291
+             295:   18(fvec4) Load 247(clip1)
+             296:   48(fvec2) VectorShuffle 295 295 0 1
+             297:   48(fvec2) FMul 296 294
+             298:    160(ptr) AccessChain 247(clip1) 16
+             299:    8(float) CompositeExtract 297 0
+                              Store 298 299
+             300:    160(ptr) AccessChain 247(clip1) 36
+             301:    8(float) CompositeExtract 297 1
+                              Store 300 301
+             303:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 304 304 16 16
+             302:   18(fvec4) Load 229(clip0)
+             305:   18(fvec4) Load 247(clip1)
+             306:    8(float) ExtInst 3(GLSL.std.450) 67(Distance) 302 305
+             310:    308(ptr) AccessChain 215 222 307
+             311:    8(float) Load 310
+             312:    8(float) FDiv 306 311
+             314:    308(ptr) AccessChain 215 222 313
+             315:    8(float) Load 314
+             316:    8(float) FMul 312 315
+             319:    8(float) ExtInst 3(GLSL.std.450) 43(FClamp) 316 317 318
+                              ReturnValue 319
                               FunctionEnd
-                              Line 1 95 1
-55(frustumCheck(vf4;vf2;):    48(bool) Function None 51
-         53(Pos):     21(ptr) FunctionParameter
-        54(inUV):     47(ptr) FunctionParameter
-              58:             Label
-        310(pos):     21(ptr) Variable Function
-          355(i):    354(ptr) Variable Function
-              59:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 57
-              60:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 16 16 16 16
-              63:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 61 53(Pos) 40
-              66:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 64 54(inUV) 40
-             306:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 57 55(frustumCheck(vf4;vf2;)
-             307:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 57
-             308:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 309 309 16 16
-             313:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 311 310(pos) 40
-             314:   18(fvec4) Load 53(Pos)
-                              Store 310(pos) 314
-             315:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 316 316 16 16
-             326:         317 Load 323(textureHeight)
-             335:         327 Load 332(samplerHeight)
-             340:         336 SampledImage 326 335
-             341:   45(fvec2) Load 54(inUV)
-             342:   18(fvec4) ImageSampleExplicitLod 340 341 Lod 223
-             343:    8(float) CompositeExtract 342 0
-             345:    293(ptr) AccessChain 203 209 344
-             346:    8(float) Load 345
-             347:    8(float) FMul 343 346
-             348:    152(ptr) AccessChain 310(pos) 32
-             349:    8(float) Load 348
-             350:    8(float) FSub 349 347
-             351:    152(ptr) AccessChain 310(pos) 32
-                              Store 351 350
-             352:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 353 353 16 16
-             358:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 356 355(i) 40
-                              Store 355(i) 209
-                              Branch 359
-             359:             Label
-             363:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 57
-             364:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 353 353 16 16
-                              LoopMerge 361 362 None
-                              Branch 365
-             365:             Label
-             366:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 57
-             367:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 353 353 16 16
-             368:    206(int) Load 355(i)
-             370:    48(bool) SLessThan 368 265
-                              BranchConditional 370 360 361
-             360:               Label
-             371:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 57
-             372:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 373 373 16 16
-             374:   18(fvec4)   Load 310(pos)
-             376:    206(int)   Load 355(i)
-             378:    377(ptr)   AccessChain 203 209 375 376
-             379:   18(fvec4)   Load 378
-             380:    8(float)   Dot 374 379
-             382:    8(float)   FAdd 380 381
-             384:    48(bool)   FOrdLessThan 382 223
-                                SelectionMerge 386 None
-                                BranchConditional 384 385 386
-             385:                 Label
-             389:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 57
-             390:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 391 391 16 16
-                                  ReturnValue 388
-             386:               Label
-                                Branch 362
-             362:               Label
-             393:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 57
-             394:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 353 353 16 16
-             395:    206(int)   Load 355(i)
-             396:    206(int)   IAdd 395 210
-                                Store 355(i) 396
-                                Branch 359
-             361:             Label
-             398:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 57
-             399:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 400 400 16 16
-                              ReturnValue 171
+59(frustumCheck(vf4;vf2;):    52(bool) Function None 55
+         57(Pos):     21(ptr) FunctionParameter
+        58(inUV):     50(ptr) FunctionParameter
+              60:             Label
+        326(pos):     21(ptr) Variable Function
+          378(i):    376(ptr) Variable Function
+              67:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 62
+              68:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 63 63 16 16
+              66:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 64 57(Pos) 41
+              71:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 69 58(inUV) 41
+             324:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 62 59(frustumCheck(vf4;vf2;)
+             331:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 325
+             332:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 329 329 16 16
+             330:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 327 326(pos) 41
+             333:   18(fvec4) Load 57(Pos)
+                              Store 326(pos) 333
+             346:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 337 337 16 16
+             345:         334 Load 342(textureHeight)
+             356:         347 Load 353(samplerHeight)
+             361:         357 SampledImage 345 356
+             362:   48(fvec2) Load 58(inUV)
+             363:   18(fvec4) ImageSampleExplicitLod 361 362 Lod 237
+             364:    8(float) CompositeExtract 363 0
+             366:    308(ptr) AccessChain 215 222 365
+             367:    8(float) Load 366
+             368:    8(float) FMul 364 367
+             369:    160(ptr) AccessChain 326(pos) 36
+             370:    8(float) Load 369
+             371:    8(float) FSub 370 368
+             372:    160(ptr) AccessChain 326(pos) 36
+                              Store 372 371
+             382:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 373
+             383:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 374 374 16 16
+             381:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 379 378(i) 41
+                              Store 378(i) 222
+                              Branch 384
+             384:             Label
+             388:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 373
+             389:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 374 374 16 16
+                              LoopMerge 386 387 None
+                              Branch 390
+             390:             Label
+             392:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 373
+             393:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 374 374 16 16
+             391:    219(int) Load 378(i)
+             394:    52(bool) SLessThan 391 277
+                              BranchConditional 394 385 386
+             385:               Label
+             397:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 395
+             398:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 399 399 16 16
+             396:   18(fvec4)   Load 326(pos)
+             401:    219(int)   Load 378(i)
+             404:    402(ptr)   AccessChain 215 222 400 401
+             405:   18(fvec4)   Load 404
+             406:    8(float)   Dot 396 405
+             408:    8(float)   FAdd 406 407
+             409:    52(bool)   FOrdLessThan 408 237
+                                SelectionMerge 411 None
+                                BranchConditional 409 410 411
+             410:                 Label
+             414:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 412
+             415:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 416 416 16 16
+                                  ReturnValue 413
+             411:               Label
+                                Branch 387
+             387:               Label
+             419:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 373
+             420:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 374 374 16 16
+             418:    219(int)   Load 378(i)
+             421:    219(int)   IAdd 418 223
+                                Store 378(i) 421
+                                Branch 384
+             386:             Label
+             422:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 325
+             423:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 424 424 16 16
+                              ReturnValue 182
                               FunctionEnd
-                              Line 1 112 1
-103(ConstantsHS(struct-VSOutput-vf4-vf3-vf21[4];):90(ConstantsHSOutput) Function None 100
-      102(patch):     85(ptr) FunctionParameter
-             106:             Label
-     408(output):    407(ptr) Variable Function
-      418(param):     21(ptr) Variable Function
-      421(param):     47(ptr) Variable Function
-      462(param):     21(ptr) Variable Function
-      465(param):     21(ptr) Variable Function
-      472(param):     21(ptr) Variable Function
-      475(param):     21(ptr) Variable Function
-      482(param):     21(ptr) Variable Function
-      485(param):     21(ptr) Variable Function
-      492(param):     21(ptr) Variable Function
-      495(param):     21(ptr) Variable Function
-             107:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 105
-             108:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 16 16 16 16
-             111:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 109 102(patch) 40
-             403:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 105 103(ConstantsHS(struct-VSOutput-vf4-vf3-vf21[4];)
-             404:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 105
-             405:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 406 406 16 16
-             411:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 409 408(output) 40
-                              Store 408(output) 414
-             415:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 416 416 16 16
-             419:     21(ptr) AccessChain 102(patch) 209 209
-             420:   18(fvec4) Load 419
-                              Store 418(param) 420
-             422:     47(ptr) AccessChain 102(patch) 209 417
-             423:   45(fvec2) Load 422
-                              Store 421(param) 423
-             424:    48(bool) FunctionCall 55(frustumCheck(vf4;vf2;) 418(param) 421(param)
-             427:    48(bool) LogicalNot 424
-                              SelectionMerge 429 None
-                              BranchConditional 427 428 449
-             428:               Label
-             430:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 105
-             431:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 432 432 16 16
-             433:    152(ptr)   AccessChain 408(output) 210 209
-                                Store 433 223
-             434:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 435 435 16 16
-             436:    152(ptr)   AccessChain 408(output) 210 210
-                                Store 436 223
-             437:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 438 438 16 16
-             439:    152(ptr)   AccessChain 408(output) 209 209
-                                Store 439 223
-             440:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 441 441 16 16
-             442:    152(ptr)   AccessChain 408(output) 209 210
-                                Store 442 223
-             443:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 444 444 16 16
-             445:    152(ptr)   AccessChain 408(output) 209 417
-                                Store 445 223
-             446:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 447 447 16 16
-             448:    152(ptr)   AccessChain 408(output) 209 375
-                                Store 448 223
-                                Branch 429
-             449:               Label
-             450:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 105
-             451:           4   ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 452 452 16 16
-             453:    293(ptr)   AccessChain 203 209 297
-             454:    8(float)   Load 453
-             456:    48(bool)   FOrdGreaterThan 454 223
-                                SelectionMerge 458 None
-                                BranchConditional 456 457 516
-             457:                 Label
-             459:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 105
-             460:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 461 461 16 16
-             463:     21(ptr)     AccessChain 102(patch) 375 209
-             464:   18(fvec4)     Load 463
-                                  Store 462(param) 464
-             466:     21(ptr)     AccessChain 102(patch) 209 209
-             467:   18(fvec4)     Load 466
-                                  Store 465(param) 467
-             468:    8(float)     FunctionCall 26(screenSpaceTessFactor(vf4;vf4;) 462(param) 465(param)
-             469:    152(ptr)     AccessChain 408(output) 209 209
-                                  Store 469 468
-             470:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 471 471 16 16
-             473:     21(ptr)     AccessChain 102(patch) 209 209
-             474:   18(fvec4)     Load 473
-                                  Store 472(param) 474
-             476:     21(ptr)     AccessChain 102(patch) 210 209
-             477:   18(fvec4)     Load 476
-                                  Store 475(param) 477
-             478:    8(float)     FunctionCall 26(screenSpaceTessFactor(vf4;vf4;) 472(param) 475(param)
-             479:    152(ptr)     AccessChain 408(output) 209 210
-                                  Store 479 478
-             480:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 481 481 16 16
-             483:     21(ptr)     AccessChain 102(patch) 210 209
-             484:   18(fvec4)     Load 483
-                                  Store 482(param) 484
-             486:     21(ptr)     AccessChain 102(patch) 417 209
-             487:   18(fvec4)     Load 486
-                                  Store 485(param) 487
-             488:    8(float)     FunctionCall 26(screenSpaceTessFactor(vf4;vf4;) 482(param) 485(param)
-             489:    152(ptr)     AccessChain 408(output) 209 417
-                                  Store 489 488
-             490:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 491 491 16 16
-             493:     21(ptr)     AccessChain 102(patch) 417 209
-             494:   18(fvec4)     Load 493
-                                  Store 492(param) 494
-             496:     21(ptr)     AccessChain 102(patch) 375 209
-             497:   18(fvec4)     Load 496
-                                  Store 495(param) 497
-             498:    8(float)     FunctionCall 26(screenSpaceTessFactor(vf4;vf4;) 492(param) 495(param)
-             499:    152(ptr)     AccessChain 408(output) 209 375
-                                  Store 499 498
-             500:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 501 501 16 16
-             502:    152(ptr)     AccessChain 408(output) 209 209
-             503:    8(float)     Load 502
-             504:    152(ptr)     AccessChain 408(output) 209 375
-             505:    8(float)     Load 504
-             506:    8(float)     ExtInst 3(GLSL.std.450) 46(FMix) 503 505 145
-             507:    152(ptr)     AccessChain 408(output) 210 209
+110(ConstantsHS(struct-VSOutput-vf4-vf3-vf21[4];):97(ConstantsHSOutput) Function None 107
+      109(patch):     91(ptr) FunctionParameter
+             111:             Label
+     433(output):    431(ptr) Variable Function
+      444(param):     21(ptr) Variable Function
+      449(param):     50(ptr) Variable Function
+      487(param):     21(ptr) Variable Function
+      493(param):     21(ptr) Variable Function
+      498(param):     21(ptr) Variable Function
+      503(param):     21(ptr) Variable Function
+      508(param):     21(ptr) Variable Function
+      513(param):     21(ptr) Variable Function
+      518(param):     21(ptr) Variable Function
+      523(param):     21(ptr) Variable Function
+             117:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 113
+             118:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 88 88 16 16
+             116:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 114 109(patch) 41
+             429:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 113 110(ConstantsHS(struct-VSOutput-vf4-vf3-vf21[4];)
+             438:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 430
+             439:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 436 436 16 16
+             437:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 434 433(output) 41
+                              Store 433(output) 442
+             446:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 447 447 16 16
+             445:     21(ptr) AccessChain 109(patch) 222 222
+             448:   18(fvec4) Load 445
+                              Store 444(param) 448
+             450:     50(ptr) AccessChain 109(patch) 222 443
+             451:   48(fvec2) Load 450
+                              Store 449(param) 451
+             452:    52(bool) FunctionCall 59(frustumCheck(vf4;vf2;) 444(param) 449(param)
+             453:    52(bool) LogicalNot 452
+                              SelectionMerge 455 None
+                              BranchConditional 453 454 476
+             454:               Label
+             458:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 456
+             459:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 460 460 16 16
+             457:    160(ptr)   AccessChain 433(output) 223 222
+                                Store 457 237
+             462:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 463 463 16 16
+             461:    160(ptr)   AccessChain 433(output) 223 223
+                                Store 461 237
+             465:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 466 466 16 16
+             464:    160(ptr)   AccessChain 433(output) 222 222
+                                Store 464 237
+             468:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 469 469 16 16
+             467:    160(ptr)   AccessChain 433(output) 222 223
+                                Store 467 237
+             471:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 472 472 16 16
+             470:    160(ptr)   AccessChain 433(output) 222 443
+                                Store 470 237
+             474:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 475 475 16 16
+             473:    160(ptr)   AccessChain 433(output) 222 400
+                                Store 473 237
+                                Branch 455
+             476:               Label
+             479:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 477
+             480:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 481 481 16 16
+             478:    308(ptr)   AccessChain 215 222 313
+             482:    8(float)   Load 478
+             483:    52(bool)   FOrdGreaterThan 482 237
+                                SelectionMerge 485 None
+                                BranchConditional 483 484 544
+             484:                 Label
+             489:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 486
+             490:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 491 491 16 16
+             488:     21(ptr)     AccessChain 109(patch) 400 222
+             492:   18(fvec4)     Load 488
+                                  Store 487(param) 492
+             494:     21(ptr)     AccessChain 109(patch) 222 222
+             495:   18(fvec4)     Load 494
+                                  Store 493(param) 495
+             496:    8(float)     FunctionCall 28(screenSpaceTessFactor(vf4;vf4;) 487(param) 493(param)
+             497:    160(ptr)     AccessChain 433(output) 222 222
+                                  Store 497 496
+             500:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 501 501 16 16
+             499:     21(ptr)     AccessChain 109(patch) 222 222
+             502:   18(fvec4)     Load 499
+                                  Store 498(param) 502
+             504:     21(ptr)     AccessChain 109(patch) 223 222
+             505:   18(fvec4)     Load 504
+                                  Store 503(param) 505
+             506:    8(float)     FunctionCall 28(screenSpaceTessFactor(vf4;vf4;) 498(param) 503(param)
+             507:    160(ptr)     AccessChain 433(output) 222 223
                                   Store 507 506
-             508:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 509 509 16 16
-             510:    152(ptr)     AccessChain 408(output) 209 417
-             511:    8(float)     Load 510
-             512:    152(ptr)     AccessChain 408(output) 209 210
-             513:    8(float)     Load 512
-             514:    8(float)     ExtInst 3(GLSL.std.450) 46(FMix) 511 513 145
-             515:    152(ptr)     AccessChain 408(output) 210 210
-                                  Store 515 514
-                                  Branch 458
-             516:                 Label
-             517:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 105
-             518:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 519 519 16 16
-             520:    152(ptr)     AccessChain 408(output) 210 209
-                                  Store 520 301
-             521:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 522 522 16 16
-             523:    152(ptr)     AccessChain 408(output) 210 210
-                                  Store 523 301
-             524:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 525 525 16 16
-             526:    152(ptr)     AccessChain 408(output) 209 209
-                                  Store 526 301
-             527:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 528 528 16 16
-             529:    152(ptr)     AccessChain 408(output) 209 210
-                                  Store 529 301
-             530:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 531 531 16 16
-             532:    152(ptr)     AccessChain 408(output) 209 417
-                                  Store 532 301
-             533:           4     ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 534 534 16 16
-             535:    152(ptr)     AccessChain 408(output) 209 375
-                                  Store 535 301
-                                  Branch 458
-             458:               Label
-                                Branch 429
-             429:             Label
-             536:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 105
-             537:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 538 538 16 16
-             539:90(ConstantsHSOutput) Load 408(output)
-                              ReturnValue 539
+             510:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 511 511 16 16
+             509:     21(ptr)     AccessChain 109(patch) 223 222
+             512:   18(fvec4)     Load 509
+                                  Store 508(param) 512
+             514:     21(ptr)     AccessChain 109(patch) 443 222
+             515:   18(fvec4)     Load 514
+                                  Store 513(param) 515
+             516:    8(float)     FunctionCall 28(screenSpaceTessFactor(vf4;vf4;) 508(param) 513(param)
+             517:    160(ptr)     AccessChain 433(output) 222 443
+                                  Store 517 516
+             520:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 521 521 16 16
+             519:     21(ptr)     AccessChain 109(patch) 443 222
+             522:   18(fvec4)     Load 519
+                                  Store 518(param) 522
+             524:     21(ptr)     AccessChain 109(patch) 400 222
+             525:   18(fvec4)     Load 524
+                                  Store 523(param) 525
+             526:    8(float)     FunctionCall 28(screenSpaceTessFactor(vf4;vf4;) 518(param) 523(param)
+             527:    160(ptr)     AccessChain 433(output) 222 400
+                                  Store 527 526
+             529:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 530 530 16 16
+             528:    160(ptr)     AccessChain 433(output) 222 222
+             531:    8(float)     Load 528
+             532:    160(ptr)     AccessChain 433(output) 222 400
+             533:    8(float)     Load 532
+             534:    8(float)     ExtInst 3(GLSL.std.450) 46(FMix) 531 533 155
+             535:    160(ptr)     AccessChain 433(output) 223 222
+                                  Store 535 534
+             537:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 538 538 16 16
+             536:    160(ptr)     AccessChain 433(output) 222 443
+             539:    8(float)     Load 536
+             540:    160(ptr)     AccessChain 433(output) 222 223
+             541:    8(float)     Load 540
+             542:    8(float)     ExtInst 3(GLSL.std.450) 46(FMix) 539 541 155
+             543:    160(ptr)     AccessChain 433(output) 223 223
+                                  Store 543 542
+                                  Branch 485
+             544:                 Label
+             547:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 545
+             548:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 549 549 16 16
+             546:    160(ptr)     AccessChain 433(output) 223 222
+                                  Store 546 317
+             551:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 552 552 16 16
+             550:    160(ptr)     AccessChain 433(output) 223 223
+                                  Store 550 317
+             554:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 555 555 16 16
+             553:    160(ptr)     AccessChain 433(output) 222 222
+                                  Store 553 317
+             557:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 558 558 16 16
+             556:    160(ptr)     AccessChain 433(output) 222 223
+                                  Store 556 317
+             560:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 561 561 16 16
+             559:    160(ptr)     AccessChain 433(output) 222 443
+                                  Store 559 317
+             563:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 564 564 16 16
+             562:    160(ptr)     AccessChain 433(output) 222 400
+                                  Store 562 317
+                                  Branch 485
+             485:               Label
+                                Branch 455
+             455:             Label
+             566:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 430
+             567:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 568 568 16 16
+             565:97(ConstantsHSOutput) Load 433(output)
+                              ReturnValue 565
                               FunctionEnd
-                              Line 1 158 1
-126(@main(struct-VSOutput-vf4-vf3-vf21[4];u1;):113(HSOutput) Function None 122
-      124(patch):     85(ptr) FunctionParameter
-125(InvocationID):    112(ptr) FunctionParameter
-             129:             Label
-     547(output):    546(ptr) Variable Function
-             130:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 128
-             131:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 16 16 16 16
-             133:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 132 124(patch) 40
-             136:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 134 125(InvocationID) 40
-             542:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 128 126(@main(struct-VSOutput-vf4-vf3-vf21[4];u1;)
-             543:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 128
-             544:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 545 545 16 16
-             549:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 548 547(output) 40
-                              Store 547(output) 552
-             553:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 554 554 16 16
-             555:     11(int) Load 125(InvocationID)
-             556:     21(ptr) AccessChain 124(patch) 555 209
-             557:   18(fvec4) Load 556
-             558:     21(ptr) AccessChain 547(output) 209
-                              Store 558 557
-             559:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 560 560 16 16
-             561:     11(int) Load 125(InvocationID)
-             563:    562(ptr) AccessChain 124(patch) 561 210
-             564:   67(fvec3) Load 563
-             565:    562(ptr) AccessChain 547(output) 210
-                              Store 565 564
-             566:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 567 567 16 16
-             568:     11(int) Load 125(InvocationID)
-             569:     47(ptr) AccessChain 124(patch) 568 417
-             570:   45(fvec2) Load 569
-             571:     47(ptr) AccessChain 547(output) 417
-                              Store 571 570
-             572:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 29 573 573 16 16
-             574:113(HSOutput) Load 547(output)
-                              ReturnValue 574
+135(@main(struct-VSOutput-vf4-vf3-vf21[4];u1;):121(HSOutput) Function None 131
+      133(patch):     91(ptr) FunctionParameter
+134(InvocationID):    119(ptr) FunctionParameter
+             136:             Label
+     577(output):    575(ptr) Variable Function
+             141:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 138
+             142:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 130 130 16 16
+             140:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 139 133(patch) 41
+             145:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 143 134(InvocationID) 41
+             573:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 138 135(@main(struct-VSOutput-vf4-vf3-vf21[4];u1;)
+             581:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 574
+             582:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 579 579 16 16
+             580:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 578 577(output) 41
+                              Store 577(output) 585
+             587:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 588 588 16 16
+             586:     11(int) Load 134(InvocationID)
+             589:     21(ptr) AccessChain 133(patch) 586 222
+             590:   18(fvec4) Load 589
+             591:     21(ptr) AccessChain 577(output) 222
+                              Store 591 590
+             593:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 594 594 16 16
+             592:     11(int) Load 134(InvocationID)
+             597:    595(ptr) AccessChain 133(patch) 592 223
+             598:   72(fvec3) Load 597
+             599:    595(ptr) AccessChain 577(output) 223
+                              Store 599 598
+             601:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 602 602 16 16
+             600:     11(int) Load 134(InvocationID)
+             603:     50(ptr) AccessChain 133(patch) 600 443
+             604:   48(fvec2) Load 603
+             605:     50(ptr) AccessChain 577(output) 443
+                              Store 605 604
+             607:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 32 608 608 16 16
+             606:121(HSOutput) Load 577(output)
+                              ReturnValue 606
                               FunctionEnd
diff --git a/Test/baseResults/spv.debuginfo.hlsl.tese.out b/Test/baseResults/spv.debuginfo.hlsl.tese.out
index d0901eb..22e613d 100644
--- a/Test/baseResults/spv.debuginfo.hlsl.tese.out
+++ b/Test/baseResults/spv.debuginfo.hlsl.tese.out
@@ -1,16 +1,16 @@
 spv.debuginfo.hlsl.tese
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 461
+// Id's are bound by 481
 
                               Capability Tessellation
                               Extension  "SPV_KHR_non_semantic_info"
-               2:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
                3:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint TessellationEvaluation 6  "main" 352 367 376 385 392 398 438 442 446 449 452 455 458
+                              EntryPoint TessellationEvaluation 6  "main" 372 387 396 405 412 418 458 462 466 469 472 475 478
                               ExecutionMode 6 Quads
-               1:             String  ""
+               2:             String  "spv.debuginfo.hlsl.tese"
                9:             String  "float"
               12:             String  "uint"
               26:             String  "TessLevelOuter"
@@ -22,141 +22,237 @@
 // OpModuleProcessed keep-uncalled
 // OpModuleProcessed hlsl-offsets
 #line 1
+/*
+The MIT License (MIT)
+
+Copyright (c) 2022 Google LLC
+Copyright (c) 2022 Sascha Willems
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+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 Software.
+
+THE SOFTWARE IS 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 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+*/
+
+struct UBO
+{
+	float4x4 projection;
+	float4x4 modelview;
+	float4 lightPos;
+	float4 frustumPlanes[6];
+	float displacementFactor;
+	float tessellationFactor;
+	float2 viewportDim;
+	float tessellatedEdgeSize;
+};
+cbuffer ubo : register(b0) { UBO ubo; };
+
+Texture2D displacementMapTexture : register(t1);
+SamplerState displacementMapSampler : register(s1);
+
+struct HSOutput
+{
+[[vk::location(2)]]	float4 Pos : SV_POSITION;
+[[vk::location(0)]] float3 Normal : NORMAL0;
+[[vk::location(1)]] float2 UV : TEXCOORD0;
+};
+
+struct ConstantsHSOutput
+{
+    float TessLevelOuter[4] : SV_TessFactor;
+    float TessLevelInner[2] : SV_InsideTessFactor;
+};
+
+struct DSOutput
+{
+	float4 Pos : SV_POSITION;
+[[vk::location(0)]] float3 Normal : NORMAL0;
+[[vk::location(1)]] float2 UV : TEXCOORD0;
+[[vk::location(2)]] float3 ViewVec : TEXCOORD1;
+[[vk::location(3)]] float3 LightVec : TEXCOORD2;
+[[vk::location(4)]] float3 EyePos : POSITION1;
+[[vk::location(5)]] float3 WorldPos : POSITION0;
+};
+
+[domain("quad")]
+DSOutput main(ConstantsHSOutput input, float2 TessCoord : SV_DomainLocation, const OutputPatch<HSOutput, 4> patch)
+{
+	// Interpolate UV coordinates
+	DSOutput output = (DSOutput)0;
+	float2 uv1 = lerp(patch[0].UV, patch[1].UV, TessCoord.x);
+	float2 uv2 = lerp(patch[3].UV, patch[2].UV, TessCoord.x);
+	output.UV = lerp(uv1, uv2, TessCoord.y);
+
+	float3 n1 = lerp(patch[0].Normal, patch[1].Normal, TessCoord.x);
+	float3 n2 = lerp(patch[3].Normal, patch[2].Normal, TessCoord.x);
+	output.Normal = lerp(n1, n2, TessCoord.y);
+
+	// Interpolate positions
+	float4 pos1 = lerp(patch[0].Pos, patch[1].Pos, TessCoord.x);
+	float4 pos2 = lerp(patch[3].Pos, patch[2].Pos, TessCoord.x);
+	float4 pos = lerp(pos1, pos2, TessCoord.y);
+	// Displace
+	pos.y -= displacementMapTexture.SampleLevel(displacementMapSampler, output.UV, 0.0).r * ubo.displacementFactor;
+	// Perspective projection
+	output.Pos = mul(ubo.projection, mul(ubo.modelview, pos));
+
+	// Calculate vectors for lighting based on tessellated position
+	output.ViewVec = -pos.xyz;
+	output.LightVec = normalize(ubo.lightPos.xyz + output.ViewVec);
+	output.WorldPos = pos.xyz;
+	output.EyePos = mul(ubo.modelview, pos).xyz;
+	return output;
+}
 "
               32:             String  "TessLevelInner"
               35:             String  "ConstantsHSOutput"
-              49:             String  "Pos"
-              52:             String  "Normal"
-              56:             String  "UV"
-              60:             String  "HSOutput"
-              68:             String  "WorldPos"
-              78:             String  "DSOutput"
-              85:             String  "@main"
-              91:             String  "input"
-              95:             String  "TessCoord"
-              98:             String  "patch"
-             107:             String  "output"
-             118:             String  "uv1"
-             121:             String  "int"
-             137:             String  "uv2"
-             160:             String  "n1"
-             172:             String  "n2"
-             194:             String  "pos1"
-             206:             String  "pos2"
-             218:             String  "pos"
-             230:             String  "type.2d.image"
-             231:             String  "@type.2d.image"
-             236:             String  "displacementMapTexture"
-             241:             String  "type.sampler"
-             242:             String  "@type.sampler"
-             246:             String  "displacementMapSampler"
-             250:             String  "type.sampled.image"
-             251:             String  "@type.sampled.image"
-             265:             String  "modelview"
-             270:             String  "lightPos"
-             274:             String  "frustumPlanes"
-             277:             String  "tessellatedEdgeSize"
-             281:             String  "viewportDim"
-             285:             String  "UBO"
-             288:             String  "ubo"
+              53:             String  "Pos"
+              56:             String  "Normal"
+              60:             String  "UV"
+              64:             String  "HSOutput"
+              72:             String  "WorldPos"
+              82:             String  "DSOutput"
+              90:             String  "@main"
+              93:             String  "input"
+              99:             String  "TessCoord"
+             102:             String  "patch"
+             110:             String  "output"
+             122:             String  "uv1"
+             127:             String  "int"
+             142:             String  "uv2"
+             166:             String  "n1"
+             178:             String  "n2"
+             201:             String  "pos1"
+             213:             String  "pos2"
+             225:             String  "pos"
+             237:             String  "type.2d.image"
+             239:             String  "@type.2d.image"
+             245:             String  "displacementMapTexture"
+             251:             String  "type.sampler"
+             252:             String  "@type.sampler"
+             257:             String  "displacementMapSampler"
+             261:             String  "type.sampled.image"
+             262:             String  "@type.sampled.image"
+             271:             String  "bool"
+             278:             String  "modelview"
+             283:             String  "lightPos"
+             287:             String  "frustumPlanes"
+             290:             String  "tessellatedEdgeSize"
+             294:             String  "viewportDim"
+             298:             String  "UBO"
+             301:             String  "ubo"
+             307:             String  ""
                               Name 6  "main"
                               Name 24  "ConstantsHSOutput"
                               MemberName 24(ConstantsHSOutput) 0  "TessLevelOuter"
                               MemberName 24(ConstantsHSOutput) 1  "TessLevelInner"
-                              Name 47  "HSOutput"
-                              MemberName 47(HSOutput) 0  "Pos"
-                              MemberName 47(HSOutput) 1  "Normal"
-                              MemberName 47(HSOutput) 2  "UV"
-                              Name 63  "DSOutput"
-                              MemberName 63(DSOutput) 0  "Pos"
-                              MemberName 63(DSOutput) 1  "Normal"
-                              MemberName 63(DSOutput) 2  "UV"
-                              MemberName 63(DSOutput) 3  "ViewVec"
-                              MemberName 63(DSOutput) 4  "LightVec"
-                              MemberName 63(DSOutput) 5  "EyePos"
-                              MemberName 63(DSOutput) 6  "WorldPos"
-                              Name 84  "@main(struct-ConstantsHSOutput-f1[4]-f1[2]1;vf2;struct-HSOutput-vf4-vf3-vf21[4];"
-                              Name 81  "input"
-                              Name 82  "TessCoord"
-                              Name 83  "patch"
-                              Name 105  "output"
-                              Name 116  "uv1"
-                              Name 135  "uv2"
-                              Name 158  "n1"
-                              Name 170  "n2"
-                              Name 192  "pos1"
-                              Name 204  "pos2"
-                              Name 216  "pos"
-                              Name 234  "displacementMapTexture"
-                              Name 244  "displacementMapSampler"
-                              Name 263  "UBO"
-                              MemberName 263(UBO) 0  "projection"
-                              MemberName 263(UBO) 1  "modelview"
-                              MemberName 263(UBO) 2  "lightPos"
-                              MemberName 263(UBO) 3  "frustumPlanes"
-                              MemberName 263(UBO) 4  "displacementFactor"
-                              MemberName 263(UBO) 5  "tessellationFactor"
-                              MemberName 263(UBO) 6  "viewportDim"
-                              MemberName 263(UBO) 7  "tessellatedEdgeSize"
-                              Name 286  "ubo"
-                              MemberName 286(ubo) 0  "ubo"
-                              Name 291  ""
-                              Name 350  "input"
-                              Name 352  "input.TessLevelOuter"
-                              Name 367  "input.TessLevelInner"
-                              Name 374  "TessCoord"
-                              Name 376  "TessCoord"
-                              Name 382  "patch"
-                              Name 385  "patch.Pos"
-                              Name 392  "patch.Normal"
-                              Name 398  "patch.UV"
-                              Name 430  "flattenTemp"
-                              Name 432  "param"
-                              Name 434  "param"
-                              Name 438  "@entryPointOutput.Pos"
-                              Name 442  "@entryPointOutput.Normal"
-                              Name 446  "@entryPointOutput.UV"
-                              Name 449  "@entryPointOutput.ViewVec"
-                              Name 452  "@entryPointOutput.LightVec"
-                              Name 455  "@entryPointOutput.EyePos"
-                              Name 458  "@entryPointOutput.WorldPos"
-                              Decorate 234(displacementMapTexture) DescriptorSet 0
-                              Decorate 234(displacementMapTexture) Binding 1
-                              Decorate 244(displacementMapSampler) DescriptorSet 0
-                              Decorate 244(displacementMapSampler) Binding 1
-                              Decorate 261 ArrayStride 16
-                              MemberDecorate 263(UBO) 0 RowMajor
-                              MemberDecorate 263(UBO) 0 Offset 0
-                              MemberDecorate 263(UBO) 0 MatrixStride 16
-                              MemberDecorate 263(UBO) 1 RowMajor
-                              MemberDecorate 263(UBO) 1 Offset 64
-                              MemberDecorate 263(UBO) 1 MatrixStride 16
-                              MemberDecorate 263(UBO) 2 Offset 128
-                              MemberDecorate 263(UBO) 3 Offset 144
-                              MemberDecorate 263(UBO) 4 Offset 240
-                              MemberDecorate 263(UBO) 5 Offset 244
-                              MemberDecorate 263(UBO) 6 Offset 248
-                              MemberDecorate 263(UBO) 7 Offset 256
-                              MemberDecorate 286(ubo) 0 Offset 0
-                              Decorate 286(ubo) Block
-                              Decorate 291 DescriptorSet 0
-                              Decorate 291 Binding 0
-                              Decorate 352(input.TessLevelOuter) Patch
-                              Decorate 352(input.TessLevelOuter) BuiltIn TessLevelOuter
-                              Decorate 367(input.TessLevelInner) Patch
-                              Decorate 367(input.TessLevelInner) BuiltIn TessLevelInner
-                              Decorate 376(TessCoord) Patch
-                              Decorate 376(TessCoord) BuiltIn TessCoord
-                              Decorate 385(patch.Pos) BuiltIn Position
-                              Decorate 392(patch.Normal) Location 0
-                              Decorate 398(patch.UV) Location 1
-                              Decorate 438(@entryPointOutput.Pos) BuiltIn Position
-                              Decorate 442(@entryPointOutput.Normal) Location 0
-                              Decorate 446(@entryPointOutput.UV) Location 1
-                              Decorate 449(@entryPointOutput.ViewVec) Location 2
-                              Decorate 452(@entryPointOutput.LightVec) Location 3
-                              Decorate 455(@entryPointOutput.EyePos) Location 4
-                              Decorate 458(@entryPointOutput.WorldPos) Location 5
+                              Name 51  "HSOutput"
+                              MemberName 51(HSOutput) 0  "Pos"
+                              MemberName 51(HSOutput) 1  "Normal"
+                              MemberName 51(HSOutput) 2  "UV"
+                              Name 67  "DSOutput"
+                              MemberName 67(DSOutput) 0  "Pos"
+                              MemberName 67(DSOutput) 1  "Normal"
+                              MemberName 67(DSOutput) 2  "UV"
+                              MemberName 67(DSOutput) 3  "ViewVec"
+                              MemberName 67(DSOutput) 4  "LightVec"
+                              MemberName 67(DSOutput) 5  "EyePos"
+                              MemberName 67(DSOutput) 6  "WorldPos"
+                              Name 88  "@main(struct-ConstantsHSOutput-f1[4]-f1[2]1;vf2;struct-HSOutput-vf4-vf3-vf21[4];"
+                              Name 85  "input"
+                              Name 86  "TessCoord"
+                              Name 87  "patch"
+                              Name 108  "output"
+                              Name 120  "uv1"
+                              Name 140  "uv2"
+                              Name 164  "n1"
+                              Name 176  "n2"
+                              Name 199  "pos1"
+                              Name 211  "pos2"
+                              Name 223  "pos"
+                              Name 243  "displacementMapTexture"
+                              Name 255  "displacementMapSampler"
+                              Name 276  "UBO"
+                              MemberName 276(UBO) 0  "projection"
+                              MemberName 276(UBO) 1  "modelview"
+                              MemberName 276(UBO) 2  "lightPos"
+                              MemberName 276(UBO) 3  "frustumPlanes"
+                              MemberName 276(UBO) 4  "displacementFactor"
+                              MemberName 276(UBO) 5  "tessellationFactor"
+                              MemberName 276(UBO) 6  "viewportDim"
+                              MemberName 276(UBO) 7  "tessellatedEdgeSize"
+                              Name 299  "ubo"
+                              MemberName 299(ubo) 0  "ubo"
+                              Name 305  ""
+                              Name 370  "input"
+                              Name 372  "input.TessLevelOuter"
+                              Name 387  "input.TessLevelInner"
+                              Name 394  "TessCoord"
+                              Name 396  "TessCoord"
+                              Name 402  "patch"
+                              Name 405  "patch.Pos"
+                              Name 412  "patch.Normal"
+                              Name 418  "patch.UV"
+                              Name 450  "flattenTemp"
+                              Name 452  "param"
+                              Name 454  "param"
+                              Name 458  "@entryPointOutput.Pos"
+                              Name 462  "@entryPointOutput.Normal"
+                              Name 466  "@entryPointOutput.UV"
+                              Name 469  "@entryPointOutput.ViewVec"
+                              Name 472  "@entryPointOutput.LightVec"
+                              Name 475  "@entryPointOutput.EyePos"
+                              Name 478  "@entryPointOutput.WorldPos"
+                              Decorate 243(displacementMapTexture) Binding 1
+                              Decorate 243(displacementMapTexture) DescriptorSet 0
+                              Decorate 255(displacementMapSampler) Binding 1
+                              Decorate 255(displacementMapSampler) DescriptorSet 0
+                              Decorate 274 ArrayStride 16
+                              MemberDecorate 276(UBO) 0 RowMajor
+                              MemberDecorate 276(UBO) 0 MatrixStride 16
+                              MemberDecorate 276(UBO) 0 Offset 0
+                              MemberDecorate 276(UBO) 1 RowMajor
+                              MemberDecorate 276(UBO) 1 MatrixStride 16
+                              MemberDecorate 276(UBO) 1 Offset 64
+                              MemberDecorate 276(UBO) 2 Offset 128
+                              MemberDecorate 276(UBO) 3 Offset 144
+                              MemberDecorate 276(UBO) 4 Offset 240
+                              MemberDecorate 276(UBO) 5 Offset 244
+                              MemberDecorate 276(UBO) 6 Offset 248
+                              MemberDecorate 276(UBO) 7 Offset 256
+                              Decorate 299(ubo) Block
+                              MemberDecorate 299(ubo) 0 Offset 0
+                              Decorate 305 Binding 0
+                              Decorate 305 DescriptorSet 0
+                              Decorate 372(input.TessLevelOuter) BuiltIn TessLevelOuter
+                              Decorate 372(input.TessLevelOuter) Patch
+                              Decorate 387(input.TessLevelInner) BuiltIn TessLevelInner
+                              Decorate 387(input.TessLevelInner) Patch
+                              Decorate 396(TessCoord) BuiltIn TessCoord
+                              Decorate 396(TessCoord) Patch
+                              Decorate 405(patch.Pos) BuiltIn Position
+                              Decorate 412(patch.Normal) Location 0
+                              Decorate 418(patch.UV) Location 1
+                              Decorate 458(@entryPointOutput.Pos) BuiltIn Position
+                              Decorate 462(@entryPointOutput.Normal) Location 0
+                              Decorate 466(@entryPointOutput.UV) Location 1
+                              Decorate 469(@entryPointOutput.ViewVec) Location 2
+                              Decorate 472(@entryPointOutput.LightVec) Location 3
+                              Decorate 475(@entryPointOutput.EyePos) Location 4
+                              Decorate 478(@entryPointOutput.WorldPos) Location 5
                4:             TypeVoid
                5:             TypeFunction 4
                8:             TypeFloat 32
@@ -164,463 +260,476 @@
               14:     11(int) Constant 32
               15:     11(int) Constant 6
               16:     11(int) Constant 0
-              13:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 12 14 15 16
+              13:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 12 14 15 16
               17:     11(int) Constant 3
-              10:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 9 14 17 16
+              10:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 9 14 17 16
               18:     11(int) Constant 4
               19:             TypeArray 8(float) 18
-              20:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 10 18
+              20:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 10 18
               21:     11(int) Constant 2
               22:             TypeArray 8(float) 21
-              23:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 10 21
+              23:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 10 21
 24(ConstantsHSOutput):             TypeStruct 19 22
-              27:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 1 28
+              27:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 2 28
               29:     11(int) Constant 51
               30:     11(int) Constant 25
-              25:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 26 20 27 29 30 16 16 17
+              25:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 26 20 27 29 30 16 16 17
               33:     11(int) Constant 52
-              31:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 32 23 27 33 30 16 16 17
+              31:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 32 23 27 33 30 16 16 17
               36:     11(int) Constant 1
-              38:     11(int) Constant 5
-              37:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 36 18 27 38
-              34:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 35 36 27 16 16 37 35 16 17 25 31
-              39:             TypePointer Function 24(ConstantsHSOutput)
-              40:             TypeVector 8(float) 2
-              41:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 21
-              42:             TypePointer Function 40(fvec2)
-              43:             TypeVector 8(float) 4
-              44:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 18
-              45:             TypeVector 8(float) 3
-              46:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 17
-    47(HSOutput):             TypeStruct 43(fvec4) 45(fvec3) 40(fvec2)
-              50:     11(int) Constant 44
-              48:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 49 44 27 50 14 16 16 17
-              53:     11(int) Constant 45
-              54:     11(int) Constant 35
-              51:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 52 46 27 53 54 16 16 17
-              57:     11(int) Constant 46
-              58:     11(int) Constant 31
-              55:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 56 41 27 57 58 16 16 17
-              59:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 60 36 27 16 16 37 60 16 17 48 51 55
-              61:             TypeArray 47(HSOutput) 18
-              62:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 59 18
-    63(DSOutput):             TypeStruct 43(fvec4) 45(fvec3) 40(fvec2) 45(fvec3) 45(fvec3) 45(fvec3) 45(fvec3)
-              65:     11(int) Constant 57
-              66:     11(int) Constant 13
-              64:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 49 44 27 65 66 16 16 17
-              69:     11(int) Constant 63
-              70:     11(int) Constant 37
-              67:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 68 46 27 69 70 16 16 17
-              72:     11(int) Constant 59
-              71:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 56 41 27 72 58 16 16 17
-              73:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 68 46 27 69 70 16 16 17
-              74:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 68 46 27 69 70 16 16 17
-              75:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 68 46 27 69 70 16 16 17
-              76:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 68 46 27 69 70 16 16 17
-              77:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 78 36 27 16 16 37 78 16 17 64 67 71 73 74 75 76
-              79:             TypeFunction 63(DSOutput) 39(ptr) 42(ptr) 61
-              80:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 77 34 41 59
-              86:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 85 80 27 16 16 37 85 17 16
-              90:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 91 34 27 16 16 86 18 36
-              93:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
-              94:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 95 41 27 16 16 86 18 21
-              97:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 98 59 27 16 16 86 18 17
-             103:     11(int) Constant 70
-             104:             TypePointer Function 63(DSOutput)
-             106:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 107 77 27 103 16 86 18
-             109:    8(float) Constant 0
-             110:   43(fvec4) ConstantComposite 109 109 109 109
-             111:   45(fvec3) ConstantComposite 109 109 109
-             112:   40(fvec2) ConstantComposite 109 109
-             113:63(DSOutput) ConstantComposite 110 111 112 111 111 111 111
-             115:     11(int) Constant 71
-             117:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 118 41 27 115 16 86 18
-             120:             TypeInt 32 1
-             122:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 121 14 18 16
-             123:    120(int) Constant 0
-             124:    120(int) Constant 2
-             126:    120(int) Constant 1
-             128:             TypePointer Function 8(float)
-             134:     11(int) Constant 72
-             136:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 137 41 27 134 16 86 18
-             139:    120(int) Constant 3
-             147:     11(int) Constant 73
-             156:     11(int) Constant 75
-             157:             TypePointer Function 45(fvec3)
-             159:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 160 46 27 156 16 86 18
-             169:     11(int) Constant 76
-             171:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 172 46 27 169 16 86 18
-             181:     11(int) Constant 77
-             190:     11(int) Constant 80
-             191:             TypePointer Function 43(fvec4)
-             193:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 194 44 27 190 16 86 18
-             203:     11(int) Constant 81
-             205:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 206 44 27 203 16 86 18
-             215:     11(int) Constant 82
-             217:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 218 44 27 215 16 86 18
-             227:     11(int) Constant 84
-             228:             TypeImage 8(float) 2D sampled format:Unknown
-             232:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 0(DebugInfoNone)
-             229:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 230 16 27 227 16 37 231 232 17
-             233:             TypePointer UniformConstant 228
-234(displacementMapTexture):    233(ptr) Variable UniformConstant
-             237:     11(int) Constant 8
-             235:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 236 229 27 227 16 37 236 234(displacementMapTexture) 237
-             239:             TypeSampler
-             240:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 241 36 27 227 16 37 242 232 17
-             243:             TypePointer UniformConstant 239
-244(displacementMapSampler):    243(ptr) Variable UniformConstant
-             245:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 246 240 27 227 16 37 246 244(displacementMapSampler) 237
-             248:             TypeSampledImage 228
-             249:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 250 16 27 227 16 37 251 232 17
-             257:             TypeMatrix 43(fvec4) 4
-             259:             TypeBool
-             260:   259(bool) ConstantTrue
-             258:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 44 18 260
-             261:             TypeArray 43(fvec4) 15
-             262:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 44 15
-        263(UBO):             TypeStruct 257 257 43(fvec4) 261 8(float) 8(float) 40(fvec2) 8(float)
-             266:     11(int) Constant 29
-             267:     11(int) Constant 20
-             264:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 265 258 27 266 267 16 16 17
-             268:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 265 258 27 266 267 16 16 17
-             271:     11(int) Constant 30
-             272:     11(int) Constant 17
-             269:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 270 44 27 271 272 16 16 17
-             275:     11(int) Constant 22
-             273:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 274 262 27 58 275 16 16 17
-             278:     11(int) Constant 27
-             276:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 277 10 27 54 278 16 16 17
-             279:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 277 10 27 54 278 16 16 17
-             282:     11(int) Constant 34
-             280:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 281 41 27 282 267 16 16 17
-             283:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 277 10 27 54 278 16 16 17
-             284:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 285 36 27 227 16 37 285 16 17 264 268 269 273 276 279 280 283
-        286(ubo):             TypeStruct 263(UBO)
-             287:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 288 284 27 70 70 16 16 17
-             289:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 288 36 27 227 16 37 288 16 17 287
-             290:             TypePointer Uniform 286(ubo)
-             291:    290(ptr) Variable Uniform
-             292:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 1 289 27 227 16 37 1 291 237
-             293:    120(int) Constant 4
-             294:             TypePointer Uniform 8(float)
-             303:     11(int) Constant 86
-             305:             TypePointer Uniform 257
-             314:     11(int) Constant 89
-             320:     11(int) Constant 90
-             321:             TypePointer Uniform 43(fvec4)
-             331:     11(int) Constant 91
-             332:    120(int) Constant 6
-             337:     11(int) Constant 92
-             338:    120(int) Constant 5
-             346:     11(int) Constant 93
-             351:             TypePointer Input 19
-352(input.TessLevelOuter):    351(ptr) Variable Input
-             353:             TypePointer Input 8(float)
-             366:             TypePointer Input 22
-367(input.TessLevelInner):    366(ptr) Variable Input
-             375:             TypePointer Input 45(fvec3)
-  376(TessCoord):    375(ptr) Variable Input
-             381:             TypePointer Function 61
-             383:             TypeArray 43(fvec4) 18
-             384:             TypePointer Input 383
-  385(patch.Pos):    384(ptr) Variable Input
-             386:             TypePointer Input 43(fvec4)
-             390:             TypeArray 45(fvec3) 18
-             391:             TypePointer Input 390
-392(patch.Normal):    391(ptr) Variable Input
-             396:             TypeArray 40(fvec2) 18
-             397:             TypePointer Input 396
-   398(patch.UV):    397(ptr) Variable Input
-             399:             TypePointer Input 40(fvec2)
-             437:             TypePointer Output 43(fvec4)
-438(@entryPointOutput.Pos):    437(ptr) Variable Output
-             441:             TypePointer Output 45(fvec3)
-442(@entryPointOutput.Normal):    441(ptr) Variable Output
-             445:             TypePointer Output 40(fvec2)
-446(@entryPointOutput.UV):    445(ptr) Variable Output
-449(@entryPointOutput.ViewVec):    441(ptr) Variable Output
-452(@entryPointOutput.LightVec):    441(ptr) Variable Output
-455(@entryPointOutput.EyePos):    441(ptr) Variable Output
-458(@entryPointOutput.WorldPos):    441(ptr) Variable Output
-                              Line 1 68 1
+              37:     11(int) Constant 68
+              39:     11(int) Constant 5
+              38:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 36 18 27 39
+              34:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 35 36 27 37 16 38 35 16 17 25 31
+              40:             TypePointer Function 24(ConstantsHSOutput)
+              41:     11(int) Constant 7
+              42:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 34 41 16
+              43:             TypeVector 8(float) 2
+              44:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 21
+              45:             TypePointer Function 43(fvec2)
+              46:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 44 41 16
+              47:             TypeVector 8(float) 4
+              48:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 18
+              49:             TypeVector 8(float) 3
+              50:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 17
+    51(HSOutput):             TypeStruct 47(fvec4) 49(fvec3) 43(fvec2)
+              54:     11(int) Constant 44
+              52:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 53 48 27 54 14 16 16 17
+              57:     11(int) Constant 45
+              58:     11(int) Constant 35
+              55:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 56 50 27 57 58 16 16 17
+              61:     11(int) Constant 46
+              62:     11(int) Constant 31
+              59:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 60 44 27 61 62 16 16 17
+              63:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 64 36 27 37 16 38 64 16 17 52 55 59
+              65:             TypeArray 51(HSOutput) 18
+              66:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 63 18
+    67(DSOutput):             TypeStruct 47(fvec4) 49(fvec3) 43(fvec2) 49(fvec3) 49(fvec3) 49(fvec3) 49(fvec3)
+              69:     11(int) Constant 57
+              70:     11(int) Constant 13
+              68:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 53 48 27 69 70 16 16 17
+              73:     11(int) Constant 63
+              74:     11(int) Constant 37
+              71:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 72 50 27 73 74 16 16 17
+              76:     11(int) Constant 59
+              75:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 60 44 27 76 62 16 16 17
+              77:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 72 50 27 73 74 16 16 17
+              78:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 72 50 27 73 74 16 16 17
+              79:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 72 50 27 73 74 16 16 17
+              80:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 72 50 27 73 74 16 16 17
+              81:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 82 36 27 37 16 38 82 16 17 68 71 75 77 78 79 80
+              83:             TypeFunction 67(DSOutput) 40(ptr) 45(ptr) 65
+              84:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 81 34 44 63
+              91:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 90 84 27 37 16 38 90 17 37
+              92:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 93 34 27 37 16 91 18 36
+              95:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
+              98:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 99 44 27 37 16 91 18 21
+             101:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 102 63 27 37 16 91 18 17
+             105:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 27 16 16 91
+             106:             TypePointer Function 67(DSOutput)
+             107:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 81 41 16
+             111:     11(int) Constant 70
+             109:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 110 81 27 111 16 105 18
+             115:    8(float) Constant 0
+             116:   47(fvec4) ConstantComposite 115 115 115 115
+             117:   49(fvec3) ConstantComposite 115 115 115
+             118:   43(fvec2) ConstantComposite 115 115
+             119:67(DSOutput) ConstantComposite 116 117 118 117 117 117 117
+             123:     11(int) Constant 71
+             121:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 122 44 27 123 16 105 18
+             126:             TypeInt 32 1
+             128:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 127 14 18 16
+             129:    126(int) Constant 0
+             130:    126(int) Constant 2
+             132:    126(int) Constant 1
+             134:             TypePointer Function 8(float)
+             135:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 10 41 16
+             143:     11(int) Constant 72
+             141:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 142 44 27 143 16 105 18
+             146:    126(int) Constant 3
+             155:     11(int) Constant 73
+             162:             TypePointer Function 49(fvec3)
+             163:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 50 41 16
+             167:     11(int) Constant 75
+             165:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 166 50 27 167 16 105 18
+             179:     11(int) Constant 76
+             177:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 178 50 27 179 16 105 18
+             190:     11(int) Constant 77
+             197:             TypePointer Function 47(fvec4)
+             198:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 48 41 16
+             202:     11(int) Constant 80
+             200:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 201 48 27 202 16 105 18
+             214:     11(int) Constant 81
+             212:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 213 48 27 214 16 105 18
+             226:     11(int) Constant 82
+             224:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 225 48 27 226 16 105 18
+             235:             TypeImage 8(float) 2D sampled format:Unknown
+             238:     11(int) Constant 84
+             240:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 0(DebugInfoNone)
+             236:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 237 16 27 238 16 38 239 240 17
+             241:             TypePointer UniformConstant 235
+             242:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 236 16 16
+243(displacementMapTexture):    241(ptr) Variable UniformConstant
+             246:     11(int) Constant 8
+             244:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 245 236 27 238 16 38 245 243(displacementMapTexture) 246
+             249:             TypeSampler
+             250:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 251 36 27 238 16 38 252 240 17
+             253:             TypePointer UniformConstant 249
+             254:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 250 16 16
+255(displacementMapSampler):    253(ptr) Variable UniformConstant
+             256:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 257 250 27 238 16 38 257 255(displacementMapSampler) 246
+             259:             TypeSampledImage 235
+             260:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 261 16 27 238 16 38 262 240 17
+             268:             TypeMatrix 47(fvec4) 4
+             270:             TypeBool
+             272:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 271 14 21 16
+             273:   270(bool) ConstantTrue
+             269:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 48 18 273
+             274:             TypeArray 47(fvec4) 15
+             275:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 5(DebugTypeArray) 48 15
+        276(UBO):             TypeStruct 268 268 47(fvec4) 274 8(float) 8(float) 43(fvec2) 8(float)
+             279:     11(int) Constant 29
+             280:     11(int) Constant 20
+             277:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 278 269 27 279 280 16 16 17
+             281:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 278 269 27 279 280 16 16 17
+             284:     11(int) Constant 30
+             285:     11(int) Constant 17
+             282:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 283 48 27 284 285 16 16 17
+             288:     11(int) Constant 22
+             286:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 287 275 27 62 288 16 16 17
+             291:     11(int) Constant 27
+             289:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 290 10 27 58 291 16 16 17
+             292:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 290 10 27 58 291 16 16 17
+             295:     11(int) Constant 34
+             293:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 294 44 27 295 280 16 16 17
+             296:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 290 10 27 58 291 16 16 17
+             297:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 298 36 27 238 16 38 298 16 17 277 281 282 286 289 292 293 296
+        299(ubo):             TypeStruct 276(UBO)
+             300:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 301 297 27 74 74 16 16 17
+             302:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 301 36 27 238 16 38 301 16 17 300
+             303:             TypePointer Uniform 299(ubo)
+             304:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 302 21 16
+             305:    303(ptr) Variable Uniform
+             306:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 307 302 27 238 16 38 307 305 246
+             308:    126(int) Constant 4
+             309:             TypePointer Uniform 8(float)
+             310:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 10 21 16
+             320:     11(int) Constant 86
+             321:             TypePointer Uniform 268
+             322:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 269 21 16
+             332:     11(int) Constant 89
+             336:             TypePointer Uniform 47(fvec4)
+             337:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 48 21 16
+             340:     11(int) Constant 90
+             348:    126(int) Constant 6
+             351:     11(int) Constant 91
+             354:    126(int) Constant 5
+             357:     11(int) Constant 92
+             365:     11(int) Constant 93
+             371:             TypePointer Input 19
+372(input.TessLevelOuter):    371(ptr) Variable Input
+             373:             TypePointer Input 8(float)
+             386:             TypePointer Input 22
+387(input.TessLevelInner):    386(ptr) Variable Input
+             395:             TypePointer Input 49(fvec3)
+  396(TessCoord):    395(ptr) Variable Input
+             401:             TypePointer Function 65
+             403:             TypeArray 47(fvec4) 18
+             404:             TypePointer Input 403
+  405(patch.Pos):    404(ptr) Variable Input
+             406:             TypePointer Input 47(fvec4)
+             410:             TypeArray 49(fvec3) 18
+             411:             TypePointer Input 410
+412(patch.Normal):    411(ptr) Variable Input
+             416:             TypeArray 43(fvec2) 18
+             417:             TypePointer Input 416
+   418(patch.UV):    417(ptr) Variable Input
+             419:             TypePointer Input 43(fvec2)
+             457:             TypePointer Output 47(fvec4)
+458(@entryPointOutput.Pos):    457(ptr) Variable Output
+             461:             TypePointer Output 49(fvec3)
+462(@entryPointOutput.Normal):    461(ptr) Variable Output
+             465:             TypePointer Output 43(fvec2)
+466(@entryPointOutput.UV):    465(ptr) Variable Output
+469(@entryPointOutput.ViewVec):    461(ptr) Variable Output
+472(@entryPointOutput.LightVec):    461(ptr) Variable Output
+475(@entryPointOutput.EyePos):    461(ptr) Variable Output
+478(@entryPointOutput.WorldPos):    461(ptr) Variable Output
          6(main):           4 Function None 5
                7:             Label
-      350(input):     39(ptr) Variable Function
-  374(TessCoord):     42(ptr) Variable Function
-      382(patch):    381(ptr) Variable Function
-430(flattenTemp):    104(ptr) Variable Function
-      432(param):     39(ptr) Variable Function
-      434(param):     42(ptr) Variable Function
-                              Line 1 68 0
-             354:    353(ptr) AccessChain 352(input.TessLevelOuter) 123
-             355:    8(float) Load 354
-             356:    128(ptr) AccessChain 350(input) 123 123
-                              Store 356 355
-             357:    353(ptr) AccessChain 352(input.TessLevelOuter) 126
-             358:    8(float) Load 357
-             359:    128(ptr) AccessChain 350(input) 123 126
-                              Store 359 358
-             360:    353(ptr) AccessChain 352(input.TessLevelOuter) 124
-             361:    8(float) Load 360
-             362:    128(ptr) AccessChain 350(input) 123 124
-                              Store 362 361
-             363:    353(ptr) AccessChain 352(input.TessLevelOuter) 139
-             364:    8(float) Load 363
-             365:    128(ptr) AccessChain 350(input) 123 139
-                              Store 365 364
-             368:    353(ptr) AccessChain 367(input.TessLevelInner) 123
-             369:    8(float) Load 368
-             370:    128(ptr) AccessChain 350(input) 126 123
-                              Store 370 369
-             371:    353(ptr) AccessChain 367(input.TessLevelInner) 126
-             372:    8(float) Load 371
-             373:    128(ptr) AccessChain 350(input) 126 126
-                              Store 373 372
-             377:   45(fvec3) Load 376(TessCoord)
-             378:    8(float) CompositeExtract 377 0
-             379:    8(float) CompositeExtract 377 1
-             380:   40(fvec2) CompositeConstruct 378 379
-                              Store 374(TessCoord) 380
-             387:    386(ptr) AccessChain 385(patch.Pos) 123
-             388:   43(fvec4) Load 387
-             389:    191(ptr) AccessChain 382(patch) 123 123
-                              Store 389 388
-             393:    375(ptr) AccessChain 392(patch.Normal) 123
-             394:   45(fvec3) Load 393
-             395:    157(ptr) AccessChain 382(patch) 123 126
-                              Store 395 394
-             400:    399(ptr) AccessChain 398(patch.UV) 123
-             401:   40(fvec2) Load 400
-             402:     42(ptr) AccessChain 382(patch) 123 124
-                              Store 402 401
-             403:    386(ptr) AccessChain 385(patch.Pos) 126
-             404:   43(fvec4) Load 403
-             405:    191(ptr) AccessChain 382(patch) 126 123
-                              Store 405 404
-             406:    375(ptr) AccessChain 392(patch.Normal) 126
-             407:   45(fvec3) Load 406
-             408:    157(ptr) AccessChain 382(patch) 126 126
-                              Store 408 407
-             409:    399(ptr) AccessChain 398(patch.UV) 126
-             410:   40(fvec2) Load 409
-             411:     42(ptr) AccessChain 382(patch) 126 124
-                              Store 411 410
-             412:    386(ptr) AccessChain 385(patch.Pos) 124
-             413:   43(fvec4) Load 412
-             414:    191(ptr) AccessChain 382(patch) 124 123
-                              Store 414 413
-             415:    375(ptr) AccessChain 392(patch.Normal) 124
-             416:   45(fvec3) Load 415
-             417:    157(ptr) AccessChain 382(patch) 124 126
-                              Store 417 416
-             418:    399(ptr) AccessChain 398(patch.UV) 124
-             419:   40(fvec2) Load 418
-             420:     42(ptr) AccessChain 382(patch) 124 124
-                              Store 420 419
-             421:    386(ptr) AccessChain 385(patch.Pos) 139
-             422:   43(fvec4) Load 421
-             423:    191(ptr) AccessChain 382(patch) 139 123
-                              Store 423 422
-             424:    375(ptr) AccessChain 392(patch.Normal) 139
-             425:   45(fvec3) Load 424
-             426:    157(ptr) AccessChain 382(patch) 139 126
-                              Store 426 425
-             427:    399(ptr) AccessChain 398(patch.UV) 139
-             428:   40(fvec2) Load 427
-             429:     42(ptr) AccessChain 382(patch) 139 124
-                              Store 429 428
-             431:          61 Load 382(patch)
-             433:24(ConstantsHSOutput) Load 350(input)
-                              Store 432(param) 433
-             435:   40(fvec2) Load 374(TessCoord)
-                              Store 434(param) 435
-             436:63(DSOutput) FunctionCall 84(@main(struct-ConstantsHSOutput-f1[4]-f1[2]1;vf2;struct-HSOutput-vf4-vf3-vf21[4];) 432(param) 434(param) 431
-                              Store 430(flattenTemp) 436
-             439:    191(ptr) AccessChain 430(flattenTemp) 123
-             440:   43(fvec4) Load 439
-                              Store 438(@entryPointOutput.Pos) 440
-             443:    157(ptr) AccessChain 430(flattenTemp) 126
-             444:   45(fvec3) Load 443
-                              Store 442(@entryPointOutput.Normal) 444
-             447:     42(ptr) AccessChain 430(flattenTemp) 124
-             448:   40(fvec2) Load 447
-                              Store 446(@entryPointOutput.UV) 448
-             450:    157(ptr) AccessChain 430(flattenTemp) 139
-             451:   45(fvec3) Load 450
-                              Store 449(@entryPointOutput.ViewVec) 451
-             453:    157(ptr) AccessChain 430(flattenTemp) 293
-             454:   45(fvec3) Load 453
-                              Store 452(@entryPointOutput.LightVec) 454
-             456:    157(ptr) AccessChain 430(flattenTemp) 338
-             457:   45(fvec3) Load 456
-                              Store 455(@entryPointOutput.EyePos) 457
-             459:    157(ptr) AccessChain 430(flattenTemp) 332
-             460:   45(fvec3) Load 459
-                              Store 458(@entryPointOutput.WorldPos) 460
+      370(input):     40(ptr) Variable Function
+  394(TessCoord):     45(ptr) Variable Function
+      402(patch):    401(ptr) Variable Function
+450(flattenTemp):    106(ptr) Variable Function
+      452(param):     40(ptr) Variable Function
+      454(param):     45(ptr) Variable Function
+             374:    373(ptr) AccessChain 372(input.TessLevelOuter) 129
+             375:    8(float) Load 374
+             376:    134(ptr) AccessChain 370(input) 129 129
+                              Store 376 375
+             377:    373(ptr) AccessChain 372(input.TessLevelOuter) 132
+             378:    8(float) Load 377
+             379:    134(ptr) AccessChain 370(input) 129 132
+                              Store 379 378
+             380:    373(ptr) AccessChain 372(input.TessLevelOuter) 130
+             381:    8(float) Load 380
+             382:    134(ptr) AccessChain 370(input) 129 130
+                              Store 382 381
+             383:    373(ptr) AccessChain 372(input.TessLevelOuter) 146
+             384:    8(float) Load 383
+             385:    134(ptr) AccessChain 370(input) 129 146
+                              Store 385 384
+             388:    373(ptr) AccessChain 387(input.TessLevelInner) 129
+             389:    8(float) Load 388
+             390:    134(ptr) AccessChain 370(input) 132 129
+                              Store 390 389
+             391:    373(ptr) AccessChain 387(input.TessLevelInner) 132
+             392:    8(float) Load 391
+             393:    134(ptr) AccessChain 370(input) 132 132
+                              Store 393 392
+             397:   49(fvec3) Load 396(TessCoord)
+             398:    8(float) CompositeExtract 397 0
+             399:    8(float) CompositeExtract 397 1
+             400:   43(fvec2) CompositeConstruct 398 399
+                              Store 394(TessCoord) 400
+             407:    406(ptr) AccessChain 405(patch.Pos) 129
+             408:   47(fvec4) Load 407
+             409:    197(ptr) AccessChain 402(patch) 129 129
+                              Store 409 408
+             413:    395(ptr) AccessChain 412(patch.Normal) 129
+             414:   49(fvec3) Load 413
+             415:    162(ptr) AccessChain 402(patch) 129 132
+                              Store 415 414
+             420:    419(ptr) AccessChain 418(patch.UV) 129
+             421:   43(fvec2) Load 420
+             422:     45(ptr) AccessChain 402(patch) 129 130
+                              Store 422 421
+             423:    406(ptr) AccessChain 405(patch.Pos) 132
+             424:   47(fvec4) Load 423
+             425:    197(ptr) AccessChain 402(patch) 132 129
+                              Store 425 424
+             426:    395(ptr) AccessChain 412(patch.Normal) 132
+             427:   49(fvec3) Load 426
+             428:    162(ptr) AccessChain 402(patch) 132 132
+                              Store 428 427
+             429:    419(ptr) AccessChain 418(patch.UV) 132
+             430:   43(fvec2) Load 429
+             431:     45(ptr) AccessChain 402(patch) 132 130
+                              Store 431 430
+             432:    406(ptr) AccessChain 405(patch.Pos) 130
+             433:   47(fvec4) Load 432
+             434:    197(ptr) AccessChain 402(patch) 130 129
+                              Store 434 433
+             435:    395(ptr) AccessChain 412(patch.Normal) 130
+             436:   49(fvec3) Load 435
+             437:    162(ptr) AccessChain 402(patch) 130 132
+                              Store 437 436
+             438:    419(ptr) AccessChain 418(patch.UV) 130
+             439:   43(fvec2) Load 438
+             440:     45(ptr) AccessChain 402(patch) 130 130
+                              Store 440 439
+             441:    406(ptr) AccessChain 405(patch.Pos) 146
+             442:   47(fvec4) Load 441
+             443:    197(ptr) AccessChain 402(patch) 146 129
+                              Store 443 442
+             444:    395(ptr) AccessChain 412(patch.Normal) 146
+             445:   49(fvec3) Load 444
+             446:    162(ptr) AccessChain 402(patch) 146 132
+                              Store 446 445
+             447:    419(ptr) AccessChain 418(patch.UV) 146
+             448:   43(fvec2) Load 447
+             449:     45(ptr) AccessChain 402(patch) 146 130
+                              Store 449 448
+             451:          65 Load 402(patch)
+             453:24(ConstantsHSOutput) Load 370(input)
+                              Store 452(param) 453
+             455:   43(fvec2) Load 394(TessCoord)
+                              Store 454(param) 455
+             456:67(DSOutput) FunctionCall 88(@main(struct-ConstantsHSOutput-f1[4]-f1[2]1;vf2;struct-HSOutput-vf4-vf3-vf21[4];) 452(param) 454(param) 451
+                              Store 450(flattenTemp) 456
+             459:    197(ptr) AccessChain 450(flattenTemp) 129
+             460:   47(fvec4) Load 459
+                              Store 458(@entryPointOutput.Pos) 460
+             463:    162(ptr) AccessChain 450(flattenTemp) 132
+             464:   49(fvec3) Load 463
+                              Store 462(@entryPointOutput.Normal) 464
+             467:     45(ptr) AccessChain 450(flattenTemp) 130
+             468:   43(fvec2) Load 467
+                              Store 466(@entryPointOutput.UV) 468
+             470:    162(ptr) AccessChain 450(flattenTemp) 146
+             471:   49(fvec3) Load 470
+                              Store 469(@entryPointOutput.ViewVec) 471
+             473:    162(ptr) AccessChain 450(flattenTemp) 308
+             474:   49(fvec3) Load 473
+                              Store 472(@entryPointOutput.LightVec) 474
+             476:    162(ptr) AccessChain 450(flattenTemp) 354
+             477:   49(fvec3) Load 476
+                              Store 475(@entryPointOutput.EyePos) 477
+             479:    162(ptr) AccessChain 450(flattenTemp) 348
+             480:   49(fvec3) Load 479
+                              Store 478(@entryPointOutput.WorldPos) 480
                               Return
                               FunctionEnd
-                              Line 1 68 1
-84(@main(struct-ConstantsHSOutput-f1[4]-f1[2]1;vf2;struct-HSOutput-vf4-vf3-vf21[4];):63(DSOutput) Function None 79
-       81(input):     39(ptr) FunctionParameter
-   82(TessCoord):     42(ptr) FunctionParameter
-       83(patch):          61 FunctionParameter
-              87:             Label
-     105(output):    104(ptr) Variable Function
-        116(uv1):     42(ptr) Variable Function
-        135(uv2):     42(ptr) Variable Function
-         158(n1):    157(ptr) Variable Function
-         170(n2):    157(ptr) Variable Function
-       192(pos1):    191(ptr) Variable Function
-       204(pos2):    191(ptr) Variable Function
-        216(pos):    191(ptr) Variable Function
-              88:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 86
-              89:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 16 16 16 16
-              92:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 90 81(input) 93
-              96:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 94 82(TessCoord) 93
-              99:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 97 83(patch) 93
-             100:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 86 84(@main(struct-ConstantsHSOutput-f1[4]-f1[2]1;vf2;struct-HSOutput-vf4-vf3-vf21[4];)
-             101:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 86
-             102:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 103 103 16 16
-             108:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 106 105(output) 93
-                              Store 105(output) 113
-             114:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 115 115 16 16
-             119:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 117 116(uv1) 93
-             125:   40(fvec2) CompositeExtract 83(patch) 0 2
-             127:   40(fvec2) CompositeExtract 83(patch) 1 2
-             129:    128(ptr) AccessChain 82(TessCoord) 16
-             130:    8(float) Load 129
-             131:   40(fvec2) CompositeConstruct 130 130
-             132:   40(fvec2) ExtInst 3(GLSL.std.450) 46(FMix) 125 127 131
-                              Store 116(uv1) 132
-             133:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 134 134 16 16
-             138:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 136 135(uv2) 93
-             140:   40(fvec2) CompositeExtract 83(patch) 3 2
-             141:   40(fvec2) CompositeExtract 83(patch) 2 2
-             142:    128(ptr) AccessChain 82(TessCoord) 16
-             143:    8(float) Load 142
-             144:   40(fvec2) CompositeConstruct 143 143
-             145:   40(fvec2) ExtInst 3(GLSL.std.450) 46(FMix) 140 141 144
-                              Store 135(uv2) 145
-             146:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 147 147 16 16
-             148:   40(fvec2) Load 116(uv1)
-             149:   40(fvec2) Load 135(uv2)
-             150:    128(ptr) AccessChain 82(TessCoord) 36
-             151:    8(float) Load 150
-             152:   40(fvec2) CompositeConstruct 151 151
-             153:   40(fvec2) ExtInst 3(GLSL.std.450) 46(FMix) 148 149 152
-             154:     42(ptr) AccessChain 105(output) 124
-                              Store 154 153
-             155:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 156 156 16 16
-             161:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 159 158(n1) 93
-             162:   45(fvec3) CompositeExtract 83(patch) 0 1
-             163:   45(fvec3) CompositeExtract 83(patch) 1 1
-             164:    128(ptr) AccessChain 82(TessCoord) 16
-             165:    8(float) Load 164
-             166:   45(fvec3) CompositeConstruct 165 165 165
-             167:   45(fvec3) ExtInst 3(GLSL.std.450) 46(FMix) 162 163 166
-                              Store 158(n1) 167
-             168:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 169 169 16 16
-             173:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 171 170(n2) 93
-             174:   45(fvec3) CompositeExtract 83(patch) 3 1
-             175:   45(fvec3) CompositeExtract 83(patch) 2 1
-             176:    128(ptr) AccessChain 82(TessCoord) 16
-             177:    8(float) Load 176
-             178:   45(fvec3) CompositeConstruct 177 177 177
-             179:   45(fvec3) ExtInst 3(GLSL.std.450) 46(FMix) 174 175 178
-                              Store 170(n2) 179
-             180:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 181 181 16 16
-             182:   45(fvec3) Load 158(n1)
-             183:   45(fvec3) Load 170(n2)
-             184:    128(ptr) AccessChain 82(TessCoord) 36
+88(@main(struct-ConstantsHSOutput-f1[4]-f1[2]1;vf2;struct-HSOutput-vf4-vf3-vf21[4];):67(DSOutput) Function None 83
+       85(input):     40(ptr) FunctionParameter
+   86(TessCoord):     45(ptr) FunctionParameter
+       87(patch):          65 FunctionParameter
+              89:             Label
+     108(output):    106(ptr) Variable Function
+        120(uv1):     45(ptr) Variable Function
+        140(uv2):     45(ptr) Variable Function
+         164(n1):    162(ptr) Variable Function
+         176(n2):    162(ptr) Variable Function
+       199(pos1):    197(ptr) Variable Function
+       211(pos2):    197(ptr) Variable Function
+        223(pos):    197(ptr) Variable Function
+              96:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 91
+              97:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 37 37 16 16
+              94:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 92 85(input) 95
+             100:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 98 86(TessCoord) 95
+             103:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 101 87(patch) 95
+             104:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 91 88(@main(struct-ConstantsHSOutput-f1[4]-f1[2]1;vf2;struct-HSOutput-vf4-vf3-vf21[4];)
+             113:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 105
+             114:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 111 111 16 16
+             112:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 109 108(output) 95
+                              Store 108(output) 119
+             125:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 123 123 16 16
+             124:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 121 120(uv1) 95
+             131:   43(fvec2) CompositeExtract 87(patch) 0 2
+             133:   43(fvec2) CompositeExtract 87(patch) 1 2
+             136:    134(ptr) AccessChain 86(TessCoord) 16
+             137:    8(float) Load 136
+             138:   43(fvec2) CompositeConstruct 137 137
+             139:   43(fvec2) ExtInst 3(GLSL.std.450) 46(FMix) 131 133 138
+                              Store 120(uv1) 139
+             145:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 143 143 16 16
+             144:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 141 140(uv2) 95
+             147:   43(fvec2) CompositeExtract 87(patch) 3 2
+             148:   43(fvec2) CompositeExtract 87(patch) 2 2
+             149:    134(ptr) AccessChain 86(TessCoord) 16
+             150:    8(float) Load 149
+             151:   43(fvec2) CompositeConstruct 150 150
+             152:   43(fvec2) ExtInst 3(GLSL.std.450) 46(FMix) 147 148 151
+                              Store 140(uv2) 152
+             154:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 155 155 16 16
+             153:   43(fvec2) Load 120(uv1)
+             156:   43(fvec2) Load 140(uv2)
+             157:    134(ptr) AccessChain 86(TessCoord) 36
+             158:    8(float) Load 157
+             159:   43(fvec2) CompositeConstruct 158 158
+             160:   43(fvec2) ExtInst 3(GLSL.std.450) 46(FMix) 153 156 159
+             161:     45(ptr) AccessChain 108(output) 130
+                              Store 161 160
+             169:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 167 167 16 16
+             168:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 165 164(n1) 95
+             170:   49(fvec3) CompositeExtract 87(patch) 0 1
+             171:   49(fvec3) CompositeExtract 87(patch) 1 1
+             172:    134(ptr) AccessChain 86(TessCoord) 16
+             173:    8(float) Load 172
+             174:   49(fvec3) CompositeConstruct 173 173 173
+             175:   49(fvec3) ExtInst 3(GLSL.std.450) 46(FMix) 170 171 174
+                              Store 164(n1) 175
+             181:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 179 179 16 16
+             180:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 177 176(n2) 95
+             182:   49(fvec3) CompositeExtract 87(patch) 3 1
+             183:   49(fvec3) CompositeExtract 87(patch) 2 1
+             184:    134(ptr) AccessChain 86(TessCoord) 16
              185:    8(float) Load 184
-             186:   45(fvec3) CompositeConstruct 185 185 185
-             187:   45(fvec3) ExtInst 3(GLSL.std.450) 46(FMix) 182 183 186
-             188:    157(ptr) AccessChain 105(output) 126
-                              Store 188 187
-             189:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 190 190 16 16
-             195:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 193 192(pos1) 93
-             196:   43(fvec4) CompositeExtract 83(patch) 0 0
-             197:   43(fvec4) CompositeExtract 83(patch) 1 0
-             198:    128(ptr) AccessChain 82(TessCoord) 16
-             199:    8(float) Load 198
-             200:   43(fvec4) CompositeConstruct 199 199 199 199
-             201:   43(fvec4) ExtInst 3(GLSL.std.450) 46(FMix) 196 197 200
-                              Store 192(pos1) 201
-             202:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 203 203 16 16
-             207:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 205 204(pos2) 93
-             208:   43(fvec4) CompositeExtract 83(patch) 3 0
-             209:   43(fvec4) CompositeExtract 83(patch) 2 0
-             210:    128(ptr) AccessChain 82(TessCoord) 16
-             211:    8(float) Load 210
-             212:   43(fvec4) CompositeConstruct 211 211 211 211
-             213:   43(fvec4) ExtInst 3(GLSL.std.450) 46(FMix) 208 209 212
-                              Store 204(pos2) 213
-             214:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 215 215 16 16
-             219:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 217 216(pos) 93
-             220:   43(fvec4) Load 192(pos1)
-             221:   43(fvec4) Load 204(pos2)
-             222:    128(ptr) AccessChain 82(TessCoord) 36
-             223:    8(float) Load 222
-             224:   43(fvec4) CompositeConstruct 223 223 223 223
-             225:   43(fvec4) ExtInst 3(GLSL.std.450) 46(FMix) 220 221 224
-                              Store 216(pos) 225
-             226:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 227 227 16 16
-             238:         228 Load 234(displacementMapTexture)
-             247:         239 Load 244(displacementMapSampler)
-             252:         248 SampledImage 238 247
-             253:     42(ptr) AccessChain 105(output) 124
-             254:   40(fvec2) Load 253
-             255:   43(fvec4) ImageSampleExplicitLod 252 254 Lod 109
-             256:    8(float) CompositeExtract 255 0
-             295:    294(ptr) AccessChain 291 123 293
-             296:    8(float) Load 295
-             297:    8(float) FMul 256 296
-             298:    128(ptr) AccessChain 216(pos) 36
-             299:    8(float) Load 298
-             300:    8(float) FSub 299 297
-             301:    128(ptr) AccessChain 216(pos) 36
-                              Store 301 300
-             302:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 303 303 16 16
-             304:   43(fvec4) Load 216(pos)
-             306:    305(ptr) AccessChain 291 123 126
-             307:         257 Load 306
-             308:   43(fvec4) VectorTimesMatrix 304 307
-             309:    305(ptr) AccessChain 291 123 123
-             310:         257 Load 309
-             311:   43(fvec4) VectorTimesMatrix 308 310
-             312:    191(ptr) AccessChain 105(output) 123
-                              Store 312 311
-             313:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 314 314 16 16
-             315:   43(fvec4) Load 216(pos)
-             316:   45(fvec3) VectorShuffle 315 315 0 1 2
-             317:   45(fvec3) FNegate 316
-             318:    157(ptr) AccessChain 105(output) 139
-                              Store 318 317
-             319:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 320 320 16 16
-             322:    321(ptr) AccessChain 291 123 124
-             323:   43(fvec4) Load 322
-             324:   45(fvec3) VectorShuffle 323 323 0 1 2
-             325:    157(ptr) AccessChain 105(output) 139
-             326:   45(fvec3) Load 325
-             327:   45(fvec3) FAdd 324 326
-             328:   45(fvec3) ExtInst 3(GLSL.std.450) 69(Normalize) 327
-             329:    157(ptr) AccessChain 105(output) 293
+             186:   49(fvec3) CompositeConstruct 185 185 185
+             187:   49(fvec3) ExtInst 3(GLSL.std.450) 46(FMix) 182 183 186
+                              Store 176(n2) 187
+             189:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 190 190 16 16
+             188:   49(fvec3) Load 164(n1)
+             191:   49(fvec3) Load 176(n2)
+             192:    134(ptr) AccessChain 86(TessCoord) 36
+             193:    8(float) Load 192
+             194:   49(fvec3) CompositeConstruct 193 193 193
+             195:   49(fvec3) ExtInst 3(GLSL.std.450) 46(FMix) 188 191 194
+             196:    162(ptr) AccessChain 108(output) 132
+                              Store 196 195
+             204:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 202 202 16 16
+             203:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 200 199(pos1) 95
+             205:   47(fvec4) CompositeExtract 87(patch) 0 0
+             206:   47(fvec4) CompositeExtract 87(patch) 1 0
+             207:    134(ptr) AccessChain 86(TessCoord) 16
+             208:    8(float) Load 207
+             209:   47(fvec4) CompositeConstruct 208 208 208 208
+             210:   47(fvec4) ExtInst 3(GLSL.std.450) 46(FMix) 205 206 209
+                              Store 199(pos1) 210
+             216:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 214 214 16 16
+             215:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 212 211(pos2) 95
+             217:   47(fvec4) CompositeExtract 87(patch) 3 0
+             218:   47(fvec4) CompositeExtract 87(patch) 2 0
+             219:    134(ptr) AccessChain 86(TessCoord) 16
+             220:    8(float) Load 219
+             221:   47(fvec4) CompositeConstruct 220 220 220 220
+             222:   47(fvec4) ExtInst 3(GLSL.std.450) 46(FMix) 217 218 221
+                              Store 211(pos2) 222
+             228:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 226 226 16 16
+             227:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 224 223(pos) 95
+             229:   47(fvec4) Load 199(pos1)
+             230:   47(fvec4) Load 211(pos2)
+             231:    134(ptr) AccessChain 86(TessCoord) 36
+             232:    8(float) Load 231
+             233:   47(fvec4) CompositeConstruct 232 232 232 232
+             234:   47(fvec4) ExtInst 3(GLSL.std.450) 46(FMix) 229 230 233
+                              Store 223(pos) 234
+             248:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 238 238 16 16
+             247:         235 Load 243(displacementMapTexture)
+             258:         249 Load 255(displacementMapSampler)
+             263:         259 SampledImage 247 258
+             264:     45(ptr) AccessChain 108(output) 130
+             265:   43(fvec2) Load 264
+             266:   47(fvec4) ImageSampleExplicitLod 263 265 Lod 115
+             267:    8(float) CompositeExtract 266 0
+             311:    309(ptr) AccessChain 305 129 308
+             312:    8(float) Load 311
+             313:    8(float) FMul 267 312
+             314:    134(ptr) AccessChain 223(pos) 36
+             315:    8(float) Load 314
+             316:    8(float) FSub 315 313
+             317:    134(ptr) AccessChain 223(pos) 36
+                              Store 317 316
+             319:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 320 320 16 16
+             318:   47(fvec4) Load 223(pos)
+             323:    321(ptr) AccessChain 305 129 132
+             324:         268 Load 323
+             325:   47(fvec4) VectorTimesMatrix 318 324
+             326:    321(ptr) AccessChain 305 129 129
+             327:         268 Load 326
+             328:   47(fvec4) VectorTimesMatrix 325 327
+             329:    197(ptr) AccessChain 108(output) 129
                               Store 329 328
-             330:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 331 331 16 16
-             333:   43(fvec4) Load 216(pos)
-             334:   45(fvec3) VectorShuffle 333 333 0 1 2
-             335:    157(ptr) AccessChain 105(output) 332
+             331:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 332 332 16 16
+             330:   47(fvec4) Load 223(pos)
+             333:   49(fvec3) VectorShuffle 330 330 0 1 2
+             334:   49(fvec3) FNegate 333
+             335:    162(ptr) AccessChain 108(output) 146
                               Store 335 334
-             336:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 337 337 16 16
-             339:   43(fvec4) Load 216(pos)
-             340:    305(ptr) AccessChain 291 123 126
-             341:         257 Load 340
-             342:   43(fvec4) VectorTimesMatrix 339 341
-             343:   45(fvec3) VectorShuffle 342 342 0 1 2
-             344:    157(ptr) AccessChain 105(output) 338
-                              Store 344 343
-             345:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 346 346 16 16
-             347:63(DSOutput) Load 105(output)
-                              ReturnValue 347
+             339:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 340 340 16 16
+             338:    336(ptr) AccessChain 305 129 130
+             341:   47(fvec4) Load 338
+             342:   49(fvec3) VectorShuffle 341 341 0 1 2
+             343:    162(ptr) AccessChain 108(output) 146
+             344:   49(fvec3) Load 343
+             345:   49(fvec3) FAdd 342 344
+             346:   49(fvec3) ExtInst 3(GLSL.std.450) 69(Normalize) 345
+             347:    162(ptr) AccessChain 108(output) 308
+                              Store 347 346
+             350:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 351 351 16 16
+             349:   47(fvec4) Load 223(pos)
+             352:   49(fvec3) VectorShuffle 349 349 0 1 2
+             353:    162(ptr) AccessChain 108(output) 348
+                              Store 353 352
+             356:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 357 357 16 16
+             355:   47(fvec4) Load 223(pos)
+             358:    321(ptr) AccessChain 305 129 132
+             359:         268 Load 358
+             360:   47(fvec4) VectorTimesMatrix 355 359
+             361:   49(fvec3) VectorShuffle 360 360 0 1 2
+             362:    162(ptr) AccessChain 108(output) 354
+                              Store 362 361
+             364:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 27 365 365 16 16
+             363:67(DSOutput) Load 108(output)
+                              ReturnValue 363
                               FunctionEnd
diff --git a/Test/baseResults/spv.debuginfo.hlsl.vert.out b/Test/baseResults/spv.debuginfo.hlsl.vert.out
index 94431ed..4e49f04 100644
--- a/Test/baseResults/spv.debuginfo.hlsl.vert.out
+++ b/Test/baseResults/spv.debuginfo.hlsl.vert.out
@@ -1,15 +1,15 @@
 spv.debuginfo.hlsl.vert
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 495
+// Id's are bound by 518
 
                               Capability Shader
                               Extension  "SPV_KHR_non_semantic_info"
-               2:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
                3:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Vertex 6  "main" 444 447 451 454 457 460 464 468 476 480 483 486 489 492
-               1:             String  ""
+                              EntryPoint Vertex 6  "main" 467 470 474 477 480 483 487 491 499 503 506 509 512 515
+               2:             String  "spv.debuginfo.hlsl.vert"
                9:             String  "float"
               12:             String  "uint"
               24:             String  "int"
@@ -22,32 +22,146 @@
 // OpModuleProcessed keep-uncalled
 // OpModuleProcessed hlsl-offsets
 #line 1
+/*
+The MIT License (MIT)
+
+Copyright (c) 2022 Google LLC
+Copyright (c) 2022 Sascha Willems
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+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 Software.
+
+THE SOFTWARE IS 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 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+*/
+
+struct VSInput
+{
+[[vk::location(0)]] float3 Pos : POSITION0;
+[[vk::location(1)]] float3 Normal : NORMAL0;
+[[vk::location(2)]] float2 UV : TEXCOORD0;
+[[vk::location(3)]] float3 Color : COLOR0;
+
+// Instanced attributes
+[[vk::location(4)]] float3 instancePos : POSITION1;
+[[vk::location(5)]] float3 instanceRot : TEXCOORD1;
+[[vk::location(6)]] float instanceScale : TEXCOORD2;
+[[vk::location(7)]] int instanceTexIndex : TEXCOORD3;
+};
+
+struct UBO
+{
+	float4x4 projection;
+	float4x4 modelview;
+	float4 lightPos;
+	float locSpeed;
+	float globSpeed;
+};
+
+cbuffer ubo : register(b0) { UBO ubo; }
+
+struct VSOutput
+{
+	float4 Pos : SV_POSITION;
+[[vk::location(0)]] float3 Normal : NORMAL0;
+[[vk::location(1)]] float3 Color : COLOR0;
+[[vk::location(2)]] float3 UV : TEXCOORD0;
+[[vk::location(3)]] float3 ViewVec : TEXCOORD1;
+[[vk::location(4)]] float3 LightVec : TEXCOORD2;
+};
+
+VSOutput main(VSInput input)
+{
+	VSOutput output = (VSOutput)0;
+	output.Color = input.Color;
+	output.UV = float3(input.UV, input.instanceTexIndex);
+
+	// rotate around x
+	float s = sin(input.instanceRot.x + ubo.locSpeed);
+	float c = cos(input.instanceRot.x + ubo.locSpeed);
+
+	float3x3 mx = { c, -s, 0.0,
+					s, c, 0.0,
+					0.0, 0.0, 1.0 };
+
+	// rotate around y
+	s = sin(input.instanceRot.y + ubo.locSpeed);
+	c = cos(input.instanceRot.y + ubo.locSpeed);
+
+	float3x3 my = { c, 0.0, -s,
+					0.0, 1.0, 0.0,
+					s, 0.0, c };
+
+	// rot around z
+	s = sin(input.instanceRot.z + ubo.locSpeed);
+	c = cos(input.instanceRot.z + ubo.locSpeed);
+
+	float3x3 mz = { 1.0, 0.0, 0.0,
+					0.0, c, -s,
+					0.0, s, c };
+
+	float3x3 rotMat = mul(mz, mul(my, mx));
+
+	float4x4 gRotMat;
+	s = sin(input.instanceRot.y + ubo.globSpeed);
+	c = cos(input.instanceRot.y + ubo.globSpeed);
+	gRotMat[0] = float4(c, 0.0, -s, 0.0);
+	gRotMat[1] = float4(0.0, 1.0, 0.0, 0.0);
+	gRotMat[2] = float4(s, 0.0, c, 0.0);
+	gRotMat[3] = float4(0.0, 0.0, 0.0, 1.0);
+
+	float4 locPos = float4(mul(rotMat, input.Pos.xyz), 1.0);
+	float4 pos = float4((locPos.xyz * input.instanceScale) + input.instancePos, 1.0);
+
+	output.Pos = mul(ubo.projection, mul(ubo.modelview, mul(gRotMat, pos)));
+	output.Normal = mul((float3x3)mul(ubo.modelview, gRotMat), mul(rotMat, input.Normal));
+
+	pos = mul(ubo.modelview, float4(input.Pos.xyz + input.instancePos, 1.0));
+	float3 lPos = mul((float3x3)ubo.modelview, ubo.lightPos.xyz);
+	output.LightVec = lPos - pos.xyz;
+	output.ViewVec = -pos.xyz;
+	return output;
+}
 "
               36:             String  "UV"
               43:             String  "instanceScale"
               47:             String  "instanceTexIndex"
               51:             String  "VSInput"
-              60:             String  "Pos"
-              64:             String  "LightVec"
-              71:             String  "VSOutput"
-              76:             String  "@main"
-              82:             String  "input"
-              92:             String  "output"
-             125:             String  "s"
-             136:             String  "modelview"
-             141:             String  "lightPos"
-             145:             String  "globSpeed"
-             149:             String  "UBO"
-             152:             String  "ubo"
-             169:             String  "c"
-             184:             String  "mx"
-             219:             String  "my"
-             253:             String  "mz"
-             273:             String  "rotMat"
-             302:             String  "gRotMat"
-             329:             String  "locPos"
-             343:             String  "pos"
-             408:             String  "lPos"
+              63:             String  "Pos"
+              67:             String  "LightVec"
+              74:             String  "VSOutput"
+              80:             String  "@main"
+              83:             String  "input"
+              94:             String  "output"
+             132:             String  "s"
+             142:             String  "bool"
+             147:             String  "modelview"
+             152:             String  "lightPos"
+             156:             String  "globSpeed"
+             160:             String  "UBO"
+             163:             String  "ubo"
+             170:             String  ""
+             181:             String  "c"
+             197:             String  "mx"
+             232:             String  "my"
+             266:             String  "mz"
+             286:             String  "rotMat"
+             299:             String  "gRotMat"
+             346:             String  "locPos"
+             360:             String  "pos"
+             426:             String  "lPos"
                               Name 6  "main"
                               Name 27  "VSInput"
                               MemberName 27(VSInput) 0  "Pos"
@@ -58,79 +172,79 @@
                               MemberName 27(VSInput) 5  "instanceRot"
                               MemberName 27(VSInput) 6  "instanceScale"
                               MemberName 27(VSInput) 7  "instanceTexIndex"
-                              Name 58  "VSOutput"
-                              MemberName 58(VSOutput) 0  "Pos"
-                              MemberName 58(VSOutput) 1  "Normal"
-                              MemberName 58(VSOutput) 2  "Color"
-                              MemberName 58(VSOutput) 3  "UV"
-                              MemberName 58(VSOutput) 4  "ViewVec"
-                              MemberName 58(VSOutput) 5  "LightVec"
-                              Name 75  "@main(struct-VSInput-vf3-vf3-vf2-vf3-vf3-vf3-f1-i11;"
-                              Name 74  "input"
-                              Name 90  "output"
-                              Name 123  "s"
-                              Name 134  "UBO"
-                              MemberName 134(UBO) 0  "projection"
-                              MemberName 134(UBO) 1  "modelview"
-                              MemberName 134(UBO) 2  "lightPos"
-                              MemberName 134(UBO) 3  "locSpeed"
-                              MemberName 134(UBO) 4  "globSpeed"
-                              Name 150  "ubo"
-                              MemberName 150(ubo) 0  "ubo"
-                              Name 156  ""
-                              Name 167  "c"
-                              Name 182  "mx"
-                              Name 217  "my"
-                              Name 251  "mz"
-                              Name 271  "rotMat"
-                              Name 300  "gRotMat"
-                              Name 327  "locPos"
-                              Name 341  "pos"
-                              Name 406  "lPos"
-                              Name 442  "input"
-                              Name 444  "input.Pos"
-                              Name 447  "input.Normal"
-                              Name 451  "input.UV"
-                              Name 454  "input.Color"
-                              Name 457  "input.instancePos"
-                              Name 460  "input.instanceRot"
-                              Name 464  "input.instanceScale"
-                              Name 468  "input.instanceTexIndex"
-                              Name 471  "flattenTemp"
-                              Name 472  "param"
-                              Name 476  "@entryPointOutput.Pos"
-                              Name 480  "@entryPointOutput.Normal"
-                              Name 483  "@entryPointOutput.Color"
-                              Name 486  "@entryPointOutput.UV"
-                              Name 489  "@entryPointOutput.ViewVec"
-                              Name 492  "@entryPointOutput.LightVec"
-                              MemberDecorate 134(UBO) 0 RowMajor
-                              MemberDecorate 134(UBO) 0 Offset 0
-                              MemberDecorate 134(UBO) 0 MatrixStride 16
-                              MemberDecorate 134(UBO) 1 RowMajor
-                              MemberDecorate 134(UBO) 1 Offset 64
-                              MemberDecorate 134(UBO) 1 MatrixStride 16
-                              MemberDecorate 134(UBO) 2 Offset 128
-                              MemberDecorate 134(UBO) 3 Offset 144
-                              MemberDecorate 134(UBO) 4 Offset 148
-                              MemberDecorate 150(ubo) 0 Offset 0
-                              Decorate 150(ubo) Block
-                              Decorate 156 DescriptorSet 0
-                              Decorate 156 Binding 0
-                              Decorate 444(input.Pos) Location 0
-                              Decorate 447(input.Normal) Location 1
-                              Decorate 451(input.UV) Location 2
-                              Decorate 454(input.Color) Location 3
-                              Decorate 457(input.instancePos) Location 4
-                              Decorate 460(input.instanceRot) Location 5
-                              Decorate 464(input.instanceScale) Location 6
-                              Decorate 468(input.instanceTexIndex) Location 7
-                              Decorate 476(@entryPointOutput.Pos) BuiltIn Position
-                              Decorate 480(@entryPointOutput.Normal) Location 0
-                              Decorate 483(@entryPointOutput.Color) Location 1
-                              Decorate 486(@entryPointOutput.UV) Location 2
-                              Decorate 489(@entryPointOutput.ViewVec) Location 3
-                              Decorate 492(@entryPointOutput.LightVec) Location 4
+                              Name 61  "VSOutput"
+                              MemberName 61(VSOutput) 0  "Pos"
+                              MemberName 61(VSOutput) 1  "Normal"
+                              MemberName 61(VSOutput) 2  "Color"
+                              MemberName 61(VSOutput) 3  "UV"
+                              MemberName 61(VSOutput) 4  "ViewVec"
+                              MemberName 61(VSOutput) 5  "LightVec"
+                              Name 78  "@main(struct-VSInput-vf3-vf3-vf2-vf3-vf3-vf3-f1-i11;"
+                              Name 77  "input"
+                              Name 92  "output"
+                              Name 130  "s"
+                              Name 145  "UBO"
+                              MemberName 145(UBO) 0  "projection"
+                              MemberName 145(UBO) 1  "modelview"
+                              MemberName 145(UBO) 2  "lightPos"
+                              MemberName 145(UBO) 3  "locSpeed"
+                              MemberName 145(UBO) 4  "globSpeed"
+                              Name 161  "ubo"
+                              MemberName 161(ubo) 0  "ubo"
+                              Name 168  ""
+                              Name 179  "c"
+                              Name 195  "mx"
+                              Name 230  "my"
+                              Name 264  "mz"
+                              Name 284  "rotMat"
+                              Name 297  "gRotMat"
+                              Name 344  "locPos"
+                              Name 358  "pos"
+                              Name 424  "lPos"
+                              Name 465  "input"
+                              Name 467  "input.Pos"
+                              Name 470  "input.Normal"
+                              Name 474  "input.UV"
+                              Name 477  "input.Color"
+                              Name 480  "input.instancePos"
+                              Name 483  "input.instanceRot"
+                              Name 487  "input.instanceScale"
+                              Name 491  "input.instanceTexIndex"
+                              Name 494  "flattenTemp"
+                              Name 495  "param"
+                              Name 499  "@entryPointOutput.Pos"
+                              Name 503  "@entryPointOutput.Normal"
+                              Name 506  "@entryPointOutput.Color"
+                              Name 509  "@entryPointOutput.UV"
+                              Name 512  "@entryPointOutput.ViewVec"
+                              Name 515  "@entryPointOutput.LightVec"
+                              MemberDecorate 145(UBO) 0 RowMajor
+                              MemberDecorate 145(UBO) 0 MatrixStride 16
+                              MemberDecorate 145(UBO) 0 Offset 0
+                              MemberDecorate 145(UBO) 1 RowMajor
+                              MemberDecorate 145(UBO) 1 MatrixStride 16
+                              MemberDecorate 145(UBO) 1 Offset 64
+                              MemberDecorate 145(UBO) 2 Offset 128
+                              MemberDecorate 145(UBO) 3 Offset 144
+                              MemberDecorate 145(UBO) 4 Offset 148
+                              Decorate 161(ubo) Block
+                              MemberDecorate 161(ubo) 0 Offset 0
+                              Decorate 168 Binding 0
+                              Decorate 168 DescriptorSet 0
+                              Decorate 467(input.Pos) Location 0
+                              Decorate 470(input.Normal) Location 1
+                              Decorate 474(input.UV) Location 2
+                              Decorate 477(input.Color) Location 3
+                              Decorate 480(input.instancePos) Location 4
+                              Decorate 483(input.instanceRot) Location 5
+                              Decorate 487(input.instanceScale) Location 6
+                              Decorate 491(input.instanceTexIndex) Location 7
+                              Decorate 499(@entryPointOutput.Pos) BuiltIn Position
+                              Decorate 503(@entryPointOutput.Normal) Location 0
+                              Decorate 506(@entryPointOutput.Color) Location 1
+                              Decorate 509(@entryPointOutput.UV) Location 2
+                              Decorate 512(@entryPointOutput.ViewVec) Location 3
+                              Decorate 515(@entryPointOutput.LightVec) Location 4
                4:             TypeVoid
                5:             TypeFunction 4
                8:             TypeFloat 32
@@ -138,505 +252,521 @@
               14:     11(int) Constant 32
               15:     11(int) Constant 6
               16:     11(int) Constant 0
-              13:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 12 14 15 16
+              13:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 12 14 15 16
               17:     11(int) Constant 3
-              10:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 9 14 17 16
+              10:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 9 14 17 16
               18:             TypeVector 8(float) 3
-              19:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 17
+              19:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 17
               20:             TypeVector 8(float) 2
               21:     11(int) Constant 2
-              22:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 21
+              22:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 21
               23:             TypeInt 32 1
               26:     11(int) Constant 4
-              25:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 24 14 26 16
+              25:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 24 14 26 16
      27(VSInput):             TypeStruct 18(fvec3) 18(fvec3) 20(fvec2) 18(fvec3) 18(fvec3) 18(fvec3) 8(float) 23(int)
-              30:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 1 31
+              30:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 2 31
               32:     11(int) Constant 35
               33:     11(int) Constant 40
-              28:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 29 19 30 32 33 16 16 17
-              34:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 29 19 30 32 33 16 16 17
+              28:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 29 19 30 32 33 16 16 17
+              34:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 29 19 30 32 33 16 16 17
               37:     11(int) Constant 30
               38:     11(int) Constant 31
-              35:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 36 22 30 37 38 16 16 17
-              39:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 29 19 30 32 33 16 16 17
-              40:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 29 19 30 32 33 16 16 17
-              41:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 29 19 30 32 33 16 16 17
+              35:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 36 22 30 37 38 16 16 17
+              39:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 29 19 30 32 33 16 16 17
+              40:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 29 19 30 32 33 16 16 17
+              41:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 29 19 30 32 33 16 16 17
               44:     11(int) Constant 36
               45:     11(int) Constant 41
-              42:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 43 10 30 44 45 16 16 17
+              42:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 43 10 30 44 45 16 16 17
               48:     11(int) Constant 37
               49:     11(int) Constant 42
-              46:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 47 25 30 48 49 16 16 17
+              46:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 47 25 30 48 49 16 16 17
               52:     11(int) Constant 1
-              54:     11(int) Constant 5
-              53:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 52 26 30 54
-              50:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 51 52 30 16 16 53 51 16 17 28 34 35 39 40 41 42 46
-              55:             TypePointer Function 27(VSInput)
-              56:             TypeVector 8(float) 4
-              57:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 26
-    58(VSOutput):             TypeStruct 56(fvec4) 18(fvec3) 18(fvec3) 18(fvec3) 18(fvec3) 18(fvec3)
-              61:     11(int) Constant 53
-              62:     11(int) Constant 13
-              59:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 60 57 30 61 62 16 16 17
-              65:     11(int) Constant 58
-              63:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 64 19 30 65 48 16 16 17
-              66:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 64 19 30 65 48 16 16 17
-              67:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 64 19 30 65 48 16 16 17
-              68:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 64 19 30 65 48 16 16 17
-              69:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 64 19 30 65 48 16 16 17
-              70:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 71 52 30 16 16 53 71 16 17 59 63 66 67 68 69
-              72:             TypeFunction 58(VSOutput) 55(ptr)
-              73:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 70 50
-              77:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 76 73 30 16 16 53 76 17 16
-              81:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 82 50 30 16 16 77 26 52
-              84:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
-              88:     11(int) Constant 63
-              89:             TypePointer Function 58(VSOutput)
-              91:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 92 70 30 88 16 77 26
-              94:    8(float) Constant 0
-              95:   56(fvec4) ConstantComposite 94 94 94 94
-              96:   18(fvec3) ConstantComposite 94 94 94
-              97:58(VSOutput) ConstantComposite 95 96 96 96 96 96
-              99:     11(int) Constant 64
-             100:     23(int) Constant 2
-             101:     23(int) Constant 3
-             102:             TypePointer Function 18(fvec3)
-             107:     11(int) Constant 65
-             108:             TypePointer Function 20(fvec2)
-             111:     23(int) Constant 7
-             112:             TypePointer Function 23(int)
-             121:     11(int) Constant 68
-             122:             TypePointer Function 8(float)
-             124:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 125 10 30 121 16 77 26
-             127:     23(int) Constant 5
-             130:             TypeMatrix 56(fvec4) 4
-             132:             TypeBool
-             133:   132(bool) ConstantTrue
-             131:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 57 26 133
-        134(UBO):             TypeStruct 130 130 56(fvec4) 8(float) 8(float)
-             137:     11(int) Constant 43
-             138:     11(int) Constant 20
-             135:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 136 131 30 137 138 16 16 17
-             139:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 136 131 30 137 138 16 16 17
-             142:     11(int) Constant 44
-             143:     11(int) Constant 17
-             140:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 141 57 30 142 143 16 16 17
-             146:     11(int) Constant 46
-             144:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 145 10 30 146 143 16 16 17
-             147:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 145 10 30 146 143 16 16 17
-             148:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 149 52 30 121 16 53 149 16 17 135 139 140 144 147
-        150(ubo):             TypeStruct 134(UBO)
-             153:     11(int) Constant 49
-             151:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 152 148 30 153 48 16 16 17
-             154:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 152 52 30 121 16 53 152 16 17 151
-             155:             TypePointer Uniform 150(ubo)
-             156:    155(ptr) Variable Uniform
-             158:     11(int) Constant 8
-             157:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 1 154 30 121 16 53 1 156 158
-             159:     23(int) Constant 0
-             160:             TypePointer Uniform 8(float)
-             166:     11(int) Constant 69
-             168:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 169 10 30 166 16 77 26
-             178:     11(int) Constant 71
-             179:             TypeMatrix 18(fvec3) 3
-             180:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 19 17 133
-             181:             TypePointer Function 179
-             183:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 184 180 30 178 16 77 26
-             190:     11(int) Constant 72
-             193:    8(float) Constant 1065353216
-             200:     11(int) Constant 76
-             208:     11(int) Constant 77
-             216:     11(int) Constant 79
-             218:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 219 180 30 216 16 77 26
-             225:     11(int) Constant 81
-             234:     11(int) Constant 84
-             242:     11(int) Constant 85
-             250:     11(int) Constant 87
-             252:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 253 180 30 250 16 77 26
-             256:     11(int) Constant 88
-             261:     11(int) Constant 89
-             270:     11(int) Constant 91
-             272:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 273 180 30 270 16 77 26
-             281:     11(int) Constant 94
-             284:     23(int) Constant 4
-             290:     11(int) Constant 95
-             298:     11(int) Constant 96
-             299:             TypePointer Function 130
-             301:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 302 131 30 298 16 77 26
-             308:             TypePointer Function 56(fvec4)
-             311:     11(int) Constant 97
-             312:     23(int) Constant 1
-             313:   56(fvec4) ConstantComposite 94 193 94 94
-             316:     11(int) Constant 98
-             322:     11(int) Constant 99
-             323:   56(fvec4) ConstantComposite 94 94 94 193
-             326:     11(int) Constant 101
-             328:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 329 57 30 326 16 77 26
-             340:     11(int) Constant 102
-             342:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 343 57 30 340 16 77 26
-             347:     23(int) Constant 6
-             359:     11(int) Constant 104
-             363:             TypePointer Uniform 130
-             372:     11(int) Constant 105
-             391:     11(int) Constant 107
-             405:     11(int) Constant 108
-             407:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 408 19 30 405 16 77 26
-             410:             TypePointer Uniform 56(fvec4)
-             425:     11(int) Constant 109
-             432:     11(int) Constant 110
-             438:     11(int) Constant 111
-             443:             TypePointer Input 18(fvec3)
-  444(input.Pos):    443(ptr) Variable Input
-447(input.Normal):    443(ptr) Variable Input
-             450:             TypePointer Input 20(fvec2)
-   451(input.UV):    450(ptr) Variable Input
-454(input.Color):    443(ptr) Variable Input
-457(input.instancePos):    443(ptr) Variable Input
-460(input.instanceRot):    443(ptr) Variable Input
-             463:             TypePointer Input 8(float)
-464(input.instanceScale):    463(ptr) Variable Input
-             467:             TypePointer Input 23(int)
-468(input.instanceTexIndex):    467(ptr) Variable Input
-             475:             TypePointer Output 56(fvec4)
-476(@entryPointOutput.Pos):    475(ptr) Variable Output
-             479:             TypePointer Output 18(fvec3)
-480(@entryPointOutput.Normal):    479(ptr) Variable Output
-483(@entryPointOutput.Color):    479(ptr) Variable Output
-486(@entryPointOutput.UV):    479(ptr) Variable Output
-489(@entryPointOutput.ViewVec):    479(ptr) Variable Output
-492(@entryPointOutput.LightVec):    479(ptr) Variable Output
-                              Line 1 62 1
+              53:     11(int) Constant 62
+              55:     11(int) Constant 5
+              54:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 52 26 30 55
+              50:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 51 52 30 53 16 54 51 16 17 28 34 35 39 40 41 42 46
+              56:             TypePointer Function 27(VSInput)
+              57:     11(int) Constant 7
+              58:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 50 57 16
+              59:             TypeVector 8(float) 4
+              60:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 10 26
+    61(VSOutput):             TypeStruct 59(fvec4) 18(fvec3) 18(fvec3) 18(fvec3) 18(fvec3) 18(fvec3)
+              64:     11(int) Constant 53
+              65:     11(int) Constant 13
+              62:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 63 60 30 64 65 16 16 17
+              68:     11(int) Constant 58
+              66:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 67 19 30 68 48 16 16 17
+              69:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 67 19 30 68 48 16 16 17
+              70:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 67 19 30 68 48 16 16 17
+              71:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 67 19 30 68 48 16 16 17
+              72:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 67 19 30 68 48 16 16 17
+              73:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 74 52 30 53 16 54 74 16 17 62 66 69 70 71 72
+              75:             TypeFunction 61(VSOutput) 56(ptr)
+              76:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 17 73 50
+              81:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 80 76 30 53 16 54 80 17 53
+              82:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 83 50 30 53 16 81 26 52
+              85:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
+              89:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 30 16 16 81
+              90:             TypePointer Function 61(VSOutput)
+              91:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 73 57 16
+              95:     11(int) Constant 63
+              93:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 94 73 30 95 16 89 26
+              99:    8(float) Constant 0
+             100:   59(fvec4) ConstantComposite 99 99 99 99
+             101:   18(fvec3) ConstantComposite 99 99 99
+             102:61(VSOutput) ConstantComposite 100 101 101 101 101 101
+             103:     23(int) Constant 2
+             104:     23(int) Constant 3
+             105:             TypePointer Function 18(fvec3)
+             106:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 19 57 16
+             109:     11(int) Constant 64
+             112:             TypePointer Function 20(fvec2)
+             113:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 22 57 16
+             116:     11(int) Constant 65
+             118:     23(int) Constant 7
+             119:             TypePointer Function 23(int)
+             120:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 25 57 16
+             128:             TypePointer Function 8(float)
+             129:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 10 57 16
+             133:     11(int) Constant 68
+             131:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 132 10 30 133 16 89 26
+             136:     23(int) Constant 5
+             139:             TypeMatrix 59(fvec4) 4
+             141:             TypeBool
+             143:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 142 14 21 16
+             144:   141(bool) ConstantTrue
+             140:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 60 26 144
+        145(UBO):             TypeStruct 139 139 59(fvec4) 8(float) 8(float)
+             148:     11(int) Constant 43
+             149:     11(int) Constant 20
+             146:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 147 140 30 148 149 16 16 17
+             150:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 147 140 30 148 149 16 16 17
+             153:     11(int) Constant 44
+             154:     11(int) Constant 17
+             151:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 152 60 30 153 154 16 16 17
+             157:     11(int) Constant 46
+             155:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 156 10 30 157 154 16 16 17
+             158:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 156 10 30 157 154 16 16 17
+             159:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 160 52 30 133 16 54 160 16 17 146 150 151 155 158
+        161(ubo):             TypeStruct 145(UBO)
+             164:     11(int) Constant 49
+             162:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 163 159 30 164 48 16 16 17
+             165:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 163 52 30 133 16 54 163 16 17 162
+             166:             TypePointer Uniform 161(ubo)
+             167:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 165 21 16
+             168:    166(ptr) Variable Uniform
+             171:     11(int) Constant 8
+             169:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 170 165 30 133 16 54 170 168 171
+             172:     23(int) Constant 0
+             173:             TypePointer Uniform 8(float)
+             174:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 10 21 16
+             182:     11(int) Constant 69
+             180:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 181 10 30 182 16 89 26
+             191:             TypeMatrix 18(fvec3) 3
+             192:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 108(DebugTypeMatrix) 19 17 144
+             193:             TypePointer Function 191
+             194:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 192 57 16
+             198:     11(int) Constant 71
+             196:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 197 192 30 198 16 89 26
+             206:     11(int) Constant 72
+             208:    8(float) Constant 1065353216
+             216:     11(int) Constant 76
+             224:     11(int) Constant 77
+             233:     11(int) Constant 79
+             231:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 232 192 30 233 16 89 26
+             241:     11(int) Constant 81
+             250:     11(int) Constant 84
+             258:     11(int) Constant 85
+             267:     11(int) Constant 87
+             265:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 266 192 30 267 16 89 26
+             272:     11(int) Constant 88
+             277:     11(int) Constant 89
+             287:     11(int) Constant 91
+             285:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 286 192 30 287 16 89 26
+             295:             TypePointer Function 139
+             296:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 140 57 16
+             300:     11(int) Constant 93
+             298:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 299 140 30 300 16 89 26
+             305:     11(int) Constant 94
+             307:     23(int) Constant 4
+             314:     11(int) Constant 95
+             322:     11(int) Constant 96
+             326:             TypePointer Function 59(fvec4)
+             327:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 60 57 16
+             329:     23(int) Constant 1
+             330:   59(fvec4) ConstantComposite 99 208 99 99
+             333:     11(int) Constant 97
+             336:     11(int) Constant 98
+             340:   59(fvec4) ConstantComposite 99 99 99 208
+             343:     11(int) Constant 99
+             347:     11(int) Constant 101
+             345:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 346 60 30 347 16 89 26
+             361:     11(int) Constant 102
+             359:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 360 60 30 361 16 89 26
+             366:     23(int) Constant 6
+             379:     11(int) Constant 104
+             382:             TypePointer Uniform 139
+             383:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 140 21 16
+             393:     11(int) Constant 105
+             412:     11(int) Constant 107
+             427:     11(int) Constant 108
+             425:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 426 19 30 427 16 89 26
+             430:             TypePointer Uniform 59(fvec4)
+             431:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 60 21 16
+             447:     11(int) Constant 109
+             454:     11(int) Constant 110
+             460:     11(int) Constant 111
+             466:             TypePointer Input 18(fvec3)
+  467(input.Pos):    466(ptr) Variable Input
+470(input.Normal):    466(ptr) Variable Input
+             473:             TypePointer Input 20(fvec2)
+   474(input.UV):    473(ptr) Variable Input
+477(input.Color):    466(ptr) Variable Input
+480(input.instancePos):    466(ptr) Variable Input
+483(input.instanceRot):    466(ptr) Variable Input
+             486:             TypePointer Input 8(float)
+487(input.instanceScale):    486(ptr) Variable Input
+             490:             TypePointer Input 23(int)
+491(input.instanceTexIndex):    490(ptr) Variable Input
+             498:             TypePointer Output 59(fvec4)
+499(@entryPointOutput.Pos):    498(ptr) Variable Output
+             502:             TypePointer Output 18(fvec3)
+503(@entryPointOutput.Normal):    502(ptr) Variable Output
+506(@entryPointOutput.Color):    502(ptr) Variable Output
+509(@entryPointOutput.UV):    502(ptr) Variable Output
+512(@entryPointOutput.ViewVec):    502(ptr) Variable Output
+515(@entryPointOutput.LightVec):    502(ptr) Variable Output
          6(main):           4 Function None 5
                7:             Label
-      442(input):     55(ptr) Variable Function
-471(flattenTemp):     89(ptr) Variable Function
-      472(param):     55(ptr) Variable Function
-                              Line 1 62 0
-             445:   18(fvec3) Load 444(input.Pos)
-             446:    102(ptr) AccessChain 442(input) 159
-                              Store 446 445
-             448:   18(fvec3) Load 447(input.Normal)
-             449:    102(ptr) AccessChain 442(input) 312
-                              Store 449 448
-             452:   20(fvec2) Load 451(input.UV)
-             453:    108(ptr) AccessChain 442(input) 100
-                              Store 453 452
-             455:   18(fvec3) Load 454(input.Color)
-             456:    102(ptr) AccessChain 442(input) 101
-                              Store 456 455
-             458:   18(fvec3) Load 457(input.instancePos)
-             459:    102(ptr) AccessChain 442(input) 284
-                              Store 459 458
-             461:   18(fvec3) Load 460(input.instanceRot)
-             462:    102(ptr) AccessChain 442(input) 127
-                              Store 462 461
-             465:    8(float) Load 464(input.instanceScale)
-             466:    122(ptr) AccessChain 442(input) 347
-                              Store 466 465
-             469:     23(int) Load 468(input.instanceTexIndex)
-             470:    112(ptr) AccessChain 442(input) 111
-                              Store 470 469
-             473: 27(VSInput) Load 442(input)
-                              Store 472(param) 473
-             474:58(VSOutput) FunctionCall 75(@main(struct-VSInput-vf3-vf3-vf2-vf3-vf3-vf3-f1-i11;) 472(param)
-                              Store 471(flattenTemp) 474
-             477:    308(ptr) AccessChain 471(flattenTemp) 159
-             478:   56(fvec4) Load 477
-                              Store 476(@entryPointOutput.Pos) 478
-             481:    102(ptr) AccessChain 471(flattenTemp) 312
-             482:   18(fvec3) Load 481
-                              Store 480(@entryPointOutput.Normal) 482
-             484:    102(ptr) AccessChain 471(flattenTemp) 100
-             485:   18(fvec3) Load 484
-                              Store 483(@entryPointOutput.Color) 485
-             487:    102(ptr) AccessChain 471(flattenTemp) 101
-             488:   18(fvec3) Load 487
-                              Store 486(@entryPointOutput.UV) 488
-             490:    102(ptr) AccessChain 471(flattenTemp) 284
-             491:   18(fvec3) Load 490
-                              Store 489(@entryPointOutput.ViewVec) 491
-             493:    102(ptr) AccessChain 471(flattenTemp) 127
-             494:   18(fvec3) Load 493
-                              Store 492(@entryPointOutput.LightVec) 494
+      465(input):     56(ptr) Variable Function
+494(flattenTemp):     90(ptr) Variable Function
+      495(param):     56(ptr) Variable Function
+             468:   18(fvec3) Load 467(input.Pos)
+             469:    105(ptr) AccessChain 465(input) 172
+                              Store 469 468
+             471:   18(fvec3) Load 470(input.Normal)
+             472:    105(ptr) AccessChain 465(input) 329
+                              Store 472 471
+             475:   20(fvec2) Load 474(input.UV)
+             476:    112(ptr) AccessChain 465(input) 103
+                              Store 476 475
+             478:   18(fvec3) Load 477(input.Color)
+             479:    105(ptr) AccessChain 465(input) 104
+                              Store 479 478
+             481:   18(fvec3) Load 480(input.instancePos)
+             482:    105(ptr) AccessChain 465(input) 307
+                              Store 482 481
+             484:   18(fvec3) Load 483(input.instanceRot)
+             485:    105(ptr) AccessChain 465(input) 136
+                              Store 485 484
+             488:    8(float) Load 487(input.instanceScale)
+             489:    128(ptr) AccessChain 465(input) 366
+                              Store 489 488
+             492:     23(int) Load 491(input.instanceTexIndex)
+             493:    119(ptr) AccessChain 465(input) 118
+                              Store 493 492
+             496: 27(VSInput) Load 465(input)
+                              Store 495(param) 496
+             497:61(VSOutput) FunctionCall 78(@main(struct-VSInput-vf3-vf3-vf2-vf3-vf3-vf3-f1-i11;) 495(param)
+                              Store 494(flattenTemp) 497
+             500:    326(ptr) AccessChain 494(flattenTemp) 172
+             501:   59(fvec4) Load 500
+                              Store 499(@entryPointOutput.Pos) 501
+             504:    105(ptr) AccessChain 494(flattenTemp) 329
+             505:   18(fvec3) Load 504
+                              Store 503(@entryPointOutput.Normal) 505
+             507:    105(ptr) AccessChain 494(flattenTemp) 103
+             508:   18(fvec3) Load 507
+                              Store 506(@entryPointOutput.Color) 508
+             510:    105(ptr) AccessChain 494(flattenTemp) 104
+             511:   18(fvec3) Load 510
+                              Store 509(@entryPointOutput.UV) 511
+             513:    105(ptr) AccessChain 494(flattenTemp) 307
+             514:   18(fvec3) Load 513
+                              Store 512(@entryPointOutput.ViewVec) 514
+             516:    105(ptr) AccessChain 494(flattenTemp) 136
+             517:   18(fvec3) Load 516
+                              Store 515(@entryPointOutput.LightVec) 517
                               Return
                               FunctionEnd
-                              Line 1 62 1
-75(@main(struct-VSInput-vf3-vf3-vf2-vf3-vf3-vf3-f1-i11;):58(VSOutput) Function None 72
-       74(input):     55(ptr) FunctionParameter
-              78:             Label
-      90(output):     89(ptr) Variable Function
-          123(s):    122(ptr) Variable Function
-          167(c):    122(ptr) Variable Function
-         182(mx):    181(ptr) Variable Function
-         217(my):    181(ptr) Variable Function
-         251(mz):    181(ptr) Variable Function
-     271(rotMat):    181(ptr) Variable Function
-    300(gRotMat):    299(ptr) Variable Function
-     327(locPos):    308(ptr) Variable Function
-        341(pos):    308(ptr) Variable Function
-       406(lPos):    102(ptr) Variable Function
-              79:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 77
-              80:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 16 16 16 16
-              83:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 81 74(input) 84
-              85:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 77 75(@main(struct-VSInput-vf3-vf3-vf2-vf3-vf3-vf3-f1-i11;)
-              86:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 77
-              87:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 88 88 16 16
-              93:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 91 90(output) 84
-                              Store 90(output) 97
-              98:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 99 99 16 16
-             103:    102(ptr) AccessChain 74(input) 101
-             104:   18(fvec3) Load 103
-             105:    102(ptr) AccessChain 90(output) 100
-                              Store 105 104
-             106:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 107 107 16 16
-             109:    108(ptr) AccessChain 74(input) 100
-             110:   20(fvec2) Load 109
-             113:    112(ptr) AccessChain 74(input) 111
-             114:     23(int) Load 113
-             115:    8(float) ConvertSToF 114
-             116:    8(float) CompositeExtract 110 0
-             117:    8(float) CompositeExtract 110 1
-             118:   18(fvec3) CompositeConstruct 116 117 115
-             119:    102(ptr) AccessChain 90(output) 101
-                              Store 119 118
-             120:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 121 121 16 16
-             126:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 124 123(s) 84
-             128:    122(ptr) AccessChain 74(input) 127 16
-             129:    8(float) Load 128
-             161:    160(ptr) AccessChain 156 159 101
-             162:    8(float) Load 161
-             163:    8(float) FAdd 129 162
-             164:    8(float) ExtInst 3(GLSL.std.450) 13(Sin) 163
-                              Store 123(s) 164
-             165:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 166 166 16 16
-             170:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 168 167(c) 84
-             171:    122(ptr) AccessChain 74(input) 127 16
-             172:    8(float) Load 171
-             173:    160(ptr) AccessChain 156 159 101
-             174:    8(float) Load 173
-             175:    8(float) FAdd 172 174
-             176:    8(float) ExtInst 3(GLSL.std.450) 14(Cos) 175
-                              Store 167(c) 176
-             177:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 178 178 16 16
-             185:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 183 182(mx) 84
-             186:    8(float) Load 167(c)
-             187:    8(float) Load 123(s)
-             188:    8(float) FNegate 187
-             189:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 190 190 16 16
-             191:    8(float) Load 123(s)
-             192:    8(float) Load 167(c)
-             194:   18(fvec3) CompositeConstruct 186 188 94
-             195:   18(fvec3) CompositeConstruct 191 192 94
-             196:   18(fvec3) CompositeConstruct 94 94 193
-             197:         179 CompositeConstruct 194 195 196
-             198:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 178 178 16 16
-                              Store 182(mx) 197
-             199:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 200 200 16 16
-             201:    122(ptr) AccessChain 74(input) 127 52
-             202:    8(float) Load 201
-             203:    160(ptr) AccessChain 156 159 101
-             204:    8(float) Load 203
-             205:    8(float) FAdd 202 204
-             206:    8(float) ExtInst 3(GLSL.std.450) 13(Sin) 205
-                              Store 123(s) 206
-             207:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 208 208 16 16
-             209:    122(ptr) AccessChain 74(input) 127 52
-             210:    8(float) Load 209
-             211:    160(ptr) AccessChain 156 159 101
-             212:    8(float) Load 211
-             213:    8(float) FAdd 210 212
-             214:    8(float) ExtInst 3(GLSL.std.450) 14(Cos) 213
-                              Store 167(c) 214
-             215:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 216 216 16 16
-             220:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 218 217(my) 84
-             221:    8(float) Load 167(c)
-             222:    8(float) Load 123(s)
-             223:    8(float) FNegate 222
-             224:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 225 225 16 16
-             226:    8(float) Load 123(s)
-             227:    8(float) Load 167(c)
-             228:   18(fvec3) CompositeConstruct 221 94 223
-             229:   18(fvec3) CompositeConstruct 94 193 94
-             230:   18(fvec3) CompositeConstruct 226 94 227
-             231:         179 CompositeConstruct 228 229 230
-             232:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 216 216 16 16
-                              Store 217(my) 231
-             233:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 234 234 16 16
-             235:    122(ptr) AccessChain 74(input) 127 21
-             236:    8(float) Load 235
-             237:    160(ptr) AccessChain 156 159 101
-             238:    8(float) Load 237
-             239:    8(float) FAdd 236 238
-             240:    8(float) ExtInst 3(GLSL.std.450) 13(Sin) 239
-                              Store 123(s) 240
-             241:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 242 242 16 16
-             243:    122(ptr) AccessChain 74(input) 127 21
-             244:    8(float) Load 243
-             245:    160(ptr) AccessChain 156 159 101
-             246:    8(float) Load 245
-             247:    8(float) FAdd 244 246
-             248:    8(float) ExtInst 3(GLSL.std.450) 14(Cos) 247
-                              Store 167(c) 248
-             249:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 250 250 16 16
-             254:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 252 251(mz) 84
-             255:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 256 256 16 16
-             257:    8(float) Load 167(c)
-             258:    8(float) Load 123(s)
-             259:    8(float) FNegate 258
-             260:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 261 261 16 16
-             262:    8(float) Load 123(s)
-             263:    8(float) Load 167(c)
-             264:   18(fvec3) CompositeConstruct 193 94 94
-             265:   18(fvec3) CompositeConstruct 94 257 259
-             266:   18(fvec3) CompositeConstruct 94 262 263
-             267:         179 CompositeConstruct 264 265 266
-             268:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 250 250 16 16
-                              Store 251(mz) 267
-             269:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 270 270 16 16
-             274:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 272 271(rotMat) 84
-             275:         179 Load 182(mx)
-             276:         179 Load 217(my)
-             277:         179 MatrixTimesMatrix 275 276
-             278:         179 Load 251(mz)
-             279:         179 MatrixTimesMatrix 277 278
-                              Store 271(rotMat) 279
-             280:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 281 281 16 16
-             282:    122(ptr) AccessChain 74(input) 127 52
-             283:    8(float) Load 282
-             285:    160(ptr) AccessChain 156 159 284
-             286:    8(float) Load 285
-             287:    8(float) FAdd 283 286
-             288:    8(float) ExtInst 3(GLSL.std.450) 13(Sin) 287
-                              Store 123(s) 288
-             289:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 290 290 16 16
-             291:    122(ptr) AccessChain 74(input) 127 52
-             292:    8(float) Load 291
-             293:    160(ptr) AccessChain 156 159 284
-             294:    8(float) Load 293
-             295:    8(float) FAdd 292 294
-             296:    8(float) ExtInst 3(GLSL.std.450) 14(Cos) 295
-                              Store 167(c) 296
-             297:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 298 298 16 16
-             303:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 301 300(gRotMat) 84
-             304:    8(float) Load 167(c)
-             305:    8(float) Load 123(s)
-             306:    8(float) FNegate 305
-             307:   56(fvec4) CompositeConstruct 304 94 306 94
-             309:    308(ptr) AccessChain 300(gRotMat) 159
-                              Store 309 307
-             310:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 311 311 16 16
-             314:    308(ptr) AccessChain 300(gRotMat) 312
-                              Store 314 313
-             315:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 316 316 16 16
-             317:    8(float) Load 123(s)
-             318:    8(float) Load 167(c)
-             319:   56(fvec4) CompositeConstruct 317 94 318 94
-             320:    308(ptr) AccessChain 300(gRotMat) 100
-                              Store 320 319
-             321:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 322 322 16 16
-             324:    308(ptr) AccessChain 300(gRotMat) 101
-                              Store 324 323
-             325:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 326 326 16 16
-             330:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 328 327(locPos) 84
-             331:    102(ptr) AccessChain 74(input) 159
-             332:   18(fvec3) Load 331
-             333:         179 Load 271(rotMat)
-             334:   18(fvec3) VectorTimesMatrix 332 333
-             335:    8(float) CompositeExtract 334 0
-             336:    8(float) CompositeExtract 334 1
-             337:    8(float) CompositeExtract 334 2
-             338:   56(fvec4) CompositeConstruct 335 336 337 193
-                              Store 327(locPos) 338
-             339:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 340 340 16 16
-             344:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 342 341(pos) 84
-             345:   56(fvec4) Load 327(locPos)
-             346:   18(fvec3) VectorShuffle 345 345 0 1 2
-             348:    122(ptr) AccessChain 74(input) 347
-             349:    8(float) Load 348
-             350:   18(fvec3) VectorTimesScalar 346 349
-             351:    102(ptr) AccessChain 74(input) 284
-             352:   18(fvec3) Load 351
-             353:   18(fvec3) FAdd 350 352
+78(@main(struct-VSInput-vf3-vf3-vf2-vf3-vf3-vf3-f1-i11;):61(VSOutput) Function None 75
+       77(input):     56(ptr) FunctionParameter
+              79:             Label
+      92(output):     90(ptr) Variable Function
+          130(s):    128(ptr) Variable Function
+          179(c):    128(ptr) Variable Function
+         195(mx):    193(ptr) Variable Function
+         230(my):    193(ptr) Variable Function
+         264(mz):    193(ptr) Variable Function
+     284(rotMat):    193(ptr) Variable Function
+    297(gRotMat):    295(ptr) Variable Function
+     344(locPos):    326(ptr) Variable Function
+        358(pos):    326(ptr) Variable Function
+       424(lPos):    105(ptr) Variable Function
+              86:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 81
+              87:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 53 53 16 16
+              84:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 82 77(input) 85
+              88:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 81 78(@main(struct-VSInput-vf3-vf3-vf2-vf3-vf3-vf3-f1-i11;)
+              97:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 89
+              98:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 95 95 16 16
+              96:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 93 92(output) 85
+                              Store 92(output) 102
+             108:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 109 109 16 16
+             107:    105(ptr) AccessChain 77(input) 104
+             110:   18(fvec3) Load 107
+             111:    105(ptr) AccessChain 92(output) 103
+                              Store 111 110
+             115:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 116 116 16 16
+             114:    112(ptr) AccessChain 77(input) 103
+             117:   20(fvec2) Load 114
+             121:    119(ptr) AccessChain 77(input) 118
+             122:     23(int) Load 121
+             123:    8(float) ConvertSToF 122
+             124:    8(float) CompositeExtract 117 0
+             125:    8(float) CompositeExtract 117 1
+             126:   18(fvec3) CompositeConstruct 124 125 123
+             127:    105(ptr) AccessChain 92(output) 104
+                              Store 127 126
+             135:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 133 133 16 16
+             134:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 131 130(s) 85
+             137:    128(ptr) AccessChain 77(input) 136 16
+             138:    8(float) Load 137
+             175:    173(ptr) AccessChain 168 172 104
+             176:    8(float) Load 175
+             177:    8(float) FAdd 138 176
+             178:    8(float) ExtInst 3(GLSL.std.450) 13(Sin) 177
+                              Store 130(s) 178
+             184:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 182 182 16 16
+             183:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 180 179(c) 85
+             185:    128(ptr) AccessChain 77(input) 136 16
+             186:    8(float) Load 185
+             187:    173(ptr) AccessChain 168 172 104
+             188:    8(float) Load 187
+             189:    8(float) FAdd 186 188
+             190:    8(float) ExtInst 3(GLSL.std.450) 14(Cos) 189
+                              Store 179(c) 190
+             200:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 198 198 16 16
+             199:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 196 195(mx) 85
+             201:    8(float) Load 179(c)
+             202:    8(float) Load 130(s)
+             203:    8(float) FNegate 202
+             205:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 206 206 16 16
+             204:    8(float) Load 130(s)
+             207:    8(float) Load 179(c)
+             210:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 198 198 16 16
+             209:   18(fvec3) CompositeConstruct 201 203 99
+             211:   18(fvec3) CompositeConstruct 204 207 99
+             212:   18(fvec3) CompositeConstruct 99 99 208
+             213:         191 CompositeConstruct 209 211 212
+                              Store 195(mx) 213
+             215:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 216 216 16 16
+             214:    128(ptr) AccessChain 77(input) 136 52
+             217:    8(float) Load 214
+             218:    173(ptr) AccessChain 168 172 104
+             219:    8(float) Load 218
+             220:    8(float) FAdd 217 219
+             221:    8(float) ExtInst 3(GLSL.std.450) 13(Sin) 220
+                              Store 130(s) 221
+             223:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 224 224 16 16
+             222:    128(ptr) AccessChain 77(input) 136 52
+             225:    8(float) Load 222
+             226:    173(ptr) AccessChain 168 172 104
+             227:    8(float) Load 226
+             228:    8(float) FAdd 225 227
+             229:    8(float) ExtInst 3(GLSL.std.450) 14(Cos) 228
+                              Store 179(c) 229
+             235:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 233 233 16 16
+             234:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 231 230(my) 85
+             236:    8(float) Load 179(c)
+             237:    8(float) Load 130(s)
+             238:    8(float) FNegate 237
+             240:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 241 241 16 16
+             239:    8(float) Load 130(s)
+             242:    8(float) Load 179(c)
+             244:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 233 233 16 16
+             243:   18(fvec3) CompositeConstruct 236 99 238
+             245:   18(fvec3) CompositeConstruct 99 208 99
+             246:   18(fvec3) CompositeConstruct 239 99 242
+             247:         191 CompositeConstruct 243 245 246
+                              Store 230(my) 247
+             249:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 250 250 16 16
+             248:    128(ptr) AccessChain 77(input) 136 21
+             251:    8(float) Load 248
+             252:    173(ptr) AccessChain 168 172 104
+             253:    8(float) Load 252
+             254:    8(float) FAdd 251 253
+             255:    8(float) ExtInst 3(GLSL.std.450) 13(Sin) 254
+                              Store 130(s) 255
+             257:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 258 258 16 16
+             256:    128(ptr) AccessChain 77(input) 136 21
+             259:    8(float) Load 256
+             260:    173(ptr) AccessChain 168 172 104
+             261:    8(float) Load 260
+             262:    8(float) FAdd 259 261
+             263:    8(float) ExtInst 3(GLSL.std.450) 14(Cos) 262
+                              Store 179(c) 263
+             269:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 267 267 16 16
+             268:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 265 264(mz) 85
+             271:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 272 272 16 16
+             270:    8(float) Load 179(c)
+             273:    8(float) Load 130(s)
+             274:    8(float) FNegate 273
+             276:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 277 277 16 16
+             275:    8(float) Load 130(s)
+             278:    8(float) Load 179(c)
+             280:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 267 267 16 16
+             279:   18(fvec3) CompositeConstruct 208 99 99
+             281:   18(fvec3) CompositeConstruct 99 270 274
+             282:   18(fvec3) CompositeConstruct 99 275 278
+             283:         191 CompositeConstruct 279 281 282
+                              Store 264(mz) 283
+             289:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 287 287 16 16
+             288:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 285 284(rotMat) 85
+             290:         191 Load 195(mx)
+             291:         191 Load 230(my)
+             292:         191 MatrixTimesMatrix 290 291
+             293:         191 Load 264(mz)
+             294:         191 MatrixTimesMatrix 292 293
+                              Store 284(rotMat) 294
+             302:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 300 300 16 16
+             301:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 298 297(gRotMat) 85
+             304:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 305 305 16 16
+             303:    128(ptr) AccessChain 77(input) 136 52
+             306:    8(float) Load 303
+             308:    173(ptr) AccessChain 168 172 307
+             309:    8(float) Load 308
+             310:    8(float) FAdd 306 309
+             311:    8(float) ExtInst 3(GLSL.std.450) 13(Sin) 310
+                              Store 130(s) 311
+             313:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 314 314 16 16
+             312:    128(ptr) AccessChain 77(input) 136 52
+             315:    8(float) Load 312
+             316:    173(ptr) AccessChain 168 172 307
+             317:    8(float) Load 316
+             318:    8(float) FAdd 315 317
+             319:    8(float) ExtInst 3(GLSL.std.450) 14(Cos) 318
+                              Store 179(c) 319
+             321:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 322 322 16 16
+             320:    8(float) Load 179(c)
+             323:    8(float) Load 130(s)
+             324:    8(float) FNegate 323
+             325:   59(fvec4) CompositeConstruct 320 99 324 99
+             328:    326(ptr) AccessChain 297(gRotMat) 172
+                              Store 328 325
+             332:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 333 333 16 16
+             331:    326(ptr) AccessChain 297(gRotMat) 329
+                              Store 331 330
+             335:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 336 336 16 16
+             334:    8(float) Load 130(s)
+             337:    8(float) Load 179(c)
+             338:   59(fvec4) CompositeConstruct 334 99 337 99
+             339:    326(ptr) AccessChain 297(gRotMat) 103
+                              Store 339 338
+             342:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 343 343 16 16
+             341:    326(ptr) AccessChain 297(gRotMat) 104
+                              Store 341 340
+             349:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 347 347 16 16
+             348:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 345 344(locPos) 85
+             350:    105(ptr) AccessChain 77(input) 172
+             351:   18(fvec3) Load 350
+             352:         191 Load 284(rotMat)
+             353:   18(fvec3) VectorTimesMatrix 351 352
              354:    8(float) CompositeExtract 353 0
              355:    8(float) CompositeExtract 353 1
              356:    8(float) CompositeExtract 353 2
-             357:   56(fvec4) CompositeConstruct 354 355 356 193
-                              Store 341(pos) 357
-             358:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 359 359 16 16
-             360:   56(fvec4) Load 341(pos)
-             361:         130 Load 300(gRotMat)
-             362:   56(fvec4) VectorTimesMatrix 360 361
-             364:    363(ptr) AccessChain 156 159 312
-             365:         130 Load 364
-             366:   56(fvec4) VectorTimesMatrix 362 365
-             367:    363(ptr) AccessChain 156 159 159
-             368:         130 Load 367
-             369:   56(fvec4) VectorTimesMatrix 366 368
-             370:    308(ptr) AccessChain 90(output) 159
-                              Store 370 369
-             371:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 372 372 16 16
-             373:    102(ptr) AccessChain 74(input) 312
-             374:   18(fvec3) Load 373
-             375:         179 Load 271(rotMat)
-             376:   18(fvec3) VectorTimesMatrix 374 375
-             377:         130 Load 300(gRotMat)
-             378:    363(ptr) AccessChain 156 159 312
-             379:         130 Load 378
-             380:         130 MatrixTimesMatrix 377 379
-             381:   56(fvec4) CompositeExtract 380 0
-             382:   18(fvec3) VectorShuffle 381 381 0 1 2
-             383:   56(fvec4) CompositeExtract 380 1
-             384:   18(fvec3) VectorShuffle 383 383 0 1 2
-             385:   56(fvec4) CompositeExtract 380 2
-             386:   18(fvec3) VectorShuffle 385 385 0 1 2
-             387:         179 CompositeConstruct 382 384 386
-             388:   18(fvec3) VectorTimesMatrix 376 387
-             389:    102(ptr) AccessChain 90(output) 312
-                              Store 389 388
-             390:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 391 391 16 16
-             392:    102(ptr) AccessChain 74(input) 159
-             393:   18(fvec3) Load 392
-             394:    102(ptr) AccessChain 74(input) 284
-             395:   18(fvec3) Load 394
-             396:   18(fvec3) FAdd 393 395
-             397:    8(float) CompositeExtract 396 0
-             398:    8(float) CompositeExtract 396 1
-             399:    8(float) CompositeExtract 396 2
-             400:   56(fvec4) CompositeConstruct 397 398 399 193
-             401:    363(ptr) AccessChain 156 159 312
-             402:         130 Load 401
-             403:   56(fvec4) VectorTimesMatrix 400 402
-                              Store 341(pos) 403
-             404:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 405 405 16 16
-             409:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 407 406(lPos) 84
-             411:    410(ptr) AccessChain 156 159 100
-             412:   56(fvec4) Load 411
-             413:   18(fvec3) VectorShuffle 412 412 0 1 2
-             414:    363(ptr) AccessChain 156 159 312
-             415:         130 Load 414
-             416:   56(fvec4) CompositeExtract 415 0
-             417:   18(fvec3) VectorShuffle 416 416 0 1 2
-             418:   56(fvec4) CompositeExtract 415 1
-             419:   18(fvec3) VectorShuffle 418 418 0 1 2
-             420:   56(fvec4) CompositeExtract 415 2
-             421:   18(fvec3) VectorShuffle 420 420 0 1 2
-             422:         179 CompositeConstruct 417 419 421
-             423:   18(fvec3) VectorTimesMatrix 413 422
-                              Store 406(lPos) 423
-             424:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 425 425 16 16
-             426:   18(fvec3) Load 406(lPos)
-             427:   56(fvec4) Load 341(pos)
-             428:   18(fvec3) VectorShuffle 427 427 0 1 2
-             429:   18(fvec3) FSub 426 428
-             430:    102(ptr) AccessChain 90(output) 127
-                              Store 430 429
-             431:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 432 432 16 16
-             433:   56(fvec4) Load 341(pos)
+             357:   59(fvec4) CompositeConstruct 354 355 356 208
+                              Store 344(locPos) 357
+             363:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 361 361 16 16
+             362:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 359 358(pos) 85
+             364:   59(fvec4) Load 344(locPos)
+             365:   18(fvec3) VectorShuffle 364 364 0 1 2
+             367:    128(ptr) AccessChain 77(input) 366
+             368:    8(float) Load 367
+             369:   18(fvec3) VectorTimesScalar 365 368
+             370:    105(ptr) AccessChain 77(input) 307
+             371:   18(fvec3) Load 370
+             372:   18(fvec3) FAdd 369 371
+             373:    8(float) CompositeExtract 372 0
+             374:    8(float) CompositeExtract 372 1
+             375:    8(float) CompositeExtract 372 2
+             376:   59(fvec4) CompositeConstruct 373 374 375 208
+                              Store 358(pos) 376
+             378:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 379 379 16 16
+             377:   59(fvec4) Load 358(pos)
+             380:         139 Load 297(gRotMat)
+             381:   59(fvec4) VectorTimesMatrix 377 380
+             384:    382(ptr) AccessChain 168 172 329
+             385:         139 Load 384
+             386:   59(fvec4) VectorTimesMatrix 381 385
+             387:    382(ptr) AccessChain 168 172 172
+             388:         139 Load 387
+             389:   59(fvec4) VectorTimesMatrix 386 388
+             390:    326(ptr) AccessChain 92(output) 172
+                              Store 390 389
+             392:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 393 393 16 16
+             391:    105(ptr) AccessChain 77(input) 329
+             394:   18(fvec3) Load 391
+             395:         191 Load 284(rotMat)
+             396:   18(fvec3) VectorTimesMatrix 394 395
+             397:         139 Load 297(gRotMat)
+             398:    382(ptr) AccessChain 168 172 329
+             399:         139 Load 398
+             400:         139 MatrixTimesMatrix 397 399
+             401:   59(fvec4) CompositeExtract 400 0
+             402:   18(fvec3) VectorShuffle 401 401 0 1 2
+             403:   59(fvec4) CompositeExtract 400 1
+             404:   18(fvec3) VectorShuffle 403 403 0 1 2
+             405:   59(fvec4) CompositeExtract 400 2
+             406:   18(fvec3) VectorShuffle 405 405 0 1 2
+             407:         191 CompositeConstruct 402 404 406
+             408:   18(fvec3) VectorTimesMatrix 396 407
+             409:    105(ptr) AccessChain 92(output) 329
+                              Store 409 408
+             411:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 412 412 16 16
+             410:    105(ptr) AccessChain 77(input) 172
+             413:   18(fvec3) Load 410
+             414:    105(ptr) AccessChain 77(input) 307
+             415:   18(fvec3) Load 414
+             416:   18(fvec3) FAdd 413 415
+             417:    8(float) CompositeExtract 416 0
+             418:    8(float) CompositeExtract 416 1
+             419:    8(float) CompositeExtract 416 2
+             420:   59(fvec4) CompositeConstruct 417 418 419 208
+             421:    382(ptr) AccessChain 168 172 329
+             422:         139 Load 421
+             423:   59(fvec4) VectorTimesMatrix 420 422
+                              Store 358(pos) 423
+             429:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 427 427 16 16
+             428:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 425 424(lPos) 85
+             432:    430(ptr) AccessChain 168 172 103
+             433:   59(fvec4) Load 432
              434:   18(fvec3) VectorShuffle 433 433 0 1 2
-             435:   18(fvec3) FNegate 434
-             436:    102(ptr) AccessChain 90(output) 284
-                              Store 436 435
-             437:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 438 438 16 16
-             439:58(VSOutput) Load 90(output)
-                              ReturnValue 439
+             435:    382(ptr) AccessChain 168 172 329
+             436:         139 Load 435
+             437:   59(fvec4) CompositeExtract 436 0
+             438:   18(fvec3) VectorShuffle 437 437 0 1 2
+             439:   59(fvec4) CompositeExtract 436 1
+             440:   18(fvec3) VectorShuffle 439 439 0 1 2
+             441:   59(fvec4) CompositeExtract 436 2
+             442:   18(fvec3) VectorShuffle 441 441 0 1 2
+             443:         191 CompositeConstruct 438 440 442
+             444:   18(fvec3) VectorTimesMatrix 434 443
+                              Store 424(lPos) 444
+             446:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 447 447 16 16
+             445:   18(fvec3) Load 424(lPos)
+             448:   59(fvec4) Load 358(pos)
+             449:   18(fvec3) VectorShuffle 448 448 0 1 2
+             450:   18(fvec3) FSub 445 449
+             451:    105(ptr) AccessChain 92(output) 136
+                              Store 451 450
+             453:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 454 454 16 16
+             452:   59(fvec4) Load 358(pos)
+             455:   18(fvec3) VectorShuffle 452 452 0 1 2
+             456:   18(fvec3) FNegate 455
+             457:    105(ptr) AccessChain 92(output) 307
+                              Store 457 456
+             459:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 30 460 460 16 16
+             458:61(VSOutput) Load 92(output)
+                              ReturnValue 458
                               FunctionEnd
diff --git a/Test/baseResults/spv.debuginfo.implicit_br.glsl.frag.out b/Test/baseResults/spv.debuginfo.implicit_br.glsl.frag.out
new file mode 100644
index 0000000..7a3ef97
--- /dev/null
+++ b/Test/baseResults/spv.debuginfo.implicit_br.glsl.frag.out
@@ -0,0 +1,335 @@
+spv.debuginfo.implicit_br.glsl.frag
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 204
+
+                              Capability Shader
+                              Extension  "SPV_KHR_non_semantic_info"
+               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               3:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 14  "main" 196
+                              ExecutionMode 14 OriginUpperLeft
+               2:             String  "spv.debuginfo.implicit_br.glsl.frag"
+               8:             String  "uint"
+              18:             String  "test_if"
+              21:             String  "// OpModuleProcessed auto-map-locations
+// OpModuleProcessed auto-map-bindings
+// OpModuleProcessed client vulkan100
+// OpModuleProcessed target-env vulkan1.0
+// OpModuleProcessed keep-uncalled
+// OpModuleProcessed entry-point main
+#line 1
+#version 460
+
+out int outx;
+int counter = 0;
+
+void test_if() {
+    if (false) {
+        counter += 1;
+    }
+}
+
+void test_ifelse() {
+    if (false) {
+        counter += 1;
+    }
+    else {
+        counter += 2;
+    }
+}
+
+void test_if_compound() {
+    if (false) {
+        if (false) {
+            counter += 1;
+        }
+    }
+}
+
+void test_if_compound2() {
+    if (false) {
+        if (false) {
+            counter += 1;
+        }
+
+        counter += 2;
+    }
+}
+
+void test_switch() {
+    switch (0) {
+    case 0:
+        counter += 1;
+        // implict fallthrough
+    case 1:
+        counter += 2;
+        break;
+    default:
+        counter += 3;
+        // implicit break
+    }
+}
+
+void main() {
+    test_if();
+    test_ifelse();
+    test_if_compound();
+    test_if_compound2();
+    test_switch();
+    outx = counter;
+}"
+              28:             String  "test_ifelse"
+              33:             String  "test_if_compound"
+              38:             String  "test_if_compound2"
+              43:             String  "test_switch"
+              46:             String  "main"
+              50:             String  "int"
+              56:             String  "counter"
+              65:             String  "bool"
+             198:             String  "outx"
+                              Name 14  "main"
+                              Name 16  "test_if("
+                              Name 26  "test_ifelse("
+                              Name 31  "test_if_compound("
+                              Name 36  "test_if_compound2("
+                              Name 41  "test_switch("
+                              Name 54  "counter"
+                              Name 196  "outx"
+                              Decorate 196(outx) Location 0
+               4:             TypeVoid
+               5:             TypeFunction 4
+               7:             TypeInt 32 0
+              10:      7(int) Constant 32
+              11:      7(int) Constant 6
+              12:      7(int) Constant 0
+               9:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 8 10 11 12
+              13:      7(int) Constant 3
+               6:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4
+              20:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 2 21
+              23:      7(int) Constant 1
+              24:      7(int) Constant 4
+              25:      7(int) Constant 2
+              22:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 23 24 20 25
+              19:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 18 6 20 11 12 22 18 13 11
+              30:      7(int) Constant 12
+              29:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 28 6 20 30 12 22 28 13 30
+              35:      7(int) Constant 21
+              34:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 33 6 20 35 12 22 33 13 35
+              40:      7(int) Constant 29
+              39:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 38 6 20 40 12 22 38 13 40
+              45:      7(int) Constant 39
+              44:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 43 6 20 45 12 22 43 13 45
+              48:      7(int) Constant 53
+              47:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 46 6 20 48 12 22 46 13 48
+              49:             TypeInt 32 1
+              51:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 50 10 24 12
+              52:             TypePointer Private 49(int)
+              53:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 51 11 12
+     54(counter):     52(ptr) Variable Private
+              57:      7(int) Constant 8
+              55:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 56 51 20 24 12 22 56 54(counter) 57
+              58:     49(int) Constant 0
+              64:             TypeBool
+              66:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 65 10 25 12
+              67:    64(bool) ConstantFalse
+              71:      7(int) Constant 17
+              70:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 20 57 71 19
+              72:     49(int) Constant 1
+              79:      7(int) Constant 10
+              86:      7(int) Constant 14
+              85:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 20 86 71 29
+              92:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 20 71 71 29
+              93:     49(int) Constant 2
+             100:      7(int) Constant 19
+             107:      7(int) Constant 23
+             108:      7(int) Constant 9
+             106:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 20 107 108 34
+             114:      7(int) Constant 24
+             113:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 20 114 35 106
+             121:      7(int) Constant 27
+             128:      7(int) Constant 31
+             127:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 20 128 108 39
+             133:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 20 10 35 127
+             141:      7(int) Constant 35
+             145:      7(int) Constant 37
+             156:      7(int) Constant 42
+             161:      7(int) Constant 45
+             164:      7(int) Constant 46
+             166:     49(int) Constant 3
+             170:      7(int) Constant 48
+             175:      7(int) Constant 51
+             181:      7(int) Constant 54
+             184:      7(int) Constant 55
+             187:      7(int) Constant 56
+             190:      7(int) Constant 57
+             193:      7(int) Constant 58
+             194:             TypePointer Output 49(int)
+             195:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 51 13 12
+       196(outx):    194(ptr) Variable Output
+             199:      7(int) Constant 59
+             197:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 198 51 20 199 12 22 198 196(outx) 57
+             203:      7(int) Constant 60
+        14(main):           4 Function None 5
+              15:             Label
+              59:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 22
+              60:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 24 24 12 12
+                              Store 54(counter) 58
+             177:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 47
+             178:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 48 48 12 12
+             176:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 47 14(main)
+             180:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 181 181 12 12
+             179:           4 FunctionCall 16(test_if()
+             183:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 184 184 12 12
+             182:           4 FunctionCall 26(test_ifelse()
+             186:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 187 187 12 12
+             185:           4 FunctionCall 31(test_if_compound()
+             189:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 190 190 12 12
+             188:           4 FunctionCall 36(test_if_compound2()
+             192:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 193 193 12 12
+             191:           4 FunctionCall 41(test_switch()
+             201:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 199 199 12 12
+             200:     49(int) Load 54(counter)
+                              Store 196(outx) 200
+             202:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 203 203 12 12
+                              Return
+                              FunctionEnd
+    16(test_if():           4 Function None 5
+              17:             Label
+              62:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 19
+              63:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 11 11 12 12
+              61:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 19 16(test_if()
+                              SelectionMerge 69 None
+                              BranchConditional 67 68 69
+              68:               Label
+              74:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 70
+              75:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 57 57 12 12
+              73:     49(int)   Load 54(counter)
+              76:     49(int)   IAdd 73 72
+                                Store 54(counter) 76
+                                Branch 69
+              69:             Label
+              77:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 19
+              78:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 79 79 12 12
+                              Return
+                              FunctionEnd
+26(test_ifelse():           4 Function None 5
+              27:             Label
+              81:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 29
+              82:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 30 30 12 12
+              80:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 29 26(test_ifelse()
+                              SelectionMerge 84 None
+                              BranchConditional 67 83 91
+              83:               Label
+              88:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 85
+              89:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 86 86 12 12
+              87:     49(int)   Load 54(counter)
+              90:     49(int)   IAdd 87 72
+                                Store 54(counter) 90
+                                Branch 84
+              91:               Label
+              95:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 92
+              96:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 71 71 12 12
+              94:     49(int)   Load 54(counter)
+              97:     49(int)   IAdd 94 93
+                                Store 54(counter) 97
+                                Branch 84
+              84:             Label
+              98:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 29
+              99:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 100 100 12 12
+                              Return
+                              FunctionEnd
+31(test_if_compound():           4 Function None 5
+              32:             Label
+             102:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 34
+             103:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 35 35 12 12
+             101:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 34 31(test_if_compound()
+                              SelectionMerge 105 None
+                              BranchConditional 67 104 105
+             104:               Label
+             111:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 106
+             112:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 35 35 12 12
+                                SelectionMerge 110 None
+                                BranchConditional 67 109 110
+             109:                 Label
+             116:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 113
+             117:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 114 114 12 12
+             115:     49(int)     Load 54(counter)
+             118:     49(int)     IAdd 115 72
+                                  Store 54(counter) 118
+                                  Branch 110
+             110:               Label
+                                Branch 105
+             105:             Label
+             119:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 34
+             120:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 121 121 12 12
+                              Return
+                              FunctionEnd
+36(test_if_compound2():           4 Function None 5
+              37:             Label
+             123:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 39
+             124:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 40 40 12 12
+             122:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 39 36(test_if_compound2()
+                              SelectionMerge 126 None
+                              BranchConditional 67 125 126
+             125:               Label
+             131:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 127
+             132:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 40 40 12 12
+                                SelectionMerge 130 None
+                                BranchConditional 67 129 130
+             129:                 Label
+             135:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 133
+             136:           4     ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 10 10 12 12
+             134:     49(int)     Load 54(counter)
+             137:     49(int)     IAdd 134 72
+                                  Store 54(counter) 137
+                                  Branch 130
+             130:               Label
+             139:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 127
+             140:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 141 141 12 12
+             138:     49(int)   Load 54(counter)
+             142:     49(int)   IAdd 138 93
+                                Store 54(counter) 142
+                                Branch 126
+             126:             Label
+             143:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 39
+             144:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 145 145 12 12
+                              Return
+                              FunctionEnd
+41(test_switch():           4 Function None 5
+              42:             Label
+             147:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 44
+             148:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 45 45 12 12
+             146:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 44 41(test_switch()
+                              SelectionMerge 152 None
+                              Switch 58 151 
+                                     case 0: 149
+                                     case 1: 150
+             151:               Label
+             168:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 44
+             169:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 170 170 12 12
+             167:     49(int)   Load 54(counter)
+             171:     49(int)   IAdd 167 166
+                                Store 54(counter) 171
+                                Branch 152
+             149:               Label
+             154:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 44
+             155:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 156 156 12 12
+             153:     49(int)   Load 54(counter)
+             157:     49(int)   IAdd 153 72
+                                Store 54(counter) 157
+                                Branch 150
+             150:               Label
+             159:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 44
+             160:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 161 161 12 12
+             158:     49(int)   Load 54(counter)
+             162:     49(int)   IAdd 158 93
+                                Store 54(counter) 162
+             163:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 164 164 12 12
+                                Branch 152
+             152:             Label
+             173:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 44
+             174:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 20 175 175 12 12
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.debuginfo.include.glsl.frag.out b/Test/baseResults/spv.debuginfo.include.glsl.frag.out
new file mode 100644
index 0000000..1d8348a
--- /dev/null
+++ b/Test/baseResults/spv.debuginfo.include.glsl.frag.out
@@ -0,0 +1,167 @@
+spv.debuginfo.include.glsl.frag
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 112
+
+                              Capability Shader
+                              Extension  "SPV_KHR_non_semantic_info"
+               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               4:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 15  "main" 82
+                              ExecutionMode 15 OriginUpperLeft
+               2:             String  "spv.debuginfo.include.glsl.frag"
+               3:             String  "spv.debuginfo.include.glsl.h"
+               9:             String  "uint"
+              18:             String  "float"
+              31:             String  "headerFunction"
+              34:             String  "
+out vec4 headerOut;
+
+uniform UBO {
+	vec4 headerUboItem;
+};
+
+vec4 headerFunction(vec4 a) {
+	return -a;
+}"
+              39:             String  "// OpModuleProcessed auto-map-locations
+// OpModuleProcessed auto-map-bindings
+// OpModuleProcessed client vulkan100
+// OpModuleProcessed target-env vulkan1.0
+// OpModuleProcessed keep-uncalled
+// OpModuleProcessed entry-point main
+#line 1
+#version 450
+
+#extension GL_GOOGLE_include_directive : require
+#include "spv.debuginfo.include.glsl.h"
+
+vec4 mainFileFunction(vec4 v) {
+	return -v;
+}
+
+void main() {
+	headerOut = headerFunction(mainFileFunction(headerUboItem));
+}"
+              42:             String  "a"
+              50:             String  "mainFileFunction"
+              53:             String  "v"
+              57:             String  "main"
+              84:             String  "headerOut"
+              88:             String  "headerUboItem"
+              91:             String  "UBO"
+              96:             String  ""
+              98:             String  "int"
+                              SourceExtension  "GL_GOOGLE_cpp_style_line_directive"
+                              SourceExtension  "GL_GOOGLE_include_directive"
+                              Name 15  "main"
+                              Name 29  "headerFunction(vf4;"
+                              Name 28  "a"
+                              Name 48  "mainFileFunction(vf4;"
+                              Name 47  "v"
+                              Name 82  "headerOut"
+                              Name 86  "UBO"
+                              MemberName 86(UBO) 0  "headerUboItem"
+                              Name 94  ""
+                              Name 101  "param"
+                              Name 108  "param"
+                              Decorate 82(headerOut) Location 0
+                              Decorate 86(UBO) Block
+                              MemberDecorate 86(UBO) 0 Offset 0
+                              Decorate 94 Binding 0
+                              Decorate 94 DescriptorSet 0
+               5:             TypeVoid
+               6:             TypeFunction 5
+               8:             TypeInt 32 0
+              11:      8(int) Constant 32
+              12:      8(int) Constant 6
+              13:      8(int) Constant 0
+              10:           5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 9 11 12 13
+              14:      8(int) Constant 3
+               7:           5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 14 5
+              17:             TypeFloat 32
+              19:           5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 18 11 14 13
+              20:             TypeVector 17(float) 4
+              21:      8(int) Constant 4
+              22:           5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 19 21
+              23:             TypePointer Function 20(fvec4)
+              24:      8(int) Constant 7
+              25:           5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 22 24 13
+              26:             TypeFunction 20(fvec4) 23(ptr)
+              27:           5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 14 22 22
+              33:           5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 3 34
+              35:      8(int) Constant 8
+              37:      8(int) Constant 1
+              38:           5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 2 39
+              40:      8(int) Constant 2
+              36:           5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 37 21 38 40
+              32:           5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 31 27 33 35 13 36 31 14 35
+              41:           5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 42 22 33 35 13 32 21 37
+              44:           5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
+              51:           5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 50 27 38 12 13 36 50 14 12
+              52:           5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 53 22 38 12 13 51 21 37
+              59:      8(int) Constant 10
+              58:           5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 57 7 38 59 13 36 57 14 59
+              63:      8(int) Constant 9
+              80:             TypePointer Output 20(fvec4)
+              81:           5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 22 14 13
+   82(headerOut):     80(ptr) Variable Output
+              85:      8(int) Constant 11
+              83:           5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 84 22 38 85 13 36 84 82(headerOut) 35
+         86(UBO):             TypeStruct 20(fvec4)
+              89:      8(int) Constant 5
+              87:           5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 88 22 38 89 24 13 13 14
+              90:           5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 91 37 38 85 13 36 91 13 14 87
+              92:             TypePointer Uniform 86(UBO)
+              93:           5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 90 40 13
+              94:     92(ptr) Variable Uniform
+              95:           5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 96 90 38 85 13 36 96 94 35
+              97:             TypeInt 32 1
+              99:           5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 98 11 21 13
+             100:     97(int) Constant 0
+             102:             TypePointer Uniform 20(fvec4)
+             103:           5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 22 40 13
+             111:      8(int) Constant 12
+        15(main):           5 Function None 6
+              16:             Label
+      101(param):     23(ptr) Variable Function
+      108(param):     23(ptr) Variable Function
+              78:           5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 58
+              79:           5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 38 59 59 13 13
+              77:           5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 58 15(main)
+             105:           5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 38 85 85 13 13
+             104:    102(ptr) AccessChain 94 100
+             106:   20(fvec4) Load 104
+                              Store 101(param) 106
+             107:   20(fvec4) FunctionCall 48(mainFileFunction(vf4;) 101(param)
+                              Store 108(param) 107
+             109:   20(fvec4) FunctionCall 29(headerFunction(vf4;) 108(param)
+                              Store 82(headerOut) 109
+             110:           5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 38 111 111 13 13
+                              Return
+                              FunctionEnd
+29(headerFunction(vf4;):   20(fvec4) Function None 26
+           28(a):     23(ptr) FunctionParameter
+              30:             Label
+              45:           5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 32
+              46:           5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 35 35 13 13
+              43:           5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 41 28(a) 44
+              60:           5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 32 29(headerFunction(vf4;)
+              62:           5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 33 63 63 13 13
+              61:   20(fvec4) Load 28(a)
+              64:   20(fvec4) FNegate 61
+                              ReturnValue 64
+                              FunctionEnd
+48(mainFileFunction(vf4;):   20(fvec4) Function None 26
+           47(v):     23(ptr) FunctionParameter
+              49:             Label
+              55:           5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 51
+              56:           5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 38 12 12 13 13
+              54:           5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 52 47(v) 44
+              69:           5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 51 48(mainFileFunction(vf4;)
+              71:           5 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 38 24 24 13 13
+              70:   20(fvec4) Load 47(v)
+              72:   20(fvec4) FNegate 70
+                              ReturnValue 72
+                              FunctionEnd
diff --git a/Test/baseResults/spv.debuginfo.multiline.glsl.frag.out b/Test/baseResults/spv.debuginfo.multiline.glsl.frag.out
new file mode 100644
index 0000000..b16727d
--- /dev/null
+++ b/Test/baseResults/spv.debuginfo.multiline.glsl.frag.out
@@ -0,0 +1,165 @@
+spv.debuginfo.multiline.glsl.frag
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 109
+
+                              Capability Shader
+                              Extension  "SPV_KHR_non_semantic_info"
+               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               3:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 14  "main" 75 81
+                              ExecutionMode 14 OriginUpperLeft
+               2:             String  "spv.debuginfo.multiline.glsl.frag"
+               8:             String  "uint"
+              17:             String  "float"
+              29:             String  "add"
+              32:             String  "// OpModuleProcessed auto-map-locations
+// OpModuleProcessed auto-map-bindings
+// OpModuleProcessed client vulkan100
+// OpModuleProcessed target-env vulkan1.0
+// OpModuleProcessed keep-uncalled
+// OpModuleProcessed entry-point main
+#line 1
+#version 460
+
+in float inx;
+out float outx;
+
+float add(float x, float y, float z) {
+    return 
+        x
+        +
+        y
+        +
+        z
+    ;
+}
+
+void main() {
+    outx
+        =
+        add(
+            inx+1,
+            inx+2,
+            inx+3
+        )
+    ;
+}"
+              38:             String  "x"
+              44:             String  "y"
+              47:             String  "z"
+              49:             String  "main"
+              77:             String  "outx"
+              83:             String  "inx"
+                              Name 14  "main"
+                              Name 27  "add(f1;f1;f1;"
+                              Name 24  "x"
+                              Name 25  "y"
+                              Name 26  "z"
+                              Name 75  "outx"
+                              Name 81  "inx"
+                              Name 99  "param"
+                              Name 102  "param"
+                              Name 103  "param"
+                              Decorate 75(outx) Location 0
+                              Decorate 81(inx) Location 0
+               4:             TypeVoid
+               5:             TypeFunction 4
+               7:             TypeInt 32 0
+              10:      7(int) Constant 32
+              11:      7(int) Constant 6
+              12:      7(int) Constant 0
+               9:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 8 10 11 12
+              13:      7(int) Constant 3
+               6:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4
+              16:             TypeFloat 32
+              18:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 17 10 13 12
+              19:             TypePointer Function 16(float)
+              20:      7(int) Constant 7
+              21:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 18 20 12
+              22:             TypeFunction 16(float) 19(ptr) 19(ptr) 19(ptr)
+              23:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 18 18 18 18
+              31:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 2 32
+              34:      7(int) Constant 1
+              35:      7(int) Constant 4
+              36:      7(int) Constant 2
+              33:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 34 35 31 36
+              30:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 29 23 31 11 12 33 29 13 11
+              37:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 38 18 31 11 12 30 35 34
+              40:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
+              43:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 44 18 31 11 12 30 35 36
+              46:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 47 18 31 11 12 30 35 13
+              51:      7(int) Constant 16
+              50:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 49 6 31 51 12 33 49 13 51
+              55:      7(int) Constant 8
+              58:      7(int) Constant 10
+              62:      7(int) Constant 12
+              69:      7(int) Constant 14
+              73:             TypePointer Output 16(float)
+              74:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 18 13 12
+        75(outx):     73(ptr) Variable Output
+              78:      7(int) Constant 17
+              76:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 77 18 31 78 12 33 77 75(outx) 55
+              79:             TypePointer Input 16(float)
+              80:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 18 34 12
+         81(inx):     79(ptr) Variable Input
+              84:      7(int) Constant 20
+              82:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 83 18 31 84 12 33 83 81(inx) 55
+              87:   16(float) Constant 1065353216
+              91:      7(int) Constant 21
+              92:   16(float) Constant 1073741824
+              96:      7(int) Constant 22
+              97:   16(float) Constant 1077936128
+             101:      7(int) Constant 23
+             106:      7(int) Constant 18
+             108:      7(int) Constant 25
+        14(main):           4 Function None 5
+              15:             Label
+       99(param):     19(ptr) Variable Function
+      102(param):     19(ptr) Variable Function
+      103(param):     19(ptr) Variable Function
+              71:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 50
+              72:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 31 51 51 12 12
+              70:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 50 14(main)
+              86:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 31 84 84 12 12
+              85:   16(float) Load 81(inx)
+              88:   16(float) FAdd 85 87
+              90:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 31 91 91 12 12
+              89:   16(float) Load 81(inx)
+              93:   16(float) FAdd 89 92
+              95:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 31 96 96 12 12
+              94:   16(float) Load 81(inx)
+              98:   16(float) FAdd 94 97
+             100:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 31 101 101 12 12
+                              Store 99(param) 88
+                              Store 102(param) 93
+                              Store 103(param) 98
+             104:   16(float) FunctionCall 27(add(f1;f1;f1;) 99(param) 102(param) 103(param)
+             105:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 31 106 106 12 12
+                              Store 75(outx) 104
+             107:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 31 108 108 12 12
+                              Return
+                              FunctionEnd
+27(add(f1;f1;f1;):   16(float) Function None 22
+           24(x):     19(ptr) FunctionParameter
+           25(y):     19(ptr) FunctionParameter
+           26(z):     19(ptr) FunctionParameter
+              28:             Label
+              41:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 30
+              42:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 31 11 11 12 12
+              39:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 37 24(x) 40
+              45:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 43 25(y) 40
+              48:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 46 26(z) 40
+              52:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 30 27(add(f1;f1;f1;)
+              54:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 31 55 55 12 12
+              53:   16(float) Load 24(x)
+              57:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 31 58 58 12 12
+              56:   16(float) Load 25(y)
+              59:   16(float) FAdd 53 56
+              61:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 31 62 62 12 12
+              60:   16(float) Load 26(z)
+              63:   16(float) FAdd 59 60
+              64:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 31 20 20 12 12
+                              ReturnValue 63
+                              FunctionEnd
diff --git a/Test/baseResults/spv.debuginfo.rt_types.glsl.rgen.out b/Test/baseResults/spv.debuginfo.rt_types.glsl.rgen.out
new file mode 100644
index 0000000..0438409
--- /dev/null
+++ b/Test/baseResults/spv.debuginfo.rt_types.glsl.rgen.out
@@ -0,0 +1,195 @@
+spv.debuginfo.rt_types.glsl.rgen
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 127
+
+                              Capability RayQueryKHR
+                              Capability RayTracingNV
+                              Extension  "SPV_KHR_non_semantic_info"
+                              Extension  "SPV_KHR_ray_query"
+                              Extension  "SPV_NV_ray_tracing"
+               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               3:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint RayGenerationKHR 14  "main"
+               2:             String  "spv.debuginfo.rt_types.glsl.rgen"
+               8:             String  "uint"
+              16:             String  "main"
+              19:             String  "// OpModuleProcessed auto-map-locations
+// OpModuleProcessed auto-map-bindings
+// OpModuleProcessed client vulkan100
+// OpModuleProcessed target-env vulkan1.0
+// OpModuleProcessed keep-uncalled
+// OpModuleProcessed entry-point main
+#line 1
+#version 460
+#extension GL_NV_ray_tracing : enable
+#extension GL_EXT_ray_query : enable
+layout(binding = 0, set = 0) uniform accelerationStructureEXT acc0;
+
+layout(shaderRecordNV) buffer block
+{
+	vec3 dir;
+	vec3 origin;
+};
+
+void main()
+{
+    rayQueryEXT localRayQuery;
+    uint rayFlags = gl_RayFlagsOpaqueEXT | gl_RayFlagsSkipClosestHitShaderEXT;
+    float tMin = 0.f;
+    float tMax = 1000.f;
+    rayQueryInitializeEXT(localRayQuery, acc0, rayFlags, 0xFF , origin, tMin, dir, tMax);
+    if (!rayQueryProceedEXT(localRayQuery))
+    {
+        rayQueryTerminateEXT(localRayQuery);
+    }
+}
+"
+              33:             String  "rayFlags"
+              40:             String  "float"
+              46:             String  "tMin"
+              53:             String  "tMax"
+              60:             String  "rayQuery"
+              62:             String  "@rayQuery"
+              68:             String  "localRayQuery"
+              72:             String  "accelerationStructure"
+              73:             String  "@accelerationStructure"
+              78:             String  "acc0"
+              87:             String  "origin"
+              90:             String  "block"
+              96:             String  ""
+              98:             String  "int"
+             111:             String  "bool"
+                              SourceExtension  "GL_EXT_ray_query"
+                              SourceExtension  "GL_NV_ray_tracing"
+                              Name 14  "main"
+                              Name 31  "rayFlags"
+                              Name 44  "tMin"
+                              Name 51  "tMax"
+                              Name 66  "localRayQuery"
+                              Name 76  "acc0"
+                              Name 85  "block"
+                              MemberName 85(block) 0  "dir"
+                              MemberName 85(block) 1  "origin"
+                              Name 94  ""
+                              Decorate 76(acc0) Binding 0
+                              Decorate 76(acc0) DescriptorSet 0
+                              Decorate 85(block) BufferBlock
+                              MemberDecorate 85(block) 0 Offset 0
+                              MemberDecorate 85(block) 1 Offset 16
+               4:             TypeVoid
+               5:             TypeFunction 4
+               7:             TypeInt 32 0
+              10:      7(int) Constant 32
+              11:      7(int) Constant 6
+              12:      7(int) Constant 0
+               9:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 8 10 11 12
+              13:      7(int) Constant 3
+               6:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4
+              18:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 2 19
+              20:      7(int) Constant 12
+              22:      7(int) Constant 1
+              23:      7(int) Constant 4
+              24:      7(int) Constant 2
+              21:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 22 23 18 24
+              17:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 16 6 18 20 12 21 16 13 20
+              28:             TypePointer Function 7(int)
+              29:      7(int) Constant 7
+              30:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 9 29 12
+              34:      7(int) Constant 15
+              32:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 33 9 18 34 12 17 23
+              36:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 31(DebugExpression)
+              38:      7(int) Constant 9
+              39:             TypeFloat 32
+              41:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 40 10 13 12
+              42:             TypePointer Function 39(float)
+              43:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 41 29 12
+              47:      7(int) Constant 16
+              45:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 46 41 18 47 12 17 23
+              50:   39(float) Constant 0
+              54:      7(int) Constant 17
+              52:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 26(DebugLocalVariable) 53 41 18 54 12 17 23
+              57:   39(float) Constant 1148846080
+              58:             TypeRayQueryKHR
+              61:      7(int) Constant 18
+              63:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 0(DebugInfoNone)
+              59:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 60 22 18 61 12 21 62 63 13
+              64:             TypePointer Private 58
+              65:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 59 11 12
+66(localRayQuery):     64(ptr) Variable Private
+              69:      7(int) Constant 8
+              67:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 68 59 18 61 12 21 68 66(localRayQuery) 69
+              70:             TypeAccelerationStructureKHR
+              71:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 72 22 18 61 12 21 73 63 13
+              74:             TypePointer UniformConstant 70
+              75:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 71 12 12
+        76(acc0):     74(ptr) Variable UniformConstant
+              77:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 78 71 18 61 12 21 78 76(acc0) 69
+              82:      7(int) Constant 255
+              83:             TypeVector 39(float) 3
+              84:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 6(DebugTypeVector) 41 13
+       85(block):             TypeStruct 83(fvec3) 83(fvec3)
+              86:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 87 84 18 38 29 12 12 13
+              88:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 11(DebugTypeMember) 87 84 18 38 29 12 12 13
+              89:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 10(DebugTypeComposite) 90 22 18 61 12 21 90 12 13 86 88
+              91:             TypePointer ShaderRecordBufferKHR 85(block)
+              92:      7(int) Constant 5343
+              93:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 89 92 12
+              94:     91(ptr) Variable ShaderRecordBufferKHR
+              95:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 96 89 18 61 12 21 96 94 69
+              97:             TypeInt 32 1
+              99:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 98 10 23 12
+             100:     97(int) Constant 1
+             101:             TypePointer ShaderRecordBufferKHR 83(fvec3)
+             102:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 84 92 12
+             106:     97(int) Constant 0
+             110:             TypeBool
+             112:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 111 10 24 12
+             115:      7(int) Constant 19
+             120:      7(int) Constant 21
+             121:      7(int) Constant 30
+             119:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 21(DebugLexicalBlock) 18 120 121 17
+             126:      7(int) Constant 23
+        14(main):           4 Function None 5
+              15:             Label
+    31(rayFlags):     28(ptr) Variable Function
+        44(tMin):     42(ptr) Variable Function
+        51(tMax):     42(ptr) Variable Function
+              26:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+              27:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 20 20 12 12
+              25:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 17 14(main)
+              37:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 34 34 12 12
+              35:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 32 31(rayFlags) 36
+                              Store 31(rayFlags) 38
+              49:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 47 47 12 12
+              48:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 45 44(tMin) 36
+                              Store 44(tMin) 50
+              56:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 54 54 12 12
+              55:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 28(DebugDeclare) 52 51(tMax) 36
+                              Store 51(tMax) 57
+              80:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 61 61 12 12
+              79:          70 Load 76(acc0)
+              81:      7(int) Load 31(rayFlags)
+             103:    101(ptr) AccessChain 94 100
+             104:   83(fvec3) Load 103
+             105:   39(float) Load 44(tMin)
+             107:    101(ptr) AccessChain 94 106
+             108:   83(fvec3) Load 107
+             109:   39(float) Load 51(tMax)
+                              RayQueryInitializeKHR 66(localRayQuery) 79 81 82 104 105 108 109
+             114:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 115 115 12 12
+             113:   110(bool) RayQueryProceedKHR 66(localRayQuery)
+             116:   110(bool) LogicalNot 113
+                              SelectionMerge 118 None
+                              BranchConditional 116 117 118
+             117:               Label
+             122:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 119
+             123:           4   ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 120 120 12 12
+                                RayQueryTerminateKHR 66(localRayQuery)
+                                Branch 118
+             118:             Label
+             124:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+             125:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 126 126 12 12
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.debuginfo.scalar_types.glsl.frag.out b/Test/baseResults/spv.debuginfo.scalar_types.glsl.frag.out
index 30ad60c..019c0a0 100644
--- a/Test/baseResults/spv.debuginfo.scalar_types.glsl.frag.out
+++ b/Test/baseResults/spv.debuginfo.scalar_types.glsl.frag.out
@@ -1,7 +1,7 @@
 spv.debuginfo.scalar_types.glsl.frag
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 146
+// Id's are bound by 161
 
                               Capability Shader
                               Capability Float16
@@ -10,187 +10,255 @@
                               Capability Int16
                               Capability Int8
                               Extension  "SPV_KHR_non_semantic_info"
-               2:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
+               1:             ExtInstImport  "NonSemantic.Shader.DebugInfo.100"
                3:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
                               EntryPoint Fragment 14  "main"
                               ExecutionMode 14 OriginUpperLeft
-               1:             String  ""
+               2:             String  "spv.debuginfo.scalar_types.glsl.frag"
                8:             String  "uint"
-              15:             String  "main"
-              18:             String  "// OpModuleProcessed auto-map-locations
+              16:             String  "main"
+              19:             String  "// OpModuleProcessed auto-map-locations
 // OpModuleProcessed auto-map-bindings
 // OpModuleProcessed client vulkan100
 // OpModuleProcessed target-env vulkan1.0
 // OpModuleProcessed keep-uncalled
 // OpModuleProcessed entry-point main
 #line 1
-"
+/*
+The MIT License (MIT)
+
+Copyright (c) 2023 NVIDIA CORPORATION.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+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 Software.
+
+THE SOFTWARE IS 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 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+*/
+
+#version 460
+
+#extension GL_EXT_shader_explicit_arithmetic_types : require
+
+bool VAR_bool;
+int VAR_int;
+uint VAR_uint;
+float VAR_float;
+double VAR_double;
+int8_t VAR_int8_t;
+uint8_t VAR_uint8_t;
+int16_t VAR_int16_t;
+uint16_t VAR_uint16_t;
+int64_t VAR_int64_t;
+uint64_t VAR_uint64_t;
+float16_t VAR_float16_t;
+
+void main() {
+    VAR_bool = bool(0);
+    VAR_int = int(0);
+    VAR_uint = uint(0);
+    VAR_float = float(0);
+    VAR_double = double(0);
+    VAR_int8_t = int8_t(0);
+    VAR_uint8_t = uint8_t(0);
+    VAR_int16_t = int16_t(0);
+    VAR_uint16_t = uint16_t(0);
+    VAR_int64_t = int64_t(0);
+    VAR_uint64_t = uint64_t(0);
+    VAR_float16_t = float16_t(0);
+}"
               29:             String  "bool"
-              34:             String  "VAR_bool"
+              35:             String  "VAR_bool"
               41:             String  "int"
-              46:             String  "VAR_int"
-              53:             String  "VAR_uint"
-              57:             String  "float"
-              62:             String  "VAR_float"
-              67:             String  "double"
-              73:             String  "VAR_double"
-              78:             String  "int8_t"
-              83:             String  "VAR_int8_t"
-              88:             String  "uint8_t"
-              93:             String  "VAR_uint8_t"
-              98:             String  "int16_t"
-             104:             String  "VAR_int16_t"
-             109:             String  "uint16_t"
-             114:             String  "VAR_uint16_t"
-             119:             String  "int64_t"
-             124:             String  "VAR_int64_t"
-             129:             String  "uint64_t"
-             134:             String  "VAR_uint64_t"
-             139:             String  "float16_t"
-             144:             String  "VAR_float16_t"
+              47:             String  "VAR_int"
+              55:             String  "VAR_uint"
+              59:             String  "float"
+              65:             String  "VAR_float"
+              70:             String  "double"
+              77:             String  "VAR_double"
+              82:             String  "int8_t"
+              88:             String  "VAR_int8_t"
+              93:             String  "uint8_t"
+              99:             String  "VAR_uint8_t"
+             104:             String  "int16_t"
+             111:             String  "VAR_int16_t"
+             116:             String  "uint16_t"
+             122:             String  "VAR_uint16_t"
+             127:             String  "int64_t"
+             133:             String  "VAR_int64_t"
+             138:             String  "uint64_t"
+             144:             String  "VAR_uint64_t"
+             149:             String  "float16_t"
+             155:             String  "VAR_float16_t"
                               SourceExtension  "GL_EXT_shader_explicit_arithmetic_types"
                               Name 14  "main"
-                              Name 32  "VAR_bool"
-                              Name 44  "VAR_int"
-                              Name 51  "VAR_uint"
-                              Name 60  "VAR_float"
-                              Name 71  "VAR_double"
-                              Name 81  "VAR_int8_t"
-                              Name 91  "VAR_uint8_t"
-                              Name 102  "VAR_int16_t"
-                              Name 112  "VAR_uint16_t"
-                              Name 122  "VAR_int64_t"
-                              Name 132  "VAR_uint64_t"
-                              Name 142  "VAR_float16_t"
+                              Name 33  "VAR_bool"
+                              Name 45  "VAR_int"
+                              Name 53  "VAR_uint"
+                              Name 63  "VAR_float"
+                              Name 75  "VAR_double"
+                              Name 86  "VAR_int8_t"
+                              Name 97  "VAR_uint8_t"
+                              Name 109  "VAR_int16_t"
+                              Name 120  "VAR_uint16_t"
+                              Name 131  "VAR_int64_t"
+                              Name 142  "VAR_uint64_t"
+                              Name 153  "VAR_float16_t"
                4:             TypeVoid
                5:             TypeFunction 4
                7:             TypeInt 32 0
               10:      7(int) Constant 32
               11:      7(int) Constant 6
               12:      7(int) Constant 0
-               9:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 8 10 11 12
+               9:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 8 10 11 12
               13:      7(int) Constant 3
-               6:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4
-              17:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 1 18
-              20:      7(int) Constant 1
-              21:      7(int) Constant 4
-              22:      7(int) Constant 2
-              19:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 20 21 17 22
-              16:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 15 6 17 12 12 19 15 13 12
-              27:      7(int) Constant 43
+               6:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 8(DebugTypeFunction) 13 4
+              18:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 35(DebugSource) 2 19
+              20:      7(int) Constant 42
+              22:      7(int) Constant 1
+              23:      7(int) Constant 4
+              24:      7(int) Constant 2
+              21:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 1(DebugCompilationUnit) 22 23 18 24
+              17:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 20(DebugFunction) 16 6 18 20 12 21 16 13 20
               28:             TypeBool
-              30:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 29 10 22 12
+              30:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 29 10 24 12
               31:             TypePointer Private 28(bool)
-    32(VAR_bool):     31(ptr) Variable Private
-              35:      7(int) Constant 8
-              33:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 34 30 17 27 12 19 34 32(VAR_bool) 35
-              36:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 29 10 22 12
-              37:    28(bool) ConstantFalse
-              39:      7(int) Constant 44
+              32:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 30 11 12
+    33(VAR_bool):     31(ptr) Variable Private
+              36:      7(int) Constant 43
+              37:      7(int) Constant 8
+              34:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 35 30 18 36 12 21 35 33(VAR_bool) 37
+              38:    28(bool) ConstantFalse
               40:             TypeInt 32 1
-              42:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 41 10 21 12
+              42:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 41 10 23 12
               43:             TypePointer Private 40(int)
-     44(VAR_int):     43(ptr) Variable Private
-              45:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 46 42 17 39 12 19 46 44(VAR_int) 35
-              47:     40(int) Constant 0
-              49:      7(int) Constant 45
-              50:             TypePointer Private 7(int)
-    51(VAR_uint):     50(ptr) Variable Private
-              52:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 53 9 17 49 12 19 53 51(VAR_uint) 35
-              55:      7(int) Constant 46
-              56:             TypeFloat 32
-              58:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 57 10 13 12
-              59:             TypePointer Private 56(float)
-   60(VAR_float):     59(ptr) Variable Private
-              61:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 62 58 17 55 12 19 62 60(VAR_float) 35
-              63:   56(float) Constant 0
-              65:      7(int) Constant 47
-              66:             TypeFloat 64
-              69:      7(int) Constant 64
-              68:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 67 69 13 12
-              70:             TypePointer Private 66(float64_t)
-  71(VAR_double):     70(ptr) Variable Private
-              72:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 73 68 17 65 12 19 73 71(VAR_double) 35
-              74:66(float64_t) Constant 0 0
-              76:      7(int) Constant 48
-              77:             TypeInt 8 1
-              79:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 78 35 21 12
-              80:             TypePointer Private 77(int8_t)
-  81(VAR_int8_t):     80(ptr) Variable Private
-              82:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 83 79 17 76 12 19 83 81(VAR_int8_t) 35
-              84:  77(int8_t) Constant 0
-              86:      7(int) Constant 49
-              87:             TypeInt 8 0
-              89:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 88 35 11 12
-              90:             TypePointer Private 87(int8_t)
- 91(VAR_uint8_t):     90(ptr) Variable Private
-              92:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 93 89 17 86 12 19 93 91(VAR_uint8_t) 35
-              94:  87(int8_t) Constant 0
-              96:      7(int) Constant 50
-              97:             TypeInt 16 1
-             100:      7(int) Constant 16
-              99:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 98 100 21 12
-             101:             TypePointer Private 97(int16_t)
-102(VAR_int16_t):    101(ptr) Variable Private
-             103:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 104 99 17 96 12 19 104 102(VAR_int16_t) 35
-             105: 97(int16_t) Constant 0
-             107:      7(int) Constant 51
-             108:             TypeInt 16 0
-             110:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 109 100 11 12
-             111:             TypePointer Private 108(int16_t)
-112(VAR_uint16_t):    111(ptr) Variable Private
-             113:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 114 110 17 107 12 19 114 112(VAR_uint16_t) 35
-             115:108(int16_t) Constant 0
-             117:      7(int) Constant 52
-             118:             TypeInt 64 1
-             120:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 119 69 21 12
-             121:             TypePointer Private 118(int64_t)
-122(VAR_int64_t):    121(ptr) Variable Private
-             123:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 124 120 17 117 12 19 124 122(VAR_int64_t) 35
-             125:118(int64_t) Constant 0 0
-             127:      7(int) Constant 53
-             128:             TypeInt 64 0
-             130:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 129 69 11 12
-             131:             TypePointer Private 128(int64_t)
-132(VAR_uint64_t):    131(ptr) Variable Private
-             133:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 134 130 17 127 12 19 134 132(VAR_uint64_t) 35
-             135:128(int64_t) Constant 0 0
-             137:      7(int) Constant 54
-             138:             TypeFloat 16
-             140:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 139 100 13 12
-             141:             TypePointer Private 138(float16_t)
-142(VAR_float16_t):    141(ptr) Variable Private
-             143:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 144 140 17 137 12 19 144 142(VAR_float16_t) 35
-             145:138(float16_t) Constant 0
-                              Line 1 42 11
+              44:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 42 11 12
+     45(VAR_int):     43(ptr) Variable Private
+              48:      7(int) Constant 44
+              46:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 47 42 18 48 12 21 47 45(VAR_int) 37
+              49:     40(int) Constant 0
+              51:             TypePointer Private 7(int)
+              52:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 9 11 12
+    53(VAR_uint):     51(ptr) Variable Private
+              56:      7(int) Constant 45
+              54:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 55 9 18 56 12 21 55 53(VAR_uint) 37
+              58:             TypeFloat 32
+              60:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 59 10 13 12
+              61:             TypePointer Private 58(float)
+              62:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 60 11 12
+   63(VAR_float):     61(ptr) Variable Private
+              66:      7(int) Constant 46
+              64:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 65 60 18 66 12 21 65 63(VAR_float) 37
+              67:   58(float) Constant 0
+              69:             TypeFloat 64
+              72:      7(int) Constant 64
+              71:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 70 72 13 12
+              73:             TypePointer Private 69(float64_t)
+              74:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 71 11 12
+  75(VAR_double):     73(ptr) Variable Private
+              78:      7(int) Constant 47
+              76:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 77 71 18 78 12 21 77 75(VAR_double) 37
+              79:69(float64_t) Constant 0 0
+              81:             TypeInt 8 1
+              83:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 82 37 23 12
+              84:             TypePointer Private 81(int8_t)
+              85:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 83 11 12
+  86(VAR_int8_t):     84(ptr) Variable Private
+              89:      7(int) Constant 48
+              87:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 88 83 18 89 12 21 88 86(VAR_int8_t) 37
+              90:  81(int8_t) Constant 0
+              92:             TypeInt 8 0
+              94:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 93 37 11 12
+              95:             TypePointer Private 92(int8_t)
+              96:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 94 11 12
+ 97(VAR_uint8_t):     95(ptr) Variable Private
+             100:      7(int) Constant 49
+              98:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 99 94 18 100 12 21 99 97(VAR_uint8_t) 37
+             101:  92(int8_t) Constant 0
+             103:             TypeInt 16 1
+             106:      7(int) Constant 16
+             105:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 104 106 23 12
+             107:             TypePointer Private 103(int16_t)
+             108:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 105 11 12
+109(VAR_int16_t):    107(ptr) Variable Private
+             112:      7(int) Constant 50
+             110:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 111 105 18 112 12 21 111 109(VAR_int16_t) 37
+             113:103(int16_t) Constant 0
+             115:             TypeInt 16 0
+             117:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 116 106 11 12
+             118:             TypePointer Private 115(int16_t)
+             119:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 117 11 12
+120(VAR_uint16_t):    118(ptr) Variable Private
+             123:      7(int) Constant 51
+             121:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 122 117 18 123 12 21 122 120(VAR_uint16_t) 37
+             124:115(int16_t) Constant 0
+             126:             TypeInt 64 1
+             128:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 127 72 23 12
+             129:             TypePointer Private 126(int64_t)
+             130:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 128 11 12
+131(VAR_int64_t):    129(ptr) Variable Private
+             134:      7(int) Constant 52
+             132:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 133 128 18 134 12 21 133 131(VAR_int64_t) 37
+             135:126(int64_t) Constant 0 0
+             137:             TypeInt 64 0
+             139:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 138 72 11 12
+             140:             TypePointer Private 137(int64_t)
+             141:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 139 11 12
+142(VAR_uint64_t):    140(ptr) Variable Private
+             145:      7(int) Constant 53
+             143:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 144 139 18 145 12 21 144 142(VAR_uint64_t) 37
+             146:137(int64_t) Constant 0 0
+             148:             TypeFloat 16
+             150:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 2(DebugTypeBasic) 149 106 13 12
+             151:             TypePointer Private 148(float16_t)
+             152:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 3(DebugTypePointer) 150 11 12
+153(VAR_float16_t):    151(ptr) Variable Private
+             156:      7(int) Constant 54
+             154:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 18(DebugGlobalVariable) 155 150 18 156 12 21 155 153(VAR_float16_t) 37
+             157:148(float16_t) Constant 0
+             160:      7(int) Constant 55
         14(main):           4 Function None 5
-              23:             Label
-              24:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 16 14(main)
-              25:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 16
-              26:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 27 27 12 12
-                              Store 32(VAR_bool) 37
-              38:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 39 39 12 12
-                              Store 44(VAR_int) 47
-              48:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 49 49 12 12
-                              Store 51(VAR_uint) 12
-              54:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 55 55 12 12
-                              Store 60(VAR_float) 63
-              64:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 65 65 12 12
-                              Store 71(VAR_double) 74
-              75:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 76 76 12 12
-                              Store 81(VAR_int8_t) 84
-              85:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 86 86 12 12
-                              Store 91(VAR_uint8_t) 94
-              95:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 96 96 12 12
-                              Store 102(VAR_int16_t) 105
-             106:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 107 107 12 12
-                              Store 112(VAR_uint16_t) 115
-             116:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 117 117 12 12
-                              Store 122(VAR_int64_t) 125
-             126:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 127 127 12 12
-                              Store 132(VAR_uint64_t) 135
-             136:           4 ExtInst 2(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 17 137 137 12 12
-                              Store 142(VAR_float16_t) 145
+              15:             Label
+              26:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 23(DebugScope) 17
+              27:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 20 20 12 12
+              25:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 101(DebugFunctionDefinition) 17 14(main)
+              39:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 36 36 12 12
+                              Store 33(VAR_bool) 38
+              50:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 48 48 12 12
+                              Store 45(VAR_int) 49
+              57:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 56 56 12 12
+                              Store 53(VAR_uint) 12
+              68:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 66 66 12 12
+                              Store 63(VAR_float) 67
+              80:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 78 78 12 12
+                              Store 75(VAR_double) 79
+              91:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 89 89 12 12
+                              Store 86(VAR_int8_t) 90
+             102:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 100 100 12 12
+                              Store 97(VAR_uint8_t) 101
+             114:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 112 112 12 12
+                              Store 109(VAR_int16_t) 113
+             125:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 123 123 12 12
+                              Store 120(VAR_uint16_t) 124
+             136:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 134 134 12 12
+                              Store 131(VAR_int64_t) 135
+             147:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 145 145 12 12
+                              Store 142(VAR_uint64_t) 146
+             158:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 156 156 12 12
+                              Store 153(VAR_float16_t) 157
+             159:           4 ExtInst 1(NonSemantic.Shader.DebugInfo.100) 103(DebugLine) 18 160 160 12 12
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.deepRvalue.frag.out b/Test/baseResults/spv.deepRvalue.frag.out
index efb9d2e..a278a9c 100644
--- a/Test/baseResults/spv.deepRvalue.frag.out
+++ b/Test/baseResults/spv.deepRvalue.frag.out
@@ -27,8 +27,8 @@
                               MemberName 131(str) 2  "c"
                               Name 133  "t"
                               Name 146  "gl_FragColor"
-                              Decorate 111(samp2D) DescriptorSet 0
                               Decorate 111(samp2D) Binding 0
+                              Decorate 111(samp2D) DescriptorSet 0
                               Decorate 146(gl_FragColor) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.deviceGroup.frag.out b/Test/baseResults/spv.deviceGroup.frag.out
index 68285a1..7ffc195 100644
--- a/Test/baseResults/spv.deviceGroup.frag.out
+++ b/Test/baseResults/spv.deviceGroup.frag.out
@@ -15,8 +15,8 @@
                               Name 9  "color"
                               Name 12  "gl_DeviceIndex"
                               Decorate 9(color) Location 0
-                              Decorate 12(gl_DeviceIndex) Flat
                               Decorate 12(gl_DeviceIndex) BuiltIn DeviceIndex
+                              Decorate 12(gl_DeviceIndex) Flat
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.double.comp.out b/Test/baseResults/spv.double.comp.out
index 3a5eef8..f7a4f81 100644
--- a/Test/baseResults/spv.double.comp.out
+++ b/Test/baseResults/spv.double.comp.out
@@ -22,16 +22,16 @@
                               Name 49  "aa"
                               Name 54  "globalCoef"
                               Name 59  "destTex"
+                              Decorate 8(bufName) BufferBlock
                               MemberDecorate 8(bufName) 0 Offset 0
                               MemberDecorate 8(bufName) 1 Offset 8
-                              Decorate 8(bufName) BufferBlock
-                              Decorate 10(bufInst) DescriptorSet 0
                               Decorate 10(bufInst) Binding 0
+                              Decorate 10(bufInst) DescriptorSet 0
                               Decorate 26(gl_GlobalInvocationID) BuiltIn GlobalInvocationId
                               Decorate 33(gl_LocalInvocationID) BuiltIn LocalInvocationId
-                              Decorate 59(destTex) DescriptorSet 0
-                              Decorate 59(destTex) Binding 0
                               Decorate 59(destTex) NonReadable
+                              Decorate 59(destTex) Binding 0
+                              Decorate 59(destTex) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.expect_assume.assumeEXT.comp.out b/Test/baseResults/spv.expect_assume.assumeEXT.comp.out
new file mode 100644
index 0000000..2a1ca7f
--- /dev/null
+++ b/Test/baseResults/spv.expect_assume.assumeEXT.comp.out
@@ -0,0 +1,48 @@
+spv.expect_assume.assumeEXT.comp
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 22
+
+                              Capability Shader
+                              Capability ExpectAssumeKHR
+                              Extension  "SPV_KHR_expect_assume"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 8 1 1
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_expect_assume"
+                              Name 4  "main"
+                              Name 7  "roblock"
+                              MemberName 7(roblock) 0  "i"
+                              Name 9  "ro"
+                              Decorate 7(roblock) BufferBlock
+                              MemberDecorate 7(roblock) 0 NonWritable
+                              MemberDecorate 7(roblock) 0 Offset 0
+                              Decorate 9(ro) NonWritable
+                              Decorate 9(ro) Binding 0
+                              Decorate 9(ro) DescriptorSet 0
+                              Decorate 21 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+      7(roblock):             TypeStruct 6(int)
+               8:             TypePointer Uniform 7(roblock)
+           9(ro):      8(ptr) Variable Uniform
+              10:      6(int) Constant 0
+              11:             TypePointer Uniform 6(int)
+              14:      6(int) Constant 42
+              15:             TypeBool
+              17:             TypeInt 32 0
+              18:             TypeVector 17(int) 3
+              19:     17(int) Constant 8
+              20:     17(int) Constant 1
+              21:   18(ivec3) ConstantComposite 19 20 20
+         4(main):           2 Function None 3
+               5:             Label
+              12:     11(ptr) AccessChain 9(ro) 10
+              13:      6(int) Load 12
+              16:    15(bool) SGreaterThan 13 14
+                              AssumeTrueKHR 16
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.expect_assume.expectEXT.comp.out b/Test/baseResults/spv.expect_assume.expectEXT.comp.out
new file mode 100644
index 0000000..bb9d073
--- /dev/null
+++ b/Test/baseResults/spv.expect_assume.expectEXT.comp.out
@@ -0,0 +1,277 @@
+spv.expect_assume.expectEXT.comp
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 178
+
+                              Capability Shader
+                              Capability ExpectAssumeKHR
+                              Extension  "SPV_KHR_expect_assume"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 8 1 1
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_expect_assume"
+                              Name 4  "main"
+                              Name 8  "x"
+                              Name 18  "roblock"
+                              MemberName 18(roblock) 0  "b"
+                              MemberName 18(roblock) 1  "bv2"
+                              MemberName 18(roblock) 2  "bv3"
+                              MemberName 18(roblock) 3  "bv4"
+                              MemberName 18(roblock) 4  "i"
+                              MemberName 18(roblock) 5  "iv2"
+                              MemberName 18(roblock) 6  "iv3"
+                              MemberName 18(roblock) 7  "iv4"
+                              MemberName 18(roblock) 8  "ui"
+                              MemberName 18(roblock) 9  "uv2"
+                              MemberName 18(roblock) 10  "uv3"
+                              MemberName 18(roblock) 11  "uv4"
+                              Name 20  "ro"
+                              Decorate 18(roblock) BufferBlock
+                              MemberDecorate 18(roblock) 0 NonWritable
+                              MemberDecorate 18(roblock) 0 Offset 0
+                              MemberDecorate 18(roblock) 1 NonWritable
+                              MemberDecorate 18(roblock) 1 Offset 8
+                              MemberDecorate 18(roblock) 2 NonWritable
+                              MemberDecorate 18(roblock) 2 Offset 16
+                              MemberDecorate 18(roblock) 3 NonWritable
+                              MemberDecorate 18(roblock) 3 Offset 32
+                              MemberDecorate 18(roblock) 4 NonWritable
+                              MemberDecorate 18(roblock) 4 Offset 48
+                              MemberDecorate 18(roblock) 5 NonWritable
+                              MemberDecorate 18(roblock) 5 Offset 56
+                              MemberDecorate 18(roblock) 6 NonWritable
+                              MemberDecorate 18(roblock) 6 Offset 64
+                              MemberDecorate 18(roblock) 7 NonWritable
+                              MemberDecorate 18(roblock) 7 Offset 80
+                              MemberDecorate 18(roblock) 8 NonWritable
+                              MemberDecorate 18(roblock) 8 Offset 96
+                              MemberDecorate 18(roblock) 9 NonWritable
+                              MemberDecorate 18(roblock) 9 Offset 104
+                              MemberDecorate 18(roblock) 10 NonWritable
+                              MemberDecorate 18(roblock) 10 Offset 112
+                              MemberDecorate 18(roblock) 11 NonWritable
+                              MemberDecorate 18(roblock) 11 Offset 128
+                              Decorate 20(ro) NonWritable
+                              Decorate 20(ro) Binding 0
+                              Decorate 20(ro) DescriptorSet 0
+                              Decorate 177 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypePointer Function 6(int)
+               9:      6(int) Constant 0
+              10:             TypeBool
+              11:             TypeInt 32 0
+              12:             TypeVector 11(int) 2
+              13:             TypeVector 11(int) 3
+              14:             TypeVector 11(int) 4
+              15:             TypeVector 6(int) 2
+              16:             TypeVector 6(int) 3
+              17:             TypeVector 6(int) 4
+     18(roblock):             TypeStruct 11(int) 12(ivec2) 13(ivec3) 14(ivec4) 6(int) 15(ivec2) 16(ivec3) 17(ivec4) 11(int) 12(ivec2) 13(ivec3) 14(ivec4)
+              19:             TypePointer Uniform 18(roblock)
+          20(ro):     19(ptr) Variable Uniform
+              21:             TypePointer Uniform 11(int)
+              24:     11(int) Constant 0
+              26:    10(bool) ConstantTrue
+              32:      6(int) Constant 1
+              33:             TypePointer Uniform 12(ivec2)
+              36:             TypeVector 10(bool) 2
+              37:   12(ivec2) ConstantComposite 24 24
+              39:    10(bool) ConstantFalse
+              40:   36(bvec2) ConstantComposite 26 39
+              48:      6(int) Constant 2
+              49:             TypePointer Uniform 13(ivec3)
+              52:             TypeVector 10(bool) 3
+              53:   13(ivec3) ConstantComposite 24 24 24
+              55:   52(bvec3) ConstantComposite 26 39 26
+              63:      6(int) Constant 3
+              64:             TypePointer Uniform 14(ivec4)
+              67:             TypeVector 10(bool) 4
+              68:   14(ivec4) ConstantComposite 24 24 24 24
+              70:   67(bvec4) ConstantComposite 39 26 39 26
+              79:      6(int) Constant 4
+              80:             TypePointer Uniform 6(int)
+              83:      6(int) Constant 10
+              89:      6(int) Constant 5
+              90:             TypePointer Uniform 15(ivec2)
+              93:      6(int) Constant 11
+              94:      6(int) Constant 4294967274
+              95:   15(ivec2) ConstantComposite 93 94
+             103:      6(int) Constant 6
+             104:             TypePointer Uniform 16(ivec3)
+             107:      6(int) Constant 33
+             108:   16(ivec3) ConstantComposite 93 94 107
+             116:      6(int) Constant 7
+             117:             TypePointer Uniform 17(ivec4)
+             120:      6(int) Constant 44
+             121:   17(ivec4) ConstantComposite 93 94 107 120
+             130:      6(int) Constant 8
+             133:     11(int) Constant 10
+             139:      6(int) Constant 9
+             142:     11(int) Constant 11
+             143:     11(int) Constant 22
+             144:   12(ivec2) ConstantComposite 142 143
+             154:     11(int) Constant 33
+             155:   13(ivec3) ConstantComposite 142 143 154
+             165:     11(int) Constant 44
+             166:   14(ivec4) ConstantComposite 142 143 154 165
+             175:     11(int) Constant 8
+             176:     11(int) Constant 1
+             177:   13(ivec3) ConstantComposite 175 176 176
+         4(main):           2 Function None 3
+               5:             Label
+            8(x):      7(ptr) Variable Function
+                              Store 8(x) 9
+              22:     21(ptr) AccessChain 20(ro) 9
+              23:     11(int) Load 22
+              25:    10(bool) INotEqual 23 24
+              27:    10(bool) ExpectKHR 25 26
+              28:    10(bool) LogicalEqual 27 26
+              29:    10(bool) LogicalNot 28
+                              SelectionMerge 31 None
+                              BranchConditional 29 30 31
+              30:               Label
+              34:     33(ptr)   AccessChain 20(ro) 32
+              35:   12(ivec2)   Load 34
+              38:   36(bvec2)   INotEqual 35 37
+              41:   36(bvec2)   ExpectKHR 38 40
+              42:   36(bvec2)   LogicalEqual 41 40
+              43:    10(bool)   All 42
+                                Branch 31
+              31:             Label
+              44:    10(bool) Phi 28 5 43 30
+              45:    10(bool) LogicalNot 44
+                              SelectionMerge 47 None
+                              BranchConditional 45 46 47
+              46:               Label
+              50:     49(ptr)   AccessChain 20(ro) 48
+              51:   13(ivec3)   Load 50
+              54:   52(bvec3)   INotEqual 51 53
+              56:   52(bvec3)   ExpectKHR 54 55
+              57:   52(bvec3)   LogicalEqual 56 55
+              58:    10(bool)   All 57
+                                Branch 47
+              47:             Label
+              59:    10(bool) Phi 44 31 58 46
+              60:    10(bool) LogicalNot 59
+                              SelectionMerge 62 None
+                              BranchConditional 60 61 62
+              61:               Label
+              65:     64(ptr)   AccessChain 20(ro) 63
+              66:   14(ivec4)   Load 65
+              69:   67(bvec4)   INotEqual 66 68
+              71:   67(bvec4)   ExpectKHR 69 70
+              72:   67(bvec4)   LogicalEqual 71 70
+              73:    10(bool)   All 72
+                                Branch 62
+              62:             Label
+              74:    10(bool) Phi 59 47 73 61
+                              SelectionMerge 76 None
+                              BranchConditional 74 75 76
+              75:               Label
+              77:      6(int)   Load 8(x)
+              78:      6(int)   IAdd 77 32
+                                Store 8(x) 78
+                                Branch 76
+              76:             Label
+              81:     80(ptr) AccessChain 20(ro) 79
+              82:      6(int) Load 81
+              84:      6(int) ExpectKHR 82 83
+              85:    10(bool) IEqual 84 83
+              86:    10(bool) LogicalNot 85
+                              SelectionMerge 88 None
+                              BranchConditional 86 87 88
+              87:               Label
+              91:     90(ptr)   AccessChain 20(ro) 89
+              92:   15(ivec2)   Load 91
+              96:   15(ivec2)   ExpectKHR 92 95
+              97:   36(bvec2)   IEqual 96 95
+              98:    10(bool)   All 97
+                                Branch 88
+              88:             Label
+              99:    10(bool) Phi 85 76 98 87
+             100:    10(bool) LogicalNot 99
+                              SelectionMerge 102 None
+                              BranchConditional 100 101 102
+             101:               Label
+             105:    104(ptr)   AccessChain 20(ro) 103
+             106:   16(ivec3)   Load 105
+             109:   16(ivec3)   ExpectKHR 106 108
+             110:   52(bvec3)   IEqual 109 108
+             111:    10(bool)   All 110
+                                Branch 102
+             102:             Label
+             112:    10(bool) Phi 99 88 111 101
+             113:    10(bool) LogicalNot 112
+                              SelectionMerge 115 None
+                              BranchConditional 113 114 115
+             114:               Label
+             118:    117(ptr)   AccessChain 20(ro) 116
+             119:   17(ivec4)   Load 118
+             122:   17(ivec4)   ExpectKHR 119 121
+             123:   67(bvec4)   IEqual 122 121
+             124:    10(bool)   All 123
+                                Branch 115
+             115:             Label
+             125:    10(bool) Phi 112 102 124 114
+                              SelectionMerge 127 None
+                              BranchConditional 125 126 127
+             126:               Label
+             128:      6(int)   Load 8(x)
+             129:      6(int)   IAdd 128 32
+                                Store 8(x) 129
+                                Branch 127
+             127:             Label
+             131:     21(ptr) AccessChain 20(ro) 130
+             132:     11(int) Load 131
+             134:     11(int) ExpectKHR 132 133
+             135:    10(bool) IEqual 134 133
+             136:    10(bool) LogicalNot 135
+                              SelectionMerge 138 None
+                              BranchConditional 136 137 138
+             137:               Label
+             140:     33(ptr)   AccessChain 20(ro) 139
+             141:   12(ivec2)   Load 140
+             145:   12(ivec2)   ExpectKHR 141 144
+             146:   36(bvec2)   IEqual 145 144
+             147:    10(bool)   All 146
+                                Branch 138
+             138:             Label
+             148:    10(bool) Phi 135 127 147 137
+             149:    10(bool) LogicalNot 148
+                              SelectionMerge 151 None
+                              BranchConditional 149 150 151
+             150:               Label
+             152:     49(ptr)   AccessChain 20(ro) 83
+             153:   13(ivec3)   Load 152
+             156:   13(ivec3)   ExpectKHR 153 155
+             157:   52(bvec3)   IEqual 156 155
+             158:    10(bool)   All 157
+                                Branch 151
+             151:             Label
+             159:    10(bool) Phi 148 138 158 150
+             160:    10(bool) LogicalNot 159
+                              SelectionMerge 162 None
+                              BranchConditional 160 161 162
+             161:               Label
+             163:     64(ptr)   AccessChain 20(ro) 93
+             164:   14(ivec4)   Load 163
+             167:   14(ivec4)   ExpectKHR 164 166
+             168:   67(bvec4)   IEqual 167 166
+             169:    10(bool)   All 168
+                                Branch 162
+             162:             Label
+             170:    10(bool) Phi 159 151 169 161
+                              SelectionMerge 172 None
+                              BranchConditional 170 171 172
+             171:               Label
+             173:      6(int)   Load 8(x)
+             174:      6(int)   IAdd 173 32
+                                Store 8(x) 174
+                                Branch 172
+             172:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.expect_assume.expectEXT.exttypes.comp.out b/Test/baseResults/spv.expect_assume.expectEXT.exttypes.comp.out
new file mode 100644
index 0000000..f449a63
--- /dev/null
+++ b/Test/baseResults/spv.expect_assume.expectEXT.exttypes.comp.out
@@ -0,0 +1,690 @@
+spv.expect_assume.expectEXT.exttypes.comp
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 458
+
+                              Capability Shader
+                              Capability Int64
+                              Capability Int16
+                              Capability Int8
+                              Capability StorageUniformBufferBlock16
+                              Capability UniformAndStorageBuffer8BitAccess
+                              Capability ExpectAssumeKHR
+                              Extension  "SPV_KHR_16bit_storage"
+                              Extension  "SPV_KHR_8bit_storage"
+                              Extension  "SPV_KHR_expect_assume"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 8 1 1
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_expect_assume"
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types"
+                              Name 4  "main"
+                              Name 8  "x"
+                              Name 42  "roblock"
+                              MemberName 42(roblock) 0  "i8"
+                              MemberName 42(roblock) 1  "i8v2"
+                              MemberName 42(roblock) 2  "i8v3"
+                              MemberName 42(roblock) 3  "i8v4"
+                              MemberName 42(roblock) 4  "u8"
+                              MemberName 42(roblock) 5  "u8v2"
+                              MemberName 42(roblock) 6  "u8v3"
+                              MemberName 42(roblock) 7  "u8v4"
+                              MemberName 42(roblock) 8  "i16"
+                              MemberName 42(roblock) 9  "i16v2"
+                              MemberName 42(roblock) 10  "i16v3"
+                              MemberName 42(roblock) 11  "i16v4"
+                              MemberName 42(roblock) 12  "u16"
+                              MemberName 42(roblock) 13  "u16v2"
+                              MemberName 42(roblock) 14  "u16v3"
+                              MemberName 42(roblock) 15  "u16v4"
+                              MemberName 42(roblock) 16  "i32"
+                              MemberName 42(roblock) 17  "i32v2"
+                              MemberName 42(roblock) 18  "i32v3"
+                              MemberName 42(roblock) 19  "i32v4"
+                              MemberName 42(roblock) 20  "u32"
+                              MemberName 42(roblock) 21  "u32v2"
+                              MemberName 42(roblock) 22  "u32v3"
+                              MemberName 42(roblock) 23  "u32v4"
+                              MemberName 42(roblock) 24  "i64"
+                              MemberName 42(roblock) 25  "i64v2"
+                              MemberName 42(roblock) 26  "i64v3"
+                              MemberName 42(roblock) 27  "i64v4"
+                              MemberName 42(roblock) 28  "u64"
+                              MemberName 42(roblock) 29  "u64v2"
+                              MemberName 42(roblock) 30  "u64v3"
+                              MemberName 42(roblock) 31  "u64v4"
+                              Name 44  "ro"
+                              Decorate 42(roblock) BufferBlock
+                              MemberDecorate 42(roblock) 0 NonWritable
+                              MemberDecorate 42(roblock) 0 Offset 0
+                              MemberDecorate 42(roblock) 1 NonWritable
+                              MemberDecorate 42(roblock) 1 Offset 2
+                              MemberDecorate 42(roblock) 2 NonWritable
+                              MemberDecorate 42(roblock) 2 Offset 4
+                              MemberDecorate 42(roblock) 3 NonWritable
+                              MemberDecorate 42(roblock) 3 Offset 8
+                              MemberDecorate 42(roblock) 4 NonWritable
+                              MemberDecorate 42(roblock) 4 Offset 12
+                              MemberDecorate 42(roblock) 5 NonWritable
+                              MemberDecorate 42(roblock) 5 Offset 14
+                              MemberDecorate 42(roblock) 6 NonWritable
+                              MemberDecorate 42(roblock) 6 Offset 16
+                              MemberDecorate 42(roblock) 7 NonWritable
+                              MemberDecorate 42(roblock) 7 Offset 20
+                              MemberDecorate 42(roblock) 8 NonWritable
+                              MemberDecorate 42(roblock) 8 Offset 24
+                              MemberDecorate 42(roblock) 9 NonWritable
+                              MemberDecorate 42(roblock) 9 Offset 28
+                              MemberDecorate 42(roblock) 10 NonWritable
+                              MemberDecorate 42(roblock) 10 Offset 32
+                              MemberDecorate 42(roblock) 11 NonWritable
+                              MemberDecorate 42(roblock) 11 Offset 40
+                              MemberDecorate 42(roblock) 12 NonWritable
+                              MemberDecorate 42(roblock) 12 Offset 48
+                              MemberDecorate 42(roblock) 13 NonWritable
+                              MemberDecorate 42(roblock) 13 Offset 52
+                              MemberDecorate 42(roblock) 14 NonWritable
+                              MemberDecorate 42(roblock) 14 Offset 56
+                              MemberDecorate 42(roblock) 15 NonWritable
+                              MemberDecorate 42(roblock) 15 Offset 64
+                              MemberDecorate 42(roblock) 16 NonWritable
+                              MemberDecorate 42(roblock) 16 Offset 72
+                              MemberDecorate 42(roblock) 17 NonWritable
+                              MemberDecorate 42(roblock) 17 Offset 80
+                              MemberDecorate 42(roblock) 18 NonWritable
+                              MemberDecorate 42(roblock) 18 Offset 96
+                              MemberDecorate 42(roblock) 19 NonWritable
+                              MemberDecorate 42(roblock) 19 Offset 112
+                              MemberDecorate 42(roblock) 20 NonWritable
+                              MemberDecorate 42(roblock) 20 Offset 128
+                              MemberDecorate 42(roblock) 21 NonWritable
+                              MemberDecorate 42(roblock) 21 Offset 136
+                              MemberDecorate 42(roblock) 22 NonWritable
+                              MemberDecorate 42(roblock) 22 Offset 144
+                              MemberDecorate 42(roblock) 23 NonWritable
+                              MemberDecorate 42(roblock) 23 Offset 160
+                              MemberDecorate 42(roblock) 24 NonWritable
+                              MemberDecorate 42(roblock) 24 Offset 176
+                              MemberDecorate 42(roblock) 25 NonWritable
+                              MemberDecorate 42(roblock) 25 Offset 192
+                              MemberDecorate 42(roblock) 26 NonWritable
+                              MemberDecorate 42(roblock) 26 Offset 224
+                              MemberDecorate 42(roblock) 27 NonWritable
+                              MemberDecorate 42(roblock) 27 Offset 256
+                              MemberDecorate 42(roblock) 28 NonWritable
+                              MemberDecorate 42(roblock) 28 Offset 288
+                              MemberDecorate 42(roblock) 29 NonWritable
+                              MemberDecorate 42(roblock) 29 Offset 304
+                              MemberDecorate 42(roblock) 30 NonWritable
+                              MemberDecorate 42(roblock) 30 Offset 320
+                              MemberDecorate 42(roblock) 31 NonWritable
+                              MemberDecorate 42(roblock) 31 Offset 352
+                              Decorate 44(ro) NonWritable
+                              Decorate 44(ro) Binding 0
+                              Decorate 44(ro) DescriptorSet 0
+                              Decorate 457 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 1
+               7:             TypePointer Function 6(int)
+               9:      6(int) Constant 0
+              10:             TypeBool
+              11:             TypeInt 8 1
+              12:             TypeVector 11(int8_t) 2
+              13:             TypeVector 11(int8_t) 3
+              14:             TypeVector 11(int8_t) 4
+              15:             TypeInt 8 0
+              16:             TypeVector 15(int8_t) 2
+              17:             TypeVector 15(int8_t) 3
+              18:             TypeVector 15(int8_t) 4
+              19:             TypeInt 16 1
+              20:             TypeVector 19(int16_t) 2
+              21:             TypeVector 19(int16_t) 3
+              22:             TypeVector 19(int16_t) 4
+              23:             TypeInt 16 0
+              24:             TypeVector 23(int16_t) 2
+              25:             TypeVector 23(int16_t) 3
+              26:             TypeVector 23(int16_t) 4
+              27:             TypeVector 6(int) 2
+              28:             TypeVector 6(int) 3
+              29:             TypeVector 6(int) 4
+              30:             TypeInt 32 0
+              31:             TypeVector 30(int) 2
+              32:             TypeVector 30(int) 3
+              33:             TypeVector 30(int) 4
+              34:             TypeInt 64 1
+              35:             TypeVector 34(int64_t) 2
+              36:             TypeVector 34(int64_t) 3
+              37:             TypeVector 34(int64_t) 4
+              38:             TypeInt 64 0
+              39:             TypeVector 38(int64_t) 2
+              40:             TypeVector 38(int64_t) 3
+              41:             TypeVector 38(int64_t) 4
+     42(roblock):             TypeStruct 11(int8_t) 12(i8vec2) 13(i8vec3) 14(i8vec4) 15(int8_t) 16(i8vec2) 17(i8vec3) 18(i8vec4) 19(int16_t) 20(i16vec2) 21(i16vec3) 22(i16vec4) 23(int16_t) 24(i16vec2) 25(i16vec3) 26(i16vec4) 6(int) 27(ivec2) 28(ivec3) 29(ivec4) 30(int) 31(ivec2) 32(ivec3) 33(ivec4) 34(int64_t) 35(i64vec2) 36(i64vec3) 37(i64vec4) 38(int64_t) 39(i64vec2) 40(i64vec3) 41(i64vec4)
+              43:             TypePointer Uniform 42(roblock)
+          44(ro):     43(ptr) Variable Uniform
+              45:             TypePointer Uniform 11(int8_t)
+              49:      6(int) Constant 10
+              55:      6(int) Constant 1
+              56:             TypePointer Uniform 12(i8vec2)
+              59:  11(int8_t) Constant 11
+              60:  11(int8_t) Constant 4294967274
+              61:  12(i8vec2) ConstantComposite 59 60
+              63:             TypeVector 10(bool) 2
+              70:      6(int) Constant 2
+              71:             TypePointer Uniform 13(i8vec3)
+              74:  11(int8_t) Constant 33
+              75:  13(i8vec3) ConstantComposite 59 60 74
+              77:             TypeVector 10(bool) 3
+              84:      6(int) Constant 3
+              85:             TypePointer Uniform 14(i8vec4)
+              88:  11(int8_t) Constant 44
+              89:  14(i8vec4) ConstantComposite 59 60 74 88
+              91:             TypeVector 10(bool) 4
+              99:      6(int) Constant 4
+             100:             TypePointer Uniform 15(int8_t)
+             110:      6(int) Constant 5
+             111:             TypePointer Uniform 16(i8vec2)
+             114:  15(int8_t) Constant 11
+             115:  15(int8_t) Constant 22
+             116:  16(i8vec2) ConstantComposite 114 115
+             124:      6(int) Constant 6
+             125:             TypePointer Uniform 17(i8vec3)
+             128:  15(int8_t) Constant 33
+             129:  17(i8vec3) ConstantComposite 114 115 128
+             137:      6(int) Constant 7
+             138:             TypePointer Uniform 18(i8vec4)
+             141:  15(int8_t) Constant 44
+             142:  18(i8vec4) ConstantComposite 114 115 128 141
+             151:      6(int) Constant 8
+             152:             TypePointer Uniform 19(int16_t)
+             161:      6(int) Constant 9
+             162:             TypePointer Uniform 20(i16vec2)
+             165: 19(int16_t) Constant 11
+             166: 19(int16_t) Constant 4294967274
+             167: 20(i16vec2) ConstantComposite 165 166
+             175:             TypePointer Uniform 21(i16vec3)
+             178: 19(int16_t) Constant 33
+             179: 21(i16vec3) ConstantComposite 165 166 178
+             187:      6(int) Constant 11
+             188:             TypePointer Uniform 22(i16vec4)
+             191: 19(int16_t) Constant 44
+             192: 22(i16vec4) ConstantComposite 165 166 178 191
+             201:      6(int) Constant 12
+             202:             TypePointer Uniform 23(int16_t)
+             212:      6(int) Constant 13
+             213:             TypePointer Uniform 24(i16vec2)
+             216: 23(int16_t) Constant 11
+             217: 23(int16_t) Constant 22
+             218: 24(i16vec2) ConstantComposite 216 217
+             226:      6(int) Constant 14
+             227:             TypePointer Uniform 25(i16vec3)
+             230: 23(int16_t) Constant 33
+             231: 25(i16vec3) ConstantComposite 216 217 230
+             239:      6(int) Constant 15
+             240:             TypePointer Uniform 26(i16vec4)
+             243: 23(int16_t) Constant 44
+             244: 26(i16vec4) ConstantComposite 216 217 230 243
+             253:      6(int) Constant 16
+             254:             TypePointer Uniform 6(int)
+             262:      6(int) Constant 17
+             263:             TypePointer Uniform 27(ivec2)
+             266:      6(int) Constant 4294967274
+             267:   27(ivec2) ConstantComposite 187 266
+             275:      6(int) Constant 18
+             276:             TypePointer Uniform 28(ivec3)
+             279:      6(int) Constant 33
+             280:   28(ivec3) ConstantComposite 187 266 279
+             288:      6(int) Constant 19
+             289:             TypePointer Uniform 29(ivec4)
+             292:      6(int) Constant 44
+             293:   29(ivec4) ConstantComposite 187 266 279 292
+             302:      6(int) Constant 20
+             303:             TypePointer Uniform 30(int)
+             306:     30(int) Constant 10
+             312:      6(int) Constant 21
+             313:             TypePointer Uniform 31(ivec2)
+             316:     30(int) Constant 11
+             317:     30(int) Constant 22
+             318:   31(ivec2) ConstantComposite 316 317
+             326:      6(int) Constant 22
+             327:             TypePointer Uniform 32(ivec3)
+             330:     30(int) Constant 33
+             331:   32(ivec3) ConstantComposite 316 317 330
+             339:      6(int) Constant 23
+             340:             TypePointer Uniform 33(ivec4)
+             343:     30(int) Constant 44
+             344:   33(ivec4) ConstantComposite 316 317 330 343
+             353:      6(int) Constant 24
+             354:             TypePointer Uniform 34(int64_t)
+             357: 34(int64_t) Constant 10 0
+             363:      6(int) Constant 25
+             364:             TypePointer Uniform 35(i64vec2)
+             367: 34(int64_t) Constant 11 0
+             368: 34(int64_t) Constant 4294967274 4294967295
+             369: 35(i64vec2) ConstantComposite 367 368
+             377:      6(int) Constant 26
+             378:             TypePointer Uniform 36(i64vec3)
+             381: 34(int64_t) Constant 33 0
+             382: 36(i64vec3) ConstantComposite 367 368 381
+             390:      6(int) Constant 27
+             391:             TypePointer Uniform 37(i64vec4)
+             394: 34(int64_t) Constant 44 0
+             395: 37(i64vec4) ConstantComposite 367 368 381 394
+             404:      6(int) Constant 28
+             405:             TypePointer Uniform 38(int64_t)
+             408: 38(int64_t) Constant 10 0
+             414:      6(int) Constant 29
+             415:             TypePointer Uniform 39(i64vec2)
+             418: 38(int64_t) Constant 11 0
+             419: 38(int64_t) Constant 22 0
+             420: 39(i64vec2) ConstantComposite 418 419
+             428:      6(int) Constant 30
+             429:             TypePointer Uniform 40(i64vec3)
+             432: 38(int64_t) Constant 33 0
+             433: 40(i64vec3) ConstantComposite 418 419 432
+             441:      6(int) Constant 31
+             442:             TypePointer Uniform 41(i64vec4)
+             445: 38(int64_t) Constant 44 0
+             446: 41(i64vec4) ConstantComposite 418 419 432 445
+             455:     30(int) Constant 8
+             456:     30(int) Constant 1
+             457:   32(ivec3) ConstantComposite 455 456 456
+         4(main):           2 Function None 3
+               5:             Label
+            8(x):      7(ptr) Variable Function
+                              Store 8(x) 9
+              46:     45(ptr) AccessChain 44(ro) 9
+              47:  11(int8_t) Load 46
+              48:      6(int) SConvert 47
+              50:      6(int) ExpectKHR 48 49
+              51:    10(bool) IEqual 50 49
+              52:    10(bool) LogicalNot 51
+                              SelectionMerge 54 None
+                              BranchConditional 52 53 54
+              53:               Label
+              57:     56(ptr)   AccessChain 44(ro) 55
+              58:  12(i8vec2)   Load 57
+              62:  12(i8vec2)   ExpectKHR 58 61
+              64:   63(bvec2)   IEqual 62 61
+              65:    10(bool)   All 64
+                                Branch 54
+              54:             Label
+              66:    10(bool) Phi 51 5 65 53
+              67:    10(bool) LogicalNot 66
+                              SelectionMerge 69 None
+                              BranchConditional 67 68 69
+              68:               Label
+              72:     71(ptr)   AccessChain 44(ro) 70
+              73:  13(i8vec3)   Load 72
+              76:  13(i8vec3)   ExpectKHR 73 75
+              78:   77(bvec3)   IEqual 76 75
+              79:    10(bool)   All 78
+                                Branch 69
+              69:             Label
+              80:    10(bool) Phi 66 54 79 68
+              81:    10(bool) LogicalNot 80
+                              SelectionMerge 83 None
+                              BranchConditional 81 82 83
+              82:               Label
+              86:     85(ptr)   AccessChain 44(ro) 84
+              87:  14(i8vec4)   Load 86
+              90:  14(i8vec4)   ExpectKHR 87 89
+              92:   91(bvec4)   IEqual 90 89
+              93:    10(bool)   All 92
+                                Branch 83
+              83:             Label
+              94:    10(bool) Phi 80 69 93 82
+                              SelectionMerge 96 None
+                              BranchConditional 94 95 96
+              95:               Label
+              97:      6(int)   Load 8(x)
+              98:      6(int)   IAdd 97 55
+                                Store 8(x) 98
+                                Branch 96
+              96:             Label
+             101:    100(ptr) AccessChain 44(ro) 99
+             102:  15(int8_t) Load 101
+             103:     30(int) UConvert 102
+             104:      6(int) Bitcast 103
+             105:      6(int) ExpectKHR 104 49
+             106:    10(bool) IEqual 105 49
+             107:    10(bool) LogicalNot 106
+                              SelectionMerge 109 None
+                              BranchConditional 107 108 109
+             108:               Label
+             112:    111(ptr)   AccessChain 44(ro) 110
+             113:  16(i8vec2)   Load 112
+             117:  16(i8vec2)   ExpectKHR 113 116
+             118:   63(bvec2)   IEqual 117 116
+             119:    10(bool)   All 118
+                                Branch 109
+             109:             Label
+             120:    10(bool) Phi 106 96 119 108
+             121:    10(bool) LogicalNot 120
+                              SelectionMerge 123 None
+                              BranchConditional 121 122 123
+             122:               Label
+             126:    125(ptr)   AccessChain 44(ro) 124
+             127:  17(i8vec3)   Load 126
+             130:  17(i8vec3)   ExpectKHR 127 129
+             131:   77(bvec3)   IEqual 130 129
+             132:    10(bool)   All 131
+                                Branch 123
+             123:             Label
+             133:    10(bool) Phi 120 109 132 122
+             134:    10(bool) LogicalNot 133
+                              SelectionMerge 136 None
+                              BranchConditional 134 135 136
+             135:               Label
+             139:    138(ptr)   AccessChain 44(ro) 137
+             140:  18(i8vec4)   Load 139
+             143:  18(i8vec4)   ExpectKHR 140 142
+             144:   91(bvec4)   IEqual 143 142
+             145:    10(bool)   All 144
+                                Branch 136
+             136:             Label
+             146:    10(bool) Phi 133 123 145 135
+                              SelectionMerge 148 None
+                              BranchConditional 146 147 148
+             147:               Label
+             149:      6(int)   Load 8(x)
+             150:      6(int)   IAdd 149 55
+                                Store 8(x) 150
+                                Branch 148
+             148:             Label
+             153:    152(ptr) AccessChain 44(ro) 151
+             154: 19(int16_t) Load 153
+             155:      6(int) SConvert 154
+             156:      6(int) ExpectKHR 155 49
+             157:    10(bool) IEqual 156 49
+             158:    10(bool) LogicalNot 157
+                              SelectionMerge 160 None
+                              BranchConditional 158 159 160
+             159:               Label
+             163:    162(ptr)   AccessChain 44(ro) 161
+             164: 20(i16vec2)   Load 163
+             168: 20(i16vec2)   ExpectKHR 164 167
+             169:   63(bvec2)   IEqual 168 167
+             170:    10(bool)   All 169
+                                Branch 160
+             160:             Label
+             171:    10(bool) Phi 157 148 170 159
+             172:    10(bool) LogicalNot 171
+                              SelectionMerge 174 None
+                              BranchConditional 172 173 174
+             173:               Label
+             176:    175(ptr)   AccessChain 44(ro) 49
+             177: 21(i16vec3)   Load 176
+             180: 21(i16vec3)   ExpectKHR 177 179
+             181:   77(bvec3)   IEqual 180 179
+             182:    10(bool)   All 181
+                                Branch 174
+             174:             Label
+             183:    10(bool) Phi 171 160 182 173
+             184:    10(bool) LogicalNot 183
+                              SelectionMerge 186 None
+                              BranchConditional 184 185 186
+             185:               Label
+             189:    188(ptr)   AccessChain 44(ro) 187
+             190: 22(i16vec4)   Load 189
+             193: 22(i16vec4)   ExpectKHR 190 192
+             194:   91(bvec4)   IEqual 193 192
+             195:    10(bool)   All 194
+                                Branch 186
+             186:             Label
+             196:    10(bool) Phi 183 174 195 185
+                              SelectionMerge 198 None
+                              BranchConditional 196 197 198
+             197:               Label
+             199:      6(int)   Load 8(x)
+             200:      6(int)   IAdd 199 55
+                                Store 8(x) 200
+                                Branch 198
+             198:             Label
+             203:    202(ptr) AccessChain 44(ro) 201
+             204: 23(int16_t) Load 203
+             205:     30(int) UConvert 204
+             206:      6(int) Bitcast 205
+             207:      6(int) ExpectKHR 206 49
+             208:    10(bool) IEqual 207 49
+             209:    10(bool) LogicalNot 208
+                              SelectionMerge 211 None
+                              BranchConditional 209 210 211
+             210:               Label
+             214:    213(ptr)   AccessChain 44(ro) 212
+             215: 24(i16vec2)   Load 214
+             219: 24(i16vec2)   ExpectKHR 215 218
+             220:   63(bvec2)   IEqual 219 218
+             221:    10(bool)   All 220
+                                Branch 211
+             211:             Label
+             222:    10(bool) Phi 208 198 221 210
+             223:    10(bool) LogicalNot 222
+                              SelectionMerge 225 None
+                              BranchConditional 223 224 225
+             224:               Label
+             228:    227(ptr)   AccessChain 44(ro) 226
+             229: 25(i16vec3)   Load 228
+             232: 25(i16vec3)   ExpectKHR 229 231
+             233:   77(bvec3)   IEqual 232 231
+             234:    10(bool)   All 233
+                                Branch 225
+             225:             Label
+             235:    10(bool) Phi 222 211 234 224
+             236:    10(bool) LogicalNot 235
+                              SelectionMerge 238 None
+                              BranchConditional 236 237 238
+             237:               Label
+             241:    240(ptr)   AccessChain 44(ro) 239
+             242: 26(i16vec4)   Load 241
+             245: 26(i16vec4)   ExpectKHR 242 244
+             246:   91(bvec4)   IEqual 245 244
+             247:    10(bool)   All 246
+                                Branch 238
+             238:             Label
+             248:    10(bool) Phi 235 225 247 237
+                              SelectionMerge 250 None
+                              BranchConditional 248 249 250
+             249:               Label
+             251:      6(int)   Load 8(x)
+             252:      6(int)   IAdd 251 55
+                                Store 8(x) 252
+                                Branch 250
+             250:             Label
+             255:    254(ptr) AccessChain 44(ro) 253
+             256:      6(int) Load 255
+             257:      6(int) ExpectKHR 256 49
+             258:    10(bool) IEqual 257 49
+             259:    10(bool) LogicalNot 258
+                              SelectionMerge 261 None
+                              BranchConditional 259 260 261
+             260:               Label
+             264:    263(ptr)   AccessChain 44(ro) 262
+             265:   27(ivec2)   Load 264
+             268:   27(ivec2)   ExpectKHR 265 267
+             269:   63(bvec2)   IEqual 268 267
+             270:    10(bool)   All 269
+                                Branch 261
+             261:             Label
+             271:    10(bool) Phi 258 250 270 260
+             272:    10(bool) LogicalNot 271
+                              SelectionMerge 274 None
+                              BranchConditional 272 273 274
+             273:               Label
+             277:    276(ptr)   AccessChain 44(ro) 275
+             278:   28(ivec3)   Load 277
+             281:   28(ivec3)   ExpectKHR 278 280
+             282:   77(bvec3)   IEqual 281 280
+             283:    10(bool)   All 282
+                                Branch 274
+             274:             Label
+             284:    10(bool) Phi 271 261 283 273
+             285:    10(bool) LogicalNot 284
+                              SelectionMerge 287 None
+                              BranchConditional 285 286 287
+             286:               Label
+             290:    289(ptr)   AccessChain 44(ro) 288
+             291:   29(ivec4)   Load 290
+             294:   29(ivec4)   ExpectKHR 291 293
+             295:   91(bvec4)   IEqual 294 293
+             296:    10(bool)   All 295
+                                Branch 287
+             287:             Label
+             297:    10(bool) Phi 284 274 296 286
+                              SelectionMerge 299 None
+                              BranchConditional 297 298 299
+             298:               Label
+             300:      6(int)   Load 8(x)
+             301:      6(int)   IAdd 300 55
+                                Store 8(x) 301
+                                Branch 299
+             299:             Label
+             304:    303(ptr) AccessChain 44(ro) 302
+             305:     30(int) Load 304
+             307:     30(int) ExpectKHR 305 306
+             308:    10(bool) IEqual 307 306
+             309:    10(bool) LogicalNot 308
+                              SelectionMerge 311 None
+                              BranchConditional 309 310 311
+             310:               Label
+             314:    313(ptr)   AccessChain 44(ro) 312
+             315:   31(ivec2)   Load 314
+             319:   31(ivec2)   ExpectKHR 315 318
+             320:   63(bvec2)   IEqual 319 318
+             321:    10(bool)   All 320
+                                Branch 311
+             311:             Label
+             322:    10(bool) Phi 308 299 321 310
+             323:    10(bool) LogicalNot 322
+                              SelectionMerge 325 None
+                              BranchConditional 323 324 325
+             324:               Label
+             328:    327(ptr)   AccessChain 44(ro) 326
+             329:   32(ivec3)   Load 328
+             332:   32(ivec3)   ExpectKHR 329 331
+             333:   77(bvec3)   IEqual 332 331
+             334:    10(bool)   All 333
+                                Branch 325
+             325:             Label
+             335:    10(bool) Phi 322 311 334 324
+             336:    10(bool) LogicalNot 335
+                              SelectionMerge 338 None
+                              BranchConditional 336 337 338
+             337:               Label
+             341:    340(ptr)   AccessChain 44(ro) 339
+             342:   33(ivec4)   Load 341
+             345:   33(ivec4)   ExpectKHR 342 344
+             346:   91(bvec4)   IEqual 345 344
+             347:    10(bool)   All 346
+                                Branch 338
+             338:             Label
+             348:    10(bool) Phi 335 325 347 337
+                              SelectionMerge 350 None
+                              BranchConditional 348 349 350
+             349:               Label
+             351:      6(int)   Load 8(x)
+             352:      6(int)   IAdd 351 55
+                                Store 8(x) 352
+                                Branch 350
+             350:             Label
+             355:    354(ptr) AccessChain 44(ro) 353
+             356: 34(int64_t) Load 355
+             358: 34(int64_t) ExpectKHR 356 357
+             359:    10(bool) IEqual 358 357
+             360:    10(bool) LogicalNot 359
+                              SelectionMerge 362 None
+                              BranchConditional 360 361 362
+             361:               Label
+             365:    364(ptr)   AccessChain 44(ro) 363
+             366: 35(i64vec2)   Load 365
+             370: 35(i64vec2)   ExpectKHR 366 369
+             371:   63(bvec2)   IEqual 370 369
+             372:    10(bool)   All 371
+                                Branch 362
+             362:             Label
+             373:    10(bool) Phi 359 350 372 361
+             374:    10(bool) LogicalNot 373
+                              SelectionMerge 376 None
+                              BranchConditional 374 375 376
+             375:               Label
+             379:    378(ptr)   AccessChain 44(ro) 377
+             380: 36(i64vec3)   Load 379
+             383: 36(i64vec3)   ExpectKHR 380 382
+             384:   77(bvec3)   IEqual 383 382
+             385:    10(bool)   All 384
+                                Branch 376
+             376:             Label
+             386:    10(bool) Phi 373 362 385 375
+             387:    10(bool) LogicalNot 386
+                              SelectionMerge 389 None
+                              BranchConditional 387 388 389
+             388:               Label
+             392:    391(ptr)   AccessChain 44(ro) 390
+             393: 37(i64vec4)   Load 392
+             396: 37(i64vec4)   ExpectKHR 393 395
+             397:   91(bvec4)   IEqual 396 395
+             398:    10(bool)   All 397
+                                Branch 389
+             389:             Label
+             399:    10(bool) Phi 386 376 398 388
+                              SelectionMerge 401 None
+                              BranchConditional 399 400 401
+             400:               Label
+             402:      6(int)   Load 8(x)
+             403:      6(int)   IAdd 402 55
+                                Store 8(x) 403
+                                Branch 401
+             401:             Label
+             406:    405(ptr) AccessChain 44(ro) 404
+             407: 38(int64_t) Load 406
+             409: 38(int64_t) ExpectKHR 407 408
+             410:    10(bool) IEqual 409 408
+             411:    10(bool) LogicalNot 410
+                              SelectionMerge 413 None
+                              BranchConditional 411 412 413
+             412:               Label
+             416:    415(ptr)   AccessChain 44(ro) 414
+             417: 39(i64vec2)   Load 416
+             421: 39(i64vec2)   ExpectKHR 417 420
+             422:   63(bvec2)   IEqual 421 420
+             423:    10(bool)   All 422
+                                Branch 413
+             413:             Label
+             424:    10(bool) Phi 410 401 423 412
+             425:    10(bool) LogicalNot 424
+                              SelectionMerge 427 None
+                              BranchConditional 425 426 427
+             426:               Label
+             430:    429(ptr)   AccessChain 44(ro) 428
+             431: 40(i64vec3)   Load 430
+             434: 40(i64vec3)   ExpectKHR 431 433
+             435:   77(bvec3)   IEqual 434 433
+             436:    10(bool)   All 435
+                                Branch 427
+             427:             Label
+             437:    10(bool) Phi 424 413 436 426
+             438:    10(bool) LogicalNot 437
+                              SelectionMerge 440 None
+                              BranchConditional 438 439 440
+             439:               Label
+             443:    442(ptr)   AccessChain 44(ro) 441
+             444: 41(i64vec4)   Load 443
+             447: 41(i64vec4)   ExpectKHR 444 446
+             448:   91(bvec4)   IEqual 447 446
+             449:    10(bool)   All 448
+                                Branch 440
+             440:             Label
+             450:    10(bool) Phi 437 427 449 439
+                              SelectionMerge 452 None
+                              BranchConditional 450 451 452
+             451:               Label
+             453:      6(int)   Load 8(x)
+             454:      6(int)   IAdd 453 55
+                                Store 8(x) 454
+                                Branch 452
+             452:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.explicittypes.frag.out b/Test/baseResults/spv.explicittypes.frag.out
index 65d3b1f..eec771a 100644
--- a/Test/baseResults/spv.explicittypes.frag.out
+++ b/Test/baseResults/spv.explicittypes.frag.out
@@ -1,7 +1,7 @@
 spv.explicittypes.frag
 // Module Version 10300
 // Generated by (magic number): 8000b
-// Id's are bound by 576
+// Id's are bound by 567
 
                               Capability Shader
                               Capability Float16
@@ -80,63 +80,63 @@
                               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
+                              Name 426  "u8v"
+                              Name 432  "u16v"
+                              Name 446  "f16v"
+                              Name 459  "bv"
+                              Name 475  "u64v"
+                              Name 476  "i64v"
+                              Name 479  "f64v"
+                              Name 484  "i8v"
+                              Name 490  "i16v"
+                              Name 496  "i32v"
+                              Name 504  "u8v"
+                              Name 510  "u16v"
+                              Name 516  "u32v"
+                              Name 525  "f16v"
+                              Name 528  "f32v"
+                              Name 539  "bv"
+                              Name 564  "Block"
+                              MemberName 564(Block) 0  "i16"
+                              MemberName 564(Block) 1  "i16v2"
+                              MemberName 564(Block) 2  "i16v3"
+                              MemberName 564(Block) 3  "i16v4"
+                              MemberName 564(Block) 4  "u16"
+                              MemberName 564(Block) 5  "u16v2"
+                              MemberName 564(Block) 6  "u16v3"
+                              MemberName 564(Block) 7  "u16v4"
+                              MemberName 564(Block) 8  "i32"
+                              MemberName 564(Block) 9  "i32v2"
+                              MemberName 564(Block) 10  "i32v3"
+                              MemberName 564(Block) 11  "i32v4"
+                              MemberName 564(Block) 12  "u32"
+                              MemberName 564(Block) 13  "u32v2"
+                              MemberName 564(Block) 14  "u32v3"
+                              MemberName 564(Block) 15  "u32v4"
+                              Name 566  "block"
                               Decorate 26(Uniforms) Block
-                              Decorate 28 DescriptorSet 0
+                              MemberDecorate 26(Uniforms) 0 Offset 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
+                              Decorate 28 DescriptorSet 0
+                              Decorate 564(Block) Block
+                              MemberDecorate 564(Block) 0 Offset 0
+                              MemberDecorate 564(Block) 1 Offset 4
+                              MemberDecorate 564(Block) 2 Offset 8
+                              MemberDecorate 564(Block) 3 Offset 16
+                              MemberDecorate 564(Block) 4 Offset 24
+                              MemberDecorate 564(Block) 5 Offset 28
+                              MemberDecorate 564(Block) 6 Offset 32
+                              MemberDecorate 564(Block) 7 Offset 40
+                              MemberDecorate 564(Block) 8 Offset 48
+                              MemberDecorate 564(Block) 9 Offset 56
+                              MemberDecorate 564(Block) 10 Offset 64
+                              MemberDecorate 564(Block) 11 Offset 80
+                              MemberDecorate 564(Block) 12 Offset 96
+                              MemberDecorate 564(Block) 13 Offset 104
+                              MemberDecorate 564(Block) 14 Offset 112
+                              MemberDecorate 564(Block) 15 Offset 128
+                              Decorate 566(block) Binding 1
+                              Decorate 566(block) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
               16:             TypeInt 64 1
@@ -249,32 +249,32 @@
              372: 91(int16_t) Constant 1
              373:145(i16vec2) ConstantComposite 371 371
              374:145(i16vec2) ConstantComposite 372 372
-             467:     29(int) Constant 1
-             468:  148(ivec2) ConstantComposite 30 30
-             469:  148(ivec2) ConstantComposite 467 467
-             472:     19(int) Constant 0
-             473:     19(int) Constant 1
-             474:  154(ivec2) ConstantComposite 472 472
-             475:  154(ivec2) ConstantComposite 473 473
-             550: 16(int64_t) Constant 0 0
-             551: 16(int64_t) Constant 1 0
-             552:162(i64vec2) ConstantComposite 550 550
-             553:162(i64vec2) ConstantComposite 551 551
-             556: 38(int64_t) Constant 0 0
-             557: 38(int64_t) Constant 1 0
-             558:167(i64vec2) ConstantComposite 556 556
-             559:167(i64vec2) ConstantComposite 557 557
-             565:             TypeVector 77(int16_t) 3
-             566:             TypeVector 77(int16_t) 4
-             567:             TypeVector 91(int16_t) 3
-             568:             TypeVector 91(int16_t) 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(int16_t) 139(i16vec2) 565(i16vec3) 566(i16vec4) 91(int16_t) 145(i16vec2) 567(i16vec3) 568(i16vec4) 29(int) 148(ivec2) 569(ivec3) 570(ivec4) 19(int) 154(ivec2) 571(ivec3) 572(ivec4)
-             574:             TypePointer Uniform 573(Block)
-      575(block):    574(ptr) Variable Uniform
+             461:     29(int) Constant 1
+             462:  148(ivec2) ConstantComposite 30 30
+             463:  148(ivec2) ConstantComposite 461 461
+             466:     19(int) Constant 0
+             467:     19(int) Constant 1
+             468:  154(ivec2) ConstantComposite 466 466
+             469:  154(ivec2) ConstantComposite 467 467
+             541: 16(int64_t) Constant 0 0
+             542: 16(int64_t) Constant 1 0
+             543:162(i64vec2) ConstantComposite 541 541
+             544:162(i64vec2) ConstantComposite 542 542
+             547: 38(int64_t) Constant 0 0
+             548: 38(int64_t) Constant 1 0
+             549:167(i64vec2) ConstantComposite 547 547
+             550:167(i64vec2) ConstantComposite 548 548
+             556:             TypeVector 77(int16_t) 3
+             557:             TypeVector 77(int16_t) 4
+             558:             TypeVector 91(int16_t) 3
+             559:             TypeVector 91(int16_t) 4
+             560:             TypeVector 29(int) 3
+             561:             TypeVector 29(int) 4
+             562:             TypeVector 19(int) 3
+             563:             TypeVector 19(int) 4
+      564(Block):             TypeStruct 77(int16_t) 139(i16vec2) 556(i16vec3) 557(i16vec4) 91(int16_t) 145(i16vec2) 558(i16vec3) 559(i16vec4) 29(int) 148(ivec2) 560(ivec3) 561(ivec4) 19(int) 154(ivec2) 562(ivec3) 563(ivec4)
+             565:             TypePointer Uniform 564(Block)
+      566(block):    565(ptr) Variable Uniform
          4(main):           2 Function None 3
                5:             Label
                               Return
@@ -649,10 +649,10 @@
        399(f64v):    194(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):    182(ptr) Variable Function
-         465(bv):    251(ptr) Variable Function
+        426(u8v):    132(ptr) Variable Function
+       432(u16v):    221(ptr) Variable Function
+       446(f16v):    182(ptr) Variable Function
+         459(bv):    251(ptr) Variable Function
              382:  148(ivec2) Load 381(i32v)
              383:  154(ivec2) Bitcast 382
                               Store 380(u32v) 383
@@ -697,186 +697,177 @@
              417:139(i16vec2) Bitcast 416
                               Store 412(i16v) 417
              418:  148(ivec2) Load 381(i32v)
-             419:     29(int) CompositeExtract 418 0
-             420:     29(int) CompositeExtract 418 1
-             421:  148(ivec2) CompositeConstruct 419 420
-                              Store 381(i32v) 421
-             422:  154(ivec2) Load 380(u32v)
-             423:  148(ivec2) Bitcast 422
-                              Store 381(i32v) 423
-             424:  148(ivec2) Load 381(i32v)
-             425:162(i64vec2) SConvert 424
+                              Store 381(i32v) 418
+             419:  154(ivec2) Load 380(u32v)
+             420:  148(ivec2) Bitcast 419
+                              Store 381(i32v) 420
+             421:  148(ivec2) Load 381(i32v)
+             422:162(i64vec2) SConvert 421
+                              Store 384(i64v) 422
+             423:  154(ivec2) Load 380(u32v)
+             424:167(i64vec2) UConvert 423
+             425:162(i64vec2) Bitcast 424
                               Store 384(i64v) 425
-             426:  154(ivec2) Load 380(u32v)
-             427:167(i64vec2) UConvert 426
-             428:162(i64vec2) Bitcast 427
-                              Store 384(i64v) 428
-             430:  148(ivec2) Load 381(i32v)
-             431: 134(i8vec2) SConvert 430
-             432: 131(i8vec2) Bitcast 431
-                              Store 429(u8v) 432
-             433:  154(ivec2) Load 380(u32v)
-             434: 131(i8vec2) UConvert 433
-                              Store 429(u8v) 434
-             436:  148(ivec2) Load 381(i32v)
-             437:139(i16vec2) SConvert 436
-             438:145(i16vec2) Bitcast 437
-                              Store 435(u16v) 438
-             439:  154(ivec2) Load 380(u32v)
-             440:145(i16vec2) UConvert 439
-                              Store 435(u16v) 440
+             427:  148(ivec2) Load 381(i32v)
+             428: 134(i8vec2) SConvert 427
+             429: 131(i8vec2) Bitcast 428
+                              Store 426(u8v) 429
+             430:  154(ivec2) Load 380(u32v)
+             431: 131(i8vec2) UConvert 430
+                              Store 426(u8v) 431
+             433:  148(ivec2) Load 381(i32v)
+             434:139(i16vec2) SConvert 433
+             435:145(i16vec2) Bitcast 434
+                              Store 432(u16v) 435
+             436:  154(ivec2) Load 380(u32v)
+             437:145(i16vec2) UConvert 436
+                              Store 432(u16v) 437
+             438:  148(ivec2) Load 381(i32v)
+             439:  154(ivec2) Bitcast 438
+                              Store 380(u32v) 439
+             440:  154(ivec2) Load 380(u32v)
+                              Store 380(u32v) 440
              441:  148(ivec2) Load 381(i32v)
-             442:  154(ivec2) Bitcast 441
-                              Store 380(u32v) 442
-             443:  154(ivec2) Load 380(u32v)
-             444:     19(int) CompositeExtract 443 0
-             445:     19(int) CompositeExtract 443 1
-             446:  154(ivec2) CompositeConstruct 444 445
-                              Store 380(u32v) 446
+             442:162(i64vec2) SConvert 441
+             443:167(i64vec2) Bitcast 442
+                              Store 387(u64v) 443
+             444:  154(ivec2) Load 380(u32v)
+             445:167(i64vec2) UConvert 444
+                              Store 387(u64v) 445
              447:  148(ivec2) Load 381(i32v)
-             448:162(i64vec2) SConvert 447
-             449:167(i64vec2) Bitcast 448
-                              Store 387(u64v) 449
-             450:  154(ivec2) Load 380(u32v)
-             451:167(i64vec2) UConvert 450
-                              Store 387(u64v) 451
-             453:  148(ivec2) Load 381(i32v)
-             454:181(f16vec2) ConvertSToF 453
-                              Store 452(f16v) 454
-             455:  148(ivec2) Load 381(i32v)
-             456:  187(fvec2) ConvertSToF 455
+             448:181(f16vec2) ConvertSToF 447
+                              Store 446(f16v) 448
+             449:  148(ivec2) Load 381(i32v)
+             450:  187(fvec2) ConvertSToF 449
+                              Store 396(f32v) 450
+             451:  148(ivec2) Load 381(i32v)
+             452:193(f64vec2) ConvertSToF 451
+                              Store 399(f64v) 452
+             453:  154(ivec2) Load 380(u32v)
+             454:181(f16vec2) ConvertUToF 453
+                              Store 446(f16v) 454
+             455:  154(ivec2) Load 380(u32v)
+             456:  187(fvec2) ConvertUToF 455
                               Store 396(f32v) 456
-             457:  148(ivec2) Load 381(i32v)
-             458:193(f64vec2) ConvertSToF 457
+             457:  154(ivec2) Load 380(u32v)
+             458:193(f64vec2) ConvertUToF 457
                               Store 399(f64v) 458
-             459:  154(ivec2) Load 380(u32v)
-             460:181(f16vec2) ConvertUToF 459
-                              Store 452(f16v) 460
-             461:  154(ivec2) Load 380(u32v)
-             462:  187(fvec2) ConvertUToF 461
-                              Store 396(f32v) 462
-             463:  154(ivec2) Load 380(u32v)
-             464:193(f64vec2) ConvertUToF 463
-                              Store 399(f64v) 464
-             466:  250(bvec2) Load 465(bv)
-             470:  148(ivec2) Select 466 469 468
-                              Store 381(i32v) 470
-             471:  250(bvec2) Load 465(bv)
-             476:  154(ivec2) Select 471 475 474
-                              Store 380(u32v) 476
-             477:  148(ivec2) Load 381(i32v)
-             478:  250(bvec2) INotEqual 477 474
-                              Store 465(bv) 478
-             479:  154(ivec2) Load 380(u32v)
-             480:  250(bvec2) INotEqual 479 474
-                              Store 465(bv) 480
+             460:  250(bvec2) Load 459(bv)
+             464:  148(ivec2) Select 460 463 462
+                              Store 381(i32v) 464
+             465:  250(bvec2) Load 459(bv)
+             470:  154(ivec2) Select 465 469 468
+                              Store 380(u32v) 470
+             471:  148(ivec2) Load 381(i32v)
+             472:  250(bvec2) INotEqual 471 468
+                              Store 459(bv) 472
+             473:  154(ivec2) Load 380(u32v)
+             474:  250(bvec2) INotEqual 473 468
+                              Store 459(bv) 474
                               Return
                               FunctionEnd
  14(typeCast64():           2 Function None 3
               15:             Label
-       481(u64v):    168(ptr) Variable Function
-       482(i64v):    163(ptr) Variable Function
-       485(f64v):    194(ptr) Variable Function
-        490(i8v):    135(ptr) Variable Function
-       496(i16v):    140(ptr) Variable Function
-       502(i32v):    149(ptr) Variable Function
-        510(u8v):    132(ptr) Variable Function
-       516(u16v):    221(ptr) Variable Function
-       522(u32v):    157(ptr) Variable Function
-       534(f16v):    182(ptr) Variable Function
-       537(f32v):    188(ptr) Variable Function
-         548(bv):    251(ptr) Variable Function
-             483:162(i64vec2) Load 482(i64v)
-             484:167(i64vec2) Bitcast 483
-                              Store 481(u64v) 484
-             486:162(i64vec2) Load 482(i64v)
-             487:193(f64vec2) ConvertSToF 486
-                              Store 485(f64v) 487
-             488:167(i64vec2) Load 481(u64v)
-             489:193(f64vec2) ConvertUToF 488
-                              Store 485(f64v) 489
-             491:162(i64vec2) Load 482(i64v)
-             492: 134(i8vec2) SConvert 491
-                              Store 490(i8v) 492
-             493:167(i64vec2) Load 481(u64v)
-             494: 131(i8vec2) UConvert 493
-             495: 134(i8vec2) Bitcast 494
-                              Store 490(i8v) 495
-             497:162(i64vec2) Load 482(i64v)
-             498:139(i16vec2) SConvert 497
-                              Store 496(i16v) 498
-             499:167(i64vec2) Load 481(u64v)
-             500:145(i16vec2) UConvert 499
-             501:139(i16vec2) Bitcast 500
-                              Store 496(i16v) 501
-             503:162(i64vec2) Load 482(i64v)
-             504:  148(ivec2) SConvert 503
-                              Store 502(i32v) 504
-             505:167(i64vec2) Load 481(u64v)
-             506:  154(ivec2) UConvert 505
-             507:  148(ivec2) Bitcast 506
-                              Store 502(i32v) 507
-             508:167(i64vec2) Load 481(u64v)
-             509:162(i64vec2) Bitcast 508
-                              Store 482(i64v) 509
-             511:162(i64vec2) Load 482(i64v)
-             512: 134(i8vec2) SConvert 511
-             513: 131(i8vec2) Bitcast 512
-                              Store 510(u8v) 513
-             514:167(i64vec2) Load 481(u64v)
-             515: 131(i8vec2) UConvert 514
-                              Store 510(u8v) 515
-             517:162(i64vec2) Load 482(i64v)
-             518:139(i16vec2) SConvert 517
-             519:145(i16vec2) Bitcast 518
-                              Store 516(u16v) 519
-             520:167(i64vec2) Load 481(u64v)
-             521:145(i16vec2) UConvert 520
-                              Store 516(u16v) 521
-             523:162(i64vec2) Load 482(i64v)
-             524:  148(ivec2) SConvert 523
-             525:  154(ivec2) Bitcast 524
-                              Store 522(u32v) 525
-             526:167(i64vec2) Load 481(u64v)
-             527:  154(ivec2) UConvert 526
-                              Store 522(u32v) 527
-             528:162(i64vec2) Load 482(i64v)
-             529:167(i64vec2) Bitcast 528
-                              Store 481(u64v) 529
-             530:167(i64vec2) Load 481(u64v)
-             531: 38(int64_t) CompositeExtract 530 0
-             532: 38(int64_t) CompositeExtract 530 1
-             533:167(i64vec2) CompositeConstruct 531 532
-                              Store 481(u64v) 533
-             535:162(i64vec2) Load 482(i64v)
-             536:181(f16vec2) ConvertSToF 535
-                              Store 534(f16v) 536
-             538:162(i64vec2) Load 482(i64v)
-             539:  187(fvec2) ConvertSToF 538
-                              Store 537(f32v) 539
-             540:162(i64vec2) Load 482(i64v)
-             541:193(f64vec2) ConvertSToF 540
-                              Store 485(f64v) 541
-             542:167(i64vec2) Load 481(u64v)
-             543:181(f16vec2) ConvertUToF 542
-                              Store 534(f16v) 543
-             544:167(i64vec2) Load 481(u64v)
-             545:  187(fvec2) ConvertUToF 544
-                              Store 537(f32v) 545
-             546:167(i64vec2) Load 481(u64v)
-             547:193(f64vec2) ConvertUToF 546
-                              Store 485(f64v) 547
-             549:  250(bvec2) Load 548(bv)
-             554:162(i64vec2) Select 549 553 552
-                              Store 482(i64v) 554
-             555:  250(bvec2) Load 548(bv)
-             560:167(i64vec2) Select 555 559 558
-                              Store 481(u64v) 560
-             561:162(i64vec2) Load 482(i64v)
-             562:  250(bvec2) INotEqual 561 558
-                              Store 548(bv) 562
-             563:167(i64vec2) Load 481(u64v)
-             564:  250(bvec2) INotEqual 563 558
-                              Store 548(bv) 564
+       475(u64v):    168(ptr) Variable Function
+       476(i64v):    163(ptr) Variable Function
+       479(f64v):    194(ptr) Variable Function
+        484(i8v):    135(ptr) Variable Function
+       490(i16v):    140(ptr) Variable Function
+       496(i32v):    149(ptr) Variable Function
+        504(u8v):    132(ptr) Variable Function
+       510(u16v):    221(ptr) Variable Function
+       516(u32v):    157(ptr) Variable Function
+       525(f16v):    182(ptr) Variable Function
+       528(f32v):    188(ptr) Variable Function
+         539(bv):    251(ptr) Variable Function
+             477:162(i64vec2) Load 476(i64v)
+             478:167(i64vec2) Bitcast 477
+                              Store 475(u64v) 478
+             480:162(i64vec2) Load 476(i64v)
+             481:193(f64vec2) ConvertSToF 480
+                              Store 479(f64v) 481
+             482:167(i64vec2) Load 475(u64v)
+             483:193(f64vec2) ConvertUToF 482
+                              Store 479(f64v) 483
+             485:162(i64vec2) Load 476(i64v)
+             486: 134(i8vec2) SConvert 485
+                              Store 484(i8v) 486
+             487:167(i64vec2) Load 475(u64v)
+             488: 131(i8vec2) UConvert 487
+             489: 134(i8vec2) Bitcast 488
+                              Store 484(i8v) 489
+             491:162(i64vec2) Load 476(i64v)
+             492:139(i16vec2) SConvert 491
+                              Store 490(i16v) 492
+             493:167(i64vec2) Load 475(u64v)
+             494:145(i16vec2) UConvert 493
+             495:139(i16vec2) Bitcast 494
+                              Store 490(i16v) 495
+             497:162(i64vec2) Load 476(i64v)
+             498:  148(ivec2) SConvert 497
+                              Store 496(i32v) 498
+             499:167(i64vec2) Load 475(u64v)
+             500:  154(ivec2) UConvert 499
+             501:  148(ivec2) Bitcast 500
+                              Store 496(i32v) 501
+             502:167(i64vec2) Load 475(u64v)
+             503:162(i64vec2) Bitcast 502
+                              Store 476(i64v) 503
+             505:162(i64vec2) Load 476(i64v)
+             506: 134(i8vec2) SConvert 505
+             507: 131(i8vec2) Bitcast 506
+                              Store 504(u8v) 507
+             508:167(i64vec2) Load 475(u64v)
+             509: 131(i8vec2) UConvert 508
+                              Store 504(u8v) 509
+             511:162(i64vec2) Load 476(i64v)
+             512:139(i16vec2) SConvert 511
+             513:145(i16vec2) Bitcast 512
+                              Store 510(u16v) 513
+             514:167(i64vec2) Load 475(u64v)
+             515:145(i16vec2) UConvert 514
+                              Store 510(u16v) 515
+             517:162(i64vec2) Load 476(i64v)
+             518:  148(ivec2) SConvert 517
+             519:  154(ivec2) Bitcast 518
+                              Store 516(u32v) 519
+             520:167(i64vec2) Load 475(u64v)
+             521:  154(ivec2) UConvert 520
+                              Store 516(u32v) 521
+             522:162(i64vec2) Load 476(i64v)
+             523:167(i64vec2) Bitcast 522
+                              Store 475(u64v) 523
+             524:167(i64vec2) Load 475(u64v)
+                              Store 475(u64v) 524
+             526:162(i64vec2) Load 476(i64v)
+             527:181(f16vec2) ConvertSToF 526
+                              Store 525(f16v) 527
+             529:162(i64vec2) Load 476(i64v)
+             530:  187(fvec2) ConvertSToF 529
+                              Store 528(f32v) 530
+             531:162(i64vec2) Load 476(i64v)
+             532:193(f64vec2) ConvertSToF 531
+                              Store 479(f64v) 532
+             533:167(i64vec2) Load 475(u64v)
+             534:181(f16vec2) ConvertUToF 533
+                              Store 525(f16v) 534
+             535:167(i64vec2) Load 475(u64v)
+             536:  187(fvec2) ConvertUToF 535
+                              Store 528(f32v) 536
+             537:167(i64vec2) Load 475(u64v)
+             538:193(f64vec2) ConvertUToF 537
+                              Store 479(f64v) 538
+             540:  250(bvec2) Load 539(bv)
+             545:162(i64vec2) Select 540 544 543
+                              Store 476(i64v) 545
+             546:  250(bvec2) Load 539(bv)
+             551:167(i64vec2) Select 546 550 549
+                              Store 475(u64v) 551
+             552:162(i64vec2) Load 476(i64v)
+             553:  250(bvec2) INotEqual 552 549
+                              Store 539(bv) 553
+             554:167(i64vec2) Load 475(u64v)
+             555:  250(bvec2) INotEqual 554 549
+                              Store 539(bv) 555
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.ext.AccelDecl.frag.out b/Test/baseResults/spv.ext.AccelDecl.frag.out
index e329ee9..9b41897 100644
--- a/Test/baseResults/spv.ext.AccelDecl.frag.out
+++ b/Test/baseResults/spv.ext.AccelDecl.frag.out
@@ -21,8 +21,8 @@
                               Name 9  "outColor"
                               Name 14  "topLevelAS"
                               Decorate 9(outColor) Location 0
-                              Decorate 14(topLevelAS) DescriptorSet 0
                               Decorate 14(topLevelAS) Binding 1
+                              Decorate 14(topLevelAS) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.ext.AnyHitShader.rahit.out b/Test/baseResults/spv.ext.AnyHitShader.rahit.out
index 02803ad..76e6738 100644
--- a/Test/baseResults/spv.ext.AnyHitShader.rahit.out
+++ b/Test/baseResults/spv.ext.AnyHitShader.rahit.out
@@ -1,7 +1,7 @@
 spv.ext.AnyHitShader.rahit
 // Module Version 10400
 // Generated by (magic number): 8000b
-// Id's are bound by 116
+// Id's are bound by 115
 
                               Capability GroupNonUniform
                               Capability RayTracingKHR
@@ -12,7 +12,7 @@
                               Extension  "SPV_KHR_ray_tracing_position_fetch"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint AnyHitKHR 4  "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67 70 82 88 93 107
+                              EntryPoint AnyHitKHR 4  "main" 11 14 20 23 26 33 36 39 42 47 50 57 63 66 69 81 87 92 106
                               Source GLSL 460
                               SourceExtension  "GL_EXT_ray_cull_mask"
                               SourceExtension  "GL_EXT_ray_tracing"
@@ -42,23 +42,22 @@
                               Name 49  "v10"
                               Name 50  "gl_RayTmaxEXT"
                               Name 52  "v11"
-                              Name 53  "gl_HitTEXT"
-                              Name 56  "v12"
-                              Name 58  "gl_HitKindEXT"
-                              Name 62  "v13"
-                              Name 64  "gl_ObjectToWorldEXT"
-                              Name 66  "v14"
-                              Name 67  "gl_WorldToObjectEXT"
-                              Name 69  "v15"
-                              Name 70  "gl_GeometryIndexEXT"
-                              Name 75  "v16"
-                              Name 78  "v17"
-                              Name 81  "v18"
-                              Name 82  "gl_CullMaskEXT"
-                              Name 84  "v19"
-                              Name 88  "gl_HitTriangleVertexPositionsEXT"
-                              Name 93  "incomingPayload"
-                              Name 107  "gl_SubgroupSize"
+                              Name 55  "v12"
+                              Name 57  "gl_HitKindEXT"
+                              Name 61  "v13"
+                              Name 63  "gl_ObjectToWorldEXT"
+                              Name 65  "v14"
+                              Name 66  "gl_WorldToObjectEXT"
+                              Name 68  "v15"
+                              Name 69  "gl_GeometryIndexEXT"
+                              Name 74  "v16"
+                              Name 77  "v17"
+                              Name 80  "v18"
+                              Name 81  "gl_CullMaskEXT"
+                              Name 83  "v19"
+                              Name 87  "gl_HitTriangleVertexPositionsEXT"
+                              Name 92  "incomingPayload"
+                              Name 106  "gl_SubgroupSize"
                               Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
                               Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
                               Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId
@@ -70,17 +69,16 @@
                               Decorate 42(gl_ObjectRayDirectionEXT) BuiltIn ObjectRayDirectionKHR
                               Decorate 47(gl_RayTminEXT) BuiltIn RayTminKHR
                               Decorate 50(gl_RayTmaxEXT) BuiltIn RayTmaxKHR
-                              Decorate 53(gl_HitTEXT) BuiltIn RayTmaxKHR
-                              Decorate 58(gl_HitKindEXT) BuiltIn HitKindKHR
-                              Decorate 64(gl_ObjectToWorldEXT) BuiltIn ObjectToWorldKHR
-                              Decorate 67(gl_WorldToObjectEXT) BuiltIn WorldToObjectKHR
-                              Decorate 70(gl_GeometryIndexEXT) BuiltIn RayGeometryIndexKHR
-                              Decorate 82(gl_CullMaskEXT) BuiltIn CullMaskKHR
-                              Decorate 88(gl_HitTriangleVertexPositionsEXT) BuiltIn HitTriangleVertexPositionsKHR
-                              Decorate 107(gl_SubgroupSize) RelaxedPrecision
-                              Decorate 107(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 57(gl_HitKindEXT) BuiltIn HitKindKHR
+                              Decorate 63(gl_ObjectToWorldEXT) BuiltIn ObjectToWorldKHR
+                              Decorate 66(gl_WorldToObjectEXT) BuiltIn WorldToObjectKHR
+                              Decorate 69(gl_GeometryIndexEXT) BuiltIn RayGeometryIndexKHR
+                              Decorate 81(gl_CullMaskEXT) BuiltIn CullMaskKHR
+                              Decorate 87(gl_HitTriangleVertexPositionsEXT) BuiltIn HitTriangleVertexPositionsKHR
+                              Decorate 106(gl_SubgroupSize) RelaxedPrecision
+                              Decorate 106(gl_SubgroupSize) BuiltIn SubgroupSize
+                              Decorate 107 RelaxedPrecision
                               Decorate 108 RelaxedPrecision
-                              Decorate 109 RelaxedPrecision
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
@@ -107,34 +105,33 @@
               46:             TypePointer Input 28(float)
 47(gl_RayTminEXT):     46(ptr) Variable Input
 50(gl_RayTmaxEXT):     46(ptr) Variable Input
-  53(gl_HitTEXT):     46(ptr) Variable Input
-              55:             TypePointer Function 6(int)
-              57:             TypePointer Input 6(int)
-58(gl_HitKindEXT):     57(ptr) Variable Input
-              60:             TypeMatrix 29(fvec3) 4
-              61:             TypePointer Function 60
-              63:             TypePointer Input 60
-64(gl_ObjectToWorldEXT):     63(ptr) Variable Input
-67(gl_WorldToObjectEXT):     63(ptr) Variable Input
-70(gl_GeometryIndexEXT):     19(ptr) Variable Input
-              72:             TypeVector 28(float) 4
-              73:             TypeMatrix 72(fvec4) 3
-              74:             TypePointer Function 73
-82(gl_CullMaskEXT):     57(ptr) Variable Input
-              85:      6(int) Constant 3
-              86:             TypeArray 29(fvec3) 85
-              87:             TypePointer Input 86
-88(gl_HitTriangleVertexPositionsEXT):     87(ptr) Variable Input
-              89:     16(int) Constant 0
-              92:             TypePointer IncomingRayPayloadKHR 72(fvec4)
-93(incomingPayload):     92(ptr) Variable IncomingRayPayloadKHR
-              94:   28(float) Constant 1056964608
-              95:   72(fvec4) ConstantComposite 94 94 94 94
-              97:     16(int) Constant 1
-              98:             TypeBool
-             103:      6(int) Constant 0
-107(gl_SubgroupSize):     57(ptr) Variable Input
-             110:             TypePointer IncomingRayPayloadKHR 28(float)
+              54:             TypePointer Function 6(int)
+              56:             TypePointer Input 6(int)
+57(gl_HitKindEXT):     56(ptr) Variable Input
+              59:             TypeMatrix 29(fvec3) 4
+              60:             TypePointer Function 59
+              62:             TypePointer Input 59
+63(gl_ObjectToWorldEXT):     62(ptr) Variable Input
+66(gl_WorldToObjectEXT):     62(ptr) Variable Input
+69(gl_GeometryIndexEXT):     19(ptr) Variable Input
+              71:             TypeVector 28(float) 4
+              72:             TypeMatrix 71(fvec4) 3
+              73:             TypePointer Function 72
+81(gl_CullMaskEXT):     56(ptr) Variable Input
+              84:      6(int) Constant 3
+              85:             TypeArray 29(fvec3) 84
+              86:             TypePointer Input 85
+87(gl_HitTriangleVertexPositionsEXT):     86(ptr) Variable Input
+              88:     16(int) Constant 0
+              91:             TypePointer IncomingRayPayloadKHR 71(fvec4)
+92(incomingPayload):     91(ptr) Variable IncomingRayPayloadKHR
+              93:   28(float) Constant 1056964608
+              94:   71(fvec4) ConstantComposite 93 93 93 93
+              96:     16(int) Constant 1
+              97:             TypeBool
+             102:      6(int) Constant 0
+106(gl_SubgroupSize):     56(ptr) Variable Input
+             109:             TypePointer IncomingRayPayloadKHR 28(float)
          4(main):           2 Function None 3
                5:             Label
            9(v0):      8(ptr) Variable Function
@@ -149,14 +146,14 @@
           45(v9):     44(ptr) Variable Function
          49(v10):     44(ptr) Variable Function
          52(v11):     44(ptr) Variable Function
-         56(v12):     55(ptr) Variable Function
-         62(v13):     61(ptr) Variable Function
-         66(v14):     61(ptr) Variable Function
-         69(v15):     17(ptr) Variable Function
-         75(v16):     74(ptr) Variable Function
-         78(v17):     74(ptr) Variable Function
-         81(v18):     55(ptr) Variable Function
-         84(v19):     30(ptr) Variable Function
+         55(v12):     54(ptr) Variable Function
+         61(v13):     60(ptr) Variable Function
+         65(v14):     60(ptr) Variable Function
+         68(v15):     17(ptr) Variable Function
+         74(v16):     73(ptr) Variable Function
+         77(v17):     73(ptr) Variable Function
+         80(v18):     54(ptr) Variable Function
+         83(v19):     30(ptr) Variable Function
               12:    7(ivec3) Load 11(gl_LaunchIDEXT)
                               Store 9(v0) 12
               15:    7(ivec3) Load 14(gl_LaunchSizeEXT)
@@ -179,41 +176,41 @@
                               Store 45(v9) 48
               51:   28(float) Load 50(gl_RayTmaxEXT)
                               Store 49(v10) 51
-              54:   28(float) Load 53(gl_HitTEXT)
-                              Store 52(v11) 54
-              59:      6(int) Load 58(gl_HitKindEXT)
-                              Store 56(v12) 59
-              65:          60 Load 64(gl_ObjectToWorldEXT)
-                              Store 62(v13) 65
-              68:          60 Load 67(gl_WorldToObjectEXT)
-                              Store 66(v14) 68
-              71:     16(int) Load 70(gl_GeometryIndexEXT)
-                              Store 69(v15) 71
-              76:          60 Load 64(gl_ObjectToWorldEXT)
-              77:          73 Transpose 76
-                              Store 75(v16) 77
-              79:          60 Load 67(gl_WorldToObjectEXT)
-              80:          73 Transpose 79
-                              Store 78(v17) 80
-              83:      6(int) Load 82(gl_CullMaskEXT)
-                              Store 81(v18) 83
-              90:     32(ptr) AccessChain 88(gl_HitTriangleVertexPositionsEXT) 89
-              91:   29(fvec3) Load 90
-                              Store 84(v19) 91
-                              Store 93(incomingPayload) 95
-              96:     16(int) Load 18(v2)
-              99:    98(bool) IEqual 96 97
-                              SelectionMerge 101 None
-                              BranchConditional 99 100 101
-             100:               Label
+              53:   28(float) Load 50(gl_RayTmaxEXT)
+                              Store 52(v11) 53
+              58:      6(int) Load 57(gl_HitKindEXT)
+                              Store 55(v12) 58
+              64:          59 Load 63(gl_ObjectToWorldEXT)
+                              Store 61(v13) 64
+              67:          59 Load 66(gl_WorldToObjectEXT)
+                              Store 65(v14) 67
+              70:     16(int) Load 69(gl_GeometryIndexEXT)
+                              Store 68(v15) 70
+              75:          59 Load 63(gl_ObjectToWorldEXT)
+              76:          72 Transpose 75
+                              Store 74(v16) 76
+              78:          59 Load 66(gl_WorldToObjectEXT)
+              79:          72 Transpose 78
+                              Store 77(v17) 79
+              82:      6(int) Load 81(gl_CullMaskEXT)
+                              Store 80(v18) 82
+              89:     32(ptr) AccessChain 87(gl_HitTriangleVertexPositionsEXT) 88
+              90:   29(fvec3) Load 89
+                              Store 83(v19) 90
+                              Store 92(incomingPayload) 94
+              95:     16(int) Load 18(v2)
+              98:    97(bool) IEqual 95 96
+                              SelectionMerge 100 None
+                              BranchConditional 98 99 100
+              99:               Label
                                 IgnoreIntersectionKHR
-             101:             Label
-             108:      6(int) Load 107(gl_SubgroupSize)
-             109:   28(float) ConvertUToF 108
-             111:    110(ptr) AccessChain 93(incomingPayload) 103
-             112:   28(float) Load 111
-             113:   28(float) FAdd 112 109
-             114:    110(ptr) AccessChain 93(incomingPayload) 103
-                              Store 114 113
+             100:             Label
+             107:      6(int) Load 106(gl_SubgroupSize)
+             108:   28(float) ConvertUToF 107
+             110:    109(ptr) AccessChain 92(incomingPayload) 102
+             111:   28(float) Load 110
+             112:   28(float) FAdd 111 108
+             113:    109(ptr) AccessChain 92(incomingPayload) 102
+                              Store 113 112
                               TerminateRayKHR
                               FunctionEnd
diff --git a/Test/baseResults/spv.ext.ClosestHitShader.rchit.out b/Test/baseResults/spv.ext.ClosestHitShader.rchit.out
index 5cfc8a2..3a47f1e 100644
--- a/Test/baseResults/spv.ext.ClosestHitShader.rchit.out
+++ b/Test/baseResults/spv.ext.ClosestHitShader.rchit.out
@@ -1,7 +1,7 @@
 spv.ext.ClosestHitShader.rchit
 // Module Version 10400
 // Generated by (magic number): 8000b
-// Id's are bound by 109
+// Id's are bound by 108
 
                               Capability RayTracingKHR
                               Capability RayTracingPositionFetchKHR
@@ -11,7 +11,7 @@
                               Extension  "SPV_KHR_ray_tracing_position_fetch"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint ClosestHitKHR 4  "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67 70 82 88 94 106 108
+                              EntryPoint ClosestHitKHR 4  "main" 11 14 20 23 26 33 36 39 42 47 50 57 63 66 69 81 87 93 105 107
                               Source GLSL 460
                               SourceExtension  "GL_EXT_ray_cull_mask"
                               SourceExtension  "GL_EXT_ray_tracing"
@@ -40,24 +40,23 @@
                               Name 49  "v10"
                               Name 50  "gl_RayTmaxEXT"
                               Name 52  "v11"
-                              Name 53  "gl_HitTEXT"
-                              Name 56  "v12"
-                              Name 58  "gl_HitKindEXT"
-                              Name 62  "v13"
-                              Name 64  "gl_ObjectToWorldEXT"
-                              Name 66  "v14"
-                              Name 67  "gl_WorldToObjectEXT"
-                              Name 69  "v15"
-                              Name 70  "gl_GeometryIndexEXT"
-                              Name 75  "v16"
-                              Name 78  "v17"
-                              Name 81  "v18"
-                              Name 82  "gl_CullMaskEXT"
-                              Name 84  "v19"
-                              Name 88  "gl_HitTriangleVertexPositionsEXT"
-                              Name 94  "accEXT"
-                              Name 106  "incomingPayload"
-                              Name 108  "localPayload"
+                              Name 55  "v12"
+                              Name 57  "gl_HitKindEXT"
+                              Name 61  "v13"
+                              Name 63  "gl_ObjectToWorldEXT"
+                              Name 65  "v14"
+                              Name 66  "gl_WorldToObjectEXT"
+                              Name 68  "v15"
+                              Name 69  "gl_GeometryIndexEXT"
+                              Name 74  "v16"
+                              Name 77  "v17"
+                              Name 80  "v18"
+                              Name 81  "gl_CullMaskEXT"
+                              Name 83  "v19"
+                              Name 87  "gl_HitTriangleVertexPositionsEXT"
+                              Name 93  "accEXT"
+                              Name 105  "incomingPayload"
+                              Name 107  "localPayload"
                               Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
                               Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
                               Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId
@@ -69,15 +68,14 @@
                               Decorate 42(gl_ObjectRayDirectionEXT) BuiltIn ObjectRayDirectionKHR
                               Decorate 47(gl_RayTminEXT) BuiltIn RayTminKHR
                               Decorate 50(gl_RayTmaxEXT) BuiltIn RayTmaxKHR
-                              Decorate 53(gl_HitTEXT) BuiltIn RayTmaxKHR
-                              Decorate 58(gl_HitKindEXT) BuiltIn HitKindKHR
-                              Decorate 64(gl_ObjectToWorldEXT) BuiltIn ObjectToWorldKHR
-                              Decorate 67(gl_WorldToObjectEXT) BuiltIn WorldToObjectKHR
-                              Decorate 70(gl_GeometryIndexEXT) BuiltIn RayGeometryIndexKHR
-                              Decorate 82(gl_CullMaskEXT) BuiltIn CullMaskKHR
-                              Decorate 88(gl_HitTriangleVertexPositionsEXT) BuiltIn HitTriangleVertexPositionsKHR
-                              Decorate 94(accEXT) DescriptorSet 0
-                              Decorate 94(accEXT) Binding 0
+                              Decorate 57(gl_HitKindEXT) BuiltIn HitKindKHR
+                              Decorate 63(gl_ObjectToWorldEXT) BuiltIn ObjectToWorldKHR
+                              Decorate 66(gl_WorldToObjectEXT) BuiltIn WorldToObjectKHR
+                              Decorate 69(gl_GeometryIndexEXT) BuiltIn RayGeometryIndexKHR
+                              Decorate 81(gl_CullMaskEXT) BuiltIn CullMaskKHR
+                              Decorate 87(gl_HitTriangleVertexPositionsEXT) BuiltIn HitTriangleVertexPositionsKHR
+                              Decorate 93(accEXT) Binding 0
+                              Decorate 93(accEXT) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
@@ -104,41 +102,40 @@
               46:             TypePointer Input 28(float)
 47(gl_RayTminEXT):     46(ptr) Variable Input
 50(gl_RayTmaxEXT):     46(ptr) Variable Input
-  53(gl_HitTEXT):     46(ptr) Variable Input
-              55:             TypePointer Function 6(int)
-              57:             TypePointer Input 6(int)
-58(gl_HitKindEXT):     57(ptr) Variable Input
-              60:             TypeMatrix 29(fvec3) 4
-              61:             TypePointer Function 60
-              63:             TypePointer Input 60
-64(gl_ObjectToWorldEXT):     63(ptr) Variable Input
-67(gl_WorldToObjectEXT):     63(ptr) Variable Input
-70(gl_GeometryIndexEXT):     19(ptr) Variable Input
-              72:             TypeVector 28(float) 4
-              73:             TypeMatrix 72(fvec4) 3
-              74:             TypePointer Function 73
-82(gl_CullMaskEXT):     57(ptr) Variable Input
-              85:      6(int) Constant 3
-              86:             TypeArray 29(fvec3) 85
-              87:             TypePointer Input 86
-88(gl_HitTriangleVertexPositionsEXT):     87(ptr) Variable Input
-              89:     16(int) Constant 0
-              92:             TypeAccelerationStructureKHR
-              93:             TypePointer UniformConstant 92
-      94(accEXT):     93(ptr) Variable UniformConstant
-              96:      6(int) Constant 0
-              97:      6(int) Constant 1
-              98:      6(int) Constant 2
-              99:   28(float) Constant 1056964608
-             100:   29(fvec3) ConstantComposite 99 99 99
-             101:   28(float) Constant 1065353216
-             102:   29(fvec3) ConstantComposite 101 101 101
-             103:   28(float) Constant 1061158912
-             104:     16(int) Constant 1
-             105:             TypePointer IncomingRayPayloadKHR 72(fvec4)
-106(incomingPayload):    105(ptr) Variable IncomingRayPayloadKHR
-             107:             TypePointer RayPayloadKHR 72(fvec4)
-108(localPayload):    107(ptr) Variable RayPayloadKHR
+              54:             TypePointer Function 6(int)
+              56:             TypePointer Input 6(int)
+57(gl_HitKindEXT):     56(ptr) Variable Input
+              59:             TypeMatrix 29(fvec3) 4
+              60:             TypePointer Function 59
+              62:             TypePointer Input 59
+63(gl_ObjectToWorldEXT):     62(ptr) Variable Input
+66(gl_WorldToObjectEXT):     62(ptr) Variable Input
+69(gl_GeometryIndexEXT):     19(ptr) Variable Input
+              71:             TypeVector 28(float) 4
+              72:             TypeMatrix 71(fvec4) 3
+              73:             TypePointer Function 72
+81(gl_CullMaskEXT):     56(ptr) Variable Input
+              84:      6(int) Constant 3
+              85:             TypeArray 29(fvec3) 84
+              86:             TypePointer Input 85
+87(gl_HitTriangleVertexPositionsEXT):     86(ptr) Variable Input
+              88:     16(int) Constant 0
+              91:             TypeAccelerationStructureKHR
+              92:             TypePointer UniformConstant 91
+      93(accEXT):     92(ptr) Variable UniformConstant
+              95:      6(int) Constant 0
+              96:      6(int) Constant 1
+              97:      6(int) Constant 2
+              98:   28(float) Constant 1056964608
+              99:   29(fvec3) ConstantComposite 98 98 98
+             100:   28(float) Constant 1065353216
+             101:   29(fvec3) ConstantComposite 100 100 100
+             102:   28(float) Constant 1061158912
+             103:     16(int) Constant 1
+             104:             TypePointer IncomingRayPayloadKHR 71(fvec4)
+105(incomingPayload):    104(ptr) Variable IncomingRayPayloadKHR
+             106:             TypePointer RayPayloadKHR 71(fvec4)
+107(localPayload):    106(ptr) Variable RayPayloadKHR
          4(main):           2 Function None 3
                5:             Label
            9(v0):      8(ptr) Variable Function
@@ -153,14 +150,14 @@
           45(v9):     44(ptr) Variable Function
          49(v10):     44(ptr) Variable Function
          52(v11):     44(ptr) Variable Function
-         56(v12):     55(ptr) Variable Function
-         62(v13):     61(ptr) Variable Function
-         66(v14):     61(ptr) Variable Function
-         69(v15):     17(ptr) Variable Function
-         75(v16):     74(ptr) Variable Function
-         78(v17):     74(ptr) Variable Function
-         81(v18):     55(ptr) Variable Function
-         84(v19):     30(ptr) Variable Function
+         55(v12):     54(ptr) Variable Function
+         61(v13):     60(ptr) Variable Function
+         65(v14):     60(ptr) Variable Function
+         68(v15):     17(ptr) Variable Function
+         74(v16):     73(ptr) Variable Function
+         77(v17):     73(ptr) Variable Function
+         80(v18):     54(ptr) Variable Function
+         83(v19):     30(ptr) Variable Function
               12:    7(ivec3) Load 11(gl_LaunchIDEXT)
                               Store 9(v0) 12
               15:    7(ivec3) Load 14(gl_LaunchSizeEXT)
@@ -183,28 +180,28 @@
                               Store 45(v9) 48
               51:   28(float) Load 50(gl_RayTmaxEXT)
                               Store 49(v10) 51
-              54:   28(float) Load 53(gl_HitTEXT)
-                              Store 52(v11) 54
-              59:      6(int) Load 58(gl_HitKindEXT)
-                              Store 56(v12) 59
-              65:          60 Load 64(gl_ObjectToWorldEXT)
-                              Store 62(v13) 65
-              68:          60 Load 67(gl_WorldToObjectEXT)
-                              Store 66(v14) 68
-              71:     16(int) Load 70(gl_GeometryIndexEXT)
-                              Store 69(v15) 71
-              76:          60 Load 64(gl_ObjectToWorldEXT)
-              77:          73 Transpose 76
-                              Store 75(v16) 77
-              79:          60 Load 67(gl_WorldToObjectEXT)
-              80:          73 Transpose 79
-                              Store 78(v17) 80
-              83:      6(int) Load 82(gl_CullMaskEXT)
-                              Store 81(v18) 83
-              90:     32(ptr) AccessChain 88(gl_HitTriangleVertexPositionsEXT) 89
-              91:   29(fvec3) Load 90
-                              Store 84(v19) 91
-              95:          92 Load 94(accEXT)
-                              TraceRayKHR 95 96 97 98 85 96 100 99 102 103 106(incomingPayload)
+              53:   28(float) Load 50(gl_RayTmaxEXT)
+                              Store 52(v11) 53
+              58:      6(int) Load 57(gl_HitKindEXT)
+                              Store 55(v12) 58
+              64:          59 Load 63(gl_ObjectToWorldEXT)
+                              Store 61(v13) 64
+              67:          59 Load 66(gl_WorldToObjectEXT)
+                              Store 65(v14) 67
+              70:     16(int) Load 69(gl_GeometryIndexEXT)
+                              Store 68(v15) 70
+              75:          59 Load 63(gl_ObjectToWorldEXT)
+              76:          72 Transpose 75
+                              Store 74(v16) 76
+              78:          59 Load 66(gl_WorldToObjectEXT)
+              79:          72 Transpose 78
+                              Store 77(v17) 79
+              82:      6(int) Load 81(gl_CullMaskEXT)
+                              Store 80(v18) 82
+              89:     32(ptr) AccessChain 87(gl_HitTriangleVertexPositionsEXT) 88
+              90:   29(fvec3) Load 89
+                              Store 83(v19) 90
+              94:          91 Load 93(accEXT)
+                              TraceRayKHR 94 95 96 97 84 95 99 98 101 102 105(incomingPayload)
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.ext.ClosestHitShader_Subgroup.rchit.out b/Test/baseResults/spv.ext.ClosestHitShader_Subgroup.rchit.out
index e5b62d7..28a5470 100644
--- a/Test/baseResults/spv.ext.ClosestHitShader_Subgroup.rchit.out
+++ b/Test/baseResults/spv.ext.ClosestHitShader_Subgroup.rchit.out
@@ -32,8 +32,8 @@
                               Name 48  "gl_SubgroupLeMask"
                               Name 53  "gl_SubGroupLtMaskARB"
                               Name 61  "gl_SMIDNV"
-                              Decorate 8(accEXT) DescriptorSet 0
                               Decorate 8(accEXT) Binding 0
+                              Decorate 8(accEXT) DescriptorSet 0
                               Decorate 28(gl_SubgroupInvocationID) RelaxedPrecision
                               Decorate 28(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
                               Decorate 29 RelaxedPrecision
@@ -43,11 +43,9 @@
                               Decorate 42 RelaxedPrecision
                               Decorate 43(gl_SubgroupGtMask) BuiltIn SubgroupGtMaskKHR
                               Decorate 46 RelaxedPrecision
-                              Decorate 46 RelaxedPrecision
                               Decorate 47 RelaxedPrecision
                               Decorate 48(gl_SubgroupLeMask) BuiltIn SubgroupLeMaskKHR
                               Decorate 51 RelaxedPrecision
-                              Decorate 51 RelaxedPrecision
                               Decorate 52 RelaxedPrecision
                               Decorate 53(gl_SubGroupLtMaskARB) BuiltIn SubgroupLtMaskKHR
                               Decorate 59 RelaxedPrecision
diff --git a/Test/baseResults/spv.ext.MissShader.rmiss.out b/Test/baseResults/spv.ext.MissShader.rmiss.out
index 246eefa..d03c5c3 100644
--- a/Test/baseResults/spv.ext.MissShader.rmiss.out
+++ b/Test/baseResults/spv.ext.MissShader.rmiss.out
@@ -1,7 +1,7 @@
 spv.ext.MissShader.rmiss
 // Module Version 10400
 // Generated by (magic number): 8000b
-// Id's are bound by 94
+// Id's are bound by 92
 
                               Capability MinLod
                               Capability GroupNonUniform
@@ -16,7 +16,7 @@
                               Extension  "SPV_NV_shader_sm_builtins"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint MissKHR 4  "main" 11 14 21 24 29 32 37 41 56 57 62 67 78 82 89 93
+                              EntryPoint MissKHR 4  "main" 11 14 21 24 29 32 37 41 56 57 62 67 78 82 87 91
                               Source GLSL 460
                               SourceExtension  "GL_ARB_shader_ballot"
                               SourceExtension  "GL_ARB_sparse_texture_clamp"
@@ -48,8 +48,8 @@
                               Name 74  "texel"
                               Name 78  "s2D"
                               Name 82  "c2"
-                              Name 89  "lodClamp"
-                              Name 93  "localPayload"
+                              Name 87  "lodClamp"
+                              Name 91  "localPayload"
                               Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
                               Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
                               Decorate 21(gl_WorldRayOriginEXT) BuiltIn WorldRayOriginKHR
@@ -57,8 +57,8 @@
                               Decorate 29(gl_RayTminEXT) BuiltIn RayTminKHR
                               Decorate 32(gl_RayTmaxEXT) BuiltIn RayTmaxKHR
                               Decorate 37(gl_CullMaskEXT) BuiltIn CullMaskKHR
-                              Decorate 41(accEXT) DescriptorSet 0
                               Decorate 41(accEXT) Binding 0
+                              Decorate 41(accEXT) DescriptorSet 0
                               Decorate 57(gl_SubGroupSizeARB) BuiltIn SubgroupSize
                               Decorate 57(gl_SubGroupSizeARB) Volatile
                               Decorate 57(gl_SubGroupSizeARB) Coherent
@@ -68,10 +68,10 @@
                               Decorate 67(gl_WarpIDNV) BuiltIn WarpIDNV
                               Decorate 67(gl_WarpIDNV) Volatile
                               Decorate 67(gl_WarpIDNV) Coherent
-                              Decorate 78(s2D) DescriptorSet 0
                               Decorate 78(s2D) Binding 1
+                              Decorate 78(s2D) DescriptorSet 0
                               Decorate 82(c2) Location 2
-                              Decorate 89(lodClamp) Location 3
+                              Decorate 87(lodClamp) Location 3
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
@@ -124,12 +124,12 @@
               80:             TypeVector 16(float) 2
               81:             TypePointer Input 80(fvec2)
           82(c2):     81(ptr) Variable Input
-              86:             TypeVector 52(int) 2
-              87:     52(int) Constant 5
-              88:   86(ivec2) ConstantComposite 87 87
-    89(lodClamp):     28(ptr) Variable Input
-              92:             TypePointer RayPayloadKHR 54(fvec4)
-93(localPayload):     92(ptr) Variable RayPayloadKHR
+              84:             TypeVector 52(int) 2
+              85:     52(int) Constant 5
+              86:   84(ivec2) ConstantComposite 85 85
+    87(lodClamp):     28(ptr) Variable Input
+              90:             TypePointer RayPayloadKHR 54(fvec4)
+91(localPayload):     90(ptr) Variable RayPayloadKHR
          4(main):           2 Function None 3
                5:             Label
            9(v0):      8(ptr) Variable Function
@@ -169,10 +169,8 @@
                               Store 72 70
               79:          76 Load 78(s2D)
               83:   80(fvec2) Load 82(c2)
-              84:   80(fvec2) Load 82(c2)
-              85:   80(fvec2) Load 82(c2)
-              90:   16(float) Load 89(lodClamp)
-              91:   54(fvec4) ImageSampleExplicitLod 79 83 Grad ConstOffset MinLod 84 85 88 90
-                              Store 74(texel) 91
+              88:   16(float) Load 87(lodClamp)
+              89:   54(fvec4) ImageSampleExplicitLod 79 83 Grad ConstOffset MinLod 83 83 86 88
+                              Store 74(texel) 89
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.ext.RayConstants.rgen.out b/Test/baseResults/spv.ext.RayConstants.rgen.out
index 9cd294a..05fb8f7 100644
--- a/Test/baseResults/spv.ext.RayConstants.rgen.out
+++ b/Test/baseResults/spv.ext.RayConstants.rgen.out
@@ -13,8 +13,8 @@
                               Name 4  "main"
                               Name 8  "accEXT"
                               Name 26  "payload"
-                              Decorate 8(accEXT) DescriptorSet 0
                               Decorate 8(accEXT) Binding 0
+                              Decorate 8(accEXT) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeAccelerationStructureKHR
diff --git a/Test/baseResults/spv.ext.RayGenSBTlayout.rgen.out b/Test/baseResults/spv.ext.RayGenSBTlayout.rgen.out
index 31a8bda..7fec5c3 100644
--- a/Test/baseResults/spv.ext.RayGenSBTlayout.rgen.out
+++ b/Test/baseResults/spv.ext.RayGenSBTlayout.rgen.out
@@ -37,6 +37,7 @@
                               Decorate 21(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
                               Decorate 34 ArrayStride 8
                               Decorate 35 ArrayStride 16
+                              Decorate 36(block) Block
                               MemberDecorate 36(block) 0 Offset 0
                               MemberDecorate 36(block) 1 Offset 16
                               MemberDecorate 36(block) 2 Offset 28
@@ -48,7 +49,6 @@
                               MemberDecorate 36(block) 8 Offset 112
                               MemberDecorate 36(block) 9 Offset 120
                               MemberDecorate 36(block) 10 Offset 128
-                              Decorate 36(block) Block
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
diff --git a/Test/baseResults/spv.ext.RayGenSBTlayout140.rgen.out b/Test/baseResults/spv.ext.RayGenSBTlayout140.rgen.out
index f0302f7..714242b 100644
--- a/Test/baseResults/spv.ext.RayGenSBTlayout140.rgen.out
+++ b/Test/baseResults/spv.ext.RayGenSBTlayout140.rgen.out
@@ -37,6 +37,7 @@
                               Decorate 21(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
                               Decorate 34 ArrayStride 16
                               Decorate 35 ArrayStride 16
+                              Decorate 36(block) Block
                               MemberDecorate 36(block) 0 Offset 0
                               MemberDecorate 36(block) 1 Offset 16
                               MemberDecorate 36(block) 2 Offset 28
@@ -48,7 +49,6 @@
                               MemberDecorate 36(block) 8 Offset 128
                               MemberDecorate 36(block) 9 Offset 136
                               MemberDecorate 36(block) 10 Offset 144
-                              Decorate 36(block) Block
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
diff --git a/Test/baseResults/spv.ext.RayGenSBTlayout430.rgen.out b/Test/baseResults/spv.ext.RayGenSBTlayout430.rgen.out
index e83dd42..ab2b996 100644
--- a/Test/baseResults/spv.ext.RayGenSBTlayout430.rgen.out
+++ b/Test/baseResults/spv.ext.RayGenSBTlayout430.rgen.out
@@ -37,6 +37,7 @@
                               Decorate 21(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
                               Decorate 34 ArrayStride 8
                               Decorate 35 ArrayStride 16
+                              Decorate 36(block) Block
                               MemberDecorate 36(block) 0 Offset 0
                               MemberDecorate 36(block) 1 Offset 16
                               MemberDecorate 36(block) 2 Offset 28
@@ -48,7 +49,6 @@
                               MemberDecorate 36(block) 8 Offset 112
                               MemberDecorate 36(block) 9 Offset 120
                               MemberDecorate 36(block) 10 Offset 128
-                              Decorate 36(block) Block
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
diff --git a/Test/baseResults/spv.ext.RayGenSBTlayoutscalar.rgen.out b/Test/baseResults/spv.ext.RayGenSBTlayoutscalar.rgen.out
index a24b64c..6f4b471 100644
--- a/Test/baseResults/spv.ext.RayGenSBTlayoutscalar.rgen.out
+++ b/Test/baseResults/spv.ext.RayGenSBTlayoutscalar.rgen.out
@@ -38,6 +38,7 @@
                               Decorate 21(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
                               Decorate 34 ArrayStride 8
                               Decorate 35 ArrayStride 12
+                              Decorate 36(block) Block
                               MemberDecorate 36(block) 0 Offset 0
                               MemberDecorate 36(block) 1 Offset 12
                               MemberDecorate 36(block) 2 Offset 24
@@ -49,7 +50,6 @@
                               MemberDecorate 36(block) 8 Offset 92
                               MemberDecorate 36(block) 9 Offset 96
                               MemberDecorate 36(block) 10 Offset 104
-                              Decorate 36(block) Block
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
diff --git a/Test/baseResults/spv.ext.RayGenShader.rgen.out b/Test/baseResults/spv.ext.RayGenShader.rgen.out
index b872d9e..37380e9 100644
--- a/Test/baseResults/spv.ext.RayGenShader.rgen.out
+++ b/Test/baseResults/spv.ext.RayGenShader.rgen.out
@@ -30,15 +30,15 @@
                               Name 57  "imageu"
                               Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
                               Decorate 21(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
-                              Decorate 29(accEXT0) DescriptorSet 0
                               Decorate 29(accEXT0) Binding 0
+                              Decorate 29(accEXT0) DescriptorSet 0
+                              Decorate 38(block) Block
                               MemberDecorate 38(block) 0 Offset 0
                               MemberDecorate 38(block) 1 Offset 16
-                              Decorate 38(block) Block
-                              Decorate 54(accEXT1) DescriptorSet 0
                               Decorate 54(accEXT1) Binding 1
-                              Decorate 57(imageu) DescriptorSet 0
+                              Decorate 54(accEXT1) DescriptorSet 0
                               Decorate 57(imageu) Binding 2
+                              Decorate 57(imageu) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
diff --git a/Test/baseResults/spv.ext.RayGenShader11.rgen.out b/Test/baseResults/spv.ext.RayGenShader11.rgen.out
index d79f4f3..b8d7256 100644
--- a/Test/baseResults/spv.ext.RayGenShader11.rgen.out
+++ b/Test/baseResults/spv.ext.RayGenShader11.rgen.out
@@ -25,11 +25,11 @@
                               Name 52  "payload"
                               Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
                               Decorate 21(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
-                              Decorate 29(accEXT) DescriptorSet 0
                               Decorate 29(accEXT) Binding 0
+                              Decorate 29(accEXT) DescriptorSet 0
+                              Decorate 37(block) Block
                               MemberDecorate 37(block) 0 Offset 0
                               MemberDecorate 37(block) 1 Offset 16
-                              Decorate 37(block) Block
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
diff --git a/Test/baseResults/spv.ext.RayGenShaderArray.rgen.out b/Test/baseResults/spv.ext.RayGenShaderArray.rgen.out
index 7e351d7..ebe0d39 100644
--- a/Test/baseResults/spv.ext.RayGenShaderArray.rgen.out
+++ b/Test/baseResults/spv.ext.RayGenShaderArray.rgen.out
@@ -35,16 +35,16 @@
                               Name 65  "accEXT1"
                               Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
                               Decorate 21(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR
-                              Decorate 30(accEXT0) DescriptorSet 0
                               Decorate 30(accEXT0) Binding 0
+                              Decorate 30(accEXT0) DescriptorSet 0
+                              Decorate 36(block) Block
                               MemberDecorate 36(block) 0 Offset 0
                               MemberDecorate 36(block) 1 Offset 16
                               MemberDecorate 36(block) 2 Offset 28
                               MemberDecorate 36(block) 3 Offset 32
                               MemberDecorate 36(block) 4 Offset 40
-                              Decorate 36(block) Block
-                              Decorate 65(accEXT1) DescriptorSet 0
                               Decorate 65(accEXT1) Binding 1
+                              Decorate 65(accEXT1) DescriptorSet 0
                               Decorate 80 DecorationNonUniformEXT
                               Decorate 81 DecorationNonUniformEXT
                               Decorate 82 DecorationNonUniformEXT
diff --git a/Test/baseResults/spv.ext.ShaderTileImage.typemismatch.frag.out b/Test/baseResults/spv.ext.ShaderTileImage.typemismatch.frag.out
index e91ffb7..057e5e1 100644
--- a/Test/baseResults/spv.ext.ShaderTileImage.typemismatch.frag.out
+++ b/Test/baseResults/spv.ext.ShaderTileImage.typemismatch.frag.out
@@ -1,5 +1,5 @@
 spv.ext.ShaderTileImage.typemismatch.frag
-ERROR: 0:7: 'location' : fragment outputs or tileImageEXTs sharing the same location 0 must be the same basic type
+ERROR: 0:7: 'location' : the aliases sharing the location 0 must be the same basic type and interpolation qualification
 ERROR: 1 compilation errors.  No code generated.
 
 
diff --git a/Test/baseResults/spv.ext.World3x4.rahit.out b/Test/baseResults/spv.ext.World3x4.rahit.out
index 92ad18f..3c63dd3 100644
--- a/Test/baseResults/spv.ext.World3x4.rahit.out
+++ b/Test/baseResults/spv.ext.World3x4.rahit.out
@@ -26,8 +26,8 @@
                               Name 89  "hitValue"
                               Decorate 43(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
                               Decorate 60(gl_WorldToObject3x4EXT) BuiltIn WorldToObjectKHR
-                              Decorate 78(result) DescriptorSet 0
                               Decorate 78(result) Binding 0
+                              Decorate 78(result) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.ext.meshShaderBuiltins.mesh.out b/Test/baseResults/spv.ext.meshShaderBuiltins.mesh.out
index a1d71a5..7fac1a7 100644
--- a/Test/baseResults/spv.ext.meshShaderBuiltins.mesh.out
+++ b/Test/baseResults/spv.ext.meshShaderBuiltins.mesh.out
@@ -50,20 +50,20 @@
                               Decorate 13(gl_LocalInvocationID) BuiltIn LocalInvocationId
                               Decorate 19(gl_WorkGroupID) BuiltIn WorkgroupId
                               Decorate 24(gl_NumWorkGroups) BuiltIn NumWorkgroups
+                              Decorate 38(gl_MeshPerVertexEXT) Block
                               MemberDecorate 38(gl_MeshPerVertexEXT) 0 BuiltIn Position
                               MemberDecorate 38(gl_MeshPerVertexEXT) 1 BuiltIn PointSize
                               MemberDecorate 38(gl_MeshPerVertexEXT) 2 BuiltIn ClipDistance
                               MemberDecorate 38(gl_MeshPerVertexEXT) 3 BuiltIn CullDistance
-                              Decorate 38(gl_MeshPerVertexEXT) Block
-                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 0 PerPrimitiveNV
-                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 0 BuiltIn PrimitiveId
-                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 1 PerPrimitiveNV
-                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 1 BuiltIn Layer
-                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 2 PerPrimitiveNV
-                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 2 BuiltIn ViewportIndex
-                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 3 PerPrimitiveNV
-                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 3 BuiltIn CullPrimitiveEXT
                               Decorate 90(gl_MeshPerPrimitiveEXT) Block
+                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 0 BuiltIn PrimitiveId
+                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 0 PerPrimitiveNV
+                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 1 BuiltIn Layer
+                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 1 PerPrimitiveNV
+                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 2 BuiltIn ViewportIndex
+                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 2 PerPrimitiveNV
+                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 3 BuiltIn CullPrimitiveEXT
+                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 3 PerPrimitiveNV
                               Decorate 134(gl_PrimitiveTriangleIndicesEXT) BuiltIn PrimitiveTriangleIndicesEXT
                               Decorate 152(gl_DrawIDARB) BuiltIn DrawIndex
                               Decorate 155(gl_ViewIndex) BuiltIn ViewIndex
diff --git a/Test/baseResults/spv.ext.meshShaderBuiltinsShadingRate.mesh.out b/Test/baseResults/spv.ext.meshShaderBuiltinsShadingRate.mesh.out
index 65bd740..fc14ff6 100644
--- a/Test/baseResults/spv.ext.meshShaderBuiltinsShadingRate.mesh.out
+++ b/Test/baseResults/spv.ext.meshShaderBuiltinsShadingRate.mesh.out
@@ -54,22 +54,22 @@
                               Decorate 13(gl_LocalInvocationID) BuiltIn LocalInvocationId
                               Decorate 19(gl_WorkGroupID) BuiltIn WorkgroupId
                               Decorate 24(gl_NumWorkGroups) BuiltIn NumWorkgroups
+                              Decorate 38(gl_MeshPerVertexEXT) Block
                               MemberDecorate 38(gl_MeshPerVertexEXT) 0 BuiltIn Position
                               MemberDecorate 38(gl_MeshPerVertexEXT) 1 BuiltIn PointSize
                               MemberDecorate 38(gl_MeshPerVertexEXT) 2 BuiltIn ClipDistance
                               MemberDecorate 38(gl_MeshPerVertexEXT) 3 BuiltIn CullDistance
-                              Decorate 38(gl_MeshPerVertexEXT) Block
-                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 0 PerPrimitiveNV
-                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 0 BuiltIn PrimitiveId
-                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 1 PerPrimitiveNV
-                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 1 BuiltIn Layer
-                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 2 PerPrimitiveNV
-                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 2 BuiltIn ViewportIndex
-                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 3 PerPrimitiveNV
-                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 3 BuiltIn CullPrimitiveEXT
-                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 4 PerPrimitiveNV
-                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 4 BuiltIn PrimitiveShadingRateKHR
                               Decorate 90(gl_MeshPerPrimitiveEXT) Block
+                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 0 BuiltIn PrimitiveId
+                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 0 PerPrimitiveNV
+                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 1 BuiltIn Layer
+                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 1 PerPrimitiveNV
+                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 2 BuiltIn ViewportIndex
+                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 2 PerPrimitiveNV
+                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 3 BuiltIn CullPrimitiveEXT
+                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 3 PerPrimitiveNV
+                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 4 BuiltIn PrimitiveShadingRateKHR
+                              MemberDecorate 90(gl_MeshPerPrimitiveEXT) 4 PerPrimitiveNV
                               Decorate 140(gl_PrimitiveTriangleIndicesEXT) BuiltIn PrimitiveTriangleIndicesEXT
                               Decorate 158(gl_DrawIDARB) BuiltIn DrawIndex
                               Decorate 161(gl_ViewIndex) BuiltIn ViewIndex
diff --git a/Test/baseResults/spv.ext.meshShaderRedeclBuiltins.mesh.out b/Test/baseResults/spv.ext.meshShaderRedeclBuiltins.mesh.out
index 3577300..534cf40 100644
--- a/Test/baseResults/spv.ext.meshShaderRedeclBuiltins.mesh.out
+++ b/Test/baseResults/spv.ext.meshShaderRedeclBuiltins.mesh.out
@@ -36,20 +36,20 @@
                               Name 122  "gl_PrimitivePointIndicesEXT"
                               Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId
                               Decorate 17(gl_WorkGroupID) BuiltIn WorkgroupId
+                              Decorate 26(gl_MeshPerVertexEXT) Block
                               MemberDecorate 26(gl_MeshPerVertexEXT) 0 BuiltIn Position
                               MemberDecorate 26(gl_MeshPerVertexEXT) 1 BuiltIn PointSize
                               MemberDecorate 26(gl_MeshPerVertexEXT) 2 BuiltIn ClipDistance
                               MemberDecorate 26(gl_MeshPerVertexEXT) 3 BuiltIn CullDistance
-                              Decorate 26(gl_MeshPerVertexEXT) Block
-                              MemberDecorate 78(gl_MeshPerPrimitiveEXT) 0 PerPrimitiveNV
-                              MemberDecorate 78(gl_MeshPerPrimitiveEXT) 0 BuiltIn PrimitiveId
-                              MemberDecorate 78(gl_MeshPerPrimitiveEXT) 1 PerPrimitiveNV
-                              MemberDecorate 78(gl_MeshPerPrimitiveEXT) 1 BuiltIn Layer
-                              MemberDecorate 78(gl_MeshPerPrimitiveEXT) 2 PerPrimitiveNV
-                              MemberDecorate 78(gl_MeshPerPrimitiveEXT) 2 BuiltIn ViewportIndex
-                              MemberDecorate 78(gl_MeshPerPrimitiveEXT) 3 PerPrimitiveNV
-                              MemberDecorate 78(gl_MeshPerPrimitiveEXT) 3 BuiltIn CullPrimitiveEXT
                               Decorate 78(gl_MeshPerPrimitiveEXT) Block
+                              MemberDecorate 78(gl_MeshPerPrimitiveEXT) 0 BuiltIn PrimitiveId
+                              MemberDecorate 78(gl_MeshPerPrimitiveEXT) 0 PerPrimitiveNV
+                              MemberDecorate 78(gl_MeshPerPrimitiveEXT) 1 BuiltIn Layer
+                              MemberDecorate 78(gl_MeshPerPrimitiveEXT) 1 PerPrimitiveNV
+                              MemberDecorate 78(gl_MeshPerPrimitiveEXT) 2 BuiltIn ViewportIndex
+                              MemberDecorate 78(gl_MeshPerPrimitiveEXT) 2 PerPrimitiveNV
+                              MemberDecorate 78(gl_MeshPerPrimitiveEXT) 3 BuiltIn CullPrimitiveEXT
+                              MemberDecorate 78(gl_MeshPerPrimitiveEXT) 3 PerPrimitiveNV
                               Decorate 122(gl_PrimitivePointIndicesEXT) BuiltIn PrimitivePointIndicesEXT
                               Decorate 127 BuiltIn WorkgroupSize
                2:             TypeVoid
diff --git a/Test/baseResults/spv.ext.meshShaderTaskMem.mesh.out b/Test/baseResults/spv.ext.meshShaderTaskMem.mesh.out
index b206177..5af2630 100644
--- a/Test/baseResults/spv.ext.meshShaderTaskMem.mesh.out
+++ b/Test/baseResults/spv.ext.meshShaderTaskMem.mesh.out
@@ -33,11 +33,11 @@
                               Decorate 18(outBlock) Block
                               Decorate 22(myblk) Location 0
                               Decorate 35 ArrayStride 4
+                              Decorate 36(bufferBlock) Block
                               MemberDecorate 36(bufferBlock) 0 Offset 0
                               MemberDecorate 36(bufferBlock) 1 Offset 16
-                              Decorate 36(bufferBlock) Block
-                              Decorate 38(mybuf) DescriptorSet 0
                               Decorate 38(mybuf) Binding 0
+                              Decorate 38(mybuf) DescriptorSet 0
                               Decorate 57 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.ext.meshShaderUserDefined.mesh.out b/Test/baseResults/spv.ext.meshShaderUserDefined.mesh.out
index dc347aa..6fcd594 100644
--- a/Test/baseResults/spv.ext.meshShaderUserDefined.mesh.out
+++ b/Test/baseResults/spv.ext.meshShaderUserDefined.mesh.out
@@ -34,13 +34,13 @@
                               Name 104  "blk2"
                               Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId
                               Decorate 17(gl_WorkGroupID) BuiltIn WorkgroupId
+                              Decorate 30(myblock) Block
                               MemberDecorate 30(myblock) 0 PerPrimitiveNV
                               MemberDecorate 30(myblock) 1 PerPrimitiveNV
                               MemberDecorate 30(myblock) 2 PerPrimitiveNV
                               MemberDecorate 30(myblock) 3 PerPrimitiveNV
                               MemberDecorate 30(myblock) 4 PerPrimitiveNV
                               MemberDecorate 30(myblock) 5 PerPrimitiveNV
-                              Decorate 30(myblock) Block
                               Decorate 34(blk) Location 0
                               Decorate 100(myblock2) Block
                               Decorate 104(blk2) Location 20
diff --git a/Test/baseResults/spv.ext.meshTaskShader.task.out b/Test/baseResults/spv.ext.meshTaskShader.task.out
index 41a81d0..d3f2611 100644
--- a/Test/baseResults/spv.ext.meshTaskShader.task.out
+++ b/Test/baseResults/spv.ext.meshTaskShader.task.out
@@ -29,13 +29,13 @@
                               Name 80  "mytask"
                               Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId
                               Decorate 17(gl_WorkGroupID) BuiltIn WorkgroupId
-                              MemberDecorate 37(block0) 0 Offset 0
                               Decorate 37(block0) Block
-                              Decorate 39 DescriptorSet 0
+                              MemberDecorate 37(block0) 0 Offset 0
                               Decorate 39 Binding 1
-                              Decorate 55(uni_image) DescriptorSet 0
-                              Decorate 55(uni_image) Binding 0
+                              Decorate 39 DescriptorSet 0
                               Decorate 55(uni_image) NonReadable
+                              Decorate 55(uni_image) Binding 0
+                              Decorate 55(uni_image) DescriptorSet 0
                               Decorate 102 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.ext.textureShadowLod.frag.out b/Test/baseResults/spv.ext.textureShadowLod.frag.out
index ca4a872..c4f9f35 100644
--- a/Test/baseResults/spv.ext.textureShadowLod.frag.out
+++ b/Test/baseResults/spv.ext.textureShadowLod.frag.out
@@ -18,13 +18,13 @@
                               Name 24  "sca"
                               Name 43  "sc"
                               Decorate 8(c) Location 0
-                              Decorate 12(s2da) DescriptorSet 0
                               Decorate 12(s2da) Binding 0
+                              Decorate 12(s2da) DescriptorSet 0
                               Decorate 16(tc) Location 0
-                              Decorate 24(sca) DescriptorSet 0
                               Decorate 24(sca) Binding 1
-                              Decorate 43(sc) DescriptorSet 0
+                              Decorate 24(sca) DescriptorSet 0
                               Decorate 43(sc) Binding 2
+                              Decorate 43(sc) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.float16.frag.out b/Test/baseResults/spv.float16.frag.out
index 2cce815..fbc8947 100644
--- a/Test/baseResults/spv.float16.frag.out
+++ b/Test/baseResults/spv.float16.frag.out
@@ -2,7 +2,7 @@
 Validation failed
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 542
+// Id's are bound by 541
 
                               Capability Shader
                               Capability Float16
@@ -17,7 +17,7 @@
                               Extension  "SPV_KHR_16bit_storage"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 465
+                              EntryPoint Fragment 4  "main" 464
                               ExecutionMode 4 OriginUpperLeft
                               Source GLSL 450
                               SourceExtension  "GL_AMD_gpu_shader_half_float"
@@ -43,124 +43,125 @@
                               Name 156  "bv"
                               Name 167  "fv"
                               Name 175  "dv"
-                              Name 186  "iv"
-                              Name 193  "uv"
-                              Name 201  "i64v"
-                              Name 209  "u64v"
-                              Name 216  "f16v2"
-                              Name 217  "f16v1"
-                              Name 249  "f16v2"
-                              Name 250  "f16v1"
-                              Name 266  "f16v2"
-                              Name 267  "f16v1"
-                              Name 288  "f16"
-                              Name 292  "f16v3"
-                              Name 332  "bv"
-                              Name 353  "b"
-                              Name 363  "iv"
-                              Name 364  "ResType"
-                              Name 372  "u"
-                              Name 373  "f16v"
-                              Name 378  "f16"
-                              Name 379  "f16v1"
-                              Name 383  "f16v2"
-                              Name 389  "f16v3"
-                              Name 408  "f16m3"
-                              Name 409  "f16m1"
-                              Name 411  "f16m2"
-                              Name 420  "f16v1"
-                              Name 422  "f16v2"
-                              Name 427  "f16m4"
-                              Name 430  "f16"
-                              Name 433  "f16m5"
-                              Name 438  "f16m6"
-                              Name 439  "f16m7"
-                              Name 442  "bv"
-                              Name 443  "f16v1"
-                              Name 445  "f16v2"
-                              Name 463  "f16v"
-                              Name 465  "if16v"
-                              Name 522  "S"
-                              MemberName 522(S) 0  "x"
-                              MemberName 522(S) 1  "y"
-                              MemberName 522(S) 2  "z"
-                              Name 524  "B1"
-                              MemberName 524(B1) 0  "a"
-                              MemberName 524(B1) 1  "b"
-                              MemberName 524(B1) 2  "c"
-                              MemberName 524(B1) 3  "d"
-                              MemberName 524(B1) 4  "e"
-                              MemberName 524(B1) 5  "f"
-                              MemberName 524(B1) 6  "g"
-                              MemberName 524(B1) 7  "h"
-                              Name 526  ""
-                              Name 529  "S"
-                              MemberName 529(S) 0  "x"
-                              MemberName 529(S) 1  "y"
-                              MemberName 529(S) 2  "z"
-                              Name 531  "B2"
-                              MemberName 531(B2) 0  "o"
-                              MemberName 531(B2) 1  "p"
-                              MemberName 531(B2) 2  "q"
-                              MemberName 531(B2) 3  "r"
-                              MemberName 531(B2) 4  "s"
-                              MemberName 531(B2) 5  "t"
-                              MemberName 531(B2) 6  "u"
-                              MemberName 531(B2) 7  "v"
-                              Name 533  ""
-                              Name 534  "sf16"
-                              Name 535  "sf"
-                              Name 536  "sd"
-                              Name 537  "f16_to_f"
-                              Name 539  "f16_to_d"
-                              Name 540  "f_to_f16"
-                              Name 541  "d_to_f16"
-                              Decorate 465(if16v) Location 0
-                              Decorate 520 ArrayStride 16
-                              Decorate 521 ArrayStride 32
-                              MemberDecorate 522(S) 0 Offset 0
-                              MemberDecorate 522(S) 1 Offset 4
-                              MemberDecorate 522(S) 2 Offset 8
-                              Decorate 523 ArrayStride 16
-                              MemberDecorate 524(B1) 0 Offset 0
-                              MemberDecorate 524(B1) 1 Offset 4
-                              MemberDecorate 524(B1) 2 Offset 8
-                              MemberDecorate 524(B1) 3 Offset 16
-                              MemberDecorate 524(B1) 4 ColMajor
-                              MemberDecorate 524(B1) 4 Offset 48
-                              MemberDecorate 524(B1) 4 MatrixStride 16
-                              MemberDecorate 524(B1) 5 ColMajor
-                              MemberDecorate 524(B1) 5 Offset 80
-                              MemberDecorate 524(B1) 5 MatrixStride 16
-                              MemberDecorate 524(B1) 6 Offset 144
-                              MemberDecorate 524(B1) 7 Offset 160
-                              Decorate 524(B1) Block
-                              Decorate 526 DescriptorSet 0
-                              Decorate 526 Binding 0
-                              Decorate 527 ArrayStride 2
-                              Decorate 528 ArrayStride 12
-                              MemberDecorate 529(S) 0 Offset 0
-                              MemberDecorate 529(S) 1 Offset 4
-                              MemberDecorate 529(S) 2 Offset 8
-                              Decorate 530 ArrayStride 16
-                              MemberDecorate 531(B2) 0 Offset 0
-                              MemberDecorate 531(B2) 1 Offset 4
-                              MemberDecorate 531(B2) 2 Offset 8
-                              MemberDecorate 531(B2) 3 Offset 14
-                              MemberDecorate 531(B2) 4 RowMajor
-                              MemberDecorate 531(B2) 4 Offset 20
-                              MemberDecorate 531(B2) 4 MatrixStride 4
-                              MemberDecorate 531(B2) 5 RowMajor
-                              MemberDecorate 531(B2) 5 Offset 32
-                              MemberDecorate 531(B2) 5 MatrixStride 4
-                              MemberDecorate 531(B2) 6 Offset 56
-                              MemberDecorate 531(B2) 7 Offset 72
-                              Decorate 531(B2) BufferBlock
-                              Decorate 533 DescriptorSet 0
-                              Decorate 533 Binding 0
-                              Decorate 534(sf16) SpecId 100
-                              Decorate 535(sf) SpecId 101
-                              Decorate 536(sd) SpecId 102
+                              Name 182  "iv"
+                              Name 189  "uv"
+                              Name 197  "i64v"
+                              Name 205  "u64v"
+                              Name 212  "f16v2"
+                              Name 213  "f16v1"
+                              Name 245  "f16v2"
+                              Name 246  "f16v1"
+                              Name 262  "f16v2"
+                              Name 263  "f16v1"
+                              Name 284  "f16"
+                              Name 288  "f16v3"
+                              Name 290  "ResType"
+                              Name 331  "bv"
+                              Name 352  "b"
+                              Name 362  "iv"
+                              Name 363  "ResType"
+                              Name 371  "u"
+                              Name 372  "f16v"
+                              Name 377  "f16"
+                              Name 378  "f16v1"
+                              Name 382  "f16v2"
+                              Name 388  "f16v3"
+                              Name 407  "f16m3"
+                              Name 408  "f16m1"
+                              Name 410  "f16m2"
+                              Name 419  "f16v1"
+                              Name 421  "f16v2"
+                              Name 426  "f16m4"
+                              Name 429  "f16"
+                              Name 432  "f16m5"
+                              Name 437  "f16m6"
+                              Name 438  "f16m7"
+                              Name 441  "bv"
+                              Name 442  "f16v1"
+                              Name 444  "f16v2"
+                              Name 462  "f16v"
+                              Name 464  "if16v"
+                              Name 521  "S"
+                              MemberName 521(S) 0  "x"
+                              MemberName 521(S) 1  "y"
+                              MemberName 521(S) 2  "z"
+                              Name 523  "B1"
+                              MemberName 523(B1) 0  "a"
+                              MemberName 523(B1) 1  "b"
+                              MemberName 523(B1) 2  "c"
+                              MemberName 523(B1) 3  "d"
+                              MemberName 523(B1) 4  "e"
+                              MemberName 523(B1) 5  "f"
+                              MemberName 523(B1) 6  "g"
+                              MemberName 523(B1) 7  "h"
+                              Name 525  ""
+                              Name 528  "S"
+                              MemberName 528(S) 0  "x"
+                              MemberName 528(S) 1  "y"
+                              MemberName 528(S) 2  "z"
+                              Name 530  "B2"
+                              MemberName 530(B2) 0  "o"
+                              MemberName 530(B2) 1  "p"
+                              MemberName 530(B2) 2  "q"
+                              MemberName 530(B2) 3  "r"
+                              MemberName 530(B2) 4  "s"
+                              MemberName 530(B2) 5  "t"
+                              MemberName 530(B2) 6  "u"
+                              MemberName 530(B2) 7  "v"
+                              Name 532  ""
+                              Name 533  "sf16"
+                              Name 534  "sf"
+                              Name 535  "sd"
+                              Name 536  "f16_to_f"
+                              Name 538  "f16_to_d"
+                              Name 539  "f_to_f16"
+                              Name 540  "d_to_f16"
+                              Decorate 464(if16v) Location 0
+                              Decorate 519 ArrayStride 16
+                              Decorate 520 ArrayStride 32
+                              MemberDecorate 521(S) 0 Offset 0
+                              MemberDecorate 521(S) 1 Offset 4
+                              MemberDecorate 521(S) 2 Offset 8
+                              Decorate 522 ArrayStride 16
+                              Decorate 523(B1) Block
+                              MemberDecorate 523(B1) 0 Offset 0
+                              MemberDecorate 523(B1) 1 Offset 4
+                              MemberDecorate 523(B1) 2 Offset 8
+                              MemberDecorate 523(B1) 3 Offset 16
+                              MemberDecorate 523(B1) 4 ColMajor
+                              MemberDecorate 523(B1) 4 MatrixStride 16
+                              MemberDecorate 523(B1) 4 Offset 48
+                              MemberDecorate 523(B1) 5 ColMajor
+                              MemberDecorate 523(B1) 5 MatrixStride 16
+                              MemberDecorate 523(B1) 5 Offset 80
+                              MemberDecorate 523(B1) 6 Offset 144
+                              MemberDecorate 523(B1) 7 Offset 160
+                              Decorate 525 Binding 0
+                              Decorate 525 DescriptorSet 0
+                              Decorate 526 ArrayStride 2
+                              Decorate 527 ArrayStride 12
+                              MemberDecorate 528(S) 0 Offset 0
+                              MemberDecorate 528(S) 1 Offset 4
+                              MemberDecorate 528(S) 2 Offset 8
+                              Decorate 529 ArrayStride 16
+                              Decorate 530(B2) BufferBlock
+                              MemberDecorate 530(B2) 0 Offset 0
+                              MemberDecorate 530(B2) 1 Offset 4
+                              MemberDecorate 530(B2) 2 Offset 8
+                              MemberDecorate 530(B2) 3 Offset 14
+                              MemberDecorate 530(B2) 4 RowMajor
+                              MemberDecorate 530(B2) 4 MatrixStride 4
+                              MemberDecorate 530(B2) 4 Offset 20
+                              MemberDecorate 530(B2) 5 RowMajor
+                              MemberDecorate 530(B2) 5 MatrixStride 4
+                              MemberDecorate 530(B2) 5 Offset 32
+                              MemberDecorate 530(B2) 6 Offset 56
+                              MemberDecorate 530(B2) 7 Offset 72
+                              Decorate 532 Binding 0
+                              Decorate 532 DescriptorSet 0
+                              Decorate 533(sf16) SpecId 100
+                              Decorate 534(sf) SpecId 101
+                              Decorate 535(sd) SpecId 102
                2:             TypeVoid
                3:             TypeFunction 2
               28:             TypeFloat 16
@@ -192,58 +193,59 @@
              172:             TypeFloat 64
              173:             TypeVector 172(float64_t) 3
              174:             TypePointer Function 173(f64vec3)
-             183:             TypeInt 32 1
-             184:             TypeVector 183(int) 3
-             185:             TypePointer Function 184(ivec3)
-             191:             TypeVector 33(int) 3
-             192:             TypePointer Function 191(ivec3)
-             198:             TypeInt 64 1
-             199:             TypeVector 198(int64_t) 3
-             200:             TypePointer Function 199(i64vec3)
-             206:             TypeInt 64 0
-             207:             TypeVector 206(int64_t) 3
-             208:             TypePointer Function 207(i64vec3)
-             214:             TypeVector 28(float16_t) 4
-             215:             TypePointer Function 214(f16vec4)
-    364(ResType):             TypeStruct 151(f16vec3) 184(ivec3)
-             371:             TypePointer Function 33(int)
-             406:             TypeMatrix 151(f16vec3) 2
-             407:             TypePointer Function 406
-             425:             TypeMatrix 29(f16vec2) 3
-             426:             TypePointer Function 425
-             431:             TypeMatrix 151(f16vec3) 3
-             432:             TypePointer Function 431
-             436:             TypeMatrix 214(f16vec4) 4
-             437:             TypePointer Function 436
-             464:             TypePointer Input 151(f16vec3)
-      465(if16v):    464(ptr) Variable Input
-             466:             TypePointer Input 28(float16_t)
-             509:    183(int) Constant 1
-             516:28(float16_t) Constant 14336
-             517: 29(f16vec2) ConstantComposite 516 516
-             519:     33(int) Constant 2
-             520:             TypeArray 28(float16_t) 519
-             521:             TypeArray 406 519
-          522(S):             TypeStruct 28(float16_t) 29(f16vec2) 151(f16vec3)
-             523:             TypeArray 522(S) 519
-         524(B1):             TypeStruct 28(float16_t) 29(f16vec2) 151(f16vec3) 520 406 521 522(S) 523
-             525:             TypePointer Uniform 524(B1)
-             526:    525(ptr) Variable Uniform
-             527:             TypeArray 28(float16_t) 519
-             528:             TypeArray 406 519
-          529(S):             TypeStruct 28(float16_t) 29(f16vec2) 151(f16vec3)
-             530:             TypeArray 529(S) 519
-         531(B2):             TypeStruct 28(float16_t) 29(f16vec2) 151(f16vec3) 527 406 528 529(S) 530
-             532:             TypePointer Uniform 531(B2)
-             533:    532(ptr) Variable Uniform
-       534(sf16):28(float16_t) SpecConstant 12288
-         535(sf):  164(float) SpecConstant 1048576000
-         536(sd):172(float64_t) SpecConstant 0 1071644672
-   537(f16_to_f):  164(float) SpecConstantOp 115 534(sf16)
-             538:  164(float) SpecConstantOp 115 534(sf16)
-   539(f16_to_d):172(float64_t) SpecConstantOp 115 538
-   540(f_to_f16):28(float16_t) SpecConstantOp 115 535(sf)
-   541(d_to_f16):28(float16_t) SpecConstantOp 115 536(sd)
+             179:             TypeInt 32 1
+             180:             TypeVector 179(int) 3
+             181:             TypePointer Function 180(ivec3)
+             187:             TypeVector 33(int) 3
+             188:             TypePointer Function 187(ivec3)
+             194:             TypeInt 64 1
+             195:             TypeVector 194(int64_t) 3
+             196:             TypePointer Function 195(i64vec3)
+             202:             TypeInt 64 0
+             203:             TypeVector 202(int64_t) 3
+             204:             TypePointer Function 203(i64vec3)
+             210:             TypeVector 28(float16_t) 4
+             211:             TypePointer Function 210(f16vec4)
+    290(ResType):             TypeStruct 151(f16vec3) 151(f16vec3)
+    363(ResType):             TypeStruct 151(f16vec3) 180(ivec3)
+             370:             TypePointer Function 33(int)
+             405:             TypeMatrix 151(f16vec3) 2
+             406:             TypePointer Function 405
+             424:             TypeMatrix 29(f16vec2) 3
+             425:             TypePointer Function 424
+             430:             TypeMatrix 151(f16vec3) 3
+             431:             TypePointer Function 430
+             435:             TypeMatrix 210(f16vec4) 4
+             436:             TypePointer Function 435
+             463:             TypePointer Input 151(f16vec3)
+      464(if16v):    463(ptr) Variable Input
+             465:             TypePointer Input 28(float16_t)
+             508:    179(int) Constant 1
+             515:28(float16_t) Constant 14336
+             516: 29(f16vec2) ConstantComposite 515 515
+             518:     33(int) Constant 2
+             519:             TypeArray 28(float16_t) 518
+             520:             TypeArray 405 518
+          521(S):             TypeStruct 28(float16_t) 29(f16vec2) 151(f16vec3)
+             522:             TypeArray 521(S) 518
+         523(B1):             TypeStruct 28(float16_t) 29(f16vec2) 151(f16vec3) 519 405 520 521(S) 522
+             524:             TypePointer Uniform 523(B1)
+             525:    524(ptr) Variable Uniform
+             526:             TypeArray 28(float16_t) 518
+             527:             TypeArray 405 518
+          528(S):             TypeStruct 28(float16_t) 29(f16vec2) 151(f16vec3)
+             529:             TypeArray 528(S) 518
+         530(B2):             TypeStruct 28(float16_t) 29(f16vec2) 151(f16vec3) 526 405 527 528(S) 529
+             531:             TypePointer Uniform 530(B2)
+             532:    531(ptr) Variable Uniform
+       533(sf16):28(float16_t) SpecConstant 12288
+         534(sf):  164(float) SpecConstant 1048576000
+         535(sd):172(float64_t) SpecConstant 0 1071644672
+   536(f16_to_f):  164(float) SpecConstantOp 115 533(sf16)
+             537:  164(float) SpecConstantOp 115 533(sf16)
+   538(f16_to_d):172(float64_t) SpecConstantOp 115 537
+   539(f_to_f16):28(float16_t) SpecConstantOp 115 534(sf)
+   540(d_to_f16):28(float16_t) SpecConstantOp 115 535(sd)
          4(main):           2 Function None 3
                5:             Label
                               Return
@@ -396,10 +398,10 @@
          156(bv):    155(ptr) Variable Function
          167(fv):    166(ptr) Variable Function
          175(dv):    174(ptr) Variable Function
-         186(iv):    185(ptr) Variable Function
-         193(uv):    192(ptr) Variable Function
-       201(i64v):    200(ptr) Variable Function
-       209(u64v):    208(ptr) Variable Function
+         182(iv):    181(ptr) Variable Function
+         189(uv):    188(ptr) Variable Function
+       197(i64v):    196(ptr) Variable Function
+       205(u64v):    204(ptr) Variable Function
              157:  154(bvec3) Load 156(bv)
              161:151(f16vec3) Select 157 160 159
                               Store 153(f16v) 161
@@ -416,442 +418,441 @@
              177:151(f16vec3) FConvert 176
                               Store 153(f16v) 177
              178:173(f64vec3) Load 175(dv)
-             179:172(float64_t) CompositeExtract 178 0
-             180:172(float64_t) CompositeExtract 178 1
-             181:172(float64_t) CompositeExtract 178 2
-             182:173(f64vec3) CompositeConstruct 179 180 181
-                              Store 175(dv) 182
-             187:  184(ivec3) Load 186(iv)
-             188:151(f16vec3) ConvertSToF 187
-                              Store 153(f16v) 188
-             189:151(f16vec3) Load 153(f16v)
-             190:  184(ivec3) ConvertFToS 189
-                              Store 186(iv) 190
-             194:  191(ivec3) Load 193(uv)
-             195:151(f16vec3) ConvertUToF 194
-                              Store 153(f16v) 195
-             196:151(f16vec3) Load 153(f16v)
-             197:  191(ivec3) ConvertFToU 196
-                              Store 193(uv) 197
-             202:199(i64vec3) Load 201(i64v)
-             203:151(f16vec3) ConvertSToF 202
-                              Store 153(f16v) 203
-             204:151(f16vec3) Load 153(f16v)
-             205:199(i64vec3) ConvertFToS 204
-                              Store 201(i64v) 205
-             210:207(i64vec3) Load 209(u64v)
-             211:151(f16vec3) ConvertUToF 210
-                              Store 153(f16v) 211
-             212:151(f16vec3) Load 153(f16v)
-             213:207(i64vec3) ConvertFToU 212
-                              Store 209(u64v) 213
+                              Store 175(dv) 178
+             183:  180(ivec3) Load 182(iv)
+             184:151(f16vec3) ConvertSToF 183
+                              Store 153(f16v) 184
+             185:151(f16vec3) Load 153(f16v)
+             186:  180(ivec3) ConvertFToS 185
+                              Store 182(iv) 186
+             190:  187(ivec3) Load 189(uv)
+             191:151(f16vec3) ConvertUToF 190
+                              Store 153(f16v) 191
+             192:151(f16vec3) Load 153(f16v)
+             193:  187(ivec3) ConvertFToU 192
+                              Store 189(uv) 193
+             198:195(i64vec3) Load 197(i64v)
+             199:151(f16vec3) ConvertSToF 198
+                              Store 153(f16v) 199
+             200:151(f16vec3) Load 153(f16v)
+             201:195(i64vec3) ConvertFToS 200
+                              Store 197(i64v) 201
+             206:203(i64vec3) Load 205(u64v)
+             207:151(f16vec3) ConvertUToF 206
+                              Store 153(f16v) 207
+             208:151(f16vec3) Load 153(f16v)
+             209:203(i64vec3) ConvertFToU 208
+                              Store 205(u64v) 209
                               Return
                               FunctionEnd
 12(builtinAngleTrigFuncs():           2 Function None 3
               13:             Label
-      216(f16v2):    215(ptr) Variable Function
-      217(f16v1):    215(ptr) Variable Function
-             218:214(f16vec4) Load 217(f16v1)
-             219:214(f16vec4) ExtInst 1(GLSL.std.450) 11(Radians) 218
-                              Store 216(f16v2) 219
-             220:214(f16vec4) Load 217(f16v1)
-             221:214(f16vec4) ExtInst 1(GLSL.std.450) 12(Degrees) 220
-                              Store 216(f16v2) 221
-             222:214(f16vec4) Load 217(f16v1)
-             223:214(f16vec4) ExtInst 1(GLSL.std.450) 13(Sin) 222
-                              Store 216(f16v2) 223
-             224:214(f16vec4) Load 217(f16v1)
-             225:214(f16vec4) ExtInst 1(GLSL.std.450) 14(Cos) 224
-                              Store 216(f16v2) 225
-             226:214(f16vec4) Load 217(f16v1)
-             227:214(f16vec4) ExtInst 1(GLSL.std.450) 15(Tan) 226
-                              Store 216(f16v2) 227
-             228:214(f16vec4) Load 217(f16v1)
-             229:214(f16vec4) ExtInst 1(GLSL.std.450) 16(Asin) 228
-                              Store 216(f16v2) 229
-             230:214(f16vec4) Load 217(f16v1)
-             231:214(f16vec4) ExtInst 1(GLSL.std.450) 17(Acos) 230
-                              Store 216(f16v2) 231
-             232:214(f16vec4) Load 217(f16v1)
-             233:214(f16vec4) Load 216(f16v2)
-             234:214(f16vec4) ExtInst 1(GLSL.std.450) 25(Atan2) 232 233
-                              Store 216(f16v2) 234
-             235:214(f16vec4) Load 217(f16v1)
-             236:214(f16vec4) ExtInst 1(GLSL.std.450) 18(Atan) 235
-                              Store 216(f16v2) 236
-             237:214(f16vec4) Load 217(f16v1)
-             238:214(f16vec4) ExtInst 1(GLSL.std.450) 19(Sinh) 237
-                              Store 216(f16v2) 238
-             239:214(f16vec4) Load 217(f16v1)
-             240:214(f16vec4) ExtInst 1(GLSL.std.450) 20(Cosh) 239
-                              Store 216(f16v2) 240
-             241:214(f16vec4) Load 217(f16v1)
-             242:214(f16vec4) ExtInst 1(GLSL.std.450) 21(Tanh) 241
-                              Store 216(f16v2) 242
-             243:214(f16vec4) Load 217(f16v1)
-             244:214(f16vec4) ExtInst 1(GLSL.std.450) 22(Asinh) 243
-                              Store 216(f16v2) 244
-             245:214(f16vec4) Load 217(f16v1)
-             246:214(f16vec4) ExtInst 1(GLSL.std.450) 23(Acosh) 245
-                              Store 216(f16v2) 246
-             247:214(f16vec4) Load 217(f16v1)
-             248:214(f16vec4) ExtInst 1(GLSL.std.450) 24(Atanh) 247
-                              Store 216(f16v2) 248
+      212(f16v2):    211(ptr) Variable Function
+      213(f16v1):    211(ptr) Variable Function
+             214:210(f16vec4) Load 213(f16v1)
+             215:210(f16vec4) ExtInst 1(GLSL.std.450) 11(Radians) 214
+                              Store 212(f16v2) 215
+             216:210(f16vec4) Load 213(f16v1)
+             217:210(f16vec4) ExtInst 1(GLSL.std.450) 12(Degrees) 216
+                              Store 212(f16v2) 217
+             218:210(f16vec4) Load 213(f16v1)
+             219:210(f16vec4) ExtInst 1(GLSL.std.450) 13(Sin) 218
+                              Store 212(f16v2) 219
+             220:210(f16vec4) Load 213(f16v1)
+             221:210(f16vec4) ExtInst 1(GLSL.std.450) 14(Cos) 220
+                              Store 212(f16v2) 221
+             222:210(f16vec4) Load 213(f16v1)
+             223:210(f16vec4) ExtInst 1(GLSL.std.450) 15(Tan) 222
+                              Store 212(f16v2) 223
+             224:210(f16vec4) Load 213(f16v1)
+             225:210(f16vec4) ExtInst 1(GLSL.std.450) 16(Asin) 224
+                              Store 212(f16v2) 225
+             226:210(f16vec4) Load 213(f16v1)
+             227:210(f16vec4) ExtInst 1(GLSL.std.450) 17(Acos) 226
+                              Store 212(f16v2) 227
+             228:210(f16vec4) Load 213(f16v1)
+             229:210(f16vec4) Load 212(f16v2)
+             230:210(f16vec4) ExtInst 1(GLSL.std.450) 25(Atan2) 228 229
+                              Store 212(f16v2) 230
+             231:210(f16vec4) Load 213(f16v1)
+             232:210(f16vec4) ExtInst 1(GLSL.std.450) 18(Atan) 231
+                              Store 212(f16v2) 232
+             233:210(f16vec4) Load 213(f16v1)
+             234:210(f16vec4) ExtInst 1(GLSL.std.450) 19(Sinh) 233
+                              Store 212(f16v2) 234
+             235:210(f16vec4) Load 213(f16v1)
+             236:210(f16vec4) ExtInst 1(GLSL.std.450) 20(Cosh) 235
+                              Store 212(f16v2) 236
+             237:210(f16vec4) Load 213(f16v1)
+             238:210(f16vec4) ExtInst 1(GLSL.std.450) 21(Tanh) 237
+                              Store 212(f16v2) 238
+             239:210(f16vec4) Load 213(f16v1)
+             240:210(f16vec4) ExtInst 1(GLSL.std.450) 22(Asinh) 239
+                              Store 212(f16v2) 240
+             241:210(f16vec4) Load 213(f16v1)
+             242:210(f16vec4) ExtInst 1(GLSL.std.450) 23(Acosh) 241
+                              Store 212(f16v2) 242
+             243:210(f16vec4) Load 213(f16v1)
+             244:210(f16vec4) ExtInst 1(GLSL.std.450) 24(Atanh) 243
+                              Store 212(f16v2) 244
                               Return
                               FunctionEnd
 14(builtinExpFuncs():           2 Function None 3
               15:             Label
-      249(f16v2):     30(ptr) Variable Function
-      250(f16v1):     30(ptr) Variable Function
-             251: 29(f16vec2) Load 250(f16v1)
-             252: 29(f16vec2) Load 249(f16v2)
-             253: 29(f16vec2) ExtInst 1(GLSL.std.450) 26(Pow) 251 252
-                              Store 249(f16v2) 253
-             254: 29(f16vec2) Load 250(f16v1)
-             255: 29(f16vec2) ExtInst 1(GLSL.std.450) 27(Exp) 254
-                              Store 249(f16v2) 255
-             256: 29(f16vec2) Load 250(f16v1)
-             257: 29(f16vec2) ExtInst 1(GLSL.std.450) 28(Log) 256
-                              Store 249(f16v2) 257
-             258: 29(f16vec2) Load 250(f16v1)
-             259: 29(f16vec2) ExtInst 1(GLSL.std.450) 29(Exp2) 258
-                              Store 249(f16v2) 259
-             260: 29(f16vec2) Load 250(f16v1)
-             261: 29(f16vec2) ExtInst 1(GLSL.std.450) 30(Log2) 260
-                              Store 249(f16v2) 261
-             262: 29(f16vec2) Load 250(f16v1)
-             263: 29(f16vec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 262
-                              Store 249(f16v2) 263
-             264: 29(f16vec2) Load 250(f16v1)
-             265: 29(f16vec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 264
-                              Store 249(f16v2) 265
+      245(f16v2):     30(ptr) Variable Function
+      246(f16v1):     30(ptr) Variable Function
+             247: 29(f16vec2) Load 246(f16v1)
+             248: 29(f16vec2) Load 245(f16v2)
+             249: 29(f16vec2) ExtInst 1(GLSL.std.450) 26(Pow) 247 248
+                              Store 245(f16v2) 249
+             250: 29(f16vec2) Load 246(f16v1)
+             251: 29(f16vec2) ExtInst 1(GLSL.std.450) 27(Exp) 250
+                              Store 245(f16v2) 251
+             252: 29(f16vec2) Load 246(f16v1)
+             253: 29(f16vec2) ExtInst 1(GLSL.std.450) 28(Log) 252
+                              Store 245(f16v2) 253
+             254: 29(f16vec2) Load 246(f16v1)
+             255: 29(f16vec2) ExtInst 1(GLSL.std.450) 29(Exp2) 254
+                              Store 245(f16v2) 255
+             256: 29(f16vec2) Load 246(f16v1)
+             257: 29(f16vec2) ExtInst 1(GLSL.std.450) 30(Log2) 256
+                              Store 245(f16v2) 257
+             258: 29(f16vec2) Load 246(f16v1)
+             259: 29(f16vec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 258
+                              Store 245(f16v2) 259
+             260: 29(f16vec2) Load 246(f16v1)
+             261: 29(f16vec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 260
+                              Store 245(f16v2) 261
                               Return
                               FunctionEnd
 16(builtinCommonFuncs():           2 Function None 3
               17:             Label
-      266(f16v2):    152(ptr) Variable Function
-      267(f16v1):    152(ptr) Variable Function
-        288(f16):     35(ptr) Variable Function
-      292(f16v3):    152(ptr) Variable Function
-         332(bv):    155(ptr) Variable Function
-          353(b):    110(ptr) Variable Function
-         363(iv):    185(ptr) Variable Function
-             268:151(f16vec3) Load 267(f16v1)
-             269:151(f16vec3) ExtInst 1(GLSL.std.450) 4(FAbs) 268
-                              Store 266(f16v2) 269
-             270:151(f16vec3) Load 267(f16v1)
-             271:151(f16vec3) ExtInst 1(GLSL.std.450) 6(FSign) 270
-                              Store 266(f16v2) 271
-             272:151(f16vec3) Load 267(f16v1)
-             273:151(f16vec3) ExtInst 1(GLSL.std.450) 8(Floor) 272
-                              Store 266(f16v2) 273
-             274:151(f16vec3) Load 267(f16v1)
-             275:151(f16vec3) ExtInst 1(GLSL.std.450) 3(Trunc) 274
-                              Store 266(f16v2) 275
-             276:151(f16vec3) Load 267(f16v1)
-             277:151(f16vec3) ExtInst 1(GLSL.std.450) 1(Round) 276
-                              Store 266(f16v2) 277
-             278:151(f16vec3) Load 267(f16v1)
-             279:151(f16vec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 278
-                              Store 266(f16v2) 279
-             280:151(f16vec3) Load 267(f16v1)
-             281:151(f16vec3) ExtInst 1(GLSL.std.450) 9(Ceil) 280
-                              Store 266(f16v2) 281
-             282:151(f16vec3) Load 267(f16v1)
-             283:151(f16vec3) ExtInst 1(GLSL.std.450) 10(Fract) 282
-                              Store 266(f16v2) 283
-             284:151(f16vec3) Load 267(f16v1)
-             285:151(f16vec3) Load 266(f16v2)
-             286:151(f16vec3) FMod 284 285
-                              Store 266(f16v2) 286
-             287:151(f16vec3) Load 267(f16v1)
-             289:28(float16_t) Load 288(f16)
-             290:151(f16vec3) CompositeConstruct 289 289 289
-             291:151(f16vec3) FMod 287 290
-                              Store 266(f16v2) 291
-             293:151(f16vec3) Load 267(f16v1)
-             294:151(f16vec3) ExtInst 1(GLSL.std.450) 35(Modf) 293 266(f16v2)
-                              Store 292(f16v3) 294
-             295:151(f16vec3) Load 267(f16v1)
-             296:151(f16vec3) Load 266(f16v2)
-             297:151(f16vec3) ExtInst 1(GLSL.std.450) 37(FMin) 295 296
-                              Store 292(f16v3) 297
-             298:151(f16vec3) Load 267(f16v1)
-             299:28(float16_t) Load 288(f16)
-             300:151(f16vec3) CompositeConstruct 299 299 299
-             301:151(f16vec3) ExtInst 1(GLSL.std.450) 37(FMin) 298 300
-                              Store 292(f16v3) 301
-             302:151(f16vec3) Load 267(f16v1)
-             303:151(f16vec3) Load 266(f16v2)
-             304:151(f16vec3) ExtInst 1(GLSL.std.450) 40(FMax) 302 303
-                              Store 292(f16v3) 304
-             305:151(f16vec3) Load 267(f16v1)
-             306:28(float16_t) Load 288(f16)
-             307:151(f16vec3) CompositeConstruct 306 306 306
-             308:151(f16vec3) ExtInst 1(GLSL.std.450) 40(FMax) 305 307
-                              Store 292(f16v3) 308
-             309:151(f16vec3) Load 267(f16v1)
-             310:28(float16_t) Load 288(f16)
-             311:     35(ptr) AccessChain 266(f16v2) 34
-             312:28(float16_t) Load 311
-             313:151(f16vec3) CompositeConstruct 310 310 310
-             314:151(f16vec3) CompositeConstruct 312 312 312
-             315:151(f16vec3) ExtInst 1(GLSL.std.450) 43(FClamp) 309 313 314
-                              Store 292(f16v3) 315
-             316:151(f16vec3) Load 267(f16v1)
-             317:151(f16vec3) Load 266(f16v2)
-             318:28(float16_t) Load 288(f16)
-             319:151(f16vec3) CompositeConstruct 318 318 318
-             320:151(f16vec3) ExtInst 1(GLSL.std.450) 43(FClamp) 316 317 319
-                              Store 292(f16v3) 320
-             321:151(f16vec3) Load 267(f16v1)
-             322:151(f16vec3) Load 266(f16v2)
-             323:28(float16_t) Load 288(f16)
-             324:151(f16vec3) CompositeConstruct 323 323 323
-             325:151(f16vec3) ExtInst 1(GLSL.std.450) 46(FMix) 321 322 324
-                              Store 292(f16v3) 325
-             326:151(f16vec3) Load 267(f16v1)
-             327:151(f16vec3) Load 266(f16v2)
-             328:151(f16vec3) Load 292(f16v3)
-             329:151(f16vec3) ExtInst 1(GLSL.std.450) 46(FMix) 326 327 328
-                              Store 292(f16v3) 329
-             330:151(f16vec3) Load 267(f16v1)
-             331:151(f16vec3) Load 266(f16v2)
-             333:  154(bvec3) Load 332(bv)
-             334:151(f16vec3) Select 333 331 330
-                              Store 292(f16v3) 334
-             335:151(f16vec3) Load 267(f16v1)
-             336:151(f16vec3) Load 266(f16v2)
-             337:151(f16vec3) ExtInst 1(GLSL.std.450) 48(Step) 335 336
-                              Store 292(f16v3) 337
-             338:28(float16_t) Load 288(f16)
-             339:151(f16vec3) Load 292(f16v3)
-             340:151(f16vec3) CompositeConstruct 338 338 338
-             341:151(f16vec3) ExtInst 1(GLSL.std.450) 48(Step) 340 339
-                              Store 292(f16v3) 341
-             342:151(f16vec3) Load 267(f16v1)
-             343:151(f16vec3) Load 266(f16v2)
-             344:151(f16vec3) Load 292(f16v3)
-             345:151(f16vec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 342 343 344
-                              Store 292(f16v3) 345
-             346:28(float16_t) Load 288(f16)
-             347:     35(ptr) AccessChain 267(f16v1) 34
-             348:28(float16_t) Load 347
-             349:151(f16vec3) Load 266(f16v2)
-             350:151(f16vec3) CompositeConstruct 346 346 346
-             351:151(f16vec3) CompositeConstruct 348 348 348
-             352:151(f16vec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 350 351 349
-                              Store 292(f16v3) 352
-             354:28(float16_t) Load 288(f16)
-             355:   109(bool) IsNan 354
-                              Store 353(b) 355
-             356:151(f16vec3) Load 267(f16v1)
-             357:  154(bvec3) IsInf 356
-                              Store 332(bv) 357
-             358:151(f16vec3) Load 267(f16v1)
-             359:151(f16vec3) Load 266(f16v2)
-             360:151(f16vec3) Load 292(f16v3)
-             361:151(f16vec3) ExtInst 1(GLSL.std.450) 50(Fma) 358 359 360
-                              Store 292(f16v3) 361
-             362:151(f16vec3) Load 267(f16v1)
-             365:364(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 362
-             366:  184(ivec3) CompositeExtract 365 1
-                              Store 363(iv) 366
-             367:151(f16vec3) CompositeExtract 365 0
-                              Store 266(f16v2) 367
-             368:151(f16vec3) Load 267(f16v1)
-             369:  184(ivec3) Load 363(iv)
-             370:151(f16vec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 368 369
-                              Store 266(f16v2) 370
+      262(f16v2):    152(ptr) Variable Function
+      263(f16v1):    152(ptr) Variable Function
+        284(f16):     35(ptr) Variable Function
+      288(f16v3):    152(ptr) Variable Function
+         331(bv):    155(ptr) Variable Function
+          352(b):    110(ptr) Variable Function
+         362(iv):    181(ptr) Variable Function
+             264:151(f16vec3) Load 263(f16v1)
+             265:151(f16vec3) ExtInst 1(GLSL.std.450) 4(FAbs) 264
+                              Store 262(f16v2) 265
+             266:151(f16vec3) Load 263(f16v1)
+             267:151(f16vec3) ExtInst 1(GLSL.std.450) 6(FSign) 266
+                              Store 262(f16v2) 267
+             268:151(f16vec3) Load 263(f16v1)
+             269:151(f16vec3) ExtInst 1(GLSL.std.450) 8(Floor) 268
+                              Store 262(f16v2) 269
+             270:151(f16vec3) Load 263(f16v1)
+             271:151(f16vec3) ExtInst 1(GLSL.std.450) 3(Trunc) 270
+                              Store 262(f16v2) 271
+             272:151(f16vec3) Load 263(f16v1)
+             273:151(f16vec3) ExtInst 1(GLSL.std.450) 1(Round) 272
+                              Store 262(f16v2) 273
+             274:151(f16vec3) Load 263(f16v1)
+             275:151(f16vec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 274
+                              Store 262(f16v2) 275
+             276:151(f16vec3) Load 263(f16v1)
+             277:151(f16vec3) ExtInst 1(GLSL.std.450) 9(Ceil) 276
+                              Store 262(f16v2) 277
+             278:151(f16vec3) Load 263(f16v1)
+             279:151(f16vec3) ExtInst 1(GLSL.std.450) 10(Fract) 278
+                              Store 262(f16v2) 279
+             280:151(f16vec3) Load 263(f16v1)
+             281:151(f16vec3) Load 262(f16v2)
+             282:151(f16vec3) FMod 280 281
+                              Store 262(f16v2) 282
+             283:151(f16vec3) Load 263(f16v1)
+             285:28(float16_t) Load 284(f16)
+             286:151(f16vec3) CompositeConstruct 285 285 285
+             287:151(f16vec3) FMod 283 286
+                              Store 262(f16v2) 287
+             289:151(f16vec3) Load 263(f16v1)
+             291:290(ResType) ExtInst 1(GLSL.std.450) 36(ModfStruct) 289
+             292:151(f16vec3) CompositeExtract 291 1
+                              Store 262(f16v2) 292
+             293:151(f16vec3) CompositeExtract 291 0
+                              Store 288(f16v3) 293
+             294:151(f16vec3) Load 263(f16v1)
+             295:151(f16vec3) Load 262(f16v2)
+             296:151(f16vec3) ExtInst 1(GLSL.std.450) 37(FMin) 294 295
+                              Store 288(f16v3) 296
+             297:151(f16vec3) Load 263(f16v1)
+             298:28(float16_t) Load 284(f16)
+             299:151(f16vec3) CompositeConstruct 298 298 298
+             300:151(f16vec3) ExtInst 1(GLSL.std.450) 37(FMin) 297 299
+                              Store 288(f16v3) 300
+             301:151(f16vec3) Load 263(f16v1)
+             302:151(f16vec3) Load 262(f16v2)
+             303:151(f16vec3) ExtInst 1(GLSL.std.450) 40(FMax) 301 302
+                              Store 288(f16v3) 303
+             304:151(f16vec3) Load 263(f16v1)
+             305:28(float16_t) Load 284(f16)
+             306:151(f16vec3) CompositeConstruct 305 305 305
+             307:151(f16vec3) ExtInst 1(GLSL.std.450) 40(FMax) 304 306
+                              Store 288(f16v3) 307
+             308:151(f16vec3) Load 263(f16v1)
+             309:28(float16_t) Load 284(f16)
+             310:     35(ptr) AccessChain 262(f16v2) 34
+             311:28(float16_t) Load 310
+             312:151(f16vec3) CompositeConstruct 309 309 309
+             313:151(f16vec3) CompositeConstruct 311 311 311
+             314:151(f16vec3) ExtInst 1(GLSL.std.450) 43(FClamp) 308 312 313
+                              Store 288(f16v3) 314
+             315:151(f16vec3) Load 263(f16v1)
+             316:151(f16vec3) Load 262(f16v2)
+             317:28(float16_t) Load 284(f16)
+             318:151(f16vec3) CompositeConstruct 317 317 317
+             319:151(f16vec3) ExtInst 1(GLSL.std.450) 43(FClamp) 315 316 318
+                              Store 288(f16v3) 319
+             320:151(f16vec3) Load 263(f16v1)
+             321:151(f16vec3) Load 262(f16v2)
+             322:28(float16_t) Load 284(f16)
+             323:151(f16vec3) CompositeConstruct 322 322 322
+             324:151(f16vec3) ExtInst 1(GLSL.std.450) 46(FMix) 320 321 323
+                              Store 288(f16v3) 324
+             325:151(f16vec3) Load 263(f16v1)
+             326:151(f16vec3) Load 262(f16v2)
+             327:151(f16vec3) Load 288(f16v3)
+             328:151(f16vec3) ExtInst 1(GLSL.std.450) 46(FMix) 325 326 327
+                              Store 288(f16v3) 328
+             329:151(f16vec3) Load 263(f16v1)
+             330:151(f16vec3) Load 262(f16v2)
+             332:  154(bvec3) Load 331(bv)
+             333:151(f16vec3) Select 332 330 329
+                              Store 288(f16v3) 333
+             334:151(f16vec3) Load 263(f16v1)
+             335:151(f16vec3) Load 262(f16v2)
+             336:151(f16vec3) ExtInst 1(GLSL.std.450) 48(Step) 334 335
+                              Store 288(f16v3) 336
+             337:28(float16_t) Load 284(f16)
+             338:151(f16vec3) Load 288(f16v3)
+             339:151(f16vec3) CompositeConstruct 337 337 337
+             340:151(f16vec3) ExtInst 1(GLSL.std.450) 48(Step) 339 338
+                              Store 288(f16v3) 340
+             341:151(f16vec3) Load 263(f16v1)
+             342:151(f16vec3) Load 262(f16v2)
+             343:151(f16vec3) Load 288(f16v3)
+             344:151(f16vec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 341 342 343
+                              Store 288(f16v3) 344
+             345:28(float16_t) Load 284(f16)
+             346:     35(ptr) AccessChain 263(f16v1) 34
+             347:28(float16_t) Load 346
+             348:151(f16vec3) Load 262(f16v2)
+             349:151(f16vec3) CompositeConstruct 345 345 345
+             350:151(f16vec3) CompositeConstruct 347 347 347
+             351:151(f16vec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 349 350 348
+                              Store 288(f16v3) 351
+             353:28(float16_t) Load 284(f16)
+             354:   109(bool) IsNan 353
+                              Store 352(b) 354
+             355:151(f16vec3) Load 263(f16v1)
+             356:  154(bvec3) IsInf 355
+                              Store 331(bv) 356
+             357:151(f16vec3) Load 263(f16v1)
+             358:151(f16vec3) Load 262(f16v2)
+             359:151(f16vec3) Load 288(f16v3)
+             360:151(f16vec3) ExtInst 1(GLSL.std.450) 50(Fma) 357 358 359
+                              Store 288(f16v3) 360
+             361:151(f16vec3) Load 263(f16v1)
+             364:363(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 361
+             365:  180(ivec3) CompositeExtract 364 1
+                              Store 362(iv) 365
+             366:151(f16vec3) CompositeExtract 364 0
+                              Store 262(f16v2) 366
+             367:151(f16vec3) Load 263(f16v1)
+             368:  180(ivec3) Load 362(iv)
+             369:151(f16vec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 367 368
+                              Store 262(f16v2) 369
                               Return
                               FunctionEnd
 18(builtinPackUnpackFuncs():           2 Function None 3
               19:             Label
-          372(u):    371(ptr) Variable Function
-       373(f16v):     30(ptr) Variable Function
-             374: 29(f16vec2) Load 373(f16v)
-             375:     33(int) Bitcast 374
-                              Store 372(u) 375
-             376:     33(int) Load 372(u)
-             377: 29(f16vec2) Bitcast 376
-                              Store 373(f16v) 377
+          371(u):    370(ptr) Variable Function
+       372(f16v):     30(ptr) Variable Function
+             373: 29(f16vec2) Load 372(f16v)
+             374:     33(int) Bitcast 373
+                              Store 371(u) 374
+             375:     33(int) Load 371(u)
+             376: 29(f16vec2) Bitcast 375
+                              Store 372(f16v) 376
                               Return
                               FunctionEnd
 20(builtinGeometryFuncs():           2 Function None 3
               21:             Label
-        378(f16):     35(ptr) Variable Function
-      379(f16v1):    152(ptr) Variable Function
-      383(f16v2):    152(ptr) Variable Function
-      389(f16v3):    152(ptr) Variable Function
-             380:151(f16vec3) Load 379(f16v1)
-             381:28(float16_t) ExtInst 1(GLSL.std.450) 66(Length) 380
-                              Store 378(f16) 381
-             382:151(f16vec3) Load 379(f16v1)
-             384:151(f16vec3) Load 383(f16v2)
-             385:28(float16_t) ExtInst 1(GLSL.std.450) 67(Distance) 382 384
-                              Store 378(f16) 385
-             386:151(f16vec3) Load 379(f16v1)
-             387:151(f16vec3) Load 383(f16v2)
-             388:28(float16_t) Dot 386 387
-                              Store 378(f16) 388
-             390:151(f16vec3) Load 379(f16v1)
-             391:151(f16vec3) Load 383(f16v2)
-             392:151(f16vec3) ExtInst 1(GLSL.std.450) 68(Cross) 390 391
-                              Store 389(f16v3) 392
-             393:151(f16vec3) Load 379(f16v1)
-             394:151(f16vec3) ExtInst 1(GLSL.std.450) 69(Normalize) 393
-                              Store 383(f16v2) 394
-             395:151(f16vec3) Load 379(f16v1)
-             396:151(f16vec3) Load 383(f16v2)
-             397:151(f16vec3) Load 389(f16v3)
-             398:151(f16vec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 395 396 397
-                              Store 389(f16v3) 398
-             399:151(f16vec3) Load 379(f16v1)
-             400:151(f16vec3) Load 383(f16v2)
-             401:151(f16vec3) ExtInst 1(GLSL.std.450) 71(Reflect) 399 400
-                              Store 389(f16v3) 401
-             402:151(f16vec3) Load 379(f16v1)
-             403:151(f16vec3) Load 383(f16v2)
-             404:28(float16_t) Load 378(f16)
-             405:151(f16vec3) ExtInst 1(GLSL.std.450) 72(Refract) 402 403 404
-                              Store 389(f16v3) 405
+        377(f16):     35(ptr) Variable Function
+      378(f16v1):    152(ptr) Variable Function
+      382(f16v2):    152(ptr) Variable Function
+      388(f16v3):    152(ptr) Variable Function
+             379:151(f16vec3) Load 378(f16v1)
+             380:28(float16_t) ExtInst 1(GLSL.std.450) 66(Length) 379
+                              Store 377(f16) 380
+             381:151(f16vec3) Load 378(f16v1)
+             383:151(f16vec3) Load 382(f16v2)
+             384:28(float16_t) ExtInst 1(GLSL.std.450) 67(Distance) 381 383
+                              Store 377(f16) 384
+             385:151(f16vec3) Load 378(f16v1)
+             386:151(f16vec3) Load 382(f16v2)
+             387:28(float16_t) Dot 385 386
+                              Store 377(f16) 387
+             389:151(f16vec3) Load 378(f16v1)
+             390:151(f16vec3) Load 382(f16v2)
+             391:151(f16vec3) ExtInst 1(GLSL.std.450) 68(Cross) 389 390
+                              Store 388(f16v3) 391
+             392:151(f16vec3) Load 378(f16v1)
+             393:151(f16vec3) ExtInst 1(GLSL.std.450) 69(Normalize) 392
+                              Store 382(f16v2) 393
+             394:151(f16vec3) Load 378(f16v1)
+             395:151(f16vec3) Load 382(f16v2)
+             396:151(f16vec3) Load 388(f16v3)
+             397:151(f16vec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 394 395 396
+                              Store 388(f16v3) 397
+             398:151(f16vec3) Load 378(f16v1)
+             399:151(f16vec3) Load 382(f16v2)
+             400:151(f16vec3) ExtInst 1(GLSL.std.450) 71(Reflect) 398 399
+                              Store 388(f16v3) 400
+             401:151(f16vec3) Load 378(f16v1)
+             402:151(f16vec3) Load 382(f16v2)
+             403:28(float16_t) Load 377(f16)
+             404:151(f16vec3) ExtInst 1(GLSL.std.450) 72(Refract) 401 402 403
+                              Store 388(f16v3) 404
                               Return
                               FunctionEnd
 22(builtinMatrixFuncs():           2 Function None 3
               23:             Label
-      408(f16m3):    407(ptr) Variable Function
-      409(f16m1):    407(ptr) Variable Function
-      411(f16m2):    407(ptr) Variable Function
-      420(f16v1):    152(ptr) Variable Function
-      422(f16v2):     30(ptr) Variable Function
-      427(f16m4):    426(ptr) Variable Function
-        430(f16):     35(ptr) Variable Function
-      433(f16m5):    432(ptr) Variable Function
-      438(f16m6):    437(ptr) Variable Function
-      439(f16m7):    437(ptr) Variable Function
-             410:         406 Load 409(f16m1)
-             412:         406 Load 411(f16m2)
-             413:151(f16vec3) CompositeExtract 410 0
-             414:151(f16vec3) CompositeExtract 412 0
-             415:151(f16vec3) FMul 413 414
-             416:151(f16vec3) CompositeExtract 410 1
-             417:151(f16vec3) CompositeExtract 412 1
-             418:151(f16vec3) FMul 416 417
-             419:         406 CompositeConstruct 415 418
-                              Store 408(f16m3) 419
-             421:151(f16vec3) Load 420(f16v1)
-             423: 29(f16vec2) Load 422(f16v2)
-             424:         406 OuterProduct 421 423
-                              Store 409(f16m1) 424
-             428:         406 Load 409(f16m1)
-             429:         425 Transpose 428
-                              Store 427(f16m4) 429
-             434:         431 Load 433(f16m5)
-             435:28(float16_t) ExtInst 1(GLSL.std.450) 33(Determinant) 434
-                              Store 430(f16) 435
-             440:         436 Load 439(f16m7)
-             441:         436 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 440
-                              Store 438(f16m6) 441
+      407(f16m3):    406(ptr) Variable Function
+      408(f16m1):    406(ptr) Variable Function
+      410(f16m2):    406(ptr) Variable Function
+      419(f16v1):    152(ptr) Variable Function
+      421(f16v2):     30(ptr) Variable Function
+      426(f16m4):    425(ptr) Variable Function
+        429(f16):     35(ptr) Variable Function
+      432(f16m5):    431(ptr) Variable Function
+      437(f16m6):    436(ptr) Variable Function
+      438(f16m7):    436(ptr) Variable Function
+             409:         405 Load 408(f16m1)
+             411:         405 Load 410(f16m2)
+             412:151(f16vec3) CompositeExtract 409 0
+             413:151(f16vec3) CompositeExtract 411 0
+             414:151(f16vec3) FMul 412 413
+             415:151(f16vec3) CompositeExtract 409 1
+             416:151(f16vec3) CompositeExtract 411 1
+             417:151(f16vec3) FMul 415 416
+             418:         405 CompositeConstruct 414 417
+                              Store 407(f16m3) 418
+             420:151(f16vec3) Load 419(f16v1)
+             422: 29(f16vec2) Load 421(f16v2)
+             423:         405 OuterProduct 420 422
+                              Store 408(f16m1) 423
+             427:         405 Load 408(f16m1)
+             428:         424 Transpose 427
+                              Store 426(f16m4) 428
+             433:         430 Load 432(f16m5)
+             434:28(float16_t) ExtInst 1(GLSL.std.450) 33(Determinant) 433
+                              Store 429(f16) 434
+             439:         435 Load 438(f16m7)
+             440:         435 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 439
+                              Store 437(f16m6) 440
                               Return
                               FunctionEnd
 24(builtinVecRelFuncs():           2 Function None 3
               25:             Label
-         442(bv):    155(ptr) Variable Function
-      443(f16v1):    152(ptr) Variable Function
-      445(f16v2):    152(ptr) Variable Function
-             444:151(f16vec3) Load 443(f16v1)
-             446:151(f16vec3) Load 445(f16v2)
-             447:  154(bvec3) FOrdLessThan 444 446
-                              Store 442(bv) 447
-             448:151(f16vec3) Load 443(f16v1)
-             449:151(f16vec3) Load 445(f16v2)
-             450:  154(bvec3) FOrdLessThanEqual 448 449
-                              Store 442(bv) 450
-             451:151(f16vec3) Load 443(f16v1)
-             452:151(f16vec3) Load 445(f16v2)
-             453:  154(bvec3) FOrdGreaterThan 451 452
-                              Store 442(bv) 453
-             454:151(f16vec3) Load 443(f16v1)
-             455:151(f16vec3) Load 445(f16v2)
-             456:  154(bvec3) FOrdGreaterThanEqual 454 455
-                              Store 442(bv) 456
-             457:151(f16vec3) Load 443(f16v1)
-             458:151(f16vec3) Load 445(f16v2)
-             459:  154(bvec3) FOrdEqual 457 458
-                              Store 442(bv) 459
-             460:151(f16vec3) Load 443(f16v1)
-             461:151(f16vec3) Load 445(f16v2)
-             462:  154(bvec3) FUnordNotEqual 460 461
-                              Store 442(bv) 462
+         441(bv):    155(ptr) Variable Function
+      442(f16v1):    152(ptr) Variable Function
+      444(f16v2):    152(ptr) Variable Function
+             443:151(f16vec3) Load 442(f16v1)
+             445:151(f16vec3) Load 444(f16v2)
+             446:  154(bvec3) FOrdLessThan 443 445
+                              Store 441(bv) 446
+             447:151(f16vec3) Load 442(f16v1)
+             448:151(f16vec3) Load 444(f16v2)
+             449:  154(bvec3) FOrdLessThanEqual 447 448
+                              Store 441(bv) 449
+             450:151(f16vec3) Load 442(f16v1)
+             451:151(f16vec3) Load 444(f16v2)
+             452:  154(bvec3) FOrdGreaterThan 450 451
+                              Store 441(bv) 452
+             453:151(f16vec3) Load 442(f16v1)
+             454:151(f16vec3) Load 444(f16v2)
+             455:  154(bvec3) FOrdGreaterThanEqual 453 454
+                              Store 441(bv) 455
+             456:151(f16vec3) Load 442(f16v1)
+             457:151(f16vec3) Load 444(f16v2)
+             458:  154(bvec3) FOrdEqual 456 457
+                              Store 441(bv) 458
+             459:151(f16vec3) Load 442(f16v1)
+             460:151(f16vec3) Load 444(f16v2)
+             461:  154(bvec3) FUnordNotEqual 459 460
+                              Store 441(bv) 461
                               Return
                               FunctionEnd
 26(builtinFragProcFuncs():           2 Function None 3
               27:             Label
-       463(f16v):    152(ptr) Variable Function
-             467:    466(ptr) AccessChain 465(if16v) 34
-             468:28(float16_t) Load 467
-             469:28(float16_t) DPdx 468
-             470:     35(ptr) AccessChain 463(f16v) 34
-                              Store 470 469
-             471:    466(ptr) AccessChain 465(if16v) 90
-             472:28(float16_t) Load 471
-             473:28(float16_t) DPdy 472
-             474:     35(ptr) AccessChain 463(f16v) 90
-                              Store 474 473
-             475:151(f16vec3) Load 465(if16v)
-             476: 29(f16vec2) VectorShuffle 475 475 0 1
-             477: 29(f16vec2) DPdxFine 476
-             478:     35(ptr) AccessChain 463(f16v) 34
-             479:28(float16_t) CompositeExtract 477 0
-                              Store 478 479
-             480:     35(ptr) AccessChain 463(f16v) 90
-             481:28(float16_t) CompositeExtract 477 1
-                              Store 480 481
-             482:151(f16vec3) Load 465(if16v)
-             483: 29(f16vec2) VectorShuffle 482 482 0 1
-             484: 29(f16vec2) DPdyFine 483
-             485:     35(ptr) AccessChain 463(f16v) 34
-             486:28(float16_t) CompositeExtract 484 0
-                              Store 485 486
-             487:     35(ptr) AccessChain 463(f16v) 90
-             488:28(float16_t) CompositeExtract 484 1
-                              Store 487 488
-             489:151(f16vec3) Load 465(if16v)
-             490:151(f16vec3) DPdxCoarse 489
-                              Store 463(f16v) 490
-             491:151(f16vec3) Load 465(if16v)
-             492:151(f16vec3) DPdxCoarse 491
-                              Store 463(f16v) 492
-             493:    466(ptr) AccessChain 465(if16v) 34
-             494:28(float16_t) Load 493
-             495:28(float16_t) Fwidth 494
-             496:     35(ptr) AccessChain 463(f16v) 34
-                              Store 496 495
-             497:151(f16vec3) Load 465(if16v)
-             498: 29(f16vec2) VectorShuffle 497 497 0 1
-             499: 29(f16vec2) FwidthFine 498
-             500:     35(ptr) AccessChain 463(f16v) 34
-             501:28(float16_t) CompositeExtract 499 0
-                              Store 500 501
-             502:     35(ptr) AccessChain 463(f16v) 90
-             503:28(float16_t) CompositeExtract 499 1
-                              Store 502 503
-             504:151(f16vec3) Load 465(if16v)
-             505:151(f16vec3) FwidthCoarse 504
-                              Store 463(f16v) 505
-             506:    466(ptr) AccessChain 465(if16v) 34
-             507:28(float16_t) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 506
-             508:     35(ptr) AccessChain 463(f16v) 34
-                              Store 508 507
-             510:151(f16vec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 465(if16v) 509
-             511: 29(f16vec2) VectorShuffle 510 510 0 1
-             512:     35(ptr) AccessChain 463(f16v) 34
-             513:28(float16_t) CompositeExtract 511 0
-                              Store 512 513
-             514:     35(ptr) AccessChain 463(f16v) 90
-             515:28(float16_t) CompositeExtract 511 1
-                              Store 514 515
-             518:151(f16vec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 465(if16v) 517
-                              Store 463(f16v) 518
+       462(f16v):    152(ptr) Variable Function
+             466:    465(ptr) AccessChain 464(if16v) 34
+             467:28(float16_t) Load 466
+             468:28(float16_t) DPdx 467
+             469:     35(ptr) AccessChain 462(f16v) 34
+                              Store 469 468
+             470:    465(ptr) AccessChain 464(if16v) 90
+             471:28(float16_t) Load 470
+             472:28(float16_t) DPdy 471
+             473:     35(ptr) AccessChain 462(f16v) 90
+                              Store 473 472
+             474:151(f16vec3) Load 464(if16v)
+             475: 29(f16vec2) VectorShuffle 474 474 0 1
+             476: 29(f16vec2) DPdxFine 475
+             477:     35(ptr) AccessChain 462(f16v) 34
+             478:28(float16_t) CompositeExtract 476 0
+                              Store 477 478
+             479:     35(ptr) AccessChain 462(f16v) 90
+             480:28(float16_t) CompositeExtract 476 1
+                              Store 479 480
+             481:151(f16vec3) Load 464(if16v)
+             482: 29(f16vec2) VectorShuffle 481 481 0 1
+             483: 29(f16vec2) DPdyFine 482
+             484:     35(ptr) AccessChain 462(f16v) 34
+             485:28(float16_t) CompositeExtract 483 0
+                              Store 484 485
+             486:     35(ptr) AccessChain 462(f16v) 90
+             487:28(float16_t) CompositeExtract 483 1
+                              Store 486 487
+             488:151(f16vec3) Load 464(if16v)
+             489:151(f16vec3) DPdxCoarse 488
+                              Store 462(f16v) 489
+             490:151(f16vec3) Load 464(if16v)
+             491:151(f16vec3) DPdxCoarse 490
+                              Store 462(f16v) 491
+             492:    465(ptr) AccessChain 464(if16v) 34
+             493:28(float16_t) Load 492
+             494:28(float16_t) Fwidth 493
+             495:     35(ptr) AccessChain 462(f16v) 34
+                              Store 495 494
+             496:151(f16vec3) Load 464(if16v)
+             497: 29(f16vec2) VectorShuffle 496 496 0 1
+             498: 29(f16vec2) FwidthFine 497
+             499:     35(ptr) AccessChain 462(f16v) 34
+             500:28(float16_t) CompositeExtract 498 0
+                              Store 499 500
+             501:     35(ptr) AccessChain 462(f16v) 90
+             502:28(float16_t) CompositeExtract 498 1
+                              Store 501 502
+             503:151(f16vec3) Load 464(if16v)
+             504:151(f16vec3) FwidthCoarse 503
+                              Store 462(f16v) 504
+             505:    465(ptr) AccessChain 464(if16v) 34
+             506:28(float16_t) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 505
+             507:     35(ptr) AccessChain 462(f16v) 34
+                              Store 507 506
+             509:151(f16vec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 464(if16v) 508
+             510: 29(f16vec2) VectorShuffle 509 509 0 1
+             511:     35(ptr) AccessChain 462(f16v) 34
+             512:28(float16_t) CompositeExtract 510 0
+                              Store 511 512
+             513:     35(ptr) AccessChain 462(f16v) 90
+             514:28(float16_t) CompositeExtract 510 1
+                              Store 513 514
+             517:151(f16vec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 464(if16v) 516
+                              Store 462(f16v) 517
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.float16Fetch.frag.out b/Test/baseResults/spv.float16Fetch.frag.out
index 17eb5b3..cfe2491 100644
--- a/Test/baseResults/spv.float16Fetch.frag.out
+++ b/Test/baseResults/spv.float16Fetch.frag.out
@@ -2,7 +2,7 @@
 Validation failed
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 5979
+// Id's are bound by 5787
 
                               Capability Shader
                               Capability Float16
@@ -29,7 +29,7 @@
                               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 4311 4318 5969 5978
+                              EntryPoint Fragment 4  "main" 128 135 137 148 156 169 177 215 251 309 565 572 1393 1400 1407 1414 1421 1428 4187 4194 5777 5786
                               ExecutionMode 4 OriginUpperLeft
                               Source GLSL 450
                               SourceExtension  "GL_AMD_gpu_shader_half_float"
@@ -130,195 +130,195 @@
                               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 2777  "lod"
-                              Name 2913  "levels"
-                              Name 2982  "samples"
-                              Name 2996  "texel"
-                              Name 2999  "i1D"
-                              Name 3008  "i2D"
-                              Name 3017  "i3D"
-                              Name 3026  "i2DRect"
-                              Name 3035  "iCube"
-                              Name 3044  "iBuffer"
-                              Name 3053  "i1DArray"
-                              Name 3062  "i2DArray"
-                              Name 3071  "iCubeArray"
-                              Name 3080  "i2DMS"
-                              Name 3089  "i2DMSArray"
-                              Name 3143  "texel"
-                              Name 3146  "ResType"
-                              Name 3182  "ResType"
-                              Name 3286  "texel"
+                              Name 1400  "f16dPdxy1"
+                              Name 1407  "dPdxy2"
+                              Name 1414  "f16dPdxy2"
+                              Name 1421  "dPdxy3"
+                              Name 1428  "f16dPdxy3"
+                              Name 1604  "texel"
+                              Name 1770  "texel"
+                              Name 1932  "texel"
+                              Name 2094  "texel"
+                              Name 2213  "texel"
+                              Name 2285  "texel"
+                              Name 2360  "texel"
+                              Name 2412  "texel"
+                              Name 2440  "texel"
+                              Name 2469  "size"
+                              Name 2687  "lod"
+                              Name 2823  "levels"
+                              Name 2892  "samples"
+                              Name 2906  "texel"
+                              Name 2909  "i1D"
+                              Name 2918  "i2D"
+                              Name 2927  "i3D"
+                              Name 2936  "i2DRect"
+                              Name 2945  "iCube"
+                              Name 2954  "iBuffer"
+                              Name 2963  "i1DArray"
+                              Name 2972  "i2DArray"
+                              Name 2981  "iCubeArray"
+                              Name 2990  "i2DMS"
+                              Name 2999  "i2DMSArray"
+                              Name 3053  "texel"
+                              Name 3056  "ResType"
+                              Name 3092  "ResType"
+                              Name 3196  "texel"
+                              Name 3276  "texel"
                               Name 3366  "texel"
-                              Name 3456  "texel"
-                              Name 3512  "texel"
-                              Name 3672  "texel"
-                              Name 3786  "texel"
-                              Name 3838  "texel"
-                              Name 3876  "texel"
-                              Name 3994  "texel"
-                              Name 4066  "texel"
-                              Name 4148  "texel"
-                              Name 4200  "texel"
-                              Name 4228  "texel"
-                              Name 4256  "texel"
-                              Name 4308  "texel"
-                              Name 4311  "lodClamp"
-                              Name 4318  "f16lodClamp"
-                              Name 4445  "texel"
-                              Name 4652  "texel"
-                              Name 4728  "texel"
-                              Name 4872  "texel"
-                              Name 5016  "texel"
-                              Name 5242  "texel"
-                              Name 5334  "texel"
-                              Name 5506  "texel"
-                              Name 5508  "t1D"
-                              Name 5512  "s"
-                              Name 5528  "t2D"
-                              Name 5545  "t3D"
-                              Name 5562  "tCube"
-                              Name 5579  "sShadow"
-                              Name 5643  "t1DArray"
-                              Name 5660  "t2DArray"
-                              Name 5677  "tCubeArray"
-                              Name 5735  "t2DRect"
-                              Name 5795  "subpass"
-                              Name 5801  "subpassMS"
-                              Name 5807  "result"
-                              Name 5890  "param"
-                              Name 5969  "fragColor"
-                              Name 5973  "tBuffer"
-                              Name 5975  "t2DMS"
-                              Name 5977  "t2DMSArray"
-                              Name 5978  "bias"
-                              Decorate 125(s1D) DescriptorSet 0
+                              Name 3422  "texel"
+                              Name 3562  "texel"
+                              Name 3662  "texel"
+                              Name 3714  "texel"
+                              Name 3752  "texel"
+                              Name 3870  "texel"
+                              Name 3942  "texel"
+                              Name 4024  "texel"
+                              Name 4076  "texel"
+                              Name 4104  "texel"
+                              Name 4132  "texel"
+                              Name 4184  "texel"
+                              Name 4187  "lodClamp"
+                              Name 4194  "f16lodClamp"
+                              Name 4321  "texel"
+                              Name 4528  "texel"
+                              Name 4604  "texel"
+                              Name 4748  "texel"
+                              Name 4876  "texel"
+                              Name 5078  "texel"
+                              Name 5160  "texel"
+                              Name 5314  "texel"
+                              Name 5316  "t1D"
+                              Name 5320  "s"
+                              Name 5336  "t2D"
+                              Name 5353  "t3D"
+                              Name 5370  "tCube"
+                              Name 5387  "sShadow"
+                              Name 5451  "t1DArray"
+                              Name 5468  "t2DArray"
+                              Name 5485  "tCubeArray"
+                              Name 5543  "t2DRect"
+                              Name 5603  "subpass"
+                              Name 5609  "subpassMS"
+                              Name 5615  "result"
+                              Name 5698  "param"
+                              Name 5777  "fragColor"
+                              Name 5781  "tBuffer"
+                              Name 5783  "t2DMS"
+                              Name 5785  "t2DMSArray"
+                              Name 5786  "bias"
                               Decorate 125(s1D) Binding 0
+                              Decorate 125(s1D) DescriptorSet 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 145(s2D) DescriptorSet 0
                               Decorate 148(c2) Location 1
                               Decorate 156(f16c2) Location 12
-                              Decorate 165(s3D) DescriptorSet 0
                               Decorate 165(s3D) Binding 2
+                              Decorate 165(s3D) DescriptorSet 0
                               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 186(sCube) DescriptorSet 0
                               Decorate 201(s1DShadow) Binding 11
+                              Decorate 201(s1DShadow) DescriptorSet 0
                               Decorate 215(compare) Location 4
-                              Decorate 226(s2DShadow) DescriptorSet 0
                               Decorate 226(s2DShadow) Binding 12
-                              Decorate 247(sCubeShadow) DescriptorSet 0
+                              Decorate 226(s2DShadow) DescriptorSet 0
                               Decorate 247(sCubeShadow) Binding 14
+                              Decorate 247(sCubeShadow) DescriptorSet 0
                               Decorate 251(c4) Location 3
-                              Decorate 271(s1DArray) DescriptorSet 0
                               Decorate 271(s1DArray) Binding 7
-                              Decorate 286(s2DArray) DescriptorSet 0
+                              Decorate 271(s1DArray) DescriptorSet 0
                               Decorate 286(s2DArray) Binding 8
-                              Decorate 301(sCubeArray) DescriptorSet 0
+                              Decorate 286(s2DArray) DescriptorSet 0
                               Decorate 301(sCubeArray) Binding 9
+                              Decorate 301(sCubeArray) DescriptorSet 0
                               Decorate 309(f16c4) Location 14
-                              Decorate 318(s1DArrayShadow) DescriptorSet 0
                               Decorate 318(s1DArrayShadow) Binding 15
-                              Decorate 339(s2DArrayShadow) DescriptorSet 0
+                              Decorate 318(s1DArrayShadow) DescriptorSet 0
                               Decorate 339(s2DArrayShadow) Binding 16
-                              Decorate 359(s2DRect) DescriptorSet 0
+                              Decorate 339(s2DArrayShadow) DescriptorSet 0
                               Decorate 359(s2DRect) Binding 3
-                              Decorate 373(s2DRectShadow) DescriptorSet 0
+                              Decorate 359(s2DRect) DescriptorSet 0
                               Decorate 373(s2DRectShadow) Binding 13
-                              Decorate 393(sCubeArrayShadow) DescriptorSet 0
+                              Decorate 373(s2DRectShadow) DescriptorSet 0
                               Decorate 393(sCubeArrayShadow) Binding 17
+                              Decorate 393(sCubeArrayShadow) DescriptorSet 0
                               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 1300(sBuffer) DescriptorSet 0
                               Decorate 1311(s2DMS) Binding 6
-                              Decorate 1322(s2DMSArray) DescriptorSet 0
+                              Decorate 1311(s2DMS) DescriptorSet 0
                               Decorate 1322(s2DMSArray) Binding 10
+                              Decorate 1322(s2DMSArray) DescriptorSet 0
                               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 2999(i1D) DescriptorSet 1
-                              Decorate 2999(i1D) Binding 0
-                              Decorate 3008(i2D) DescriptorSet 1
-                              Decorate 3008(i2D) Binding 1
-                              Decorate 3017(i3D) DescriptorSet 1
-                              Decorate 3017(i3D) Binding 2
-                              Decorate 3026(i2DRect) DescriptorSet 1
-                              Decorate 3026(i2DRect) Binding 3
-                              Decorate 3035(iCube) DescriptorSet 1
-                              Decorate 3035(iCube) Binding 4
-                              Decorate 3044(iBuffer) DescriptorSet 1
-                              Decorate 3044(iBuffer) Binding 8
-                              Decorate 3053(i1DArray) DescriptorSet 1
-                              Decorate 3053(i1DArray) Binding 5
-                              Decorate 3062(i2DArray) DescriptorSet 1
-                              Decorate 3062(i2DArray) Binding 6
-                              Decorate 3071(iCubeArray) DescriptorSet 1
-                              Decorate 3071(iCubeArray) Binding 7
-                              Decorate 3080(i2DMS) DescriptorSet 1
-                              Decorate 3080(i2DMS) Binding 9
-                              Decorate 3089(i2DMSArray) DescriptorSet 1
-                              Decorate 3089(i2DMSArray) Binding 10
-                              Decorate 4311(lodClamp) Location 7
-                              Decorate 4318(f16lodClamp) Location 17
-                              Decorate 5508(t1D) DescriptorSet 2
-                              Decorate 5508(t1D) Binding 0
-                              Decorate 5512(s) DescriptorSet 2
-                              Decorate 5512(s) Binding 11
-                              Decorate 5528(t2D) DescriptorSet 2
-                              Decorate 5528(t2D) Binding 1
-                              Decorate 5545(t3D) DescriptorSet 2
-                              Decorate 5545(t3D) Binding 2
-                              Decorate 5562(tCube) DescriptorSet 2
-                              Decorate 5562(tCube) Binding 4
-                              Decorate 5579(sShadow) DescriptorSet 2
-                              Decorate 5579(sShadow) Binding 12
-                              Decorate 5643(t1DArray) DescriptorSet 2
-                              Decorate 5643(t1DArray) Binding 5
-                              Decorate 5660(t2DArray) DescriptorSet 2
-                              Decorate 5660(t2DArray) Binding 6
-                              Decorate 5677(tCubeArray) DescriptorSet 2
-                              Decorate 5677(tCubeArray) Binding 7
-                              Decorate 5735(t2DRect) DescriptorSet 2
-                              Decorate 5735(t2DRect) Binding 3
-                              Decorate 5795(subpass) DescriptorSet 3
-                              Decorate 5795(subpass) Binding 0
-                              Decorate 5795(subpass) InputAttachmentIndex 0
-                              Decorate 5801(subpassMS) DescriptorSet 3
-                              Decorate 5801(subpassMS) Binding 1
-                              Decorate 5801(subpassMS) InputAttachmentIndex 0
-                              Decorate 5969(fragColor) Location 0
-                              Decorate 5973(tBuffer) DescriptorSet 2
-                              Decorate 5973(tBuffer) Binding 8
-                              Decorate 5975(t2DMS) DescriptorSet 2
-                              Decorate 5975(t2DMS) Binding 9
-                              Decorate 5977(t2DMSArray) DescriptorSet 2
-                              Decorate 5977(t2DMSArray) Binding 10
-                              Decorate 5978(bias) Location 6
+                              Decorate 1400(f16dPdxy1) Location 18
+                              Decorate 1407(dPdxy2) Location 9
+                              Decorate 1414(f16dPdxy2) Location 19
+                              Decorate 1421(dPdxy3) Location 10
+                              Decorate 1428(f16dPdxy3) Location 20
+                              Decorate 2909(i1D) Binding 0
+                              Decorate 2909(i1D) DescriptorSet 1
+                              Decorate 2918(i2D) Binding 1
+                              Decorate 2918(i2D) DescriptorSet 1
+                              Decorate 2927(i3D) Binding 2
+                              Decorate 2927(i3D) DescriptorSet 1
+                              Decorate 2936(i2DRect) Binding 3
+                              Decorate 2936(i2DRect) DescriptorSet 1
+                              Decorate 2945(iCube) Binding 4
+                              Decorate 2945(iCube) DescriptorSet 1
+                              Decorate 2954(iBuffer) Binding 8
+                              Decorate 2954(iBuffer) DescriptorSet 1
+                              Decorate 2963(i1DArray) Binding 5
+                              Decorate 2963(i1DArray) DescriptorSet 1
+                              Decorate 2972(i2DArray) Binding 6
+                              Decorate 2972(i2DArray) DescriptorSet 1
+                              Decorate 2981(iCubeArray) Binding 7
+                              Decorate 2981(iCubeArray) DescriptorSet 1
+                              Decorate 2990(i2DMS) Binding 9
+                              Decorate 2990(i2DMS) DescriptorSet 1
+                              Decorate 2999(i2DMSArray) Binding 10
+                              Decorate 2999(i2DMSArray) DescriptorSet 1
+                              Decorate 4187(lodClamp) Location 7
+                              Decorate 4194(f16lodClamp) Location 17
+                              Decorate 5316(t1D) Binding 0
+                              Decorate 5316(t1D) DescriptorSet 2
+                              Decorate 5320(s) Binding 11
+                              Decorate 5320(s) DescriptorSet 2
+                              Decorate 5336(t2D) Binding 1
+                              Decorate 5336(t2D) DescriptorSet 2
+                              Decorate 5353(t3D) Binding 2
+                              Decorate 5353(t3D) DescriptorSet 2
+                              Decorate 5370(tCube) Binding 4
+                              Decorate 5370(tCube) DescriptorSet 2
+                              Decorate 5387(sShadow) Binding 12
+                              Decorate 5387(sShadow) DescriptorSet 2
+                              Decorate 5451(t1DArray) Binding 5
+                              Decorate 5451(t1DArray) DescriptorSet 2
+                              Decorate 5468(t2DArray) Binding 6
+                              Decorate 5468(t2DArray) DescriptorSet 2
+                              Decorate 5485(tCubeArray) Binding 7
+                              Decorate 5485(tCubeArray) DescriptorSet 2
+                              Decorate 5543(t2DRect) Binding 3
+                              Decorate 5543(t2DRect) DescriptorSet 2
+                              Decorate 5603(subpass) Binding 0
+                              Decorate 5603(subpass) DescriptorSet 3
+                              Decorate 5603(subpass) InputAttachmentIndex 0
+                              Decorate 5609(subpassMS) Binding 1
+                              Decorate 5609(subpassMS) DescriptorSet 3
+                              Decorate 5609(subpassMS) InputAttachmentIndex 0
+                              Decorate 5777(fragColor) Location 0
+                              Decorate 5781(tBuffer) Binding 8
+                              Decorate 5781(tBuffer) DescriptorSet 2
+                              Decorate 5783(t2DMS) Binding 9
+                              Decorate 5783(t2DMS) DescriptorSet 2
+                              Decorate 5785(t2DMSArray) Binding 10
+                              Decorate 5785(t2DMSArray) DescriptorSet 2
+                              Decorate 5786(bias) Location 6
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 16
@@ -441,323 +441,323 @@
 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)
-            2581:    206(int) Constant 1
-            2596:    206(int) Constant 2
-            2776:             TypePointer Function 53(fvec2)
-            2778:   52(float) Constant 0
-            2779:   53(fvec2) ConstantComposite 2778 2778
-            2997:             TypeImage 6(float16_t) 1D nonsampled format:Rgba16f
+ 1400(f16dPdxy1):    134(ptr) Variable Input
+    1407(dPdxy2):    147(ptr) Variable Input
+ 1414(f16dPdxy2):    155(ptr) Variable Input
+    1421(dPdxy3):    168(ptr) Variable Input
+ 1428(f16dPdxy3):    176(ptr) Variable Input
+            2097:     47(int) Constant 0
+            2288:    206(int) Constant 4
+            2289:             TypeArray 721(ivec2) 2288
+            2290:        2289 ConstantComposite 722 722 722 722
+            2468:             TypePointer Function 48(ivec4)
+            2470:   48(ivec4) ConstantComposite 2097 2097 2097 2097
+            2476:             TypePointer Function 47(int)
+            2491:    206(int) Constant 1
+            2506:    206(int) Constant 2
+            2686:             TypePointer Function 53(fvec2)
+            2688:   52(float) Constant 0
+            2689:   53(fvec2) ConstantComposite 2688 2688
+            2907:             TypeImage 6(float16_t) 1D nonsampled format:Rgba16f
+            2908:             TypePointer UniformConstant 2907
+       2909(i1D):   2908(ptr) Variable UniformConstant
+            2916:             TypeImage 6(float16_t) 2D nonsampled format:Rgba16f
+            2917:             TypePointer UniformConstant 2916
+       2918(i2D):   2917(ptr) Variable UniformConstant
+            2925:             TypeImage 6(float16_t) 3D nonsampled format:Rgba16f
+            2926:             TypePointer UniformConstant 2925
+       2927(i3D):   2926(ptr) Variable UniformConstant
+            2934:             TypeImage 6(float16_t) Rect nonsampled format:Rgba16f
+            2935:             TypePointer UniformConstant 2934
+   2936(i2DRect):   2935(ptr) Variable UniformConstant
+            2943:             TypeImage 6(float16_t) Cube nonsampled format:Rgba16f
+            2944:             TypePointer UniformConstant 2943
+     2945(iCube):   2944(ptr) Variable UniformConstant
+            2952:             TypeImage 6(float16_t) Buffer nonsampled format:Rgba16f
+            2953:             TypePointer UniformConstant 2952
+   2954(iBuffer):   2953(ptr) Variable UniformConstant
+            2961:             TypeImage 6(float16_t) 1D array nonsampled format:Rgba16f
+            2962:             TypePointer UniformConstant 2961
+  2963(i1DArray):   2962(ptr) Variable UniformConstant
+            2970:             TypeImage 6(float16_t) 2D array nonsampled format:Rgba16f
+            2971:             TypePointer UniformConstant 2970
+  2972(i2DArray):   2971(ptr) Variable UniformConstant
+            2979:             TypeImage 6(float16_t) Cube array nonsampled format:Rgba16f
+            2980:             TypePointer UniformConstant 2979
+2981(iCubeArray):   2980(ptr) Variable UniformConstant
+            2988:             TypeImage 6(float16_t) 2D multi-sampled nonsampled format:Rgba16f
+            2989:             TypePointer UniformConstant 2988
+     2990(i2DMS):   2989(ptr) Variable UniformConstant
+            2997:             TypeImage 6(float16_t) 2D array multi-sampled nonsampled format:Rgba16f
             2998:             TypePointer UniformConstant 2997
-       2999(i1D):   2998(ptr) Variable UniformConstant
-            3006:             TypeImage 6(float16_t) 2D nonsampled format:Rgba16f
-            3007:             TypePointer UniformConstant 3006
-       3008(i2D):   3007(ptr) Variable UniformConstant
-            3015:             TypeImage 6(float16_t) 3D nonsampled format:Rgba16f
-            3016:             TypePointer UniformConstant 3015
-       3017(i3D):   3016(ptr) Variable UniformConstant
-            3024:             TypeImage 6(float16_t) Rect nonsampled format:Rgba16f
-            3025:             TypePointer UniformConstant 3024
-   3026(i2DRect):   3025(ptr) Variable UniformConstant
-            3033:             TypeImage 6(float16_t) Cube nonsampled format:Rgba16f
-            3034:             TypePointer UniformConstant 3033
-     3035(iCube):   3034(ptr) Variable UniformConstant
-            3042:             TypeImage 6(float16_t) Buffer nonsampled format:Rgba16f
-            3043:             TypePointer UniformConstant 3042
-   3044(iBuffer):   3043(ptr) Variable UniformConstant
-            3051:             TypeImage 6(float16_t) 1D array nonsampled format:Rgba16f
-            3052:             TypePointer UniformConstant 3051
-  3053(i1DArray):   3052(ptr) Variable UniformConstant
-            3060:             TypeImage 6(float16_t) 2D array nonsampled format:Rgba16f
-            3061:             TypePointer UniformConstant 3060
-  3062(i2DArray):   3061(ptr) Variable UniformConstant
-            3069:             TypeImage 6(float16_t) Cube array nonsampled format:Rgba16f
-            3070:             TypePointer UniformConstant 3069
-3071(iCubeArray):   3070(ptr) Variable UniformConstant
-            3078:             TypeImage 6(float16_t) 2D multi-sampled nonsampled format:Rgba16f
-            3079:             TypePointer UniformConstant 3078
-     3080(i2DMS):   3079(ptr) Variable UniformConstant
-            3087:             TypeImage 6(float16_t) 2D array multi-sampled nonsampled format:Rgba16f
-            3088:             TypePointer UniformConstant 3087
-3089(i2DMSArray):   3088(ptr) Variable UniformConstant
-   3146(ResType):             TypeStruct 47(int) 7(f16vec4)
-   3182(ResType):             TypeStruct 47(int) 6(float16_t)
-            4069:  721(ivec2) ConstantComposite 709 1326
-            4070:     47(int) Constant 3
-            4071:     47(int) Constant 4
-            4072:  721(ivec2) ConstantComposite 4070 4071
-            4073:     47(int) Constant 15
-            4074:     47(int) Constant 16
-            4075:  721(ivec2) ConstantComposite 4073 4074
-            4076:     47(int) Constant 4294967294
-            4077:  721(ivec2) ConstantComposite 4076 2187
-            4078:        2379 ConstantComposite 4069 4072 4075 4077
-  4311(lodClamp):    127(ptr) Variable Input
-4318(f16lodClamp):    134(ptr) Variable Input
-            5507:             TypePointer UniformConstant 122
-       5508(t1D):   5507(ptr) Variable UniformConstant
-            5510:             TypeSampler
-            5511:             TypePointer UniformConstant 5510
-         5512(s):   5511(ptr) Variable UniformConstant
-            5527:             TypePointer UniformConstant 142
-       5528(t2D):   5527(ptr) Variable UniformConstant
-            5544:             TypePointer UniformConstant 162
-       5545(t3D):   5544(ptr) Variable UniformConstant
-            5561:             TypePointer UniformConstant 183
-     5562(tCube):   5561(ptr) Variable UniformConstant
-   5579(sShadow):   5511(ptr) Variable UniformConstant
-            5642:             TypePointer UniformConstant 268
-  5643(t1DArray):   5642(ptr) Variable UniformConstant
-            5659:             TypePointer UniformConstant 283
-  5660(t2DArray):   5659(ptr) Variable UniformConstant
-            5676:             TypePointer UniformConstant 298
-5677(tCubeArray):   5676(ptr) Variable UniformConstant
-            5734:             TypePointer UniformConstant 356
-   5735(t2DRect):   5734(ptr) Variable UniformConstant
-            5793:             TypeImage 6(float16_t) SubpassData nonsampled format:Unknown
-            5794:             TypePointer UniformConstant 5793
-   5795(subpass):   5794(ptr) Variable UniformConstant
-            5797:  721(ivec2) ConstantComposite 2187 2187
-            5799:             TypeImage 6(float16_t) SubpassData multi-sampled nonsampled format:Unknown
-            5800:             TypePointer UniformConstant 5799
- 5801(subpassMS):   5800(ptr) Variable UniformConstant
-            5968:             TypePointer Output 249(fvec4)
- 5969(fragColor):   5968(ptr) Variable Output
-            5972:             TypePointer UniformConstant 1297
-   5973(tBuffer):   5972(ptr) Variable UniformConstant
-            5974:             TypePointer UniformConstant 1308
-     5975(t2DMS):   5974(ptr) Variable UniformConstant
-            5976:             TypePointer UniformConstant 1319
-5977(t2DMSArray):   5976(ptr) Variable UniformConstant
-      5978(bias):    127(ptr) Variable Input
+2999(i2DMSArray):   2998(ptr) Variable UniformConstant
+   3056(ResType):             TypeStruct 47(int) 7(f16vec4)
+   3092(ResType):             TypeStruct 47(int) 6(float16_t)
+            3945:  721(ivec2) ConstantComposite 709 1326
+            3946:     47(int) Constant 3
+            3947:     47(int) Constant 4
+            3948:  721(ivec2) ConstantComposite 3946 3947
+            3949:     47(int) Constant 15
+            3950:     47(int) Constant 16
+            3951:  721(ivec2) ConstantComposite 3949 3950
+            3952:     47(int) Constant 4294967294
+            3953:  721(ivec2) ConstantComposite 3952 2097
+            3954:        2289 ConstantComposite 3945 3948 3951 3953
+  4187(lodClamp):    127(ptr) Variable Input
+4194(f16lodClamp):    134(ptr) Variable Input
+            5315:             TypePointer UniformConstant 122
+       5316(t1D):   5315(ptr) Variable UniformConstant
+            5318:             TypeSampler
+            5319:             TypePointer UniformConstant 5318
+         5320(s):   5319(ptr) Variable UniformConstant
+            5335:             TypePointer UniformConstant 142
+       5336(t2D):   5335(ptr) Variable UniformConstant
+            5352:             TypePointer UniformConstant 162
+       5353(t3D):   5352(ptr) Variable UniformConstant
+            5369:             TypePointer UniformConstant 183
+     5370(tCube):   5369(ptr) Variable UniformConstant
+   5387(sShadow):   5319(ptr) Variable UniformConstant
+            5450:             TypePointer UniformConstant 268
+  5451(t1DArray):   5450(ptr) Variable UniformConstant
+            5467:             TypePointer UniformConstant 283
+  5468(t2DArray):   5467(ptr) Variable UniformConstant
+            5484:             TypePointer UniformConstant 298
+5485(tCubeArray):   5484(ptr) Variable UniformConstant
+            5542:             TypePointer UniformConstant 356
+   5543(t2DRect):   5542(ptr) Variable UniformConstant
+            5601:             TypeImage 6(float16_t) SubpassData nonsampled format:Unknown
+            5602:             TypePointer UniformConstant 5601
+   5603(subpass):   5602(ptr) Variable UniformConstant
+            5605:  721(ivec2) ConstantComposite 2097 2097
+            5607:             TypeImage 6(float16_t) SubpassData multi-sampled nonsampled format:Unknown
+            5608:             TypePointer UniformConstant 5607
+ 5609(subpassMS):   5608(ptr) Variable UniformConstant
+            5776:             TypePointer Output 249(fvec4)
+ 5777(fragColor):   5776(ptr) Variable Output
+            5780:             TypePointer UniformConstant 1297
+   5781(tBuffer):   5780(ptr) Variable UniformConstant
+            5782:             TypePointer UniformConstant 1308
+     5783(t2DMS):   5782(ptr) Variable UniformConstant
+            5784:             TypePointer UniformConstant 1319
+5785(t2DMSArray):   5784(ptr) Variable UniformConstant
+      5786(bias):    127(ptr) Variable Input
          4(main):           2 Function None 3
                5:             Label
-    5807(result):     64(ptr) Variable Function
-     5890(param):     64(ptr) Variable Function
-                              Store 5807(result) 121
-            5808:  7(f16vec4) FunctionCall 9(testTexture()
-            5809:  7(f16vec4) Load 5807(result)
-            5810:  7(f16vec4) FAdd 5809 5808
-                              Store 5807(result) 5810
-            5811:  7(f16vec4) FunctionCall 11(testTextureProj()
-            5812:  7(f16vec4) Load 5807(result)
-            5813:  7(f16vec4) FAdd 5812 5811
-                              Store 5807(result) 5813
-            5814:  7(f16vec4) FunctionCall 13(testTextureLod()
-            5815:  7(f16vec4) Load 5807(result)
-            5816:  7(f16vec4) FAdd 5815 5814
-                              Store 5807(result) 5816
-            5817:  7(f16vec4) FunctionCall 15(testTextureOffset()
-            5818:  7(f16vec4) Load 5807(result)
-            5819:  7(f16vec4) FAdd 5818 5817
-                              Store 5807(result) 5819
-            5820:  7(f16vec4) FunctionCall 19(testTextureLodOffset()
-            5821:  7(f16vec4) Load 5807(result)
-            5822:  7(f16vec4) FAdd 5821 5820
-                              Store 5807(result) 5822
-            5823:  7(f16vec4) FunctionCall 21(testTextureProjLodOffset()
-            5824:  7(f16vec4) Load 5807(result)
-            5825:  7(f16vec4) FAdd 5824 5823
-                              Store 5807(result) 5825
-            5826:  7(f16vec4) FunctionCall 23(testTexelFetch()
-            5827:  7(f16vec4) Load 5807(result)
-            5828:  7(f16vec4) FAdd 5827 5826
-                              Store 5807(result) 5828
-            5829:  7(f16vec4) FunctionCall 25(testTexelFetchOffset()
-            5830:  7(f16vec4) Load 5807(result)
-            5831:  7(f16vec4) FAdd 5830 5829
-                              Store 5807(result) 5831
-            5832:  7(f16vec4) FunctionCall 27(testTextureGrad()
-            5833:  7(f16vec4) Load 5807(result)
-            5834:  7(f16vec4) FAdd 5833 5832
-                              Store 5807(result) 5834
-            5835:  7(f16vec4) FunctionCall 29(testTextureGradOffset()
-            5836:  7(f16vec4) Load 5807(result)
-            5837:  7(f16vec4) FAdd 5836 5835
-                              Store 5807(result) 5837
-            5838:  7(f16vec4) FunctionCall 31(testTextureProjGrad()
-            5839:  7(f16vec4) Load 5807(result)
-            5840:  7(f16vec4) FAdd 5839 5838
-                              Store 5807(result) 5840
-            5841:  7(f16vec4) FunctionCall 33(testTextureProjGradoffset()
-            5842:  7(f16vec4) Load 5807(result)
-            5843:  7(f16vec4) FAdd 5842 5841
-                              Store 5807(result) 5843
-            5844:  7(f16vec4) FunctionCall 35(testTextureGather()
-            5845:  7(f16vec4) Load 5807(result)
-            5846:  7(f16vec4) FAdd 5845 5844
-                              Store 5807(result) 5846
-            5847:  7(f16vec4) FunctionCall 37(testTextureGatherOffset()
-            5848:  7(f16vec4) Load 5807(result)
-            5849:  7(f16vec4) FAdd 5848 5847
-                              Store 5807(result) 5849
-            5850:  7(f16vec4) FunctionCall 39(testTextureGatherOffsets()
-            5851:  7(f16vec4) Load 5807(result)
-            5852:  7(f16vec4) FAdd 5851 5850
-                              Store 5807(result) 5852
-            5853:  7(f16vec4) FunctionCall 41(testTextureGatherLod()
-            5854:  7(f16vec4) Load 5807(result)
-            5855:  7(f16vec4) FAdd 5854 5853
-                              Store 5807(result) 5855
-            5856:  7(f16vec4) FunctionCall 43(testTextureGatherLodOffset()
-            5857:  7(f16vec4) Load 5807(result)
-            5858:  7(f16vec4) FAdd 5857 5856
-                              Store 5807(result) 5858
-            5859:  7(f16vec4) FunctionCall 45(testTextureGatherLodOffsets()
-            5860:  7(f16vec4) Load 5807(result)
-            5861:  7(f16vec4) FAdd 5860 5859
-                              Store 5807(result) 5861
-            5862:   48(ivec4) FunctionCall 50(testTextureSize()
-            5863:  7(f16vec4) ConvertSToF 5862
-            5864:  7(f16vec4) Load 5807(result)
-            5865:  7(f16vec4) FAdd 5864 5863
-                              Store 5807(result) 5865
-            5866:   53(fvec2) FunctionCall 55(testTextureQueryLod()
-            5867:154(f16vec2) FConvert 5866
-            5868:  7(f16vec4) Load 5807(result)
-            5869:154(f16vec2) VectorShuffle 5868 5868 0 1
-            5870:154(f16vec2) FAdd 5869 5867
-            5871:    208(ptr) AccessChain 5807(result) 207
-            5872:6(float16_t) CompositeExtract 5870 0
-                              Store 5871 5872
-            5873:    208(ptr) AccessChain 5807(result) 2581
-            5874:6(float16_t) CompositeExtract 5870 1
-                              Store 5873 5874
-            5875:     47(int) FunctionCall 58(testTextureQueryLevels()
-            5876:6(float16_t) ConvertSToF 5875
-            5877:    208(ptr) AccessChain 5807(result) 207
-            5878:6(float16_t) Load 5877
-            5879:6(float16_t) FAdd 5878 5876
-            5880:    208(ptr) AccessChain 5807(result) 207
-                              Store 5880 5879
-            5881:     47(int) FunctionCall 60(testTextureSamples()
-            5882:6(float16_t) ConvertSToF 5881
-            5883:    208(ptr) AccessChain 5807(result) 207
-            5884:6(float16_t) Load 5883
-            5885:6(float16_t) FAdd 5884 5882
-            5886:    208(ptr) AccessChain 5807(result) 207
-                              Store 5886 5885
-            5887:  7(f16vec4) FunctionCall 62(testImageLoad()
-            5888:  7(f16vec4) Load 5807(result)
-            5889:  7(f16vec4) FAdd 5888 5887
-                              Store 5807(result) 5889
-            5891:  7(f16vec4) Load 5807(result)
-                              Store 5890(param) 5891
-            5892:           2 FunctionCall 67(testImageStore(vf164;) 5890(param)
-            5893:  7(f16vec4) FunctionCall 69(testSparseTexture()
-            5894:  7(f16vec4) Load 5807(result)
-            5895:  7(f16vec4) FAdd 5894 5893
-                              Store 5807(result) 5895
-            5896:  7(f16vec4) FunctionCall 71(testSparseTextureLod()
-            5897:  7(f16vec4) Load 5807(result)
-            5898:  7(f16vec4) FAdd 5897 5896
-                              Store 5807(result) 5898
-            5899:  7(f16vec4) FunctionCall 73(testSparseTextureOffset()
-            5900:  7(f16vec4) Load 5807(result)
-            5901:  7(f16vec4) FAdd 5900 5899
-                              Store 5807(result) 5901
-            5902:  7(f16vec4) FunctionCall 75(testSparseTextureLodOffset()
-            5903:  7(f16vec4) Load 5807(result)
-            5904:  7(f16vec4) FAdd 5903 5902
-                              Store 5807(result) 5904
-            5905:  7(f16vec4) FunctionCall 77(testSparseTextureGrad()
-            5906:  7(f16vec4) Load 5807(result)
-            5907:  7(f16vec4) FAdd 5906 5905
-                              Store 5807(result) 5907
-            5908:  7(f16vec4) FunctionCall 79(testSparseTextureGradOffset()
-            5909:  7(f16vec4) Load 5807(result)
-            5910:  7(f16vec4) FAdd 5909 5908
-                              Store 5807(result) 5910
-            5911:  7(f16vec4) FunctionCall 81(testSparseTexelFetch()
-            5912:  7(f16vec4) Load 5807(result)
-            5913:  7(f16vec4) FAdd 5912 5911
-                              Store 5807(result) 5913
-            5914:  7(f16vec4) FunctionCall 83(testSparseTexelFetchOffset()
-            5915:  7(f16vec4) Load 5807(result)
-            5916:  7(f16vec4) FAdd 5915 5914
-                              Store 5807(result) 5916
-            5917:  7(f16vec4) FunctionCall 85(testSparseTextureGather()
-            5918:  7(f16vec4) Load 5807(result)
-            5919:  7(f16vec4) FAdd 5918 5917
-                              Store 5807(result) 5919
-            5920:  7(f16vec4) FunctionCall 87(testSparseTextureGatherOffset()
-            5921:  7(f16vec4) Load 5807(result)
-            5922:  7(f16vec4) FAdd 5921 5920
-                              Store 5807(result) 5922
-            5923:  7(f16vec4) FunctionCall 89(testSparseTextureGatherOffsets()
-            5924:  7(f16vec4) Load 5807(result)
-            5925:  7(f16vec4) FAdd 5924 5923
-                              Store 5807(result) 5925
-            5926:  7(f16vec4) FunctionCall 91(testSparseTextureGatherLod()
-            5927:  7(f16vec4) Load 5807(result)
-            5928:  7(f16vec4) FAdd 5927 5926
-                              Store 5807(result) 5928
-            5929:  7(f16vec4) FunctionCall 93(testSparseTextureGatherLodOffset()
-            5930:  7(f16vec4) Load 5807(result)
-            5931:  7(f16vec4) FAdd 5930 5929
-                              Store 5807(result) 5931
-            5932:  7(f16vec4) FunctionCall 95(testSparseTextureGatherLodOffsets()
-            5933:  7(f16vec4) Load 5807(result)
-            5934:  7(f16vec4) FAdd 5933 5932
-                              Store 5807(result) 5934
-            5935:  7(f16vec4) FunctionCall 97(testSparseImageLoad()
-            5936:  7(f16vec4) Load 5807(result)
-            5937:  7(f16vec4) FAdd 5936 5935
-                              Store 5807(result) 5937
-            5938:  7(f16vec4) FunctionCall 99(testSparseTextureClamp()
-            5939:  7(f16vec4) Load 5807(result)
-            5940:  7(f16vec4) FAdd 5939 5938
-                              Store 5807(result) 5940
-            5941:  7(f16vec4) FunctionCall 101(testTextureClamp()
-            5942:  7(f16vec4) Load 5807(result)
-            5943:  7(f16vec4) FAdd 5942 5941
-                              Store 5807(result) 5943
-            5944:  7(f16vec4) FunctionCall 103(testSparseTextureOffsetClamp()
-            5945:  7(f16vec4) Load 5807(result)
-            5946:  7(f16vec4) FAdd 5945 5944
-                              Store 5807(result) 5946
-            5947:  7(f16vec4) FunctionCall 105(testTextureOffsetClamp()
-            5948:  7(f16vec4) Load 5807(result)
-            5949:  7(f16vec4) FAdd 5948 5947
-                              Store 5807(result) 5949
-            5950:  7(f16vec4) FunctionCall 77(testSparseTextureGrad()
-            5951:  7(f16vec4) Load 5807(result)
-            5952:  7(f16vec4) FAdd 5951 5950
-                              Store 5807(result) 5952
-            5953:  7(f16vec4) FunctionCall 27(testTextureGrad()
-            5954:  7(f16vec4) Load 5807(result)
-            5955:  7(f16vec4) FAdd 5954 5953
-                              Store 5807(result) 5955
-            5956:  7(f16vec4) FunctionCall 111(testSparseTextureGradOffsetClamp()
-            5957:  7(f16vec4) Load 5807(result)
-            5958:  7(f16vec4) FAdd 5957 5956
-                              Store 5807(result) 5958
-            5959:  7(f16vec4) FunctionCall 113(testTextureGradOffsetClamp()
-            5960:  7(f16vec4) Load 5807(result)
-            5961:  7(f16vec4) FAdd 5960 5959
-                              Store 5807(result) 5961
-            5962:  7(f16vec4) FunctionCall 115(testCombinedTextureSampler()
-            5963:  7(f16vec4) Load 5807(result)
-            5964:  7(f16vec4) FAdd 5963 5962
-                              Store 5807(result) 5964
-            5965:  7(f16vec4) FunctionCall 117(testSubpassLoad()
-            5966:  7(f16vec4) Load 5807(result)
-            5967:  7(f16vec4) FAdd 5966 5965
-                              Store 5807(result) 5967
-            5970:  7(f16vec4) Load 5807(result)
-            5971:  249(fvec4) FConvert 5970
-                              Store 5969(fragColor) 5971
+    5615(result):     64(ptr) Variable Function
+     5698(param):     64(ptr) Variable Function
+                              Store 5615(result) 121
+            5616:  7(f16vec4) FunctionCall 9(testTexture()
+            5617:  7(f16vec4) Load 5615(result)
+            5618:  7(f16vec4) FAdd 5617 5616
+                              Store 5615(result) 5618
+            5619:  7(f16vec4) FunctionCall 11(testTextureProj()
+            5620:  7(f16vec4) Load 5615(result)
+            5621:  7(f16vec4) FAdd 5620 5619
+                              Store 5615(result) 5621
+            5622:  7(f16vec4) FunctionCall 13(testTextureLod()
+            5623:  7(f16vec4) Load 5615(result)
+            5624:  7(f16vec4) FAdd 5623 5622
+                              Store 5615(result) 5624
+            5625:  7(f16vec4) FunctionCall 15(testTextureOffset()
+            5626:  7(f16vec4) Load 5615(result)
+            5627:  7(f16vec4) FAdd 5626 5625
+                              Store 5615(result) 5627
+            5628:  7(f16vec4) FunctionCall 19(testTextureLodOffset()
+            5629:  7(f16vec4) Load 5615(result)
+            5630:  7(f16vec4) FAdd 5629 5628
+                              Store 5615(result) 5630
+            5631:  7(f16vec4) FunctionCall 21(testTextureProjLodOffset()
+            5632:  7(f16vec4) Load 5615(result)
+            5633:  7(f16vec4) FAdd 5632 5631
+                              Store 5615(result) 5633
+            5634:  7(f16vec4) FunctionCall 23(testTexelFetch()
+            5635:  7(f16vec4) Load 5615(result)
+            5636:  7(f16vec4) FAdd 5635 5634
+                              Store 5615(result) 5636
+            5637:  7(f16vec4) FunctionCall 25(testTexelFetchOffset()
+            5638:  7(f16vec4) Load 5615(result)
+            5639:  7(f16vec4) FAdd 5638 5637
+                              Store 5615(result) 5639
+            5640:  7(f16vec4) FunctionCall 27(testTextureGrad()
+            5641:  7(f16vec4) Load 5615(result)
+            5642:  7(f16vec4) FAdd 5641 5640
+                              Store 5615(result) 5642
+            5643:  7(f16vec4) FunctionCall 29(testTextureGradOffset()
+            5644:  7(f16vec4) Load 5615(result)
+            5645:  7(f16vec4) FAdd 5644 5643
+                              Store 5615(result) 5645
+            5646:  7(f16vec4) FunctionCall 31(testTextureProjGrad()
+            5647:  7(f16vec4) Load 5615(result)
+            5648:  7(f16vec4) FAdd 5647 5646
+                              Store 5615(result) 5648
+            5649:  7(f16vec4) FunctionCall 33(testTextureProjGradoffset()
+            5650:  7(f16vec4) Load 5615(result)
+            5651:  7(f16vec4) FAdd 5650 5649
+                              Store 5615(result) 5651
+            5652:  7(f16vec4) FunctionCall 35(testTextureGather()
+            5653:  7(f16vec4) Load 5615(result)
+            5654:  7(f16vec4) FAdd 5653 5652
+                              Store 5615(result) 5654
+            5655:  7(f16vec4) FunctionCall 37(testTextureGatherOffset()
+            5656:  7(f16vec4) Load 5615(result)
+            5657:  7(f16vec4) FAdd 5656 5655
+                              Store 5615(result) 5657
+            5658:  7(f16vec4) FunctionCall 39(testTextureGatherOffsets()
+            5659:  7(f16vec4) Load 5615(result)
+            5660:  7(f16vec4) FAdd 5659 5658
+                              Store 5615(result) 5660
+            5661:  7(f16vec4) FunctionCall 41(testTextureGatherLod()
+            5662:  7(f16vec4) Load 5615(result)
+            5663:  7(f16vec4) FAdd 5662 5661
+                              Store 5615(result) 5663
+            5664:  7(f16vec4) FunctionCall 43(testTextureGatherLodOffset()
+            5665:  7(f16vec4) Load 5615(result)
+            5666:  7(f16vec4) FAdd 5665 5664
+                              Store 5615(result) 5666
+            5667:  7(f16vec4) FunctionCall 45(testTextureGatherLodOffsets()
+            5668:  7(f16vec4) Load 5615(result)
+            5669:  7(f16vec4) FAdd 5668 5667
+                              Store 5615(result) 5669
+            5670:   48(ivec4) FunctionCall 50(testTextureSize()
+            5671:  7(f16vec4) ConvertSToF 5670
+            5672:  7(f16vec4) Load 5615(result)
+            5673:  7(f16vec4) FAdd 5672 5671
+                              Store 5615(result) 5673
+            5674:   53(fvec2) FunctionCall 55(testTextureQueryLod()
+            5675:154(f16vec2) FConvert 5674
+            5676:  7(f16vec4) Load 5615(result)
+            5677:154(f16vec2) VectorShuffle 5676 5676 0 1
+            5678:154(f16vec2) FAdd 5677 5675
+            5679:    208(ptr) AccessChain 5615(result) 207
+            5680:6(float16_t) CompositeExtract 5678 0
+                              Store 5679 5680
+            5681:    208(ptr) AccessChain 5615(result) 2491
+            5682:6(float16_t) CompositeExtract 5678 1
+                              Store 5681 5682
+            5683:     47(int) FunctionCall 58(testTextureQueryLevels()
+            5684:6(float16_t) ConvertSToF 5683
+            5685:    208(ptr) AccessChain 5615(result) 207
+            5686:6(float16_t) Load 5685
+            5687:6(float16_t) FAdd 5686 5684
+            5688:    208(ptr) AccessChain 5615(result) 207
+                              Store 5688 5687
+            5689:     47(int) FunctionCall 60(testTextureSamples()
+            5690:6(float16_t) ConvertSToF 5689
+            5691:    208(ptr) AccessChain 5615(result) 207
+            5692:6(float16_t) Load 5691
+            5693:6(float16_t) FAdd 5692 5690
+            5694:    208(ptr) AccessChain 5615(result) 207
+                              Store 5694 5693
+            5695:  7(f16vec4) FunctionCall 62(testImageLoad()
+            5696:  7(f16vec4) Load 5615(result)
+            5697:  7(f16vec4) FAdd 5696 5695
+                              Store 5615(result) 5697
+            5699:  7(f16vec4) Load 5615(result)
+                              Store 5698(param) 5699
+            5700:           2 FunctionCall 67(testImageStore(vf164;) 5698(param)
+            5701:  7(f16vec4) FunctionCall 69(testSparseTexture()
+            5702:  7(f16vec4) Load 5615(result)
+            5703:  7(f16vec4) FAdd 5702 5701
+                              Store 5615(result) 5703
+            5704:  7(f16vec4) FunctionCall 71(testSparseTextureLod()
+            5705:  7(f16vec4) Load 5615(result)
+            5706:  7(f16vec4) FAdd 5705 5704
+                              Store 5615(result) 5706
+            5707:  7(f16vec4) FunctionCall 73(testSparseTextureOffset()
+            5708:  7(f16vec4) Load 5615(result)
+            5709:  7(f16vec4) FAdd 5708 5707
+                              Store 5615(result) 5709
+            5710:  7(f16vec4) FunctionCall 75(testSparseTextureLodOffset()
+            5711:  7(f16vec4) Load 5615(result)
+            5712:  7(f16vec4) FAdd 5711 5710
+                              Store 5615(result) 5712
+            5713:  7(f16vec4) FunctionCall 77(testSparseTextureGrad()
+            5714:  7(f16vec4) Load 5615(result)
+            5715:  7(f16vec4) FAdd 5714 5713
+                              Store 5615(result) 5715
+            5716:  7(f16vec4) FunctionCall 79(testSparseTextureGradOffset()
+            5717:  7(f16vec4) Load 5615(result)
+            5718:  7(f16vec4) FAdd 5717 5716
+                              Store 5615(result) 5718
+            5719:  7(f16vec4) FunctionCall 81(testSparseTexelFetch()
+            5720:  7(f16vec4) Load 5615(result)
+            5721:  7(f16vec4) FAdd 5720 5719
+                              Store 5615(result) 5721
+            5722:  7(f16vec4) FunctionCall 83(testSparseTexelFetchOffset()
+            5723:  7(f16vec4) Load 5615(result)
+            5724:  7(f16vec4) FAdd 5723 5722
+                              Store 5615(result) 5724
+            5725:  7(f16vec4) FunctionCall 85(testSparseTextureGather()
+            5726:  7(f16vec4) Load 5615(result)
+            5727:  7(f16vec4) FAdd 5726 5725
+                              Store 5615(result) 5727
+            5728:  7(f16vec4) FunctionCall 87(testSparseTextureGatherOffset()
+            5729:  7(f16vec4) Load 5615(result)
+            5730:  7(f16vec4) FAdd 5729 5728
+                              Store 5615(result) 5730
+            5731:  7(f16vec4) FunctionCall 89(testSparseTextureGatherOffsets()
+            5732:  7(f16vec4) Load 5615(result)
+            5733:  7(f16vec4) FAdd 5732 5731
+                              Store 5615(result) 5733
+            5734:  7(f16vec4) FunctionCall 91(testSparseTextureGatherLod()
+            5735:  7(f16vec4) Load 5615(result)
+            5736:  7(f16vec4) FAdd 5735 5734
+                              Store 5615(result) 5736
+            5737:  7(f16vec4) FunctionCall 93(testSparseTextureGatherLodOffset()
+            5738:  7(f16vec4) Load 5615(result)
+            5739:  7(f16vec4) FAdd 5738 5737
+                              Store 5615(result) 5739
+            5740:  7(f16vec4) FunctionCall 95(testSparseTextureGatherLodOffsets()
+            5741:  7(f16vec4) Load 5615(result)
+            5742:  7(f16vec4) FAdd 5741 5740
+                              Store 5615(result) 5742
+            5743:  7(f16vec4) FunctionCall 97(testSparseImageLoad()
+            5744:  7(f16vec4) Load 5615(result)
+            5745:  7(f16vec4) FAdd 5744 5743
+                              Store 5615(result) 5745
+            5746:  7(f16vec4) FunctionCall 99(testSparseTextureClamp()
+            5747:  7(f16vec4) Load 5615(result)
+            5748:  7(f16vec4) FAdd 5747 5746
+                              Store 5615(result) 5748
+            5749:  7(f16vec4) FunctionCall 101(testTextureClamp()
+            5750:  7(f16vec4) Load 5615(result)
+            5751:  7(f16vec4) FAdd 5750 5749
+                              Store 5615(result) 5751
+            5752:  7(f16vec4) FunctionCall 103(testSparseTextureOffsetClamp()
+            5753:  7(f16vec4) Load 5615(result)
+            5754:  7(f16vec4) FAdd 5753 5752
+                              Store 5615(result) 5754
+            5755:  7(f16vec4) FunctionCall 105(testTextureOffsetClamp()
+            5756:  7(f16vec4) Load 5615(result)
+            5757:  7(f16vec4) FAdd 5756 5755
+                              Store 5615(result) 5757
+            5758:  7(f16vec4) FunctionCall 77(testSparseTextureGrad()
+            5759:  7(f16vec4) Load 5615(result)
+            5760:  7(f16vec4) FAdd 5759 5758
+                              Store 5615(result) 5760
+            5761:  7(f16vec4) FunctionCall 27(testTextureGrad()
+            5762:  7(f16vec4) Load 5615(result)
+            5763:  7(f16vec4) FAdd 5762 5761
+                              Store 5615(result) 5763
+            5764:  7(f16vec4) FunctionCall 111(testSparseTextureGradOffsetClamp()
+            5765:  7(f16vec4) Load 5615(result)
+            5766:  7(f16vec4) FAdd 5765 5764
+                              Store 5615(result) 5766
+            5767:  7(f16vec4) FunctionCall 113(testTextureGradOffsetClamp()
+            5768:  7(f16vec4) Load 5615(result)
+            5769:  7(f16vec4) FAdd 5768 5767
+                              Store 5615(result) 5769
+            5770:  7(f16vec4) FunctionCall 115(testCombinedTextureSampler()
+            5771:  7(f16vec4) Load 5615(result)
+            5772:  7(f16vec4) FAdd 5771 5770
+                              Store 5615(result) 5772
+            5773:  7(f16vec4) FunctionCall 117(testSubpassLoad()
+            5774:  7(f16vec4) Load 5615(result)
+            5775:  7(f16vec4) FAdd 5774 5773
+                              Store 5615(result) 5775
+            5778:  7(f16vec4) Load 5615(result)
+            5779:  249(fvec4) FConvert 5778
+                              Store 5777(fragColor) 5779
                               Return
                               FunctionEnd
  9(testTexture():  7(f16vec4) Function None 8
@@ -2115,5035 +2115,4843 @@
             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(f16vec4) ImageSampleExplicitLod 1391 1392 Grad 1394 1395
-            1397:  7(f16vec4) Load 1390(texel)
-            1398:  7(f16vec4) FAdd 1397 1396
-                              Store 1390(texel) 1398
-            1399:         123 Load 125(s1D)
-            1400:6(float16_t) Load 135(f16c1)
-            1402:6(float16_t) Load 1401(f16dPdxy1)
-            1403:6(float16_t) Load 1401(f16dPdxy1)
-            1404:  7(f16vec4) ImageSampleExplicitLod 1399 1400 Grad 1402 1403
-            1405:  7(f16vec4) Load 1390(texel)
-            1406:  7(f16vec4) 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(f16vec4) ImageSampleExplicitLod 1407 1408 Grad 1410 1411
-            1413:  7(f16vec4) Load 1390(texel)
-            1414:  7(f16vec4) FAdd 1413 1412
-                              Store 1390(texel) 1414
-            1415:         143 Load 145(s2D)
-            1416:154(f16vec2) Load 156(f16c2)
-            1418:154(f16vec2) Load 1417(f16dPdxy2)
-            1419:154(f16vec2) Load 1417(f16dPdxy2)
-            1420:  7(f16vec4) ImageSampleExplicitLod 1415 1416 Grad 1418 1419
-            1421:  7(f16vec4) Load 1390(texel)
-            1422:  7(f16vec4) 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(f16vec4) ImageSampleExplicitLod 1423 1424 Grad 1426 1427
-            1429:  7(f16vec4) Load 1390(texel)
-            1430:  7(f16vec4) FAdd 1429 1428
-                              Store 1390(texel) 1430
-            1431:         163 Load 165(s3D)
-            1432:175(f16vec3) Load 177(f16c3)
-            1434:175(f16vec3) Load 1433(f16dPdxy3)
-            1435:175(f16vec3) Load 1433(f16dPdxy3)
-            1436:  7(f16vec4) ImageSampleExplicitLod 1431 1432 Grad 1434 1435
+            1395:  7(f16vec4) ImageSampleExplicitLod 1391 1392 Grad 1394 1394
+            1396:  7(f16vec4) Load 1390(texel)
+            1397:  7(f16vec4) FAdd 1396 1395
+                              Store 1390(texel) 1397
+            1398:         123 Load 125(s1D)
+            1399:6(float16_t) Load 135(f16c1)
+            1401:6(float16_t) Load 1400(f16dPdxy1)
+            1402:  7(f16vec4) ImageSampleExplicitLod 1398 1399 Grad 1401 1401
+            1403:  7(f16vec4) Load 1390(texel)
+            1404:  7(f16vec4) FAdd 1403 1402
+                              Store 1390(texel) 1404
+            1405:         143 Load 145(s2D)
+            1406:   53(fvec2) Load 148(c2)
+            1408:   53(fvec2) Load 1407(dPdxy2)
+            1409:  7(f16vec4) ImageSampleExplicitLod 1405 1406 Grad 1408 1408
+            1410:  7(f16vec4) Load 1390(texel)
+            1411:  7(f16vec4) FAdd 1410 1409
+                              Store 1390(texel) 1411
+            1412:         143 Load 145(s2D)
+            1413:154(f16vec2) Load 156(f16c2)
+            1415:154(f16vec2) Load 1414(f16dPdxy2)
+            1416:  7(f16vec4) ImageSampleExplicitLod 1412 1413 Grad 1415 1415
+            1417:  7(f16vec4) Load 1390(texel)
+            1418:  7(f16vec4) FAdd 1417 1416
+                              Store 1390(texel) 1418
+            1419:         163 Load 165(s3D)
+            1420:  167(fvec3) Load 169(c3)
+            1422:  167(fvec3) Load 1421(dPdxy3)
+            1423:  7(f16vec4) ImageSampleExplicitLod 1419 1420 Grad 1422 1422
+            1424:  7(f16vec4) Load 1390(texel)
+            1425:  7(f16vec4) FAdd 1424 1423
+                              Store 1390(texel) 1425
+            1426:         163 Load 165(s3D)
+            1427:175(f16vec3) Load 177(f16c3)
+            1429:175(f16vec3) Load 1428(f16dPdxy3)
+            1430:  7(f16vec4) ImageSampleExplicitLod 1426 1427 Grad 1429 1429
+            1431:  7(f16vec4) Load 1390(texel)
+            1432:  7(f16vec4) FAdd 1431 1430
+                              Store 1390(texel) 1432
+            1433:         184 Load 186(sCube)
+            1434:  167(fvec3) Load 169(c3)
+            1435:  167(fvec3) Load 1421(dPdxy3)
+            1436:  7(f16vec4) ImageSampleExplicitLod 1433 1434 Grad 1435 1435
             1437:  7(f16vec4) Load 1390(texel)
             1438:  7(f16vec4) 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(f16vec4) ImageSampleExplicitLod 1439 1440 Grad 1441 1442
-            1444:  7(f16vec4) Load 1390(texel)
-            1445:  7(f16vec4) FAdd 1444 1443
-                              Store 1390(texel) 1445
-            1446:         184 Load 186(sCube)
-            1447:175(f16vec3) Load 177(f16c3)
-            1448:175(f16vec3) Load 1433(f16dPdxy3)
-            1449:175(f16vec3) Load 1433(f16dPdxy3)
-            1450:  7(f16vec4) ImageSampleExplicitLod 1446 1447 Grad 1448 1449
-            1451:  7(f16vec4) Load 1390(texel)
-            1452:  7(f16vec4) 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(f16vec4) ImageSampleExplicitLod 1453 1454 Grad 1455 1456
-            1458:  7(f16vec4) Load 1390(texel)
-            1459:  7(f16vec4) FAdd 1458 1457
-                              Store 1390(texel) 1459
-            1460:         357 Load 359(s2DRect)
-            1461:154(f16vec2) Load 156(f16c2)
-            1462:154(f16vec2) Load 1417(f16dPdxy2)
-            1463:154(f16vec2) Load 1417(f16dPdxy2)
-            1464:  7(f16vec4) ImageSampleExplicitLod 1460 1461 Grad 1462 1463
-            1465:  7(f16vec4) Load 1390(texel)
-            1466:  7(f16vec4) 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(float16_t) ImageSampleDrefExplicitLod 1467 1468 1471 Grad 1469 1470
-            1473:    208(ptr) AccessChain 1390(texel) 207
-            1474:6(float16_t) Load 1473
-            1475:6(float16_t) FAdd 1474 1472
-            1476:    208(ptr) AccessChain 1390(texel) 207
-                              Store 1476 1475
-            1477:         371 Load 373(s2DRectShadow)
-            1478:154(f16vec2) Load 156(f16c2)
-            1479:   52(float) Load 215(compare)
-            1480:154(f16vec2) Load 1417(f16dPdxy2)
-            1481:154(f16vec2) Load 1417(f16dPdxy2)
-            1482:6(float16_t) ImageSampleDrefExplicitLod 1477 1478 1479 Grad 1480 1481
+            1440:175(f16vec3) Load 177(f16c3)
+            1441:175(f16vec3) Load 1428(f16dPdxy3)
+            1442:  7(f16vec4) ImageSampleExplicitLod 1439 1440 Grad 1441 1441
+            1443:  7(f16vec4) Load 1390(texel)
+            1444:  7(f16vec4) FAdd 1443 1442
+                              Store 1390(texel) 1444
+            1445:         357 Load 359(s2DRect)
+            1446:   53(fvec2) Load 148(c2)
+            1447:   53(fvec2) Load 1407(dPdxy2)
+            1448:  7(f16vec4) ImageSampleExplicitLod 1445 1446 Grad 1447 1447
+            1449:  7(f16vec4) Load 1390(texel)
+            1450:  7(f16vec4) FAdd 1449 1448
+                              Store 1390(texel) 1450
+            1451:         357 Load 359(s2DRect)
+            1452:154(f16vec2) Load 156(f16c2)
+            1453:154(f16vec2) Load 1414(f16dPdxy2)
+            1454:  7(f16vec4) ImageSampleExplicitLod 1451 1452 Grad 1453 1453
+            1455:  7(f16vec4) Load 1390(texel)
+            1456:  7(f16vec4) FAdd 1455 1454
+                              Store 1390(texel) 1456
+            1457:         371 Load 373(s2DRectShadow)
+            1458:  167(fvec3) Load 169(c3)
+            1459:   53(fvec2) Load 1407(dPdxy2)
+            1460:   52(float) CompositeExtract 1458 2
+            1461:6(float16_t) ImageSampleDrefExplicitLod 1457 1458 1460 Grad 1459 1459
+            1462:    208(ptr) AccessChain 1390(texel) 207
+            1463:6(float16_t) Load 1462
+            1464:6(float16_t) FAdd 1463 1461
+            1465:    208(ptr) AccessChain 1390(texel) 207
+                              Store 1465 1464
+            1466:         371 Load 373(s2DRectShadow)
+            1467:154(f16vec2) Load 156(f16c2)
+            1468:   52(float) Load 215(compare)
+            1469:154(f16vec2) Load 1414(f16dPdxy2)
+            1470:6(float16_t) ImageSampleDrefExplicitLod 1466 1467 1468 Grad 1469 1469
+            1471:    208(ptr) AccessChain 1390(texel) 207
+            1472:6(float16_t) Load 1471
+            1473:6(float16_t) FAdd 1472 1470
+            1474:    208(ptr) AccessChain 1390(texel) 207
+                              Store 1474 1473
+            1475:         199 Load 201(s1DShadow)
+            1476:  167(fvec3) Load 169(c3)
+            1477:   52(float) Load 1393(dPdxy1)
+            1478:   52(float) CompositeExtract 1476 2
+            1479:6(float16_t) ImageSampleDrefExplicitLod 1475 1476 1478 Grad 1477 1477
+            1480:    208(ptr) AccessChain 1390(texel) 207
+            1481:6(float16_t) Load 1480
+            1482:6(float16_t) FAdd 1481 1479
             1483:    208(ptr) AccessChain 1390(texel) 207
-            1484:6(float16_t) Load 1483
-            1485:6(float16_t) 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(float16_t) ImageSampleDrefExplicitLod 1487 1488 1491 Grad 1489 1490
-            1493:    208(ptr) AccessChain 1390(texel) 207
-            1494:6(float16_t) Load 1493
-            1495:6(float16_t) FAdd 1494 1492
-            1496:    208(ptr) AccessChain 1390(texel) 207
-                              Store 1496 1495
-            1497:         199 Load 201(s1DShadow)
-            1498:154(f16vec2) Load 156(f16c2)
-            1499:   52(float) Load 215(compare)
-            1500:6(float16_t) Load 1401(f16dPdxy1)
-            1501:6(float16_t) Load 1401(f16dPdxy1)
-            1502:6(float16_t) ImageSampleDrefExplicitLod 1497 1498 1499 Grad 1500 1501
-            1503:    208(ptr) AccessChain 1390(texel) 207
-            1504:6(float16_t) Load 1503
-            1505:6(float16_t) 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(float16_t) ImageSampleDrefExplicitLod 1507 1508 1511 Grad 1509 1510
-            1513:    208(ptr) AccessChain 1390(texel) 207
-            1514:6(float16_t) Load 1513
-            1515:6(float16_t) FAdd 1514 1512
+                              Store 1483 1482
+            1484:         199 Load 201(s1DShadow)
+            1485:154(f16vec2) Load 156(f16c2)
+            1486:   52(float) Load 215(compare)
+            1487:6(float16_t) Load 1400(f16dPdxy1)
+            1488:6(float16_t) ImageSampleDrefExplicitLod 1484 1485 1486 Grad 1487 1487
+            1489:    208(ptr) AccessChain 1390(texel) 207
+            1490:6(float16_t) Load 1489
+            1491:6(float16_t) FAdd 1490 1488
+            1492:    208(ptr) AccessChain 1390(texel) 207
+                              Store 1492 1491
+            1493:         224 Load 226(s2DShadow)
+            1494:  167(fvec3) Load 169(c3)
+            1495:   53(fvec2) Load 1407(dPdxy2)
+            1496:   52(float) CompositeExtract 1494 2
+            1497:6(float16_t) ImageSampleDrefExplicitLod 1493 1494 1496 Grad 1495 1495
+            1498:    208(ptr) AccessChain 1390(texel) 207
+            1499:6(float16_t) Load 1498
+            1500:6(float16_t) FAdd 1499 1497
+            1501:    208(ptr) AccessChain 1390(texel) 207
+                              Store 1501 1500
+            1502:         224 Load 226(s2DShadow)
+            1503:154(f16vec2) Load 156(f16c2)
+            1504:   52(float) Load 215(compare)
+            1505:154(f16vec2) Load 1414(f16dPdxy2)
+            1506:6(float16_t) ImageSampleDrefExplicitLod 1502 1503 1504 Grad 1505 1505
+            1507:    208(ptr) AccessChain 1390(texel) 207
+            1508:6(float16_t) Load 1507
+            1509:6(float16_t) FAdd 1508 1506
+            1510:    208(ptr) AccessChain 1390(texel) 207
+                              Store 1510 1509
+            1511:         245 Load 247(sCubeShadow)
+            1512:  249(fvec4) Load 251(c4)
+            1513:  167(fvec3) Load 1421(dPdxy3)
+            1514:   52(float) CompositeExtract 1512 3
+            1515:6(float16_t) ImageSampleDrefExplicitLod 1511 1512 1514 Grad 1513 1513
             1516:    208(ptr) AccessChain 1390(texel) 207
-                              Store 1516 1515
-            1517:         224 Load 226(s2DShadow)
-            1518:154(f16vec2) Load 156(f16c2)
-            1519:   52(float) Load 215(compare)
-            1520:154(f16vec2) Load 1417(f16dPdxy2)
-            1521:154(f16vec2) Load 1417(f16dPdxy2)
-            1522:6(float16_t) ImageSampleDrefExplicitLod 1517 1518 1519 Grad 1520 1521
-            1523:    208(ptr) AccessChain 1390(texel) 207
-            1524:6(float16_t) Load 1523
-            1525:6(float16_t) 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(float16_t) ImageSampleDrefExplicitLod 1527 1528 1531 Grad 1529 1530
-            1533:    208(ptr) AccessChain 1390(texel) 207
-            1534:6(float16_t) Load 1533
-            1535:6(float16_t) FAdd 1534 1532
-            1536:    208(ptr) AccessChain 1390(texel) 207
-                              Store 1536 1535
-            1537:         245 Load 247(sCubeShadow)
-            1538:175(f16vec3) Load 177(f16c3)
-            1539:   52(float) Load 215(compare)
-            1540:175(f16vec3) Load 1433(f16dPdxy3)
-            1541:175(f16vec3) Load 1433(f16dPdxy3)
-            1542:6(float16_t) ImageSampleDrefExplicitLod 1537 1538 1539 Grad 1540 1541
-            1543:    208(ptr) AccessChain 1390(texel) 207
-            1544:6(float16_t) Load 1543
-            1545:6(float16_t) 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(f16vec4) ImageSampleExplicitLod 1547 1548 Grad 1549 1550
-            1552:  7(f16vec4) Load 1390(texel)
-            1553:  7(f16vec4) FAdd 1552 1551
-                              Store 1390(texel) 1553
-            1554:         269 Load 271(s1DArray)
-            1555:154(f16vec2) Load 156(f16c2)
-            1556:6(float16_t) Load 1401(f16dPdxy1)
-            1557:6(float16_t) Load 1401(f16dPdxy1)
-            1558:  7(f16vec4) ImageSampleExplicitLod 1554 1555 Grad 1556 1557
-            1559:  7(f16vec4) Load 1390(texel)
-            1560:  7(f16vec4) 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(f16vec4) ImageSampleExplicitLod 1561 1562 Grad 1563 1564
-            1566:  7(f16vec4) Load 1390(texel)
-            1567:  7(f16vec4) FAdd 1566 1565
-                              Store 1390(texel) 1567
-            1568:         284 Load 286(s2DArray)
-            1569:175(f16vec3) Load 177(f16c3)
-            1570:154(f16vec2) Load 1417(f16dPdxy2)
-            1571:154(f16vec2) Load 1417(f16dPdxy2)
-            1572:  7(f16vec4) ImageSampleExplicitLod 1568 1569 Grad 1570 1571
-            1573:  7(f16vec4) Load 1390(texel)
-            1574:  7(f16vec4) 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(float16_t) ImageSampleDrefExplicitLod 1575 1576 1579 Grad 1577 1578
-            1581:    208(ptr) AccessChain 1390(texel) 207
-            1582:6(float16_t) Load 1581
-            1583:6(float16_t) FAdd 1582 1580
-            1584:    208(ptr) AccessChain 1390(texel) 207
-                              Store 1584 1583
-            1585:         316 Load 318(s1DArrayShadow)
-            1586:154(f16vec2) Load 156(f16c2)
-            1587:   52(float) Load 215(compare)
-            1588:6(float16_t) Load 1401(f16dPdxy1)
-            1589:6(float16_t) Load 1401(f16dPdxy1)
-            1590:6(float16_t) ImageSampleDrefExplicitLod 1585 1586 1587 Grad 1588 1589
-            1591:    208(ptr) AccessChain 1390(texel) 207
-            1592:6(float16_t) Load 1591
-            1593:6(float16_t) 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(float16_t) ImageSampleDrefExplicitLod 1595 1596 1599 Grad 1597 1598
-            1601:    208(ptr) AccessChain 1390(texel) 207
-            1602:6(float16_t) Load 1601
-            1603:6(float16_t) FAdd 1602 1600
-            1604:    208(ptr) AccessChain 1390(texel) 207
-                              Store 1604 1603
-            1605:         337 Load 339(s2DArrayShadow)
-            1606:175(f16vec3) Load 177(f16c3)
-            1607:   52(float) Load 215(compare)
-            1608:154(f16vec2) Load 1417(f16dPdxy2)
-            1609:154(f16vec2) Load 1417(f16dPdxy2)
-            1610:6(float16_t) ImageSampleDrefExplicitLod 1605 1606 1607 Grad 1608 1609
-            1611:    208(ptr) AccessChain 1390(texel) 207
-            1612:6(float16_t) Load 1611
-            1613:6(float16_t) 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(f16vec4) ImageSampleExplicitLod 1615 1616 Grad 1617 1618
-            1620:  7(f16vec4) Load 1390(texel)
-            1621:  7(f16vec4) FAdd 1620 1619
-                              Store 1390(texel) 1621
-            1622:         299 Load 301(sCubeArray)
-            1623:  7(f16vec4) Load 309(f16c4)
-            1624:175(f16vec3) Load 1433(f16dPdxy3)
-            1625:175(f16vec3) Load 1433(f16dPdxy3)
-            1626:  7(f16vec4) ImageSampleExplicitLod 1622 1623 Grad 1624 1625
-            1627:  7(f16vec4) Load 1390(texel)
-            1628:  7(f16vec4) FAdd 1627 1626
-                              Store 1390(texel) 1628
-            1629:  7(f16vec4) Load 1390(texel)
-                              ReturnValue 1629
+            1517:6(float16_t) Load 1516
+            1518:6(float16_t) FAdd 1517 1515
+            1519:    208(ptr) AccessChain 1390(texel) 207
+                              Store 1519 1518
+            1520:         245 Load 247(sCubeShadow)
+            1521:175(f16vec3) Load 177(f16c3)
+            1522:   52(float) Load 215(compare)
+            1523:175(f16vec3) Load 1428(f16dPdxy3)
+            1524:6(float16_t) ImageSampleDrefExplicitLod 1520 1521 1522 Grad 1523 1523
+            1525:    208(ptr) AccessChain 1390(texel) 207
+            1526:6(float16_t) Load 1525
+            1527:6(float16_t) FAdd 1526 1524
+            1528:    208(ptr) AccessChain 1390(texel) 207
+                              Store 1528 1527
+            1529:         269 Load 271(s1DArray)
+            1530:   53(fvec2) Load 148(c2)
+            1531:   52(float) Load 1393(dPdxy1)
+            1532:  7(f16vec4) ImageSampleExplicitLod 1529 1530 Grad 1531 1531
+            1533:  7(f16vec4) Load 1390(texel)
+            1534:  7(f16vec4) FAdd 1533 1532
+                              Store 1390(texel) 1534
+            1535:         269 Load 271(s1DArray)
+            1536:154(f16vec2) Load 156(f16c2)
+            1537:6(float16_t) Load 1400(f16dPdxy1)
+            1538:  7(f16vec4) ImageSampleExplicitLod 1535 1536 Grad 1537 1537
+            1539:  7(f16vec4) Load 1390(texel)
+            1540:  7(f16vec4) FAdd 1539 1538
+                              Store 1390(texel) 1540
+            1541:         284 Load 286(s2DArray)
+            1542:  167(fvec3) Load 169(c3)
+            1543:   53(fvec2) Load 1407(dPdxy2)
+            1544:  7(f16vec4) ImageSampleExplicitLod 1541 1542 Grad 1543 1543
+            1545:  7(f16vec4) Load 1390(texel)
+            1546:  7(f16vec4) FAdd 1545 1544
+                              Store 1390(texel) 1546
+            1547:         284 Load 286(s2DArray)
+            1548:175(f16vec3) Load 177(f16c3)
+            1549:154(f16vec2) Load 1414(f16dPdxy2)
+            1550:  7(f16vec4) ImageSampleExplicitLod 1547 1548 Grad 1549 1549
+            1551:  7(f16vec4) Load 1390(texel)
+            1552:  7(f16vec4) FAdd 1551 1550
+                              Store 1390(texel) 1552
+            1553:         316 Load 318(s1DArrayShadow)
+            1554:  167(fvec3) Load 169(c3)
+            1555:   52(float) Load 1393(dPdxy1)
+            1556:   52(float) CompositeExtract 1554 2
+            1557:6(float16_t) ImageSampleDrefExplicitLod 1553 1554 1556 Grad 1555 1555
+            1558:    208(ptr) AccessChain 1390(texel) 207
+            1559:6(float16_t) Load 1558
+            1560:6(float16_t) FAdd 1559 1557
+            1561:    208(ptr) AccessChain 1390(texel) 207
+                              Store 1561 1560
+            1562:         316 Load 318(s1DArrayShadow)
+            1563:154(f16vec2) Load 156(f16c2)
+            1564:   52(float) Load 215(compare)
+            1565:6(float16_t) Load 1400(f16dPdxy1)
+            1566:6(float16_t) ImageSampleDrefExplicitLod 1562 1563 1564 Grad 1565 1565
+            1567:    208(ptr) AccessChain 1390(texel) 207
+            1568:6(float16_t) Load 1567
+            1569:6(float16_t) FAdd 1568 1566
+            1570:    208(ptr) AccessChain 1390(texel) 207
+                              Store 1570 1569
+            1571:         337 Load 339(s2DArrayShadow)
+            1572:  249(fvec4) Load 251(c4)
+            1573:   53(fvec2) Load 1407(dPdxy2)
+            1574:   52(float) CompositeExtract 1572 3
+            1575:6(float16_t) ImageSampleDrefExplicitLod 1571 1572 1574 Grad 1573 1573
+            1576:    208(ptr) AccessChain 1390(texel) 207
+            1577:6(float16_t) Load 1576
+            1578:6(float16_t) FAdd 1577 1575
+            1579:    208(ptr) AccessChain 1390(texel) 207
+                              Store 1579 1578
+            1580:         337 Load 339(s2DArrayShadow)
+            1581:175(f16vec3) Load 177(f16c3)
+            1582:   52(float) Load 215(compare)
+            1583:154(f16vec2) Load 1414(f16dPdxy2)
+            1584:6(float16_t) ImageSampleDrefExplicitLod 1580 1581 1582 Grad 1583 1583
+            1585:    208(ptr) AccessChain 1390(texel) 207
+            1586:6(float16_t) Load 1585
+            1587:6(float16_t) FAdd 1586 1584
+            1588:    208(ptr) AccessChain 1390(texel) 207
+                              Store 1588 1587
+            1589:         299 Load 301(sCubeArray)
+            1590:  249(fvec4) Load 251(c4)
+            1591:  167(fvec3) Load 1421(dPdxy3)
+            1592:  7(f16vec4) ImageSampleExplicitLod 1589 1590 Grad 1591 1591
+            1593:  7(f16vec4) Load 1390(texel)
+            1594:  7(f16vec4) FAdd 1593 1592
+                              Store 1390(texel) 1594
+            1595:         299 Load 301(sCubeArray)
+            1596:  7(f16vec4) Load 309(f16c4)
+            1597:175(f16vec3) Load 1428(f16dPdxy3)
+            1598:  7(f16vec4) ImageSampleExplicitLod 1595 1596 Grad 1597 1597
+            1599:  7(f16vec4) Load 1390(texel)
+            1600:  7(f16vec4) FAdd 1599 1598
+                              Store 1390(texel) 1600
+            1601:  7(f16vec4) Load 1390(texel)
+                              ReturnValue 1601
                               FunctionEnd
 29(testTextureGradOffset():  7(f16vec4) 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(f16vec4) ImageSampleExplicitLod 1633 1634 Grad ConstOffset 1635 1636 709
-            1638:  7(f16vec4) Load 1632(texel)
-            1639:  7(f16vec4) FAdd 1638 1637
-                              Store 1632(texel) 1639
-            1640:         123 Load 125(s1D)
-            1641:6(float16_t) Load 135(f16c1)
-            1642:6(float16_t) Load 1401(f16dPdxy1)
-            1643:6(float16_t) Load 1401(f16dPdxy1)
-            1644:  7(f16vec4) ImageSampleExplicitLod 1640 1641 Grad ConstOffset 1642 1643 709
-            1645:  7(f16vec4) Load 1632(texel)
+     1604(texel):     64(ptr) Variable Function
+                              Store 1604(texel) 121
+            1605:         123 Load 125(s1D)
+            1606:   52(float) Load 128(c1)
+            1607:   52(float) Load 1393(dPdxy1)
+            1608:  7(f16vec4) ImageSampleExplicitLod 1605 1606 Grad ConstOffset 1607 1607 709
+            1609:  7(f16vec4) Load 1604(texel)
+            1610:  7(f16vec4) FAdd 1609 1608
+                              Store 1604(texel) 1610
+            1611:         123 Load 125(s1D)
+            1612:6(float16_t) Load 135(f16c1)
+            1613:6(float16_t) Load 1400(f16dPdxy1)
+            1614:  7(f16vec4) ImageSampleExplicitLod 1611 1612 Grad ConstOffset 1613 1613 709
+            1615:  7(f16vec4) Load 1604(texel)
+            1616:  7(f16vec4) FAdd 1615 1614
+                              Store 1604(texel) 1616
+            1617:         143 Load 145(s2D)
+            1618:   53(fvec2) Load 148(c2)
+            1619:   53(fvec2) Load 1407(dPdxy2)
+            1620:  7(f16vec4) ImageSampleExplicitLod 1617 1618 Grad ConstOffset 1619 1619 722
+            1621:  7(f16vec4) Load 1604(texel)
+            1622:  7(f16vec4) FAdd 1621 1620
+                              Store 1604(texel) 1622
+            1623:         143 Load 145(s2D)
+            1624:154(f16vec2) Load 156(f16c2)
+            1625:154(f16vec2) Load 1414(f16dPdxy2)
+            1626:  7(f16vec4) ImageSampleExplicitLod 1623 1624 Grad ConstOffset 1625 1625 722
+            1627:  7(f16vec4) Load 1604(texel)
+            1628:  7(f16vec4) FAdd 1627 1626
+                              Store 1604(texel) 1628
+            1629:         163 Load 165(s3D)
+            1630:  167(fvec3) Load 169(c3)
+            1631:  167(fvec3) Load 1421(dPdxy3)
+            1632:  7(f16vec4) ImageSampleExplicitLod 1629 1630 Grad ConstOffset 1631 1631 735
+            1633:  7(f16vec4) Load 1604(texel)
+            1634:  7(f16vec4) FAdd 1633 1632
+                              Store 1604(texel) 1634
+            1635:         163 Load 165(s3D)
+            1636:175(f16vec3) Load 177(f16c3)
+            1637:175(f16vec3) Load 1428(f16dPdxy3)
+            1638:  7(f16vec4) ImageSampleExplicitLod 1635 1636 Grad ConstOffset 1637 1637 735
+            1639:  7(f16vec4) Load 1604(texel)
+            1640:  7(f16vec4) FAdd 1639 1638
+                              Store 1604(texel) 1640
+            1641:         357 Load 359(s2DRect)
+            1642:   53(fvec2) Load 148(c2)
+            1643:   53(fvec2) Load 1407(dPdxy2)
+            1644:  7(f16vec4) ImageSampleExplicitLod 1641 1642 Grad ConstOffset 1643 1643 722
+            1645:  7(f16vec4) Load 1604(texel)
             1646:  7(f16vec4) 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(f16vec4) ImageSampleExplicitLod 1647 1648 Grad ConstOffset 1649 1650 722
-            1652:  7(f16vec4) Load 1632(texel)
-            1653:  7(f16vec4) FAdd 1652 1651
-                              Store 1632(texel) 1653
-            1654:         143 Load 145(s2D)
-            1655:154(f16vec2) Load 156(f16c2)
-            1656:154(f16vec2) Load 1417(f16dPdxy2)
-            1657:154(f16vec2) Load 1417(f16dPdxy2)
-            1658:  7(f16vec4) ImageSampleExplicitLod 1654 1655 Grad ConstOffset 1656 1657 722
-            1659:  7(f16vec4) Load 1632(texel)
-            1660:  7(f16vec4) 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(f16vec4) ImageSampleExplicitLod 1661 1662 Grad ConstOffset 1663 1664 735
-            1666:  7(f16vec4) Load 1632(texel)
-            1667:  7(f16vec4) FAdd 1666 1665
-                              Store 1632(texel) 1667
-            1668:         163 Load 165(s3D)
-            1669:175(f16vec3) Load 177(f16c3)
-            1670:175(f16vec3) Load 1433(f16dPdxy3)
-            1671:175(f16vec3) Load 1433(f16dPdxy3)
-            1672:  7(f16vec4) ImageSampleExplicitLod 1668 1669 Grad ConstOffset 1670 1671 735
-            1673:  7(f16vec4) Load 1632(texel)
-            1674:  7(f16vec4) 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(f16vec4) ImageSampleExplicitLod 1675 1676 Grad ConstOffset 1677 1678 722
-            1680:  7(f16vec4) Load 1632(texel)
-            1681:  7(f16vec4) FAdd 1680 1679
-                              Store 1632(texel) 1681
-            1682:         357 Load 359(s2DRect)
-            1683:154(f16vec2) Load 156(f16c2)
-            1684:154(f16vec2) Load 1417(f16dPdxy2)
-            1685:154(f16vec2) Load 1417(f16dPdxy2)
-            1686:  7(f16vec4) ImageSampleExplicitLod 1682 1683 Grad ConstOffset 1684 1685 722
-            1687:  7(f16vec4) Load 1632(texel)
-            1688:  7(f16vec4) FAdd 1687 1686
-                              Store 1632(texel) 1688
-            1689:         371 Load 373(s2DRectShadow)
+                              Store 1604(texel) 1646
+            1647:         357 Load 359(s2DRect)
+            1648:154(f16vec2) Load 156(f16c2)
+            1649:154(f16vec2) Load 1414(f16dPdxy2)
+            1650:  7(f16vec4) ImageSampleExplicitLod 1647 1648 Grad ConstOffset 1649 1649 722
+            1651:  7(f16vec4) Load 1604(texel)
+            1652:  7(f16vec4) FAdd 1651 1650
+                              Store 1604(texel) 1652
+            1653:         371 Load 373(s2DRectShadow)
+            1654:  167(fvec3) Load 169(c3)
+            1655:   53(fvec2) Load 1407(dPdxy2)
+            1656:   52(float) CompositeExtract 1654 2
+            1657:6(float16_t) ImageSampleDrefExplicitLod 1653 1654 1656 Grad ConstOffset 1655 1655 722
+            1658:    208(ptr) AccessChain 1604(texel) 207
+            1659:6(float16_t) Load 1658
+            1660:6(float16_t) FAdd 1659 1657
+            1661:    208(ptr) AccessChain 1604(texel) 207
+                              Store 1661 1660
+            1662:         371 Load 373(s2DRectShadow)
+            1663:154(f16vec2) Load 156(f16c2)
+            1664:   52(float) Load 215(compare)
+            1665:154(f16vec2) Load 1414(f16dPdxy2)
+            1666:6(float16_t) ImageSampleDrefExplicitLod 1662 1663 1664 Grad ConstOffset 1665 1665 722
+            1667:    208(ptr) AccessChain 1604(texel) 207
+            1668:6(float16_t) Load 1667
+            1669:6(float16_t) FAdd 1668 1666
+            1670:    208(ptr) AccessChain 1604(texel) 207
+                              Store 1670 1669
+            1671:         199 Load 201(s1DShadow)
+            1672:  167(fvec3) Load 169(c3)
+            1673:   52(float) Load 1393(dPdxy1)
+            1674:   52(float) CompositeExtract 1672 2
+            1675:6(float16_t) ImageSampleDrefExplicitLod 1671 1672 1674 Grad ConstOffset 1673 1673 709
+            1676:    208(ptr) AccessChain 1604(texel) 207
+            1677:6(float16_t) Load 1676
+            1678:6(float16_t) FAdd 1677 1675
+            1679:    208(ptr) AccessChain 1604(texel) 207
+                              Store 1679 1678
+            1680:         199 Load 201(s1DShadow)
+            1681:154(f16vec2) Load 156(f16c2)
+            1682:   52(float) Load 215(compare)
+            1683:6(float16_t) Load 1400(f16dPdxy1)
+            1684:6(float16_t) ImageSampleDrefExplicitLod 1680 1681 1682 Grad ConstOffset 1683 1683 709
+            1685:    208(ptr) AccessChain 1604(texel) 207
+            1686:6(float16_t) Load 1685
+            1687:6(float16_t) FAdd 1686 1684
+            1688:    208(ptr) AccessChain 1604(texel) 207
+                              Store 1688 1687
+            1689:         224 Load 226(s2DShadow)
             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(float16_t) ImageSampleDrefExplicitLod 1689 1690 1693 Grad ConstOffset 1691 1692 722
-            1695:    208(ptr) AccessChain 1632(texel) 207
-            1696:6(float16_t) Load 1695
-            1697:6(float16_t) FAdd 1696 1694
-            1698:    208(ptr) AccessChain 1632(texel) 207
-                              Store 1698 1697
-            1699:         371 Load 373(s2DRectShadow)
-            1700:154(f16vec2) Load 156(f16c2)
-            1701:   52(float) Load 215(compare)
-            1702:154(f16vec2) Load 1417(f16dPdxy2)
-            1703:154(f16vec2) Load 1417(f16dPdxy2)
-            1704:6(float16_t) ImageSampleDrefExplicitLod 1699 1700 1701 Grad ConstOffset 1702 1703 722
-            1705:    208(ptr) AccessChain 1632(texel) 207
-            1706:6(float16_t) Load 1705
-            1707:6(float16_t) 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(float16_t) ImageSampleDrefExplicitLod 1709 1710 1713 Grad ConstOffset 1711 1712 709
-            1715:    208(ptr) AccessChain 1632(texel) 207
-            1716:6(float16_t) Load 1715
-            1717:6(float16_t) FAdd 1716 1714
-            1718:    208(ptr) AccessChain 1632(texel) 207
-                              Store 1718 1717
-            1719:         199 Load 201(s1DShadow)
-            1720:154(f16vec2) Load 156(f16c2)
-            1721:   52(float) Load 215(compare)
-            1722:6(float16_t) Load 1401(f16dPdxy1)
-            1723:6(float16_t) Load 1401(f16dPdxy1)
-            1724:6(float16_t) ImageSampleDrefExplicitLod 1719 1720 1721 Grad ConstOffset 1722 1723 709
-            1725:    208(ptr) AccessChain 1632(texel) 207
-            1726:6(float16_t) Load 1725
-            1727:6(float16_t) 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(float16_t) ImageSampleDrefExplicitLod 1729 1730 1733 Grad ConstOffset 1731 1732 722
-            1735:    208(ptr) AccessChain 1632(texel) 207
-            1736:6(float16_t) Load 1735
-            1737:6(float16_t) FAdd 1736 1734
-            1738:    208(ptr) AccessChain 1632(texel) 207
-                              Store 1738 1737
-            1739:         224 Load 226(s2DShadow)
-            1740:154(f16vec2) Load 156(f16c2)
-            1741:   52(float) Load 215(compare)
-            1742:154(f16vec2) Load 1417(f16dPdxy2)
-            1743:154(f16vec2) Load 1417(f16dPdxy2)
-            1744:6(float16_t) ImageSampleDrefExplicitLod 1739 1740 1741 Grad ConstOffset 1742 1743 722
-            1745:    208(ptr) AccessChain 1632(texel) 207
+            1691:   53(fvec2) Load 1407(dPdxy2)
+            1692:   52(float) CompositeExtract 1690 2
+            1693:6(float16_t) ImageSampleDrefExplicitLod 1689 1690 1692 Grad ConstOffset 1691 1691 722
+            1694:    208(ptr) AccessChain 1604(texel) 207
+            1695:6(float16_t) Load 1694
+            1696:6(float16_t) FAdd 1695 1693
+            1697:    208(ptr) AccessChain 1604(texel) 207
+                              Store 1697 1696
+            1698:         224 Load 226(s2DShadow)
+            1699:154(f16vec2) Load 156(f16c2)
+            1700:   52(float) Load 215(compare)
+            1701:154(f16vec2) Load 1414(f16dPdxy2)
+            1702:6(float16_t) ImageSampleDrefExplicitLod 1698 1699 1700 Grad ConstOffset 1701 1701 722
+            1703:    208(ptr) AccessChain 1604(texel) 207
+            1704:6(float16_t) Load 1703
+            1705:6(float16_t) FAdd 1704 1702
+            1706:    208(ptr) AccessChain 1604(texel) 207
+                              Store 1706 1705
+            1707:         269 Load 271(s1DArray)
+            1708:   53(fvec2) Load 148(c2)
+            1709:   52(float) Load 1393(dPdxy1)
+            1710:  7(f16vec4) ImageSampleExplicitLod 1707 1708 Grad ConstOffset 1709 1709 709
+            1711:  7(f16vec4) Load 1604(texel)
+            1712:  7(f16vec4) FAdd 1711 1710
+                              Store 1604(texel) 1712
+            1713:         269 Load 271(s1DArray)
+            1714:154(f16vec2) Load 156(f16c2)
+            1715:6(float16_t) Load 1400(f16dPdxy1)
+            1716:  7(f16vec4) ImageSampleExplicitLod 1713 1714 Grad ConstOffset 1715 1715 709
+            1717:  7(f16vec4) Load 1604(texel)
+            1718:  7(f16vec4) FAdd 1717 1716
+                              Store 1604(texel) 1718
+            1719:         284 Load 286(s2DArray)
+            1720:  167(fvec3) Load 169(c3)
+            1721:   53(fvec2) Load 1407(dPdxy2)
+            1722:  7(f16vec4) ImageSampleExplicitLod 1719 1720 Grad ConstOffset 1721 1721 722
+            1723:  7(f16vec4) Load 1604(texel)
+            1724:  7(f16vec4) FAdd 1723 1722
+                              Store 1604(texel) 1724
+            1725:         284 Load 286(s2DArray)
+            1726:175(f16vec3) Load 177(f16c3)
+            1727:154(f16vec2) Load 1414(f16dPdxy2)
+            1728:  7(f16vec4) ImageSampleExplicitLod 1725 1726 Grad ConstOffset 1727 1727 722
+            1729:  7(f16vec4) Load 1604(texel)
+            1730:  7(f16vec4) FAdd 1729 1728
+                              Store 1604(texel) 1730
+            1731:         316 Load 318(s1DArrayShadow)
+            1732:  167(fvec3) Load 169(c3)
+            1733:   52(float) Load 1393(dPdxy1)
+            1734:   52(float) CompositeExtract 1732 2
+            1735:6(float16_t) ImageSampleDrefExplicitLod 1731 1732 1734 Grad ConstOffset 1733 1733 709
+            1736:    208(ptr) AccessChain 1604(texel) 207
+            1737:6(float16_t) Load 1736
+            1738:6(float16_t) FAdd 1737 1735
+            1739:    208(ptr) AccessChain 1604(texel) 207
+                              Store 1739 1738
+            1740:         316 Load 318(s1DArrayShadow)
+            1741:154(f16vec2) Load 156(f16c2)
+            1742:   52(float) Load 215(compare)
+            1743:6(float16_t) Load 1400(f16dPdxy1)
+            1744:6(float16_t) ImageSampleDrefExplicitLod 1740 1741 1742 Grad ConstOffset 1743 1743 709
+            1745:    208(ptr) AccessChain 1604(texel) 207
             1746:6(float16_t) Load 1745
             1747:6(float16_t) FAdd 1746 1744
-            1748:    208(ptr) AccessChain 1632(texel) 207
+            1748:    208(ptr) AccessChain 1604(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(f16vec4) ImageSampleExplicitLod 1749 1750 Grad ConstOffset 1751 1752 709
-            1754:  7(f16vec4) Load 1632(texel)
-            1755:  7(f16vec4) FAdd 1754 1753
-                              Store 1632(texel) 1755
-            1756:         269 Load 271(s1DArray)
-            1757:154(f16vec2) Load 156(f16c2)
-            1758:6(float16_t) Load 1401(f16dPdxy1)
-            1759:6(float16_t) Load 1401(f16dPdxy1)
-            1760:  7(f16vec4) ImageSampleExplicitLod 1756 1757 Grad ConstOffset 1758 1759 709
-            1761:  7(f16vec4) Load 1632(texel)
-            1762:  7(f16vec4) 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(f16vec4) ImageSampleExplicitLod 1763 1764 Grad ConstOffset 1765 1766 722
-            1768:  7(f16vec4) Load 1632(texel)
-            1769:  7(f16vec4) FAdd 1768 1767
-                              Store 1632(texel) 1769
-            1770:         284 Load 286(s2DArray)
-            1771:175(f16vec3) Load 177(f16c3)
-            1772:154(f16vec2) Load 1417(f16dPdxy2)
-            1773:154(f16vec2) Load 1417(f16dPdxy2)
-            1774:  7(f16vec4) ImageSampleExplicitLod 1770 1771 Grad ConstOffset 1772 1773 722
-            1775:  7(f16vec4) Load 1632(texel)
-            1776:  7(f16vec4) 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(float16_t) ImageSampleDrefExplicitLod 1777 1778 1781 Grad ConstOffset 1779 1780 709
-            1783:    208(ptr) AccessChain 1632(texel) 207
-            1784:6(float16_t) Load 1783
-            1785:6(float16_t) FAdd 1784 1782
-            1786:    208(ptr) AccessChain 1632(texel) 207
-                              Store 1786 1785
-            1787:         316 Load 318(s1DArrayShadow)
-            1788:154(f16vec2) Load 156(f16c2)
-            1789:   52(float) Load 215(compare)
-            1790:6(float16_t) Load 1401(f16dPdxy1)
-            1791:6(float16_t) Load 1401(f16dPdxy1)
-            1792:6(float16_t) ImageSampleDrefExplicitLod 1787 1788 1789 Grad ConstOffset 1790 1791 709
-            1793:    208(ptr) AccessChain 1632(texel) 207
-            1794:6(float16_t) Load 1793
-            1795:6(float16_t) 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(float16_t) ImageSampleDrefExplicitLod 1797 1798 1801 Grad ConstOffset 1799 1800 722
-            1803:    208(ptr) AccessChain 1632(texel) 207
-            1804:6(float16_t) Load 1803
-            1805:6(float16_t) FAdd 1804 1802
-            1806:    208(ptr) AccessChain 1632(texel) 207
-                              Store 1806 1805
-            1807:         337 Load 339(s2DArrayShadow)
-            1808:175(f16vec3) Load 177(f16c3)
-            1809:   52(float) Load 215(compare)
-            1810:154(f16vec2) Load 1417(f16dPdxy2)
-            1811:154(f16vec2) Load 1417(f16dPdxy2)
-            1812:6(float16_t) ImageSampleDrefExplicitLod 1807 1808 1809 Grad ConstOffset 1810 1811 722
-            1813:    208(ptr) AccessChain 1632(texel) 207
-            1814:6(float16_t) Load 1813
-            1815:6(float16_t) FAdd 1814 1812
-            1816:    208(ptr) AccessChain 1632(texel) 207
-                              Store 1816 1815
-            1817:  7(f16vec4) Load 1632(texel)
-                              ReturnValue 1817
+            1749:         337 Load 339(s2DArrayShadow)
+            1750:  249(fvec4) Load 251(c4)
+            1751:   53(fvec2) Load 1407(dPdxy2)
+            1752:   52(float) CompositeExtract 1750 3
+            1753:6(float16_t) ImageSampleDrefExplicitLod 1749 1750 1752 Grad ConstOffset 1751 1751 722
+            1754:    208(ptr) AccessChain 1604(texel) 207
+            1755:6(float16_t) Load 1754
+            1756:6(float16_t) FAdd 1755 1753
+            1757:    208(ptr) AccessChain 1604(texel) 207
+                              Store 1757 1756
+            1758:         337 Load 339(s2DArrayShadow)
+            1759:175(f16vec3) Load 177(f16c3)
+            1760:   52(float) Load 215(compare)
+            1761:154(f16vec2) Load 1414(f16dPdxy2)
+            1762:6(float16_t) ImageSampleDrefExplicitLod 1758 1759 1760 Grad ConstOffset 1761 1761 722
+            1763:    208(ptr) AccessChain 1604(texel) 207
+            1764:6(float16_t) Load 1763
+            1765:6(float16_t) FAdd 1764 1762
+            1766:    208(ptr) AccessChain 1604(texel) 207
+                              Store 1766 1765
+            1767:  7(f16vec4) Load 1604(texel)
+                              ReturnValue 1767
                               FunctionEnd
 31(testTextureProjGrad():  7(f16vec4) 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(f16vec4) ImageSampleProjExplicitLod 1821 1822 Grad 1823 1824
-            1826:  7(f16vec4) Load 1820(texel)
-            1827:  7(f16vec4) FAdd 1826 1825
-                              Store 1820(texel) 1827
-            1828:         123 Load 125(s1D)
-            1829:154(f16vec2) Load 156(f16c2)
-            1830:6(float16_t) Load 1401(f16dPdxy1)
-            1831:6(float16_t) Load 1401(f16dPdxy1)
-            1832:  7(f16vec4) ImageSampleProjExplicitLod 1828 1829 Grad 1830 1831
-            1833:  7(f16vec4) Load 1820(texel)
-            1834:  7(f16vec4) 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(f16vec4) ImageSampleProjExplicitLod 1835 1840 Grad 1837 1838
-            1842:  7(f16vec4) Load 1820(texel)
-            1843:  7(f16vec4) FAdd 1842 1841
-                              Store 1820(texel) 1843
-            1844:         123 Load 125(s1D)
-            1845:  7(f16vec4) Load 309(f16c4)
-            1846:6(float16_t) Load 1401(f16dPdxy1)
-            1847:6(float16_t) Load 1401(f16dPdxy1)
-            1848:6(float16_t) CompositeExtract 1845 3
-            1849:  7(f16vec4) CompositeInsert 1848 1845 1
-            1850:  7(f16vec4) ImageSampleProjExplicitLod 1844 1849 Grad 1846 1847
-            1851:  7(f16vec4) Load 1820(texel)
-            1852:  7(f16vec4) 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(f16vec4) ImageSampleProjExplicitLod 1853 1854 Grad 1855 1856
-            1858:  7(f16vec4) Load 1820(texel)
-            1859:  7(f16vec4) FAdd 1858 1857
-                              Store 1820(texel) 1859
-            1860:         143 Load 145(s2D)
-            1861:175(f16vec3) Load 177(f16c3)
-            1862:154(f16vec2) Load 1417(f16dPdxy2)
-            1863:154(f16vec2) Load 1417(f16dPdxy2)
-            1864:  7(f16vec4) ImageSampleProjExplicitLod 1860 1861 Grad 1862 1863
-            1865:  7(f16vec4) Load 1820(texel)
+     1770(texel):     64(ptr) Variable Function
+                              Store 1770(texel) 121
+            1771:         123 Load 125(s1D)
+            1772:   53(fvec2) Load 148(c2)
+            1773:   52(float) Load 1393(dPdxy1)
+            1774:  7(f16vec4) ImageSampleProjExplicitLod 1771 1772 Grad 1773 1773
+            1775:  7(f16vec4) Load 1770(texel)
+            1776:  7(f16vec4) FAdd 1775 1774
+                              Store 1770(texel) 1776
+            1777:         123 Load 125(s1D)
+            1778:154(f16vec2) Load 156(f16c2)
+            1779:6(float16_t) Load 1400(f16dPdxy1)
+            1780:  7(f16vec4) ImageSampleProjExplicitLod 1777 1778 Grad 1779 1779
+            1781:  7(f16vec4) Load 1770(texel)
+            1782:  7(f16vec4) FAdd 1781 1780
+                              Store 1770(texel) 1782
+            1783:         123 Load 125(s1D)
+            1784:  249(fvec4) Load 251(c4)
+            1785:   52(float) Load 1393(dPdxy1)
+            1786:   52(float) CompositeExtract 1784 3
+            1787:  249(fvec4) CompositeInsert 1786 1784 1
+            1788:  7(f16vec4) ImageSampleProjExplicitLod 1783 1787 Grad 1785 1785
+            1789:  7(f16vec4) Load 1770(texel)
+            1790:  7(f16vec4) FAdd 1789 1788
+                              Store 1770(texel) 1790
+            1791:         123 Load 125(s1D)
+            1792:  7(f16vec4) Load 309(f16c4)
+            1793:6(float16_t) Load 1400(f16dPdxy1)
+            1794:6(float16_t) CompositeExtract 1792 3
+            1795:  7(f16vec4) CompositeInsert 1794 1792 1
+            1796:  7(f16vec4) ImageSampleProjExplicitLod 1791 1795 Grad 1793 1793
+            1797:  7(f16vec4) Load 1770(texel)
+            1798:  7(f16vec4) FAdd 1797 1796
+                              Store 1770(texel) 1798
+            1799:         143 Load 145(s2D)
+            1800:  167(fvec3) Load 169(c3)
+            1801:   53(fvec2) Load 1407(dPdxy2)
+            1802:  7(f16vec4) ImageSampleProjExplicitLod 1799 1800 Grad 1801 1801
+            1803:  7(f16vec4) Load 1770(texel)
+            1804:  7(f16vec4) FAdd 1803 1802
+                              Store 1770(texel) 1804
+            1805:         143 Load 145(s2D)
+            1806:175(f16vec3) Load 177(f16c3)
+            1807:154(f16vec2) Load 1414(f16dPdxy2)
+            1808:  7(f16vec4) ImageSampleProjExplicitLod 1805 1806 Grad 1807 1807
+            1809:  7(f16vec4) Load 1770(texel)
+            1810:  7(f16vec4) FAdd 1809 1808
+                              Store 1770(texel) 1810
+            1811:         143 Load 145(s2D)
+            1812:  249(fvec4) Load 251(c4)
+            1813:   53(fvec2) Load 1407(dPdxy2)
+            1814:   52(float) CompositeExtract 1812 3
+            1815:  249(fvec4) CompositeInsert 1814 1812 2
+            1816:  7(f16vec4) ImageSampleProjExplicitLod 1811 1815 Grad 1813 1813
+            1817:  7(f16vec4) Load 1770(texel)
+            1818:  7(f16vec4) FAdd 1817 1816
+                              Store 1770(texel) 1818
+            1819:         143 Load 145(s2D)
+            1820:  7(f16vec4) Load 309(f16c4)
+            1821:154(f16vec2) Load 1414(f16dPdxy2)
+            1822:6(float16_t) CompositeExtract 1820 3
+            1823:  7(f16vec4) CompositeInsert 1822 1820 2
+            1824:  7(f16vec4) ImageSampleProjExplicitLod 1819 1823 Grad 1821 1821
+            1825:  7(f16vec4) Load 1770(texel)
+            1826:  7(f16vec4) FAdd 1825 1824
+                              Store 1770(texel) 1826
+            1827:         163 Load 165(s3D)
+            1828:  249(fvec4) Load 251(c4)
+            1829:  167(fvec3) Load 1421(dPdxy3)
+            1830:  7(f16vec4) ImageSampleProjExplicitLod 1827 1828 Grad 1829 1829
+            1831:  7(f16vec4) Load 1770(texel)
+            1832:  7(f16vec4) FAdd 1831 1830
+                              Store 1770(texel) 1832
+            1833:         163 Load 165(s3D)
+            1834:  7(f16vec4) Load 309(f16c4)
+            1835:175(f16vec3) Load 1428(f16dPdxy3)
+            1836:  7(f16vec4) ImageSampleProjExplicitLod 1833 1834 Grad 1835 1835
+            1837:  7(f16vec4) Load 1770(texel)
+            1838:  7(f16vec4) FAdd 1837 1836
+                              Store 1770(texel) 1838
+            1839:         357 Load 359(s2DRect)
+            1840:  167(fvec3) Load 169(c3)
+            1841:   53(fvec2) Load 1407(dPdxy2)
+            1842:  7(f16vec4) ImageSampleProjExplicitLod 1839 1840 Grad 1841 1841
+            1843:  7(f16vec4) Load 1770(texel)
+            1844:  7(f16vec4) FAdd 1843 1842
+                              Store 1770(texel) 1844
+            1845:         357 Load 359(s2DRect)
+            1846:175(f16vec3) Load 177(f16c3)
+            1847:154(f16vec2) Load 1414(f16dPdxy2)
+            1848:  7(f16vec4) ImageSampleProjExplicitLod 1845 1846 Grad 1847 1847
+            1849:  7(f16vec4) Load 1770(texel)
+            1850:  7(f16vec4) FAdd 1849 1848
+                              Store 1770(texel) 1850
+            1851:         357 Load 359(s2DRect)
+            1852:  249(fvec4) Load 251(c4)
+            1853:   53(fvec2) Load 1407(dPdxy2)
+            1854:   52(float) CompositeExtract 1852 3
+            1855:  249(fvec4) CompositeInsert 1854 1852 2
+            1856:  7(f16vec4) ImageSampleProjExplicitLod 1851 1855 Grad 1853 1853
+            1857:  7(f16vec4) Load 1770(texel)
+            1858:  7(f16vec4) FAdd 1857 1856
+                              Store 1770(texel) 1858
+            1859:         357 Load 359(s2DRect)
+            1860:  7(f16vec4) Load 309(f16c4)
+            1861:154(f16vec2) Load 1414(f16dPdxy2)
+            1862:6(float16_t) CompositeExtract 1860 3
+            1863:  7(f16vec4) CompositeInsert 1862 1860 2
+            1864:  7(f16vec4) ImageSampleProjExplicitLod 1859 1863 Grad 1861 1861
+            1865:  7(f16vec4) Load 1770(texel)
             1866:  7(f16vec4) FAdd 1865 1864
-                              Store 1820(texel) 1866
-            1867:         143 Load 145(s2D)
+                              Store 1770(texel) 1866
+            1867:         371 Load 373(s2DRectShadow)
             1868:  249(fvec4) Load 251(c4)
-            1869:   53(fvec2) Load 1409(dPdxy2)
-            1870:   53(fvec2) Load 1409(dPdxy2)
+            1869:   53(fvec2) Load 1407(dPdxy2)
+            1870:   52(float) CompositeExtract 1868 2
             1871:   52(float) CompositeExtract 1868 3
             1872:  249(fvec4) CompositeInsert 1871 1868 2
-            1873:  7(f16vec4) ImageSampleProjExplicitLod 1867 1872 Grad 1869 1870
-            1874:  7(f16vec4) Load 1820(texel)
-            1875:  7(f16vec4) FAdd 1874 1873
-                              Store 1820(texel) 1875
-            1876:         143 Load 145(s2D)
-            1877:  7(f16vec4) Load 309(f16c4)
-            1878:154(f16vec2) Load 1417(f16dPdxy2)
-            1879:154(f16vec2) Load 1417(f16dPdxy2)
-            1880:6(float16_t) CompositeExtract 1877 3
-            1881:  7(f16vec4) CompositeInsert 1880 1877 2
-            1882:  7(f16vec4) ImageSampleProjExplicitLod 1876 1881 Grad 1878 1879
-            1883:  7(f16vec4) Load 1820(texel)
-            1884:  7(f16vec4) 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(f16vec4) ImageSampleProjExplicitLod 1885 1886 Grad 1887 1888
-            1890:  7(f16vec4) Load 1820(texel)
-            1891:  7(f16vec4) FAdd 1890 1889
-                              Store 1820(texel) 1891
-            1892:         163 Load 165(s3D)
-            1893:  7(f16vec4) Load 309(f16c4)
-            1894:175(f16vec3) Load 1433(f16dPdxy3)
-            1895:175(f16vec3) Load 1433(f16dPdxy3)
-            1896:  7(f16vec4) ImageSampleProjExplicitLod 1892 1893 Grad 1894 1895
-            1897:  7(f16vec4) Load 1820(texel)
-            1898:  7(f16vec4) 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(f16vec4) ImageSampleProjExplicitLod 1899 1900 Grad 1901 1902
-            1904:  7(f16vec4) Load 1820(texel)
-            1905:  7(f16vec4) FAdd 1904 1903
-                              Store 1820(texel) 1905
-            1906:         357 Load 359(s2DRect)
-            1907:175(f16vec3) Load 177(f16c3)
-            1908:154(f16vec2) Load 1417(f16dPdxy2)
-            1909:154(f16vec2) Load 1417(f16dPdxy2)
-            1910:  7(f16vec4) ImageSampleProjExplicitLod 1906 1907 Grad 1908 1909
-            1911:  7(f16vec4) Load 1820(texel)
-            1912:  7(f16vec4) 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(f16vec4) ImageSampleProjExplicitLod 1913 1918 Grad 1915 1916
-            1920:  7(f16vec4) Load 1820(texel)
-            1921:  7(f16vec4) FAdd 1920 1919
-                              Store 1820(texel) 1921
-            1922:         357 Load 359(s2DRect)
-            1923:  7(f16vec4) Load 309(f16c4)
-            1924:154(f16vec2) Load 1417(f16dPdxy2)
-            1925:154(f16vec2) Load 1417(f16dPdxy2)
-            1926:6(float16_t) CompositeExtract 1923 3
-            1927:  7(f16vec4) CompositeInsert 1926 1923 2
-            1928:  7(f16vec4) ImageSampleProjExplicitLod 1922 1927 Grad 1924 1925
-            1929:  7(f16vec4) Load 1820(texel)
-            1930:  7(f16vec4) 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(float16_t) ImageSampleProjDrefExplicitLod 1931 1937 1935 Grad 1933 1934
-            1939:    208(ptr) AccessChain 1820(texel) 207
-            1940:6(float16_t) Load 1939
-            1941:6(float16_t) FAdd 1940 1938
-            1942:    208(ptr) AccessChain 1820(texel) 207
-                              Store 1942 1941
-            1943:         371 Load 373(s2DRectShadow)
-            1944:175(f16vec3) Load 177(f16c3)
-            1945:   52(float) Load 215(compare)
-            1946:154(f16vec2) Load 1417(f16dPdxy2)
-            1947:154(f16vec2) Load 1417(f16dPdxy2)
-            1948:6(float16_t) ImageSampleProjDrefExplicitLod 1943 1944 1945 Grad 1946 1947
-            1949:    208(ptr) AccessChain 1820(texel) 207
-            1950:6(float16_t) Load 1949
-            1951:6(float16_t) 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(float16_t) ImageSampleProjDrefExplicitLod 1953 1959 1957 Grad 1955 1956
-            1961:    208(ptr) AccessChain 1820(texel) 207
-            1962:6(float16_t) Load 1961
-            1963:6(float16_t) FAdd 1962 1960
-            1964:    208(ptr) AccessChain 1820(texel) 207
-                              Store 1964 1963
-            1965:         199 Load 201(s1DShadow)
-            1966:175(f16vec3) Load 177(f16c3)
-            1967:   52(float) Load 215(compare)
-            1968:6(float16_t) Load 1401(f16dPdxy1)
-            1969:6(float16_t) Load 1401(f16dPdxy1)
-            1970:6(float16_t) CompositeExtract 1966 2
-            1971:175(f16vec3) CompositeInsert 1970 1966 1
-            1972:6(float16_t) ImageSampleProjDrefExplicitLod 1965 1971 1967 Grad 1968 1969
-            1973:    208(ptr) AccessChain 1820(texel) 207
-            1974:6(float16_t) Load 1973
-            1975:6(float16_t) 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(float16_t) ImageSampleProjDrefExplicitLod 1977 1983 1981 Grad 1979 1980
-            1985:    208(ptr) AccessChain 1820(texel) 207
-            1986:6(float16_t) Load 1985
-            1987:6(float16_t) FAdd 1986 1984
-            1988:    208(ptr) AccessChain 1820(texel) 207
-                              Store 1988 1987
-            1989:         224 Load 226(s2DShadow)
-            1990:175(f16vec3) Load 177(f16c3)
-            1991:   52(float) Load 215(compare)
-            1992:154(f16vec2) Load 1417(f16dPdxy2)
-            1993:154(f16vec2) Load 1417(f16dPdxy2)
-            1994:6(float16_t) ImageSampleProjDrefExplicitLod 1989 1990 1991 Grad 1992 1993
-            1995:    208(ptr) AccessChain 1820(texel) 207
-            1996:6(float16_t) Load 1995
-            1997:6(float16_t) FAdd 1996 1994
-            1998:    208(ptr) AccessChain 1820(texel) 207
-                              Store 1998 1997
-            1999:  7(f16vec4) Load 1820(texel)
-                              ReturnValue 1999
+            1873:6(float16_t) ImageSampleProjDrefExplicitLod 1867 1872 1870 Grad 1869 1869
+            1874:    208(ptr) AccessChain 1770(texel) 207
+            1875:6(float16_t) Load 1874
+            1876:6(float16_t) FAdd 1875 1873
+            1877:    208(ptr) AccessChain 1770(texel) 207
+                              Store 1877 1876
+            1878:         371 Load 373(s2DRectShadow)
+            1879:175(f16vec3) Load 177(f16c3)
+            1880:   52(float) Load 215(compare)
+            1881:154(f16vec2) Load 1414(f16dPdxy2)
+            1882:6(float16_t) ImageSampleProjDrefExplicitLod 1878 1879 1880 Grad 1881 1881
+            1883:    208(ptr) AccessChain 1770(texel) 207
+            1884:6(float16_t) Load 1883
+            1885:6(float16_t) FAdd 1884 1882
+            1886:    208(ptr) AccessChain 1770(texel) 207
+                              Store 1886 1885
+            1887:         199 Load 201(s1DShadow)
+            1888:  249(fvec4) Load 251(c4)
+            1889:   52(float) Load 1393(dPdxy1)
+            1890:   52(float) CompositeExtract 1888 2
+            1891:   52(float) CompositeExtract 1888 3
+            1892:  249(fvec4) CompositeInsert 1891 1888 1
+            1893:6(float16_t) ImageSampleProjDrefExplicitLod 1887 1892 1890 Grad 1889 1889
+            1894:    208(ptr) AccessChain 1770(texel) 207
+            1895:6(float16_t) Load 1894
+            1896:6(float16_t) FAdd 1895 1893
+            1897:    208(ptr) AccessChain 1770(texel) 207
+                              Store 1897 1896
+            1898:         199 Load 201(s1DShadow)
+            1899:175(f16vec3) Load 177(f16c3)
+            1900:   52(float) Load 215(compare)
+            1901:6(float16_t) Load 1400(f16dPdxy1)
+            1902:6(float16_t) CompositeExtract 1899 2
+            1903:175(f16vec3) CompositeInsert 1902 1899 1
+            1904:6(float16_t) ImageSampleProjDrefExplicitLod 1898 1903 1900 Grad 1901 1901
+            1905:    208(ptr) AccessChain 1770(texel) 207
+            1906:6(float16_t) Load 1905
+            1907:6(float16_t) FAdd 1906 1904
+            1908:    208(ptr) AccessChain 1770(texel) 207
+                              Store 1908 1907
+            1909:         224 Load 226(s2DShadow)
+            1910:  249(fvec4) Load 251(c4)
+            1911:   53(fvec2) Load 1407(dPdxy2)
+            1912:   52(float) CompositeExtract 1910 2
+            1913:   52(float) CompositeExtract 1910 3
+            1914:  249(fvec4) CompositeInsert 1913 1910 2
+            1915:6(float16_t) ImageSampleProjDrefExplicitLod 1909 1914 1912 Grad 1911 1911
+            1916:    208(ptr) AccessChain 1770(texel) 207
+            1917:6(float16_t) Load 1916
+            1918:6(float16_t) FAdd 1917 1915
+            1919:    208(ptr) AccessChain 1770(texel) 207
+                              Store 1919 1918
+            1920:         224 Load 226(s2DShadow)
+            1921:175(f16vec3) Load 177(f16c3)
+            1922:   52(float) Load 215(compare)
+            1923:154(f16vec2) Load 1414(f16dPdxy2)
+            1924:6(float16_t) ImageSampleProjDrefExplicitLod 1920 1921 1922 Grad 1923 1923
+            1925:    208(ptr) AccessChain 1770(texel) 207
+            1926:6(float16_t) Load 1925
+            1927:6(float16_t) FAdd 1926 1924
+            1928:    208(ptr) AccessChain 1770(texel) 207
+                              Store 1928 1927
+            1929:  7(f16vec4) Load 1770(texel)
+                              ReturnValue 1929
                               FunctionEnd
 33(testTextureProjGradoffset():  7(f16vec4) 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(f16vec4) ImageSampleProjExplicitLod 2003 2004 Grad ConstOffset 2005 2006 709
-            2008:  7(f16vec4) Load 2002(texel)
-            2009:  7(f16vec4) FAdd 2008 2007
-                              Store 2002(texel) 2009
-            2010:         123 Load 125(s1D)
-            2011:154(f16vec2) Load 156(f16c2)
-            2012:6(float16_t) Load 1401(f16dPdxy1)
-            2013:6(float16_t) Load 1401(f16dPdxy1)
-            2014:  7(f16vec4) ImageSampleProjExplicitLod 2010 2011 Grad ConstOffset 2012 2013 709
-            2015:  7(f16vec4) Load 2002(texel)
+     1932(texel):     64(ptr) Variable Function
+                              Store 1932(texel) 121
+            1933:         123 Load 125(s1D)
+            1934:   53(fvec2) Load 148(c2)
+            1935:   52(float) Load 1393(dPdxy1)
+            1936:  7(f16vec4) ImageSampleProjExplicitLod 1933 1934 Grad ConstOffset 1935 1935 709
+            1937:  7(f16vec4) Load 1932(texel)
+            1938:  7(f16vec4) FAdd 1937 1936
+                              Store 1932(texel) 1938
+            1939:         123 Load 125(s1D)
+            1940:154(f16vec2) Load 156(f16c2)
+            1941:6(float16_t) Load 1400(f16dPdxy1)
+            1942:  7(f16vec4) ImageSampleProjExplicitLod 1939 1940 Grad ConstOffset 1941 1941 709
+            1943:  7(f16vec4) Load 1932(texel)
+            1944:  7(f16vec4) FAdd 1943 1942
+                              Store 1932(texel) 1944
+            1945:         123 Load 125(s1D)
+            1946:  249(fvec4) Load 251(c4)
+            1947:   52(float) Load 1393(dPdxy1)
+            1948:   52(float) CompositeExtract 1946 3
+            1949:  249(fvec4) CompositeInsert 1948 1946 1
+            1950:  7(f16vec4) ImageSampleProjExplicitLod 1945 1949 Grad ConstOffset 1947 1947 709
+            1951:  7(f16vec4) Load 1932(texel)
+            1952:  7(f16vec4) FAdd 1951 1950
+                              Store 1932(texel) 1952
+            1953:         123 Load 125(s1D)
+            1954:  7(f16vec4) Load 309(f16c4)
+            1955:6(float16_t) Load 1400(f16dPdxy1)
+            1956:6(float16_t) CompositeExtract 1954 3
+            1957:  7(f16vec4) CompositeInsert 1956 1954 1
+            1958:  7(f16vec4) ImageSampleProjExplicitLod 1953 1957 Grad ConstOffset 1955 1955 709
+            1959:  7(f16vec4) Load 1932(texel)
+            1960:  7(f16vec4) FAdd 1959 1958
+                              Store 1932(texel) 1960
+            1961:         143 Load 145(s2D)
+            1962:  167(fvec3) Load 169(c3)
+            1963:   53(fvec2) Load 1407(dPdxy2)
+            1964:  7(f16vec4) ImageSampleProjExplicitLod 1961 1962 Grad ConstOffset 1963 1963 722
+            1965:  7(f16vec4) Load 1932(texel)
+            1966:  7(f16vec4) FAdd 1965 1964
+                              Store 1932(texel) 1966
+            1967:         143 Load 145(s2D)
+            1968:175(f16vec3) Load 177(f16c3)
+            1969:154(f16vec2) Load 1414(f16dPdxy2)
+            1970:  7(f16vec4) ImageSampleProjExplicitLod 1967 1968 Grad ConstOffset 1969 1969 722
+            1971:  7(f16vec4) Load 1932(texel)
+            1972:  7(f16vec4) FAdd 1971 1970
+                              Store 1932(texel) 1972
+            1973:         143 Load 145(s2D)
+            1974:  249(fvec4) Load 251(c4)
+            1975:   53(fvec2) Load 1407(dPdxy2)
+            1976:   52(float) CompositeExtract 1974 3
+            1977:  249(fvec4) CompositeInsert 1976 1974 2
+            1978:  7(f16vec4) ImageSampleProjExplicitLod 1973 1977 Grad ConstOffset 1975 1975 722
+            1979:  7(f16vec4) Load 1932(texel)
+            1980:  7(f16vec4) FAdd 1979 1978
+                              Store 1932(texel) 1980
+            1981:         143 Load 145(s2D)
+            1982:  7(f16vec4) Load 309(f16c4)
+            1983:154(f16vec2) Load 1414(f16dPdxy2)
+            1984:6(float16_t) CompositeExtract 1982 3
+            1985:  7(f16vec4) CompositeInsert 1984 1982 2
+            1986:  7(f16vec4) ImageSampleProjExplicitLod 1981 1985 Grad ConstOffset 1983 1983 722
+            1987:  7(f16vec4) Load 1932(texel)
+            1988:  7(f16vec4) FAdd 1987 1986
+                              Store 1932(texel) 1988
+            1989:         357 Load 359(s2DRect)
+            1990:  167(fvec3) Load 169(c3)
+            1991:   53(fvec2) Load 1407(dPdxy2)
+            1992:  7(f16vec4) ImageSampleProjExplicitLod 1989 1990 Grad ConstOffset 1991 1991 722
+            1993:  7(f16vec4) Load 1932(texel)
+            1994:  7(f16vec4) FAdd 1993 1992
+                              Store 1932(texel) 1994
+            1995:         357 Load 359(s2DRect)
+            1996:175(f16vec3) Load 177(f16c3)
+            1997:154(f16vec2) Load 1414(f16dPdxy2)
+            1998:  7(f16vec4) ImageSampleProjExplicitLod 1995 1996 Grad ConstOffset 1997 1997 722
+            1999:  7(f16vec4) Load 1932(texel)
+            2000:  7(f16vec4) FAdd 1999 1998
+                              Store 1932(texel) 2000
+            2001:         357 Load 359(s2DRect)
+            2002:  249(fvec4) Load 251(c4)
+            2003:   53(fvec2) Load 1407(dPdxy2)
+            2004:   52(float) CompositeExtract 2002 3
+            2005:  249(fvec4) CompositeInsert 2004 2002 2
+            2006:  7(f16vec4) ImageSampleProjExplicitLod 2001 2005 Grad ConstOffset 2003 2003 722
+            2007:  7(f16vec4) Load 1932(texel)
+            2008:  7(f16vec4) FAdd 2007 2006
+                              Store 1932(texel) 2008
+            2009:         357 Load 359(s2DRect)
+            2010:  7(f16vec4) Load 309(f16c4)
+            2011:154(f16vec2) Load 1414(f16dPdxy2)
+            2012:6(float16_t) CompositeExtract 2010 3
+            2013:  7(f16vec4) CompositeInsert 2012 2010 2
+            2014:  7(f16vec4) ImageSampleProjExplicitLod 2009 2013 Grad ConstOffset 2011 2011 722
+            2015:  7(f16vec4) Load 1932(texel)
             2016:  7(f16vec4) FAdd 2015 2014
-                              Store 2002(texel) 2016
-            2017:         123 Load 125(s1D)
+                              Store 1932(texel) 2016
+            2017:         371 Load 373(s2DRectShadow)
             2018:  249(fvec4) Load 251(c4)
-            2019:   52(float) Load 1393(dPdxy1)
-            2020:   52(float) Load 1393(dPdxy1)
+            2019:   53(fvec2) Load 1407(dPdxy2)
+            2020:   52(float) CompositeExtract 2018 2
             2021:   52(float) CompositeExtract 2018 3
-            2022:  249(fvec4) CompositeInsert 2021 2018 1
-            2023:  7(f16vec4) ImageSampleProjExplicitLod 2017 2022 Grad ConstOffset 2019 2020 709
-            2024:  7(f16vec4) Load 2002(texel)
-            2025:  7(f16vec4) FAdd 2024 2023
-                              Store 2002(texel) 2025
-            2026:         123 Load 125(s1D)
-            2027:  7(f16vec4) Load 309(f16c4)
-            2028:6(float16_t) Load 1401(f16dPdxy1)
-            2029:6(float16_t) Load 1401(f16dPdxy1)
-            2030:6(float16_t) CompositeExtract 2027 3
-            2031:  7(f16vec4) CompositeInsert 2030 2027 1
-            2032:  7(f16vec4) ImageSampleProjExplicitLod 2026 2031 Grad ConstOffset 2028 2029 709
-            2033:  7(f16vec4) Load 2002(texel)
-            2034:  7(f16vec4) 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(f16vec4) ImageSampleProjExplicitLod 2035 2036 Grad ConstOffset 2037 2038 722
-            2040:  7(f16vec4) Load 2002(texel)
-            2041:  7(f16vec4) FAdd 2040 2039
-                              Store 2002(texel) 2041
-            2042:         143 Load 145(s2D)
-            2043:175(f16vec3) Load 177(f16c3)
-            2044:154(f16vec2) Load 1417(f16dPdxy2)
-            2045:154(f16vec2) Load 1417(f16dPdxy2)
-            2046:  7(f16vec4) ImageSampleProjExplicitLod 2042 2043 Grad ConstOffset 2044 2045 722
-            2047:  7(f16vec4) Load 2002(texel)
+            2022:  249(fvec4) CompositeInsert 2021 2018 2
+            2023:6(float16_t) ImageSampleProjDrefExplicitLod 2017 2022 2020 Grad ConstOffset 2019 2019 722
+            2024:    208(ptr) AccessChain 1932(texel) 207
+            2025:6(float16_t) Load 2024
+            2026:6(float16_t) FAdd 2025 2023
+            2027:    208(ptr) AccessChain 1932(texel) 207
+                              Store 2027 2026
+            2028:         371 Load 373(s2DRectShadow)
+            2029:175(f16vec3) Load 177(f16c3)
+            2030:   52(float) Load 215(compare)
+            2031:154(f16vec2) Load 1414(f16dPdxy2)
+            2032:6(float16_t) ImageSampleProjDrefExplicitLod 2028 2029 2030 Grad ConstOffset 2031 2031 722
+            2033:    208(ptr) AccessChain 1932(texel) 207
+            2034:6(float16_t) Load 2033
+            2035:6(float16_t) FAdd 2034 2032
+            2036:    208(ptr) AccessChain 1932(texel) 207
+                              Store 2036 2035
+            2037:         163 Load 165(s3D)
+            2038:  249(fvec4) Load 251(c4)
+            2039:  167(fvec3) Load 1421(dPdxy3)
+            2040:  7(f16vec4) ImageSampleProjExplicitLod 2037 2038 Grad ConstOffset 2039 2039 735
+            2041:  7(f16vec4) Load 1932(texel)
+            2042:  7(f16vec4) FAdd 2041 2040
+                              Store 1932(texel) 2042
+            2043:         163 Load 165(s3D)
+            2044:  7(f16vec4) Load 309(f16c4)
+            2045:175(f16vec3) Load 1428(f16dPdxy3)
+            2046:  7(f16vec4) ImageSampleProjExplicitLod 2043 2044 Grad ConstOffset 2045 2045 735
+            2047:  7(f16vec4) Load 1932(texel)
             2048:  7(f16vec4) FAdd 2047 2046
-                              Store 2002(texel) 2048
-            2049:         143 Load 145(s2D)
+                              Store 1932(texel) 2048
+            2049:         199 Load 201(s1DShadow)
             2050:  249(fvec4) Load 251(c4)
-            2051:   53(fvec2) Load 1409(dPdxy2)
-            2052:   53(fvec2) Load 1409(dPdxy2)
+            2051:   52(float) Load 1393(dPdxy1)
+            2052:   52(float) CompositeExtract 2050 2
             2053:   52(float) CompositeExtract 2050 3
-            2054:  249(fvec4) CompositeInsert 2053 2050 2
-            2055:  7(f16vec4) ImageSampleProjExplicitLod 2049 2054 Grad ConstOffset 2051 2052 722
-            2056:  7(f16vec4) Load 2002(texel)
-            2057:  7(f16vec4) FAdd 2056 2055
-                              Store 2002(texel) 2057
-            2058:         143 Load 145(s2D)
-            2059:  7(f16vec4) Load 309(f16c4)
-            2060:154(f16vec2) Load 1417(f16dPdxy2)
-            2061:154(f16vec2) Load 1417(f16dPdxy2)
-            2062:6(float16_t) CompositeExtract 2059 3
-            2063:  7(f16vec4) CompositeInsert 2062 2059 2
-            2064:  7(f16vec4) ImageSampleProjExplicitLod 2058 2063 Grad ConstOffset 2060 2061 722
-            2065:  7(f16vec4) Load 2002(texel)
-            2066:  7(f16vec4) 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(f16vec4) ImageSampleProjExplicitLod 2067 2068 Grad ConstOffset 2069 2070 722
-            2072:  7(f16vec4) Load 2002(texel)
-            2073:  7(f16vec4) FAdd 2072 2071
-                              Store 2002(texel) 2073
-            2074:         357 Load 359(s2DRect)
-            2075:175(f16vec3) Load 177(f16c3)
-            2076:154(f16vec2) Load 1417(f16dPdxy2)
-            2077:154(f16vec2) Load 1417(f16dPdxy2)
-            2078:  7(f16vec4) ImageSampleProjExplicitLod 2074 2075 Grad ConstOffset 2076 2077 722
-            2079:  7(f16vec4) Load 2002(texel)
-            2080:  7(f16vec4) 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(f16vec4) ImageSampleProjExplicitLod 2081 2086 Grad ConstOffset 2083 2084 722
-            2088:  7(f16vec4) Load 2002(texel)
-            2089:  7(f16vec4) FAdd 2088 2087
-                              Store 2002(texel) 2089
-            2090:         357 Load 359(s2DRect)
-            2091:  7(f16vec4) Load 309(f16c4)
-            2092:154(f16vec2) Load 1417(f16dPdxy2)
-            2093:154(f16vec2) Load 1417(f16dPdxy2)
-            2094:6(float16_t) CompositeExtract 2091 3
-            2095:  7(f16vec4) CompositeInsert 2094 2091 2
-            2096:  7(f16vec4) ImageSampleProjExplicitLod 2090 2095 Grad ConstOffset 2092 2093 722
-            2097:  7(f16vec4) Load 2002(texel)
-            2098:  7(f16vec4) 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(float16_t) ImageSampleProjDrefExplicitLod 2099 2105 2103 Grad ConstOffset 2101 2102 722
-            2107:    208(ptr) AccessChain 2002(texel) 207
-            2108:6(float16_t) Load 2107
-            2109:6(float16_t) FAdd 2108 2106
-            2110:    208(ptr) AccessChain 2002(texel) 207
-                              Store 2110 2109
-            2111:         371 Load 373(s2DRectShadow)
-            2112:175(f16vec3) Load 177(f16c3)
-            2113:   52(float) Load 215(compare)
-            2114:154(f16vec2) Load 1417(f16dPdxy2)
-            2115:154(f16vec2) Load 1417(f16dPdxy2)
-            2116:6(float16_t) ImageSampleProjDrefExplicitLod 2111 2112 2113 Grad ConstOffset 2114 2115 722
-            2117:    208(ptr) AccessChain 2002(texel) 207
-            2118:6(float16_t) Load 2117
-            2119:6(float16_t) 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(f16vec4) ImageSampleProjExplicitLod 2121 2122 Grad ConstOffset 2123 2124 735
-            2126:  7(f16vec4) Load 2002(texel)
-            2127:  7(f16vec4) FAdd 2126 2125
-                              Store 2002(texel) 2127
-            2128:         163 Load 165(s3D)
-            2129:  7(f16vec4) Load 309(f16c4)
-            2130:175(f16vec3) Load 1433(f16dPdxy3)
-            2131:175(f16vec3) Load 1433(f16dPdxy3)
-            2132:  7(f16vec4) ImageSampleProjExplicitLod 2128 2129 Grad ConstOffset 2130 2131 735
-            2133:  7(f16vec4) Load 2002(texel)
-            2134:  7(f16vec4) 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(float16_t) ImageSampleProjDrefExplicitLod 2135 2141 2139 Grad ConstOffset 2137 2138 709
-            2143:    208(ptr) AccessChain 2002(texel) 207
-            2144:6(float16_t) Load 2143
-            2145:6(float16_t) FAdd 2144 2142
-            2146:    208(ptr) AccessChain 2002(texel) 207
-                              Store 2146 2145
-            2147:         199 Load 201(s1DShadow)
-            2148:175(f16vec3) Load 177(f16c3)
-            2149:   52(float) Load 215(compare)
-            2150:6(float16_t) Load 1401(f16dPdxy1)
-            2151:6(float16_t) Load 1401(f16dPdxy1)
-            2152:6(float16_t) CompositeExtract 2148 2
-            2153:175(f16vec3) CompositeInsert 2152 2148 1
-            2154:6(float16_t) ImageSampleProjDrefExplicitLod 2147 2153 2149 Grad ConstOffset 2150 2151 709
-            2155:    208(ptr) AccessChain 2002(texel) 207
-            2156:6(float16_t) Load 2155
-            2157:6(float16_t) 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(float16_t) ImageSampleProjDrefExplicitLod 2159 2165 2163 Grad ConstOffset 2161 2162 722
-            2167:    208(ptr) AccessChain 2002(texel) 207
-            2168:6(float16_t) Load 2167
-            2169:6(float16_t) FAdd 2168 2166
-            2170:    208(ptr) AccessChain 2002(texel) 207
-                              Store 2170 2169
-            2171:         224 Load 226(s2DShadow)
-            2172:175(f16vec3) Load 177(f16c3)
-            2173:   52(float) Load 215(compare)
-            2174:154(f16vec2) Load 1417(f16dPdxy2)
-            2175:154(f16vec2) Load 1417(f16dPdxy2)
-            2176:6(float16_t) ImageSampleProjDrefExplicitLod 2171 2172 2173 Grad ConstOffset 2174 2175 722
-            2177:    208(ptr) AccessChain 2002(texel) 207
-            2178:6(float16_t) Load 2177
-            2179:6(float16_t) FAdd 2178 2176
-            2180:    208(ptr) AccessChain 2002(texel) 207
-                              Store 2180 2179
-            2181:  7(f16vec4) Load 2002(texel)
-                              ReturnValue 2181
+            2054:  249(fvec4) CompositeInsert 2053 2050 1
+            2055:6(float16_t) ImageSampleProjDrefExplicitLod 2049 2054 2052 Grad ConstOffset 2051 2051 709
+            2056:    208(ptr) AccessChain 1932(texel) 207
+            2057:6(float16_t) Load 2056
+            2058:6(float16_t) FAdd 2057 2055
+            2059:    208(ptr) AccessChain 1932(texel) 207
+                              Store 2059 2058
+            2060:         199 Load 201(s1DShadow)
+            2061:175(f16vec3) Load 177(f16c3)
+            2062:   52(float) Load 215(compare)
+            2063:6(float16_t) Load 1400(f16dPdxy1)
+            2064:6(float16_t) CompositeExtract 2061 2
+            2065:175(f16vec3) CompositeInsert 2064 2061 1
+            2066:6(float16_t) ImageSampleProjDrefExplicitLod 2060 2065 2062 Grad ConstOffset 2063 2063 709
+            2067:    208(ptr) AccessChain 1932(texel) 207
+            2068:6(float16_t) Load 2067
+            2069:6(float16_t) FAdd 2068 2066
+            2070:    208(ptr) AccessChain 1932(texel) 207
+                              Store 2070 2069
+            2071:         224 Load 226(s2DShadow)
+            2072:  249(fvec4) Load 251(c4)
+            2073:   53(fvec2) Load 1407(dPdxy2)
+            2074:   52(float) CompositeExtract 2072 2
+            2075:   52(float) CompositeExtract 2072 3
+            2076:  249(fvec4) CompositeInsert 2075 2072 2
+            2077:6(float16_t) ImageSampleProjDrefExplicitLod 2071 2076 2074 Grad ConstOffset 2073 2073 722
+            2078:    208(ptr) AccessChain 1932(texel) 207
+            2079:6(float16_t) Load 2078
+            2080:6(float16_t) FAdd 2079 2077
+            2081:    208(ptr) AccessChain 1932(texel) 207
+                              Store 2081 2080
+            2082:         224 Load 226(s2DShadow)
+            2083:175(f16vec3) Load 177(f16c3)
+            2084:   52(float) Load 215(compare)
+            2085:154(f16vec2) Load 1414(f16dPdxy2)
+            2086:6(float16_t) ImageSampleProjDrefExplicitLod 2082 2083 2084 Grad ConstOffset 2085 2085 722
+            2087:    208(ptr) AccessChain 1932(texel) 207
+            2088:6(float16_t) Load 2087
+            2089:6(float16_t) FAdd 2088 2086
+            2090:    208(ptr) AccessChain 1932(texel) 207
+                              Store 2090 2089
+            2091:  7(f16vec4) Load 1932(texel)
+                              ReturnValue 2091
                               FunctionEnd
 35(testTextureGather():  7(f16vec4) 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(f16vec4) ImageGather 2185 2186 2187
-            2189:  7(f16vec4) Load 2184(texel)
-            2190:  7(f16vec4) FAdd 2189 2188
-                              Store 2184(texel) 2190
-            2191:         143 Load 145(s2D)
-            2192:154(f16vec2) Load 156(f16c2)
-            2193:6(float16_t) Load 137(f16bias)
-            2194:  7(f16vec4) ImageGather 2191 2192 2187 Bias 2193
-            2195:  7(f16vec4) Load 2184(texel)
-            2196:  7(f16vec4) FAdd 2195 2194
-                              Store 2184(texel) 2196
-            2197:         284 Load 286(s2DArray)
-            2198:  167(fvec3) Load 169(c3)
-            2199:  7(f16vec4) ImageGather 2197 2198 2187
-            2200:  7(f16vec4) Load 2184(texel)
-            2201:  7(f16vec4) FAdd 2200 2199
-                              Store 2184(texel) 2201
-            2202:         284 Load 286(s2DArray)
-            2203:175(f16vec3) Load 177(f16c3)
-            2204:6(float16_t) Load 137(f16bias)
-            2205:  7(f16vec4) ImageGather 2202 2203 2187 Bias 2204
-            2206:  7(f16vec4) Load 2184(texel)
-            2207:  7(f16vec4) FAdd 2206 2205
-                              Store 2184(texel) 2207
-            2208:         184 Load 186(sCube)
-            2209:  167(fvec3) Load 169(c3)
-            2210:  7(f16vec4) ImageGather 2208 2209 2187
-            2211:  7(f16vec4) Load 2184(texel)
-            2212:  7(f16vec4) FAdd 2211 2210
-                              Store 2184(texel) 2212
-            2213:         184 Load 186(sCube)
-            2214:175(f16vec3) Load 177(f16c3)
-            2215:6(float16_t) Load 137(f16bias)
-            2216:  7(f16vec4) ImageGather 2213 2214 2187 Bias 2215
-            2217:  7(f16vec4) Load 2184(texel)
-            2218:  7(f16vec4) FAdd 2217 2216
-                              Store 2184(texel) 2218
-            2219:         299 Load 301(sCubeArray)
-            2220:  249(fvec4) Load 251(c4)
-            2221:  7(f16vec4) ImageGather 2219 2220 2187
-            2222:  7(f16vec4) Load 2184(texel)
-            2223:  7(f16vec4) FAdd 2222 2221
-                              Store 2184(texel) 2223
-            2224:         299 Load 301(sCubeArray)
-            2225:  7(f16vec4) Load 309(f16c4)
-            2226:6(float16_t) Load 137(f16bias)
-            2227:  7(f16vec4) ImageGather 2224 2225 2187 Bias 2226
-            2228:  7(f16vec4) Load 2184(texel)
-            2229:  7(f16vec4) FAdd 2228 2227
-                              Store 2184(texel) 2229
-            2230:         357 Load 359(s2DRect)
-            2231:   53(fvec2) Load 148(c2)
-            2232:  7(f16vec4) ImageGather 2230 2231 2187
-            2233:  7(f16vec4) Load 2184(texel)
-            2234:  7(f16vec4) FAdd 2233 2232
-                              Store 2184(texel) 2234
-            2235:         357 Load 359(s2DRect)
-            2236:154(f16vec2) Load 156(f16c2)
-            2237:  7(f16vec4) ImageGather 2235 2236 2187
-            2238:  7(f16vec4) Load 2184(texel)
-            2239:  7(f16vec4) 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(f16vec4) ImageDrefGather 2240 2241 2242
-            2244:  7(f16vec4) Load 2184(texel)
-            2245:  7(f16vec4) FAdd 2244 2243
-                              Store 2184(texel) 2245
-            2246:         224 Load 226(s2DShadow)
-            2247:154(f16vec2) Load 156(f16c2)
-            2248:   52(float) Load 215(compare)
-            2249:  7(f16vec4) ImageDrefGather 2246 2247 2248
-            2250:  7(f16vec4) Load 2184(texel)
-            2251:  7(f16vec4) 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(f16vec4) ImageDrefGather 2252 2253 2254
-            2256:  7(f16vec4) Load 2184(texel)
-            2257:  7(f16vec4) FAdd 2256 2255
-                              Store 2184(texel) 2257
-            2258:         337 Load 339(s2DArrayShadow)
-            2259:175(f16vec3) Load 177(f16c3)
-            2260:   52(float) Load 215(compare)
-            2261:  7(f16vec4) ImageDrefGather 2258 2259 2260
-            2262:  7(f16vec4) Load 2184(texel)
-            2263:  7(f16vec4) 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(f16vec4) ImageDrefGather 2264 2265 2266
-            2268:  7(f16vec4) Load 2184(texel)
-            2269:  7(f16vec4) FAdd 2268 2267
-                              Store 2184(texel) 2269
-            2270:         245 Load 247(sCubeShadow)
-            2271:175(f16vec3) Load 177(f16c3)
-            2272:   52(float) Load 215(compare)
-            2273:  7(f16vec4) ImageDrefGather 2270 2271 2272
-            2274:  7(f16vec4) Load 2184(texel)
-            2275:  7(f16vec4) 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(f16vec4) ImageDrefGather 2276 2277 2278
-            2280:  7(f16vec4) Load 2184(texel)
-            2281:  7(f16vec4) FAdd 2280 2279
-                              Store 2184(texel) 2281
-            2282:         391 Load 393(sCubeArrayShadow)
-            2283:  7(f16vec4) Load 309(f16c4)
-            2284:   52(float) Load 215(compare)
-            2285:  7(f16vec4) ImageDrefGather 2282 2283 2284
-            2286:  7(f16vec4) Load 2184(texel)
-            2287:  7(f16vec4) 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(f16vec4) ImageDrefGather 2288 2289 2290
-            2292:  7(f16vec4) Load 2184(texel)
-            2293:  7(f16vec4) FAdd 2292 2291
-                              Store 2184(texel) 2293
-            2294:         371 Load 373(s2DRectShadow)
-            2295:154(f16vec2) Load 156(f16c2)
-            2296:   52(float) Load 215(compare)
-            2297:  7(f16vec4) ImageDrefGather 2294 2295 2296
-            2298:  7(f16vec4) Load 2184(texel)
-            2299:  7(f16vec4) FAdd 2298 2297
-                              Store 2184(texel) 2299
-            2300:  7(f16vec4) Load 2184(texel)
-                              ReturnValue 2300
+     2094(texel):     64(ptr) Variable Function
+                              Store 2094(texel) 121
+            2095:         143 Load 145(s2D)
+            2096:   53(fvec2) Load 148(c2)
+            2098:  7(f16vec4) ImageGather 2095 2096 2097
+            2099:  7(f16vec4) Load 2094(texel)
+            2100:  7(f16vec4) FAdd 2099 2098
+                              Store 2094(texel) 2100
+            2101:         143 Load 145(s2D)
+            2102:154(f16vec2) Load 156(f16c2)
+            2103:6(float16_t) Load 137(f16bias)
+            2104:  7(f16vec4) ImageGather 2101 2102 2097 Bias 2103
+            2105:  7(f16vec4) Load 2094(texel)
+            2106:  7(f16vec4) FAdd 2105 2104
+                              Store 2094(texel) 2106
+            2107:         284 Load 286(s2DArray)
+            2108:  167(fvec3) Load 169(c3)
+            2109:  7(f16vec4) ImageGather 2107 2108 2097
+            2110:  7(f16vec4) Load 2094(texel)
+            2111:  7(f16vec4) FAdd 2110 2109
+                              Store 2094(texel) 2111
+            2112:         284 Load 286(s2DArray)
+            2113:175(f16vec3) Load 177(f16c3)
+            2114:6(float16_t) Load 137(f16bias)
+            2115:  7(f16vec4) ImageGather 2112 2113 2097 Bias 2114
+            2116:  7(f16vec4) Load 2094(texel)
+            2117:  7(f16vec4) FAdd 2116 2115
+                              Store 2094(texel) 2117
+            2118:         184 Load 186(sCube)
+            2119:  167(fvec3) Load 169(c3)
+            2120:  7(f16vec4) ImageGather 2118 2119 2097
+            2121:  7(f16vec4) Load 2094(texel)
+            2122:  7(f16vec4) FAdd 2121 2120
+                              Store 2094(texel) 2122
+            2123:         184 Load 186(sCube)
+            2124:175(f16vec3) Load 177(f16c3)
+            2125:6(float16_t) Load 137(f16bias)
+            2126:  7(f16vec4) ImageGather 2123 2124 2097 Bias 2125
+            2127:  7(f16vec4) Load 2094(texel)
+            2128:  7(f16vec4) FAdd 2127 2126
+                              Store 2094(texel) 2128
+            2129:         299 Load 301(sCubeArray)
+            2130:  249(fvec4) Load 251(c4)
+            2131:  7(f16vec4) ImageGather 2129 2130 2097
+            2132:  7(f16vec4) Load 2094(texel)
+            2133:  7(f16vec4) FAdd 2132 2131
+                              Store 2094(texel) 2133
+            2134:         299 Load 301(sCubeArray)
+            2135:  7(f16vec4) Load 309(f16c4)
+            2136:6(float16_t) Load 137(f16bias)
+            2137:  7(f16vec4) ImageGather 2134 2135 2097 Bias 2136
+            2138:  7(f16vec4) Load 2094(texel)
+            2139:  7(f16vec4) FAdd 2138 2137
+                              Store 2094(texel) 2139
+            2140:         357 Load 359(s2DRect)
+            2141:   53(fvec2) Load 148(c2)
+            2142:  7(f16vec4) ImageGather 2140 2141 2097
+            2143:  7(f16vec4) Load 2094(texel)
+            2144:  7(f16vec4) FAdd 2143 2142
+                              Store 2094(texel) 2144
+            2145:         357 Load 359(s2DRect)
+            2146:154(f16vec2) Load 156(f16c2)
+            2147:  7(f16vec4) ImageGather 2145 2146 2097
+            2148:  7(f16vec4) Load 2094(texel)
+            2149:  7(f16vec4) FAdd 2148 2147
+                              Store 2094(texel) 2149
+            2150:         224 Load 226(s2DShadow)
+            2151:   53(fvec2) Load 148(c2)
+            2152:   52(float) Load 215(compare)
+            2153:  7(f16vec4) ImageDrefGather 2150 2151 2152
+            2154:  7(f16vec4) Load 2094(texel)
+            2155:  7(f16vec4) FAdd 2154 2153
+                              Store 2094(texel) 2155
+            2156:         224 Load 226(s2DShadow)
+            2157:154(f16vec2) Load 156(f16c2)
+            2158:   52(float) Load 215(compare)
+            2159:  7(f16vec4) ImageDrefGather 2156 2157 2158
+            2160:  7(f16vec4) Load 2094(texel)
+            2161:  7(f16vec4) FAdd 2160 2159
+                              Store 2094(texel) 2161
+            2162:         337 Load 339(s2DArrayShadow)
+            2163:  167(fvec3) Load 169(c3)
+            2164:   52(float) Load 215(compare)
+            2165:  7(f16vec4) ImageDrefGather 2162 2163 2164
+            2166:  7(f16vec4) Load 2094(texel)
+            2167:  7(f16vec4) FAdd 2166 2165
+                              Store 2094(texel) 2167
+            2168:         337 Load 339(s2DArrayShadow)
+            2169:175(f16vec3) Load 177(f16c3)
+            2170:   52(float) Load 215(compare)
+            2171:  7(f16vec4) ImageDrefGather 2168 2169 2170
+            2172:  7(f16vec4) Load 2094(texel)
+            2173:  7(f16vec4) FAdd 2172 2171
+                              Store 2094(texel) 2173
+            2174:         245 Load 247(sCubeShadow)
+            2175:  167(fvec3) Load 169(c3)
+            2176:   52(float) Load 215(compare)
+            2177:  7(f16vec4) ImageDrefGather 2174 2175 2176
+            2178:  7(f16vec4) Load 2094(texel)
+            2179:  7(f16vec4) FAdd 2178 2177
+                              Store 2094(texel) 2179
+            2180:         245 Load 247(sCubeShadow)
+            2181:175(f16vec3) Load 177(f16c3)
+            2182:   52(float) Load 215(compare)
+            2183:  7(f16vec4) ImageDrefGather 2180 2181 2182
+            2184:  7(f16vec4) Load 2094(texel)
+            2185:  7(f16vec4) FAdd 2184 2183
+                              Store 2094(texel) 2185
+            2186:         391 Load 393(sCubeArrayShadow)
+            2187:  249(fvec4) Load 251(c4)
+            2188:   52(float) Load 215(compare)
+            2189:  7(f16vec4) ImageDrefGather 2186 2187 2188
+            2190:  7(f16vec4) Load 2094(texel)
+            2191:  7(f16vec4) FAdd 2190 2189
+                              Store 2094(texel) 2191
+            2192:         391 Load 393(sCubeArrayShadow)
+            2193:  7(f16vec4) Load 309(f16c4)
+            2194:   52(float) Load 215(compare)
+            2195:  7(f16vec4) ImageDrefGather 2192 2193 2194
+            2196:  7(f16vec4) Load 2094(texel)
+            2197:  7(f16vec4) FAdd 2196 2195
+                              Store 2094(texel) 2197
+            2198:         371 Load 373(s2DRectShadow)
+            2199:   53(fvec2) Load 148(c2)
+            2200:   52(float) Load 215(compare)
+            2201:  7(f16vec4) ImageDrefGather 2198 2199 2200
+            2202:  7(f16vec4) Load 2094(texel)
+            2203:  7(f16vec4) FAdd 2202 2201
+                              Store 2094(texel) 2203
+            2204:         371 Load 373(s2DRectShadow)
+            2205:154(f16vec2) Load 156(f16c2)
+            2206:   52(float) Load 215(compare)
+            2207:  7(f16vec4) ImageDrefGather 2204 2205 2206
+            2208:  7(f16vec4) Load 2094(texel)
+            2209:  7(f16vec4) FAdd 2208 2207
+                              Store 2094(texel) 2209
+            2210:  7(f16vec4) Load 2094(texel)
+                              ReturnValue 2210
                               FunctionEnd
 37(testTextureGatherOffset():  7(f16vec4) 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(f16vec4) ImageGather 2304 2305 2187 ConstOffset 722
-            2307:  7(f16vec4) Load 2303(texel)
-            2308:  7(f16vec4) FAdd 2307 2306
-                              Store 2303(texel) 2308
-            2309:         143 Load 145(s2D)
-            2310:154(f16vec2) Load 156(f16c2)
-            2311:6(float16_t) Load 137(f16bias)
-            2312:  7(f16vec4) ImageGather 2309 2310 2187 Bias ConstOffset 2311 722
-            2313:  7(f16vec4) Load 2303(texel)
-            2314:  7(f16vec4) FAdd 2313 2312
-                              Store 2303(texel) 2314
-            2315:         284 Load 286(s2DArray)
-            2316:  167(fvec3) Load 169(c3)
-            2317:  7(f16vec4) ImageGather 2315 2316 2187 ConstOffset 722
-            2318:  7(f16vec4) Load 2303(texel)
-            2319:  7(f16vec4) FAdd 2318 2317
-                              Store 2303(texel) 2319
-            2320:         284 Load 286(s2DArray)
-            2321:175(f16vec3) Load 177(f16c3)
-            2322:6(float16_t) Load 137(f16bias)
-            2323:  7(f16vec4) ImageGather 2320 2321 2187 Bias ConstOffset 2322 722
-            2324:  7(f16vec4) Load 2303(texel)
-            2325:  7(f16vec4) FAdd 2324 2323
-                              Store 2303(texel) 2325
-            2326:         357 Load 359(s2DRect)
-            2327:   53(fvec2) Load 148(c2)
-            2328:  7(f16vec4) ImageGather 2326 2327 2187 ConstOffset 722
-            2329:  7(f16vec4) Load 2303(texel)
-            2330:  7(f16vec4) FAdd 2329 2328
-                              Store 2303(texel) 2330
-            2331:         357 Load 359(s2DRect)
-            2332:154(f16vec2) Load 156(f16c2)
-            2333:  7(f16vec4) ImageGather 2331 2332 2187 ConstOffset 722
-            2334:  7(f16vec4) Load 2303(texel)
-            2335:  7(f16vec4) 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(f16vec4) ImageDrefGather 2336 2337 2338 ConstOffset 722
-            2340:  7(f16vec4) Load 2303(texel)
-            2341:  7(f16vec4) FAdd 2340 2339
-                              Store 2303(texel) 2341
-            2342:         224 Load 226(s2DShadow)
-            2343:154(f16vec2) Load 156(f16c2)
-            2344:   52(float) Load 215(compare)
-            2345:  7(f16vec4) ImageDrefGather 2342 2343 2344 ConstOffset 722
-            2346:  7(f16vec4) Load 2303(texel)
-            2347:  7(f16vec4) 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(f16vec4) ImageDrefGather 2348 2349 2350 ConstOffset 722
-            2352:  7(f16vec4) Load 2303(texel)
-            2353:  7(f16vec4) FAdd 2352 2351
-                              Store 2303(texel) 2353
-            2354:         337 Load 339(s2DArrayShadow)
-            2355:175(f16vec3) Load 177(f16c3)
-            2356:   52(float) Load 215(compare)
-            2357:  7(f16vec4) ImageDrefGather 2354 2355 2356 ConstOffset 722
-            2358:  7(f16vec4) Load 2303(texel)
-            2359:  7(f16vec4) 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(f16vec4) ImageDrefGather 2360 2361 2362 ConstOffset 722
-            2364:  7(f16vec4) Load 2303(texel)
-            2365:  7(f16vec4) FAdd 2364 2363
-                              Store 2303(texel) 2365
-            2366:         371 Load 373(s2DRectShadow)
-            2367:154(f16vec2) Load 156(f16c2)
-            2368:   52(float) Load 215(compare)
-            2369:  7(f16vec4) ImageDrefGather 2366 2367 2368 ConstOffset 722
-            2370:  7(f16vec4) Load 2303(texel)
-            2371:  7(f16vec4) FAdd 2370 2369
-                              Store 2303(texel) 2371
-            2372:  7(f16vec4) Load 2303(texel)
-                              ReturnValue 2372
+     2213(texel):     64(ptr) Variable Function
+                              Store 2213(texel) 121
+            2214:         143 Load 145(s2D)
+            2215:   53(fvec2) Load 148(c2)
+            2216:  7(f16vec4) ImageGather 2214 2215 2097 ConstOffset 722
+            2217:  7(f16vec4) Load 2213(texel)
+            2218:  7(f16vec4) FAdd 2217 2216
+                              Store 2213(texel) 2218
+            2219:         143 Load 145(s2D)
+            2220:154(f16vec2) Load 156(f16c2)
+            2221:6(float16_t) Load 137(f16bias)
+            2222:  7(f16vec4) ImageGather 2219 2220 2097 Bias ConstOffset 2221 722
+            2223:  7(f16vec4) Load 2213(texel)
+            2224:  7(f16vec4) FAdd 2223 2222
+                              Store 2213(texel) 2224
+            2225:         284 Load 286(s2DArray)
+            2226:  167(fvec3) Load 169(c3)
+            2227:  7(f16vec4) ImageGather 2225 2226 2097 ConstOffset 722
+            2228:  7(f16vec4) Load 2213(texel)
+            2229:  7(f16vec4) FAdd 2228 2227
+                              Store 2213(texel) 2229
+            2230:         284 Load 286(s2DArray)
+            2231:175(f16vec3) Load 177(f16c3)
+            2232:6(float16_t) Load 137(f16bias)
+            2233:  7(f16vec4) ImageGather 2230 2231 2097 Bias ConstOffset 2232 722
+            2234:  7(f16vec4) Load 2213(texel)
+            2235:  7(f16vec4) FAdd 2234 2233
+                              Store 2213(texel) 2235
+            2236:         357 Load 359(s2DRect)
+            2237:   53(fvec2) Load 148(c2)
+            2238:  7(f16vec4) ImageGather 2236 2237 2097 ConstOffset 722
+            2239:  7(f16vec4) Load 2213(texel)
+            2240:  7(f16vec4) FAdd 2239 2238
+                              Store 2213(texel) 2240
+            2241:         357 Load 359(s2DRect)
+            2242:154(f16vec2) Load 156(f16c2)
+            2243:  7(f16vec4) ImageGather 2241 2242 2097 ConstOffset 722
+            2244:  7(f16vec4) Load 2213(texel)
+            2245:  7(f16vec4) FAdd 2244 2243
+                              Store 2213(texel) 2245
+            2246:         224 Load 226(s2DShadow)
+            2247:   53(fvec2) Load 148(c2)
+            2248:   52(float) Load 215(compare)
+            2249:  7(f16vec4) ImageDrefGather 2246 2247 2248 ConstOffset 722
+            2250:  7(f16vec4) Load 2213(texel)
+            2251:  7(f16vec4) FAdd 2250 2249
+                              Store 2213(texel) 2251
+            2252:         224 Load 226(s2DShadow)
+            2253:154(f16vec2) Load 156(f16c2)
+            2254:   52(float) Load 215(compare)
+            2255:  7(f16vec4) ImageDrefGather 2252 2253 2254 ConstOffset 722
+            2256:  7(f16vec4) Load 2213(texel)
+            2257:  7(f16vec4) FAdd 2256 2255
+                              Store 2213(texel) 2257
+            2258:         337 Load 339(s2DArrayShadow)
+            2259:  167(fvec3) Load 169(c3)
+            2260:   52(float) Load 215(compare)
+            2261:  7(f16vec4) ImageDrefGather 2258 2259 2260 ConstOffset 722
+            2262:  7(f16vec4) Load 2213(texel)
+            2263:  7(f16vec4) FAdd 2262 2261
+                              Store 2213(texel) 2263
+            2264:         337 Load 339(s2DArrayShadow)
+            2265:175(f16vec3) Load 177(f16c3)
+            2266:   52(float) Load 215(compare)
+            2267:  7(f16vec4) ImageDrefGather 2264 2265 2266 ConstOffset 722
+            2268:  7(f16vec4) Load 2213(texel)
+            2269:  7(f16vec4) FAdd 2268 2267
+                              Store 2213(texel) 2269
+            2270:         371 Load 373(s2DRectShadow)
+            2271:   53(fvec2) Load 148(c2)
+            2272:   52(float) Load 215(compare)
+            2273:  7(f16vec4) ImageDrefGather 2270 2271 2272 ConstOffset 722
+            2274:  7(f16vec4) Load 2213(texel)
+            2275:  7(f16vec4) FAdd 2274 2273
+                              Store 2213(texel) 2275
+            2276:         371 Load 373(s2DRectShadow)
+            2277:154(f16vec2) Load 156(f16c2)
+            2278:   52(float) Load 215(compare)
+            2279:  7(f16vec4) ImageDrefGather 2276 2277 2278 ConstOffset 722
+            2280:  7(f16vec4) Load 2213(texel)
+            2281:  7(f16vec4) FAdd 2280 2279
+                              Store 2213(texel) 2281
+            2282:  7(f16vec4) Load 2213(texel)
+                              ReturnValue 2282
                               FunctionEnd
 39(testTextureGatherOffsets():  7(f16vec4) 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(f16vec4) ImageGather 2376 2377 2187 ConstOffsets 2380
-            2382:  7(f16vec4) Load 2375(texel)
-            2383:  7(f16vec4) FAdd 2382 2381
-                              Store 2375(texel) 2383
-            2384:         143 Load 145(s2D)
-            2385:154(f16vec2) Load 156(f16c2)
-            2386:6(float16_t) Load 137(f16bias)
-            2387:  7(f16vec4) ImageGather 2384 2385 2187 Bias ConstOffsets 2386 2380
-            2388:  7(f16vec4) Load 2375(texel)
-            2389:  7(f16vec4) FAdd 2388 2387
-                              Store 2375(texel) 2389
-            2390:         284 Load 286(s2DArray)
-            2391:  167(fvec3) Load 169(c3)
-            2392:  7(f16vec4) ImageGather 2390 2391 2187 ConstOffsets 2380
-            2393:  7(f16vec4) Load 2375(texel)
-            2394:  7(f16vec4) FAdd 2393 2392
-                              Store 2375(texel) 2394
-            2395:         284 Load 286(s2DArray)
-            2396:175(f16vec3) Load 177(f16c3)
-            2397:6(float16_t) Load 137(f16bias)
-            2398:  7(f16vec4) ImageGather 2395 2396 2187 Bias ConstOffsets 2397 2380
-            2399:  7(f16vec4) Load 2375(texel)
-            2400:  7(f16vec4) FAdd 2399 2398
-                              Store 2375(texel) 2400
-            2401:         357 Load 359(s2DRect)
-            2402:   53(fvec2) Load 148(c2)
-            2403:  7(f16vec4) ImageGather 2401 2402 2187 ConstOffsets 2380
-            2404:  7(f16vec4) Load 2375(texel)
-            2405:  7(f16vec4) FAdd 2404 2403
-                              Store 2375(texel) 2405
-            2406:         357 Load 359(s2DRect)
-            2407:154(f16vec2) Load 156(f16c2)
-            2408:  7(f16vec4) ImageGather 2406 2407 2187 ConstOffsets 2380
-            2409:  7(f16vec4) Load 2375(texel)
-            2410:  7(f16vec4) 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(f16vec4) ImageDrefGather 2411 2412 2413 ConstOffsets 2380
-            2415:  7(f16vec4) Load 2375(texel)
-            2416:  7(f16vec4) FAdd 2415 2414
-                              Store 2375(texel) 2416
-            2417:         224 Load 226(s2DShadow)
-            2418:154(f16vec2) Load 156(f16c2)
-            2419:   52(float) Load 215(compare)
-            2420:  7(f16vec4) ImageDrefGather 2417 2418 2419 ConstOffsets 2380
-            2421:  7(f16vec4) Load 2375(texel)
-            2422:  7(f16vec4) 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(f16vec4) ImageDrefGather 2423 2424 2425 ConstOffsets 2380
-            2427:  7(f16vec4) Load 2375(texel)
-            2428:  7(f16vec4) FAdd 2427 2426
-                              Store 2375(texel) 2428
-            2429:         337 Load 339(s2DArrayShadow)
-            2430:175(f16vec3) Load 177(f16c3)
-            2431:   52(float) Load 215(compare)
-            2432:  7(f16vec4) ImageDrefGather 2429 2430 2431 ConstOffsets 2380
-            2433:  7(f16vec4) Load 2375(texel)
-            2434:  7(f16vec4) 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(f16vec4) ImageDrefGather 2435 2436 2437 ConstOffsets 2380
-            2439:  7(f16vec4) Load 2375(texel)
-            2440:  7(f16vec4) FAdd 2439 2438
-                              Store 2375(texel) 2440
-            2441:         371 Load 373(s2DRectShadow)
-            2442:154(f16vec2) Load 156(f16c2)
-            2443:   52(float) Load 215(compare)
-            2444:  7(f16vec4) ImageDrefGather 2441 2442 2443 ConstOffsets 2380
-            2445:  7(f16vec4) Load 2375(texel)
-            2446:  7(f16vec4) FAdd 2445 2444
-                              Store 2375(texel) 2446
-            2447:  7(f16vec4) Load 2375(texel)
-                              ReturnValue 2447
+     2285(texel):     64(ptr) Variable Function
+                              Store 2285(texel) 121
+            2286:         143 Load 145(s2D)
+            2287:   53(fvec2) Load 148(c2)
+            2291:  7(f16vec4) ImageGather 2286 2287 2097 ConstOffsets 2290
+            2292:  7(f16vec4) Load 2285(texel)
+            2293:  7(f16vec4) FAdd 2292 2291
+                              Store 2285(texel) 2293
+            2294:         143 Load 145(s2D)
+            2295:154(f16vec2) Load 156(f16c2)
+            2296:6(float16_t) Load 137(f16bias)
+            2297:  7(f16vec4) ImageGather 2294 2295 2097 Bias ConstOffsets 2296 2290
+            2298:  7(f16vec4) Load 2285(texel)
+            2299:  7(f16vec4) FAdd 2298 2297
+                              Store 2285(texel) 2299
+            2300:         284 Load 286(s2DArray)
+            2301:  167(fvec3) Load 169(c3)
+            2302:  7(f16vec4) ImageGather 2300 2301 2097 ConstOffsets 2290
+            2303:  7(f16vec4) Load 2285(texel)
+            2304:  7(f16vec4) FAdd 2303 2302
+                              Store 2285(texel) 2304
+            2305:         284 Load 286(s2DArray)
+            2306:175(f16vec3) Load 177(f16c3)
+            2307:6(float16_t) Load 137(f16bias)
+            2308:  7(f16vec4) ImageGather 2305 2306 2097 Bias ConstOffsets 2307 2290
+            2309:  7(f16vec4) Load 2285(texel)
+            2310:  7(f16vec4) FAdd 2309 2308
+                              Store 2285(texel) 2310
+            2311:         357 Load 359(s2DRect)
+            2312:   53(fvec2) Load 148(c2)
+            2313:  7(f16vec4) ImageGather 2311 2312 2097 ConstOffsets 2290
+            2314:  7(f16vec4) Load 2285(texel)
+            2315:  7(f16vec4) FAdd 2314 2313
+                              Store 2285(texel) 2315
+            2316:         357 Load 359(s2DRect)
+            2317:154(f16vec2) Load 156(f16c2)
+            2318:  7(f16vec4) ImageGather 2316 2317 2097 ConstOffsets 2290
+            2319:  7(f16vec4) Load 2285(texel)
+            2320:  7(f16vec4) FAdd 2319 2318
+                              Store 2285(texel) 2320
+            2321:         224 Load 226(s2DShadow)
+            2322:   53(fvec2) Load 148(c2)
+            2323:   52(float) Load 215(compare)
+            2324:  7(f16vec4) ImageDrefGather 2321 2322 2323 ConstOffsets 2290
+            2325:  7(f16vec4) Load 2285(texel)
+            2326:  7(f16vec4) FAdd 2325 2324
+                              Store 2285(texel) 2326
+            2327:         224 Load 226(s2DShadow)
+            2328:154(f16vec2) Load 156(f16c2)
+            2329:   52(float) Load 215(compare)
+            2330:  7(f16vec4) ImageDrefGather 2327 2328 2329 ConstOffsets 2290
+            2331:  7(f16vec4) Load 2285(texel)
+            2332:  7(f16vec4) FAdd 2331 2330
+                              Store 2285(texel) 2332
+            2333:         337 Load 339(s2DArrayShadow)
+            2334:  167(fvec3) Load 169(c3)
+            2335:   52(float) Load 215(compare)
+            2336:  7(f16vec4) ImageDrefGather 2333 2334 2335 ConstOffsets 2290
+            2337:  7(f16vec4) Load 2285(texel)
+            2338:  7(f16vec4) FAdd 2337 2336
+                              Store 2285(texel) 2338
+            2339:         337 Load 339(s2DArrayShadow)
+            2340:175(f16vec3) Load 177(f16c3)
+            2341:   52(float) Load 215(compare)
+            2342:  7(f16vec4) ImageDrefGather 2339 2340 2341 ConstOffsets 2290
+            2343:  7(f16vec4) Load 2285(texel)
+            2344:  7(f16vec4) FAdd 2343 2342
+                              Store 2285(texel) 2344
+            2345:         371 Load 373(s2DRectShadow)
+            2346:   53(fvec2) Load 148(c2)
+            2347:   52(float) Load 215(compare)
+            2348:  7(f16vec4) ImageDrefGather 2345 2346 2347 ConstOffsets 2290
+            2349:  7(f16vec4) Load 2285(texel)
+            2350:  7(f16vec4) FAdd 2349 2348
+                              Store 2285(texel) 2350
+            2351:         371 Load 373(s2DRectShadow)
+            2352:154(f16vec2) Load 156(f16c2)
+            2353:   52(float) Load 215(compare)
+            2354:  7(f16vec4) ImageDrefGather 2351 2352 2353 ConstOffsets 2290
+            2355:  7(f16vec4) Load 2285(texel)
+            2356:  7(f16vec4) FAdd 2355 2354
+                              Store 2285(texel) 2356
+            2357:  7(f16vec4) Load 2285(texel)
+                              ReturnValue 2357
                               FunctionEnd
 41(testTextureGatherLod():  7(f16vec4) 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(f16vec4) ImageGather 2451 2452 2187 Lod 2453
-            2455:  7(f16vec4) Load 2450(texel)
-            2456:  7(f16vec4) FAdd 2455 2454
-                              Store 2450(texel) 2456
-            2457:         143 Load 145(s2D)
-            2458:154(f16vec2) Load 156(f16c2)
-            2459:6(float16_t) Load 572(f16lod)
-            2460:  7(f16vec4) ImageGather 2457 2458 2187 Lod 2459
-            2461:  7(f16vec4) Load 2450(texel)
-            2462:  7(f16vec4) 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(f16vec4) ImageGather 2463 2464 2187 Lod 2465
-            2467:  7(f16vec4) Load 2450(texel)
-            2468:  7(f16vec4) FAdd 2467 2466
-                              Store 2450(texel) 2468
-            2469:         284 Load 286(s2DArray)
-            2470:175(f16vec3) Load 177(f16c3)
-            2471:6(float16_t) Load 572(f16lod)
-            2472:  7(f16vec4) ImageGather 2469 2470 2187 Lod 2471
-            2473:  7(f16vec4) Load 2450(texel)
-            2474:  7(f16vec4) 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(f16vec4) ImageGather 2475 2476 2187 Lod 2477
-            2479:  7(f16vec4) Load 2450(texel)
-            2480:  7(f16vec4) FAdd 2479 2478
-                              Store 2450(texel) 2480
-            2481:         184 Load 186(sCube)
-            2482:175(f16vec3) Load 177(f16c3)
-            2483:6(float16_t) Load 572(f16lod)
-            2484:  7(f16vec4) ImageGather 2481 2482 2187 Lod 2483
-            2485:  7(f16vec4) Load 2450(texel)
-            2486:  7(f16vec4) 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(f16vec4) ImageGather 2487 2488 2187 Lod 2489
-            2491:  7(f16vec4) Load 2450(texel)
-            2492:  7(f16vec4) FAdd 2491 2490
-                              Store 2450(texel) 2492
-            2493:         299 Load 301(sCubeArray)
-            2494:  7(f16vec4) Load 309(f16c4)
-            2495:6(float16_t) Load 572(f16lod)
-            2496:  7(f16vec4) ImageGather 2493 2494 2187 Lod 2495
-            2497:  7(f16vec4) Load 2450(texel)
-            2498:  7(f16vec4) FAdd 2497 2496
-                              Store 2450(texel) 2498
-            2499:  7(f16vec4) Load 2450(texel)
-                              ReturnValue 2499
+     2360(texel):     64(ptr) Variable Function
+                              Store 2360(texel) 121
+            2361:         143 Load 145(s2D)
+            2362:   53(fvec2) Load 148(c2)
+            2363:   52(float) Load 565(lod)
+            2364:  7(f16vec4) ImageGather 2361 2362 2097 Lod 2363
+            2365:  7(f16vec4) Load 2360(texel)
+            2366:  7(f16vec4) FAdd 2365 2364
+                              Store 2360(texel) 2366
+            2367:         143 Load 145(s2D)
+            2368:154(f16vec2) Load 156(f16c2)
+            2369:6(float16_t) Load 572(f16lod)
+            2370:  7(f16vec4) ImageGather 2367 2368 2097 Lod 2369
+            2371:  7(f16vec4) Load 2360(texel)
+            2372:  7(f16vec4) FAdd 2371 2370
+                              Store 2360(texel) 2372
+            2373:         284 Load 286(s2DArray)
+            2374:  167(fvec3) Load 169(c3)
+            2375:   52(float) Load 565(lod)
+            2376:  7(f16vec4) ImageGather 2373 2374 2097 Lod 2375
+            2377:  7(f16vec4) Load 2360(texel)
+            2378:  7(f16vec4) FAdd 2377 2376
+                              Store 2360(texel) 2378
+            2379:         284 Load 286(s2DArray)
+            2380:175(f16vec3) Load 177(f16c3)
+            2381:6(float16_t) Load 572(f16lod)
+            2382:  7(f16vec4) ImageGather 2379 2380 2097 Lod 2381
+            2383:  7(f16vec4) Load 2360(texel)
+            2384:  7(f16vec4) FAdd 2383 2382
+                              Store 2360(texel) 2384
+            2385:         184 Load 186(sCube)
+            2386:  167(fvec3) Load 169(c3)
+            2387:   52(float) Load 565(lod)
+            2388:  7(f16vec4) ImageGather 2385 2386 2097 Lod 2387
+            2389:  7(f16vec4) Load 2360(texel)
+            2390:  7(f16vec4) FAdd 2389 2388
+                              Store 2360(texel) 2390
+            2391:         184 Load 186(sCube)
+            2392:175(f16vec3) Load 177(f16c3)
+            2393:6(float16_t) Load 572(f16lod)
+            2394:  7(f16vec4) ImageGather 2391 2392 2097 Lod 2393
+            2395:  7(f16vec4) Load 2360(texel)
+            2396:  7(f16vec4) FAdd 2395 2394
+                              Store 2360(texel) 2396
+            2397:         299 Load 301(sCubeArray)
+            2398:  249(fvec4) Load 251(c4)
+            2399:   52(float) Load 565(lod)
+            2400:  7(f16vec4) ImageGather 2397 2398 2097 Lod 2399
+            2401:  7(f16vec4) Load 2360(texel)
+            2402:  7(f16vec4) FAdd 2401 2400
+                              Store 2360(texel) 2402
+            2403:         299 Load 301(sCubeArray)
+            2404:  7(f16vec4) Load 309(f16c4)
+            2405:6(float16_t) Load 572(f16lod)
+            2406:  7(f16vec4) ImageGather 2403 2404 2097 Lod 2405
+            2407:  7(f16vec4) Load 2360(texel)
+            2408:  7(f16vec4) FAdd 2407 2406
+                              Store 2360(texel) 2408
+            2409:  7(f16vec4) Load 2360(texel)
+                              ReturnValue 2409
                               FunctionEnd
 43(testTextureGatherLodOffset():  7(f16vec4) 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(f16vec4) ImageGather 2503 2504 2187 Lod ConstOffset 2505 722
-            2507:  7(f16vec4) Load 2502(texel)
-            2508:  7(f16vec4) FAdd 2507 2506
-                              Store 2502(texel) 2508
-            2509:         143 Load 145(s2D)
-            2510:154(f16vec2) Load 156(f16c2)
-            2511:6(float16_t) Load 572(f16lod)
-            2512:  7(f16vec4) ImageGather 2509 2510 2187 Lod ConstOffset 2511 722
-            2513:  7(f16vec4) Load 2502(texel)
-            2514:  7(f16vec4) 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(f16vec4) ImageGather 2515 2516 2187 Lod ConstOffset 2517 722
-            2519:  7(f16vec4) Load 2502(texel)
-            2520:  7(f16vec4) FAdd 2519 2518
-                              Store 2502(texel) 2520
-            2521:         284 Load 286(s2DArray)
-            2522:175(f16vec3) Load 177(f16c3)
-            2523:6(float16_t) Load 572(f16lod)
-            2524:  7(f16vec4) ImageGather 2521 2522 2187 Lod ConstOffset 2523 722
-            2525:  7(f16vec4) Load 2502(texel)
-            2526:  7(f16vec4) FAdd 2525 2524
-                              Store 2502(texel) 2526
-            2527:  7(f16vec4) Load 2502(texel)
-                              ReturnValue 2527
+     2412(texel):     64(ptr) Variable Function
+                              Store 2412(texel) 121
+            2413:         143 Load 145(s2D)
+            2414:   53(fvec2) Load 148(c2)
+            2415:   52(float) Load 565(lod)
+            2416:  7(f16vec4) ImageGather 2413 2414 2097 Lod ConstOffset 2415 722
+            2417:  7(f16vec4) Load 2412(texel)
+            2418:  7(f16vec4) FAdd 2417 2416
+                              Store 2412(texel) 2418
+            2419:         143 Load 145(s2D)
+            2420:154(f16vec2) Load 156(f16c2)
+            2421:6(float16_t) Load 572(f16lod)
+            2422:  7(f16vec4) ImageGather 2419 2420 2097 Lod ConstOffset 2421 722
+            2423:  7(f16vec4) Load 2412(texel)
+            2424:  7(f16vec4) FAdd 2423 2422
+                              Store 2412(texel) 2424
+            2425:         284 Load 286(s2DArray)
+            2426:  167(fvec3) Load 169(c3)
+            2427:   52(float) Load 565(lod)
+            2428:  7(f16vec4) ImageGather 2425 2426 2097 Lod ConstOffset 2427 722
+            2429:  7(f16vec4) Load 2412(texel)
+            2430:  7(f16vec4) FAdd 2429 2428
+                              Store 2412(texel) 2430
+            2431:         284 Load 286(s2DArray)
+            2432:175(f16vec3) Load 177(f16c3)
+            2433:6(float16_t) Load 572(f16lod)
+            2434:  7(f16vec4) ImageGather 2431 2432 2097 Lod ConstOffset 2433 722
+            2435:  7(f16vec4) Load 2412(texel)
+            2436:  7(f16vec4) FAdd 2435 2434
+                              Store 2412(texel) 2436
+            2437:  7(f16vec4) Load 2412(texel)
+                              ReturnValue 2437
                               FunctionEnd
 45(testTextureGatherLodOffsets():  7(f16vec4) 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(f16vec4) ImageGather 2531 2532 2187 Lod ConstOffsets 2533 2380
-            2535:  7(f16vec4) Load 2530(texel)
-            2536:  7(f16vec4) FAdd 2535 2534
-                              Store 2530(texel) 2536
-            2537:         143 Load 145(s2D)
-            2538:154(f16vec2) Load 156(f16c2)
-            2539:6(float16_t) Load 572(f16lod)
-            2540:  7(f16vec4) ImageGather 2537 2538 2187 Lod ConstOffsets 2539 2380
-            2541:  7(f16vec4) Load 2530(texel)
-            2542:  7(f16vec4) 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(f16vec4) ImageGather 2543 2544 2187 Lod ConstOffsets 2545 2380
-            2547:  7(f16vec4) Load 2530(texel)
-            2548:  7(f16vec4) FAdd 2547 2546
-                              Store 2530(texel) 2548
-            2549:         284 Load 286(s2DArray)
-            2550:175(f16vec3) Load 177(f16c3)
-            2551:6(float16_t) Load 572(f16lod)
-            2552:  7(f16vec4) ImageGather 2549 2550 2187 Lod ConstOffsets 2551 2380
-            2553:  7(f16vec4) Load 2530(texel)
-            2554:  7(f16vec4) FAdd 2553 2552
-                              Store 2530(texel) 2554
-            2555:  7(f16vec4) Load 2530(texel)
-                              ReturnValue 2555
+     2440(texel):     64(ptr) Variable Function
+                              Store 2440(texel) 121
+            2441:         143 Load 145(s2D)
+            2442:   53(fvec2) Load 148(c2)
+            2443:   52(float) Load 565(lod)
+            2444:  7(f16vec4) ImageGather 2441 2442 2097 Lod ConstOffsets 2443 2290
+            2445:  7(f16vec4) Load 2440(texel)
+            2446:  7(f16vec4) FAdd 2445 2444
+                              Store 2440(texel) 2446
+            2447:         143 Load 145(s2D)
+            2448:154(f16vec2) Load 156(f16c2)
+            2449:6(float16_t) Load 572(f16lod)
+            2450:  7(f16vec4) ImageGather 2447 2448 2097 Lod ConstOffsets 2449 2290
+            2451:  7(f16vec4) Load 2440(texel)
+            2452:  7(f16vec4) FAdd 2451 2450
+                              Store 2440(texel) 2452
+            2453:         284 Load 286(s2DArray)
+            2454:  167(fvec3) Load 169(c3)
+            2455:   52(float) Load 565(lod)
+            2456:  7(f16vec4) ImageGather 2453 2454 2097 Lod ConstOffsets 2455 2290
+            2457:  7(f16vec4) Load 2440(texel)
+            2458:  7(f16vec4) FAdd 2457 2456
+                              Store 2440(texel) 2458
+            2459:         284 Load 286(s2DArray)
+            2460:175(f16vec3) Load 177(f16c3)
+            2461:6(float16_t) Load 572(f16lod)
+            2462:  7(f16vec4) ImageGather 2459 2460 2097 Lod ConstOffsets 2461 2290
+            2463:  7(f16vec4) Load 2440(texel)
+            2464:  7(f16vec4) FAdd 2463 2462
+                              Store 2440(texel) 2464
+            2465:  7(f16vec4) Load 2440(texel)
+                              ReturnValue 2465
                               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:   2566(ptr) AccessChain 2559(size) 207
-            2580:     47(int) CompositeExtract 2578 0
-                              Store 2579 2580
-            2582:   2566(ptr) AccessChain 2559(size) 2581
-            2583:     47(int) CompositeExtract 2578 1
-                              Store 2582 2583
-            2584:         163 Load 165(s3D)
-            2585:   52(float) Load 565(lod)
-            2586:     47(int) ConvertFToS 2585
-            2587:         162 Image 2584
-            2588:  734(ivec3) ImageQuerySizeLod 2587 2586
-            2589:   48(ivec4) Load 2559(size)
-            2590:  734(ivec3) VectorShuffle 2589 2589 0 1 2
-            2591:  734(ivec3) IAdd 2590 2588
-            2592:   2566(ptr) AccessChain 2559(size) 207
-            2593:     47(int) CompositeExtract 2591 0
-                              Store 2592 2593
-            2594:   2566(ptr) AccessChain 2559(size) 2581
-            2595:     47(int) CompositeExtract 2591 1
-                              Store 2594 2595
-            2597:   2566(ptr) AccessChain 2559(size) 2596
-            2598:     47(int) CompositeExtract 2591 2
-                              Store 2597 2598
-            2599:         184 Load 186(sCube)
-            2600:   52(float) Load 565(lod)
-            2601:     47(int) ConvertFToS 2600
-            2602:         183 Image 2599
-            2603:  721(ivec2) ImageQuerySizeLod 2602 2601
-            2604:   48(ivec4) Load 2559(size)
-            2605:  721(ivec2) VectorShuffle 2604 2604 0 1
-            2606:  721(ivec2) IAdd 2605 2603
-            2607:   2566(ptr) AccessChain 2559(size) 207
-            2608:     47(int) CompositeExtract 2606 0
-                              Store 2607 2608
-            2609:   2566(ptr) AccessChain 2559(size) 2581
-            2610:     47(int) CompositeExtract 2606 1
-                              Store 2609 2610
-            2611:         199 Load 201(s1DShadow)
-            2612:   52(float) Load 565(lod)
-            2613:     47(int) ConvertFToS 2612
-            2614:         198 Image 2611
-            2615:     47(int) ImageQuerySizeLod 2614 2613
-            2616:   2566(ptr) AccessChain 2559(size) 207
-            2617:     47(int) Load 2616
-            2618:     47(int) IAdd 2617 2615
-            2619:   2566(ptr) AccessChain 2559(size) 207
-                              Store 2619 2618
-            2620:         224 Load 226(s2DShadow)
-            2621:   52(float) Load 565(lod)
-            2622:     47(int) ConvertFToS 2621
-            2623:         223 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:   2566(ptr) AccessChain 2559(size) 207
-            2629:     47(int) CompositeExtract 2627 0
-                              Store 2628 2629
-            2630:   2566(ptr) AccessChain 2559(size) 2581
-            2631:     47(int) CompositeExtract 2627 1
-                              Store 2630 2631
-            2632:         245 Load 247(sCubeShadow)
-            2633:   52(float) Load 565(lod)
-            2634:     47(int) ConvertFToS 2633
-            2635:         244 Image 2632
-            2636:  721(ivec2) ImageQuerySizeLod 2635 2634
-            2637:   48(ivec4) Load 2559(size)
-            2638:  721(ivec2) VectorShuffle 2637 2637 0 1
-            2639:  721(ivec2) IAdd 2638 2636
-            2640:   2566(ptr) AccessChain 2559(size) 207
-            2641:     47(int) CompositeExtract 2639 0
-                              Store 2640 2641
-            2642:   2566(ptr) AccessChain 2559(size) 2581
-            2643:     47(int) CompositeExtract 2639 1
-                              Store 2642 2643
-            2644:         299 Load 301(sCubeArray)
-            2645:   52(float) Load 565(lod)
-            2646:     47(int) ConvertFToS 2645
-            2647:         298 Image 2644
-            2648:  734(ivec3) ImageQuerySizeLod 2647 2646
-            2649:   48(ivec4) Load 2559(size)
-            2650:  734(ivec3) VectorShuffle 2649 2649 0 1 2
-            2651:  734(ivec3) IAdd 2650 2648
-            2652:   2566(ptr) AccessChain 2559(size) 207
-            2653:     47(int) CompositeExtract 2651 0
+      2469(size):   2468(ptr) Variable Function
+                              Store 2469(size) 2470
+            2471:         123 Load 125(s1D)
+            2472:   52(float) Load 565(lod)
+            2473:     47(int) ConvertFToS 2472
+            2474:         122 Image 2471
+            2475:     47(int) ImageQuerySizeLod 2474 2473
+            2477:   2476(ptr) AccessChain 2469(size) 207
+            2478:     47(int) Load 2477
+            2479:     47(int) IAdd 2478 2475
+            2480:   2476(ptr) AccessChain 2469(size) 207
+                              Store 2480 2479
+            2481:         143 Load 145(s2D)
+            2482:   52(float) Load 565(lod)
+            2483:     47(int) ConvertFToS 2482
+            2484:         142 Image 2481
+            2485:  721(ivec2) ImageQuerySizeLod 2484 2483
+            2486:   48(ivec4) Load 2469(size)
+            2487:  721(ivec2) VectorShuffle 2486 2486 0 1
+            2488:  721(ivec2) IAdd 2487 2485
+            2489:   2476(ptr) AccessChain 2469(size) 207
+            2490:     47(int) CompositeExtract 2488 0
+                              Store 2489 2490
+            2492:   2476(ptr) AccessChain 2469(size) 2491
+            2493:     47(int) CompositeExtract 2488 1
+                              Store 2492 2493
+            2494:         163 Load 165(s3D)
+            2495:   52(float) Load 565(lod)
+            2496:     47(int) ConvertFToS 2495
+            2497:         162 Image 2494
+            2498:  734(ivec3) ImageQuerySizeLod 2497 2496
+            2499:   48(ivec4) Load 2469(size)
+            2500:  734(ivec3) VectorShuffle 2499 2499 0 1 2
+            2501:  734(ivec3) IAdd 2500 2498
+            2502:   2476(ptr) AccessChain 2469(size) 207
+            2503:     47(int) CompositeExtract 2501 0
+                              Store 2502 2503
+            2504:   2476(ptr) AccessChain 2469(size) 2491
+            2505:     47(int) CompositeExtract 2501 1
+                              Store 2504 2505
+            2507:   2476(ptr) AccessChain 2469(size) 2506
+            2508:     47(int) CompositeExtract 2501 2
+                              Store 2507 2508
+            2509:         184 Load 186(sCube)
+            2510:   52(float) Load 565(lod)
+            2511:     47(int) ConvertFToS 2510
+            2512:         183 Image 2509
+            2513:  721(ivec2) ImageQuerySizeLod 2512 2511
+            2514:   48(ivec4) Load 2469(size)
+            2515:  721(ivec2) VectorShuffle 2514 2514 0 1
+            2516:  721(ivec2) IAdd 2515 2513
+            2517:   2476(ptr) AccessChain 2469(size) 207
+            2518:     47(int) CompositeExtract 2516 0
+                              Store 2517 2518
+            2519:   2476(ptr) AccessChain 2469(size) 2491
+            2520:     47(int) CompositeExtract 2516 1
+                              Store 2519 2520
+            2521:         199 Load 201(s1DShadow)
+            2522:   52(float) Load 565(lod)
+            2523:     47(int) ConvertFToS 2522
+            2524:         198 Image 2521
+            2525:     47(int) ImageQuerySizeLod 2524 2523
+            2526:   2476(ptr) AccessChain 2469(size) 207
+            2527:     47(int) Load 2526
+            2528:     47(int) IAdd 2527 2525
+            2529:   2476(ptr) AccessChain 2469(size) 207
+                              Store 2529 2528
+            2530:         224 Load 226(s2DShadow)
+            2531:   52(float) Load 565(lod)
+            2532:     47(int) ConvertFToS 2531
+            2533:         223 Image 2530
+            2534:  721(ivec2) ImageQuerySizeLod 2533 2532
+            2535:   48(ivec4) Load 2469(size)
+            2536:  721(ivec2) VectorShuffle 2535 2535 0 1
+            2537:  721(ivec2) IAdd 2536 2534
+            2538:   2476(ptr) AccessChain 2469(size) 207
+            2539:     47(int) CompositeExtract 2537 0
+                              Store 2538 2539
+            2540:   2476(ptr) AccessChain 2469(size) 2491
+            2541:     47(int) CompositeExtract 2537 1
+                              Store 2540 2541
+            2542:         245 Load 247(sCubeShadow)
+            2543:   52(float) Load 565(lod)
+            2544:     47(int) ConvertFToS 2543
+            2545:         244 Image 2542
+            2546:  721(ivec2) ImageQuerySizeLod 2545 2544
+            2547:   48(ivec4) Load 2469(size)
+            2548:  721(ivec2) VectorShuffle 2547 2547 0 1
+            2549:  721(ivec2) IAdd 2548 2546
+            2550:   2476(ptr) AccessChain 2469(size) 207
+            2551:     47(int) CompositeExtract 2549 0
+                              Store 2550 2551
+            2552:   2476(ptr) AccessChain 2469(size) 2491
+            2553:     47(int) CompositeExtract 2549 1
+                              Store 2552 2553
+            2554:         299 Load 301(sCubeArray)
+            2555:   52(float) Load 565(lod)
+            2556:     47(int) ConvertFToS 2555
+            2557:         298 Image 2554
+            2558:  734(ivec3) ImageQuerySizeLod 2557 2556
+            2559:   48(ivec4) Load 2469(size)
+            2560:  734(ivec3) VectorShuffle 2559 2559 0 1 2
+            2561:  734(ivec3) IAdd 2560 2558
+            2562:   2476(ptr) AccessChain 2469(size) 207
+            2563:     47(int) CompositeExtract 2561 0
+                              Store 2562 2563
+            2564:   2476(ptr) AccessChain 2469(size) 2491
+            2565:     47(int) CompositeExtract 2561 1
+                              Store 2564 2565
+            2566:   2476(ptr) AccessChain 2469(size) 2506
+            2567:     47(int) CompositeExtract 2561 2
+                              Store 2566 2567
+            2568:         391 Load 393(sCubeArrayShadow)
+            2569:   52(float) Load 565(lod)
+            2570:     47(int) ConvertFToS 2569
+            2571:         390 Image 2568
+            2572:  734(ivec3) ImageQuerySizeLod 2571 2570
+            2573:   48(ivec4) Load 2469(size)
+            2574:  734(ivec3) VectorShuffle 2573 2573 0 1 2
+            2575:  734(ivec3) IAdd 2574 2572
+            2576:   2476(ptr) AccessChain 2469(size) 207
+            2577:     47(int) CompositeExtract 2575 0
+                              Store 2576 2577
+            2578:   2476(ptr) AccessChain 2469(size) 2491
+            2579:     47(int) CompositeExtract 2575 1
+                              Store 2578 2579
+            2580:   2476(ptr) AccessChain 2469(size) 2506
+            2581:     47(int) CompositeExtract 2575 2
+                              Store 2580 2581
+            2582:         357 Load 359(s2DRect)
+            2583:         356 Image 2582
+            2584:  721(ivec2) ImageQuerySize 2583
+            2585:   48(ivec4) Load 2469(size)
+            2586:  721(ivec2) VectorShuffle 2585 2585 0 1
+            2587:  721(ivec2) IAdd 2586 2584
+            2588:   2476(ptr) AccessChain 2469(size) 207
+            2589:     47(int) CompositeExtract 2587 0
+                              Store 2588 2589
+            2590:   2476(ptr) AccessChain 2469(size) 2491
+            2591:     47(int) CompositeExtract 2587 1
+                              Store 2590 2591
+            2592:         371 Load 373(s2DRectShadow)
+            2593:         370 Image 2592
+            2594:  721(ivec2) ImageQuerySize 2593
+            2595:   48(ivec4) Load 2469(size)
+            2596:  721(ivec2) VectorShuffle 2595 2595 0 1
+            2597:  721(ivec2) IAdd 2596 2594
+            2598:   2476(ptr) AccessChain 2469(size) 207
+            2599:     47(int) CompositeExtract 2597 0
+                              Store 2598 2599
+            2600:   2476(ptr) AccessChain 2469(size) 2491
+            2601:     47(int) CompositeExtract 2597 1
+                              Store 2600 2601
+            2602:         269 Load 271(s1DArray)
+            2603:   52(float) Load 565(lod)
+            2604:     47(int) ConvertFToS 2603
+            2605:         268 Image 2602
+            2606:  721(ivec2) ImageQuerySizeLod 2605 2604
+            2607:   48(ivec4) Load 2469(size)
+            2608:  721(ivec2) VectorShuffle 2607 2607 0 1
+            2609:  721(ivec2) IAdd 2608 2606
+            2610:   2476(ptr) AccessChain 2469(size) 207
+            2611:     47(int) CompositeExtract 2609 0
+                              Store 2610 2611
+            2612:   2476(ptr) AccessChain 2469(size) 2491
+            2613:     47(int) CompositeExtract 2609 1
+                              Store 2612 2613
+            2614:         284 Load 286(s2DArray)
+            2615:   52(float) Load 565(lod)
+            2616:     47(int) ConvertFToS 2615
+            2617:         283 Image 2614
+            2618:  734(ivec3) ImageQuerySizeLod 2617 2616
+            2619:   48(ivec4) Load 2469(size)
+            2620:  734(ivec3) VectorShuffle 2619 2619 0 1 2
+            2621:  734(ivec3) IAdd 2620 2618
+            2622:   2476(ptr) AccessChain 2469(size) 207
+            2623:     47(int) CompositeExtract 2621 0
+                              Store 2622 2623
+            2624:   2476(ptr) AccessChain 2469(size) 2491
+            2625:     47(int) CompositeExtract 2621 1
+                              Store 2624 2625
+            2626:   2476(ptr) AccessChain 2469(size) 2506
+            2627:     47(int) CompositeExtract 2621 2
+                              Store 2626 2627
+            2628:         316 Load 318(s1DArrayShadow)
+            2629:   52(float) Load 565(lod)
+            2630:     47(int) ConvertFToS 2629
+            2631:         315 Image 2628
+            2632:  721(ivec2) ImageQuerySizeLod 2631 2630
+            2633:   48(ivec4) Load 2469(size)
+            2634:  721(ivec2) VectorShuffle 2633 2633 0 1
+            2635:  721(ivec2) IAdd 2634 2632
+            2636:   2476(ptr) AccessChain 2469(size) 207
+            2637:     47(int) CompositeExtract 2635 0
+                              Store 2636 2637
+            2638:   2476(ptr) AccessChain 2469(size) 2491
+            2639:     47(int) CompositeExtract 2635 1
+                              Store 2638 2639
+            2640:         337 Load 339(s2DArrayShadow)
+            2641:   52(float) Load 565(lod)
+            2642:     47(int) ConvertFToS 2641
+            2643:         336 Image 2640
+            2644:  734(ivec3) ImageQuerySizeLod 2643 2642
+            2645:   48(ivec4) Load 2469(size)
+            2646:  734(ivec3) VectorShuffle 2645 2645 0 1 2
+            2647:  734(ivec3) IAdd 2646 2644
+            2648:   2476(ptr) AccessChain 2469(size) 207
+            2649:     47(int) CompositeExtract 2647 0
+                              Store 2648 2649
+            2650:   2476(ptr) AccessChain 2469(size) 2491
+            2651:     47(int) CompositeExtract 2647 1
+                              Store 2650 2651
+            2652:   2476(ptr) AccessChain 2469(size) 2506
+            2653:     47(int) CompositeExtract 2647 2
                               Store 2652 2653
-            2654:   2566(ptr) AccessChain 2559(size) 2581
-            2655:     47(int) CompositeExtract 2651 1
-                              Store 2654 2655
-            2656:   2566(ptr) AccessChain 2559(size) 2596
-            2657:     47(int) CompositeExtract 2651 2
-                              Store 2656 2657
-            2658:         391 Load 393(sCubeArrayShadow)
-            2659:   52(float) Load 565(lod)
-            2660:     47(int) ConvertFToS 2659
-            2661:         390 Image 2658
-            2662:  734(ivec3) ImageQuerySizeLod 2661 2660
-            2663:   48(ivec4) Load 2559(size)
-            2664:  734(ivec3) VectorShuffle 2663 2663 0 1 2
-            2665:  734(ivec3) IAdd 2664 2662
-            2666:   2566(ptr) AccessChain 2559(size) 207
-            2667:     47(int) CompositeExtract 2665 0
-                              Store 2666 2667
-            2668:   2566(ptr) AccessChain 2559(size) 2581
-            2669:     47(int) CompositeExtract 2665 1
-                              Store 2668 2669
-            2670:   2566(ptr) AccessChain 2559(size) 2596
-            2671:     47(int) CompositeExtract 2665 2
-                              Store 2670 2671
-            2672:         357 Load 359(s2DRect)
-            2673:         356 Image 2672
-            2674:  721(ivec2) ImageQuerySize 2673
-            2675:   48(ivec4) Load 2559(size)
-            2676:  721(ivec2) VectorShuffle 2675 2675 0 1
-            2677:  721(ivec2) IAdd 2676 2674
-            2678:   2566(ptr) AccessChain 2559(size) 207
-            2679:     47(int) CompositeExtract 2677 0
-                              Store 2678 2679
-            2680:   2566(ptr) AccessChain 2559(size) 2581
-            2681:     47(int) CompositeExtract 2677 1
-                              Store 2680 2681
-            2682:         371 Load 373(s2DRectShadow)
-            2683:         370 Image 2682
-            2684:  721(ivec2) ImageQuerySize 2683
-            2685:   48(ivec4) Load 2559(size)
-            2686:  721(ivec2) VectorShuffle 2685 2685 0 1
-            2687:  721(ivec2) IAdd 2686 2684
-            2688:   2566(ptr) AccessChain 2559(size) 207
-            2689:     47(int) CompositeExtract 2687 0
-                              Store 2688 2689
-            2690:   2566(ptr) AccessChain 2559(size) 2581
-            2691:     47(int) CompositeExtract 2687 1
-                              Store 2690 2691
-            2692:         269 Load 271(s1DArray)
-            2693:   52(float) Load 565(lod)
-            2694:     47(int) ConvertFToS 2693
-            2695:         268 Image 2692
-            2696:  721(ivec2) ImageQuerySizeLod 2695 2694
-            2697:   48(ivec4) Load 2559(size)
-            2698:  721(ivec2) VectorShuffle 2697 2697 0 1
-            2699:  721(ivec2) IAdd 2698 2696
-            2700:   2566(ptr) AccessChain 2559(size) 207
-            2701:     47(int) CompositeExtract 2699 0
-                              Store 2700 2701
-            2702:   2566(ptr) AccessChain 2559(size) 2581
-            2703:     47(int) CompositeExtract 2699 1
-                              Store 2702 2703
-            2704:         284 Load 286(s2DArray)
-            2705:   52(float) Load 565(lod)
-            2706:     47(int) ConvertFToS 2705
-            2707:         283 Image 2704
-            2708:  734(ivec3) ImageQuerySizeLod 2707 2706
-            2709:   48(ivec4) Load 2559(size)
-            2710:  734(ivec3) VectorShuffle 2709 2709 0 1 2
-            2711:  734(ivec3) IAdd 2710 2708
-            2712:   2566(ptr) AccessChain 2559(size) 207
-            2713:     47(int) CompositeExtract 2711 0
-                              Store 2712 2713
-            2714:   2566(ptr) AccessChain 2559(size) 2581
-            2715:     47(int) CompositeExtract 2711 1
-                              Store 2714 2715
-            2716:   2566(ptr) AccessChain 2559(size) 2596
-            2717:     47(int) CompositeExtract 2711 2
-                              Store 2716 2717
-            2718:         316 Load 318(s1DArrayShadow)
-            2719:   52(float) Load 565(lod)
-            2720:     47(int) ConvertFToS 2719
-            2721:         315 Image 2718
-            2722:  721(ivec2) ImageQuerySizeLod 2721 2720
-            2723:   48(ivec4) Load 2559(size)
-            2724:  721(ivec2) VectorShuffle 2723 2723 0 1
-            2725:  721(ivec2) IAdd 2724 2722
-            2726:   2566(ptr) AccessChain 2559(size) 207
-            2727:     47(int) CompositeExtract 2725 0
-                              Store 2726 2727
-            2728:   2566(ptr) AccessChain 2559(size) 2581
-            2729:     47(int) CompositeExtract 2725 1
-                              Store 2728 2729
-            2730:         337 Load 339(s2DArrayShadow)
-            2731:   52(float) Load 565(lod)
-            2732:     47(int) ConvertFToS 2731
-            2733:         336 Image 2730
-            2734:  734(ivec3) ImageQuerySizeLod 2733 2732
-            2735:   48(ivec4) Load 2559(size)
-            2736:  734(ivec3) VectorShuffle 2735 2735 0 1 2
-            2737:  734(ivec3) IAdd 2736 2734
-            2738:   2566(ptr) AccessChain 2559(size) 207
-            2739:     47(int) CompositeExtract 2737 0
-                              Store 2738 2739
-            2740:   2566(ptr) AccessChain 2559(size) 2581
-            2741:     47(int) CompositeExtract 2737 1
-                              Store 2740 2741
-            2742:   2566(ptr) AccessChain 2559(size) 2596
-            2743:     47(int) CompositeExtract 2737 2
-                              Store 2742 2743
-            2744:        1298 Load 1300(sBuffer)
-            2745:        1297 Image 2744
-            2746:     47(int) ImageQuerySize 2745
-            2747:   2566(ptr) AccessChain 2559(size) 207
-            2748:     47(int) Load 2747
-            2749:     47(int) IAdd 2748 2746
-            2750:   2566(ptr) AccessChain 2559(size) 207
-                              Store 2750 2749
-            2751:        1309 Load 1311(s2DMS)
-            2752:        1308 Image 2751
-            2753:  721(ivec2) ImageQuerySize 2752
-            2754:   48(ivec4) Load 2559(size)
-            2755:  721(ivec2) VectorShuffle 2754 2754 0 1
-            2756:  721(ivec2) IAdd 2755 2753
-            2757:   2566(ptr) AccessChain 2559(size) 207
-            2758:     47(int) CompositeExtract 2756 0
-                              Store 2757 2758
-            2759:   2566(ptr) AccessChain 2559(size) 2581
-            2760:     47(int) CompositeExtract 2756 1
-                              Store 2759 2760
-            2761:        1320 Load 1322(s2DMSArray)
-            2762:        1319 Image 2761
-            2763:  734(ivec3) ImageQuerySize 2762
-            2764:   48(ivec4) Load 2559(size)
-            2765:  734(ivec3) VectorShuffle 2764 2764 0 1 2
-            2766:  734(ivec3) IAdd 2765 2763
-            2767:   2566(ptr) AccessChain 2559(size) 207
-            2768:     47(int) CompositeExtract 2766 0
-                              Store 2767 2768
-            2769:   2566(ptr) AccessChain 2559(size) 2581
-            2770:     47(int) CompositeExtract 2766 1
-                              Store 2769 2770
-            2771:   2566(ptr) AccessChain 2559(size) 2596
-            2772:     47(int) CompositeExtract 2766 2
-                              Store 2771 2772
-            2773:   48(ivec4) Load 2559(size)
-                              ReturnValue 2773
+            2654:        1298 Load 1300(sBuffer)
+            2655:        1297 Image 2654
+            2656:     47(int) ImageQuerySize 2655
+            2657:   2476(ptr) AccessChain 2469(size) 207
+            2658:     47(int) Load 2657
+            2659:     47(int) IAdd 2658 2656
+            2660:   2476(ptr) AccessChain 2469(size) 207
+                              Store 2660 2659
+            2661:        1309 Load 1311(s2DMS)
+            2662:        1308 Image 2661
+            2663:  721(ivec2) ImageQuerySize 2662
+            2664:   48(ivec4) Load 2469(size)
+            2665:  721(ivec2) VectorShuffle 2664 2664 0 1
+            2666:  721(ivec2) IAdd 2665 2663
+            2667:   2476(ptr) AccessChain 2469(size) 207
+            2668:     47(int) CompositeExtract 2666 0
+                              Store 2667 2668
+            2669:   2476(ptr) AccessChain 2469(size) 2491
+            2670:     47(int) CompositeExtract 2666 1
+                              Store 2669 2670
+            2671:        1320 Load 1322(s2DMSArray)
+            2672:        1319 Image 2671
+            2673:  734(ivec3) ImageQuerySize 2672
+            2674:   48(ivec4) Load 2469(size)
+            2675:  734(ivec3) VectorShuffle 2674 2674 0 1 2
+            2676:  734(ivec3) IAdd 2675 2673
+            2677:   2476(ptr) AccessChain 2469(size) 207
+            2678:     47(int) CompositeExtract 2676 0
+                              Store 2677 2678
+            2679:   2476(ptr) AccessChain 2469(size) 2491
+            2680:     47(int) CompositeExtract 2676 1
+                              Store 2679 2680
+            2681:   2476(ptr) AccessChain 2469(size) 2506
+            2682:     47(int) CompositeExtract 2676 2
+                              Store 2681 2682
+            2683:   48(ivec4) Load 2469(size)
+                              ReturnValue 2683
                               FunctionEnd
 55(testTextureQueryLod():   53(fvec2) Function None 54
               56:             Label
-       2777(lod):   2776(ptr) Variable Function
-                              Store 2777(lod) 2779
-            2780:         123 Load 125(s1D)
-            2781:   52(float) Load 128(c1)
+       2687(lod):   2686(ptr) Variable Function
+                              Store 2687(lod) 2689
+            2690:         123 Load 125(s1D)
+            2691:   52(float) Load 128(c1)
+            2692:   53(fvec2) ImageQueryLod 2690 2691
+            2693:   53(fvec2) Load 2687(lod)
+            2694:   53(fvec2) FAdd 2693 2692
+                              Store 2687(lod) 2694
+            2695:         123 Load 125(s1D)
+            2696:6(float16_t) Load 135(f16c1)
+            2697:154(f16vec2) ImageQueryLod 2695 2696
+            2698:   53(fvec2) Load 2687(lod)
+            2699:   53(fvec2) FAdd 2698 2697
+                              Store 2687(lod) 2699
+            2700:         143 Load 145(s2D)
+            2701:   53(fvec2) Load 148(c2)
+            2702:   53(fvec2) ImageQueryLod 2700 2701
+            2703:   53(fvec2) Load 2687(lod)
+            2704:   53(fvec2) FAdd 2703 2702
+                              Store 2687(lod) 2704
+            2705:         143 Load 145(s2D)
+            2706:154(f16vec2) Load 156(f16c2)
+            2707:154(f16vec2) ImageQueryLod 2705 2706
+            2708:   53(fvec2) Load 2687(lod)
+            2709:   53(fvec2) FAdd 2708 2707
+                              Store 2687(lod) 2709
+            2710:         163 Load 165(s3D)
+            2711:  167(fvec3) Load 169(c3)
+            2712:   53(fvec2) ImageQueryLod 2710 2711
+            2713:   53(fvec2) Load 2687(lod)
+            2714:   53(fvec2) FAdd 2713 2712
+                              Store 2687(lod) 2714
+            2715:         163 Load 165(s3D)
+            2716:175(f16vec3) Load 177(f16c3)
+            2717:154(f16vec2) ImageQueryLod 2715 2716
+            2718:   53(fvec2) Load 2687(lod)
+            2719:   53(fvec2) FAdd 2718 2717
+                              Store 2687(lod) 2719
+            2720:         184 Load 186(sCube)
+            2721:  167(fvec3) Load 169(c3)
+            2722:   53(fvec2) ImageQueryLod 2720 2721
+            2723:   53(fvec2) Load 2687(lod)
+            2724:   53(fvec2) FAdd 2723 2722
+                              Store 2687(lod) 2724
+            2725:         184 Load 186(sCube)
+            2726:175(f16vec3) Load 177(f16c3)
+            2727:154(f16vec2) ImageQueryLod 2725 2726
+            2728:   53(fvec2) Load 2687(lod)
+            2729:   53(fvec2) FAdd 2728 2727
+                              Store 2687(lod) 2729
+            2730:         269 Load 271(s1DArray)
+            2731:   52(float) Load 128(c1)
+            2732:   53(fvec2) ImageQueryLod 2730 2731
+            2733:   53(fvec2) Load 2687(lod)
+            2734:   53(fvec2) FAdd 2733 2732
+                              Store 2687(lod) 2734
+            2735:         269 Load 271(s1DArray)
+            2736:6(float16_t) Load 135(f16c1)
+            2737:154(f16vec2) ImageQueryLod 2735 2736
+            2738:   53(fvec2) Load 2687(lod)
+            2739:   53(fvec2) FAdd 2738 2737
+                              Store 2687(lod) 2739
+            2740:         284 Load 286(s2DArray)
+            2741:   53(fvec2) Load 148(c2)
+            2742:   53(fvec2) ImageQueryLod 2740 2741
+            2743:   53(fvec2) Load 2687(lod)
+            2744:   53(fvec2) FAdd 2743 2742
+                              Store 2687(lod) 2744
+            2745:         284 Load 286(s2DArray)
+            2746:154(f16vec2) Load 156(f16c2)
+            2747:154(f16vec2) ImageQueryLod 2745 2746
+            2748:   53(fvec2) Load 2687(lod)
+            2749:   53(fvec2) FAdd 2748 2747
+                              Store 2687(lod) 2749
+            2750:         299 Load 301(sCubeArray)
+            2751:  167(fvec3) Load 169(c3)
+            2752:   53(fvec2) ImageQueryLod 2750 2751
+            2753:   53(fvec2) Load 2687(lod)
+            2754:   53(fvec2) FAdd 2753 2752
+                              Store 2687(lod) 2754
+            2755:         299 Load 301(sCubeArray)
+            2756:175(f16vec3) Load 177(f16c3)
+            2757:154(f16vec2) ImageQueryLod 2755 2756
+            2758:   53(fvec2) Load 2687(lod)
+            2759:   53(fvec2) FAdd 2758 2757
+                              Store 2687(lod) 2759
+            2760:         199 Load 201(s1DShadow)
+            2761:   52(float) Load 128(c1)
+            2762:   53(fvec2) ImageQueryLod 2760 2761
+            2763:   53(fvec2) Load 2687(lod)
+            2764:   53(fvec2) FAdd 2763 2762
+                              Store 2687(lod) 2764
+            2765:         199 Load 201(s1DShadow)
+            2766:6(float16_t) Load 135(f16c1)
+            2767:154(f16vec2) ImageQueryLod 2765 2766
+            2768:   53(fvec2) Load 2687(lod)
+            2769:   53(fvec2) FAdd 2768 2767
+                              Store 2687(lod) 2769
+            2770:         224 Load 226(s2DShadow)
+            2771:   53(fvec2) Load 148(c2)
+            2772:   53(fvec2) ImageQueryLod 2770 2771
+            2773:   53(fvec2) Load 2687(lod)
+            2774:   53(fvec2) FAdd 2773 2772
+                              Store 2687(lod) 2774
+            2775:         224 Load 226(s2DShadow)
+            2776:154(f16vec2) Load 156(f16c2)
+            2777:154(f16vec2) ImageQueryLod 2775 2776
+            2778:   53(fvec2) Load 2687(lod)
+            2779:   53(fvec2) FAdd 2778 2777
+                              Store 2687(lod) 2779
+            2780:         391 Load 393(sCubeArrayShadow)
+            2781:  167(fvec3) Load 169(c3)
             2782:   53(fvec2) ImageQueryLod 2780 2781
-            2783:   53(fvec2) Load 2777(lod)
+            2783:   53(fvec2) Load 2687(lod)
             2784:   53(fvec2) FAdd 2783 2782
-                              Store 2777(lod) 2784
-            2785:         123 Load 125(s1D)
-            2786:6(float16_t) Load 135(f16c1)
+                              Store 2687(lod) 2784
+            2785:         391 Load 393(sCubeArrayShadow)
+            2786:175(f16vec3) Load 177(f16c3)
             2787:154(f16vec2) ImageQueryLod 2785 2786
-            2788:   53(fvec2) Load 2777(lod)
+            2788:   53(fvec2) Load 2687(lod)
             2789:   53(fvec2) FAdd 2788 2787
-                              Store 2777(lod) 2789
-            2790:         143 Load 145(s2D)
-            2791:   53(fvec2) Load 148(c2)
+                              Store 2687(lod) 2789
+            2790:         316 Load 318(s1DArrayShadow)
+            2791:   52(float) Load 128(c1)
             2792:   53(fvec2) ImageQueryLod 2790 2791
-            2793:   53(fvec2) Load 2777(lod)
+            2793:   53(fvec2) Load 2687(lod)
             2794:   53(fvec2) FAdd 2793 2792
-                              Store 2777(lod) 2794
-            2795:         143 Load 145(s2D)
-            2796:154(f16vec2) Load 156(f16c2)
+                              Store 2687(lod) 2794
+            2795:         316 Load 318(s1DArrayShadow)
+            2796:6(float16_t) Load 135(f16c1)
             2797:154(f16vec2) ImageQueryLod 2795 2796
-            2798:   53(fvec2) Load 2777(lod)
+            2798:   53(fvec2) Load 2687(lod)
             2799:   53(fvec2) FAdd 2798 2797
-                              Store 2777(lod) 2799
-            2800:         163 Load 165(s3D)
-            2801:  167(fvec3) Load 169(c3)
+                              Store 2687(lod) 2799
+            2800:         337 Load 339(s2DArrayShadow)
+            2801:   53(fvec2) Load 148(c2)
             2802:   53(fvec2) ImageQueryLod 2800 2801
-            2803:   53(fvec2) Load 2777(lod)
+            2803:   53(fvec2) Load 2687(lod)
             2804:   53(fvec2) FAdd 2803 2802
-                              Store 2777(lod) 2804
-            2805:         163 Load 165(s3D)
-            2806:175(f16vec3) Load 177(f16c3)
+                              Store 2687(lod) 2804
+            2805:         337 Load 339(s2DArrayShadow)
+            2806:154(f16vec2) Load 156(f16c2)
             2807:154(f16vec2) ImageQueryLod 2805 2806
-            2808:   53(fvec2) Load 2777(lod)
+            2808:   53(fvec2) Load 2687(lod)
             2809:   53(fvec2) FAdd 2808 2807
-                              Store 2777(lod) 2809
-            2810:         184 Load 186(sCube)
+                              Store 2687(lod) 2809
+            2810:         391 Load 393(sCubeArrayShadow)
             2811:  167(fvec3) Load 169(c3)
             2812:   53(fvec2) ImageQueryLod 2810 2811
-            2813:   53(fvec2) Load 2777(lod)
+            2813:   53(fvec2) Load 2687(lod)
             2814:   53(fvec2) FAdd 2813 2812
-                              Store 2777(lod) 2814
-            2815:         184 Load 186(sCube)
+                              Store 2687(lod) 2814
+            2815:         391 Load 393(sCubeArrayShadow)
             2816:175(f16vec3) Load 177(f16c3)
             2817:154(f16vec2) ImageQueryLod 2815 2816
-            2818:   53(fvec2) Load 2777(lod)
+            2818:   53(fvec2) Load 2687(lod)
             2819:   53(fvec2) FAdd 2818 2817
-                              Store 2777(lod) 2819
-            2820:         269 Load 271(s1DArray)
-            2821:   52(float) Load 128(c1)
-            2822:   53(fvec2) ImageQueryLod 2820 2821
-            2823:   53(fvec2) Load 2777(lod)
-            2824:   53(fvec2) FAdd 2823 2822
-                              Store 2777(lod) 2824
-            2825:         269 Load 271(s1DArray)
-            2826:6(float16_t) Load 135(f16c1)
-            2827:154(f16vec2) ImageQueryLod 2825 2826
-            2828:   53(fvec2) Load 2777(lod)
-            2829:   53(fvec2) FAdd 2828 2827
-                              Store 2777(lod) 2829
-            2830:         284 Load 286(s2DArray)
-            2831:   53(fvec2) Load 148(c2)
-            2832:   53(fvec2) ImageQueryLod 2830 2831
-            2833:   53(fvec2) Load 2777(lod)
-            2834:   53(fvec2) FAdd 2833 2832
-                              Store 2777(lod) 2834
-            2835:         284 Load 286(s2DArray)
-            2836:154(f16vec2) Load 156(f16c2)
-            2837:154(f16vec2) ImageQueryLod 2835 2836
-            2838:   53(fvec2) Load 2777(lod)
-            2839:   53(fvec2) FAdd 2838 2837
-                              Store 2777(lod) 2839
-            2840:         299 Load 301(sCubeArray)
-            2841:  167(fvec3) Load 169(c3)
-            2842:   53(fvec2) ImageQueryLod 2840 2841
-            2843:   53(fvec2) Load 2777(lod)
-            2844:   53(fvec2) FAdd 2843 2842
-                              Store 2777(lod) 2844
-            2845:         299 Load 301(sCubeArray)
-            2846:175(f16vec3) Load 177(f16c3)
-            2847:154(f16vec2) ImageQueryLod 2845 2846
-            2848:   53(fvec2) Load 2777(lod)
-            2849:   53(fvec2) FAdd 2848 2847
-                              Store 2777(lod) 2849
-            2850:         199 Load 201(s1DShadow)
-            2851:   52(float) Load 128(c1)
-            2852:   53(fvec2) ImageQueryLod 2850 2851
-            2853:   53(fvec2) Load 2777(lod)
-            2854:   53(fvec2) FAdd 2853 2852
-                              Store 2777(lod) 2854
-            2855:         199 Load 201(s1DShadow)
-            2856:6(float16_t) Load 135(f16c1)
-            2857:154(f16vec2) ImageQueryLod 2855 2856
-            2858:   53(fvec2) Load 2777(lod)
-            2859:   53(fvec2) FAdd 2858 2857
-                              Store 2777(lod) 2859
-            2860:         224 Load 226(s2DShadow)
-            2861:   53(fvec2) Load 148(c2)
-            2862:   53(fvec2) ImageQueryLod 2860 2861
-            2863:   53(fvec2) Load 2777(lod)
-            2864:   53(fvec2) FAdd 2863 2862
-                              Store 2777(lod) 2864
-            2865:         224 Load 226(s2DShadow)
-            2866:154(f16vec2) Load 156(f16c2)
-            2867:154(f16vec2) ImageQueryLod 2865 2866
-            2868:   53(fvec2) Load 2777(lod)
-            2869:   53(fvec2) FAdd 2868 2867
-                              Store 2777(lod) 2869
-            2870:         391 Load 393(sCubeArrayShadow)
-            2871:  167(fvec3) Load 169(c3)
-            2872:   53(fvec2) ImageQueryLod 2870 2871
-            2873:   53(fvec2) Load 2777(lod)
-            2874:   53(fvec2) FAdd 2873 2872
-                              Store 2777(lod) 2874
-            2875:         391 Load 393(sCubeArrayShadow)
-            2876:175(f16vec3) Load 177(f16c3)
-            2877:154(f16vec2) ImageQueryLod 2875 2876
-            2878:   53(fvec2) Load 2777(lod)
-            2879:   53(fvec2) FAdd 2878 2877
-                              Store 2777(lod) 2879
-            2880:         316 Load 318(s1DArrayShadow)
-            2881:   52(float) Load 128(c1)
-            2882:   53(fvec2) ImageQueryLod 2880 2881
-            2883:   53(fvec2) Load 2777(lod)
-            2884:   53(fvec2) FAdd 2883 2882
-                              Store 2777(lod) 2884
-            2885:         316 Load 318(s1DArrayShadow)
-            2886:6(float16_t) Load 135(f16c1)
-            2887:154(f16vec2) ImageQueryLod 2885 2886
-            2888:   53(fvec2) Load 2777(lod)
-            2889:   53(fvec2) FAdd 2888 2887
-                              Store 2777(lod) 2889
-            2890:         337 Load 339(s2DArrayShadow)
-            2891:   53(fvec2) Load 148(c2)
-            2892:   53(fvec2) ImageQueryLod 2890 2891
-            2893:   53(fvec2) Load 2777(lod)
-            2894:   53(fvec2) FAdd 2893 2892
-                              Store 2777(lod) 2894
-            2895:         337 Load 339(s2DArrayShadow)
-            2896:154(f16vec2) Load 156(f16c2)
-            2897:154(f16vec2) ImageQueryLod 2895 2896
-            2898:   53(fvec2) Load 2777(lod)
-            2899:   53(fvec2) FAdd 2898 2897
-                              Store 2777(lod) 2899
-            2900:         391 Load 393(sCubeArrayShadow)
-            2901:  167(fvec3) Load 169(c3)
-            2902:   53(fvec2) ImageQueryLod 2900 2901
-            2903:   53(fvec2) Load 2777(lod)
-            2904:   53(fvec2) FAdd 2903 2902
-                              Store 2777(lod) 2904
-            2905:         391 Load 393(sCubeArrayShadow)
-            2906:175(f16vec3) Load 177(f16c3)
-            2907:154(f16vec2) ImageQueryLod 2905 2906
-            2908:   53(fvec2) Load 2777(lod)
-            2909:   53(fvec2) FAdd 2908 2907
-                              Store 2777(lod) 2909
-            2910:   53(fvec2) Load 2777(lod)
-                              ReturnValue 2910
+                              Store 2687(lod) 2819
+            2820:   53(fvec2) Load 2687(lod)
+                              ReturnValue 2820
                               FunctionEnd
 58(testTextureQueryLevels():     47(int) Function None 57
               59:             Label
-    2913(levels):   2566(ptr) Variable Function
-                              Store 2913(levels) 2187
-            2914:         123 Load 125(s1D)
-            2915:         122 Image 2914
-            2916:     47(int) ImageQueryLevels 2915
-            2917:     47(int) Load 2913(levels)
-            2918:     47(int) IAdd 2917 2916
-                              Store 2913(levels) 2918
-            2919:         143 Load 145(s2D)
-            2920:         142 Image 2919
-            2921:     47(int) ImageQueryLevels 2920
-            2922:     47(int) Load 2913(levels)
-            2923:     47(int) IAdd 2922 2921
-                              Store 2913(levels) 2923
-            2924:         163 Load 165(s3D)
-            2925:         162 Image 2924
-            2926:     47(int) ImageQueryLevels 2925
-            2927:     47(int) Load 2913(levels)
-            2928:     47(int) IAdd 2927 2926
-                              Store 2913(levels) 2928
-            2929:         184 Load 186(sCube)
-            2930:         183 Image 2929
-            2931:     47(int) ImageQueryLevels 2930
-            2932:     47(int) Load 2913(levels)
-            2933:     47(int) IAdd 2932 2931
-                              Store 2913(levels) 2933
-            2934:         199 Load 201(s1DShadow)
-            2935:         198 Image 2934
-            2936:     47(int) ImageQueryLevels 2935
-            2937:     47(int) Load 2913(levels)
-            2938:     47(int) IAdd 2937 2936
-                              Store 2913(levels) 2938
-            2939:         224 Load 226(s2DShadow)
-            2940:         223 Image 2939
-            2941:     47(int) ImageQueryLevels 2940
-            2942:     47(int) Load 2913(levels)
-            2943:     47(int) IAdd 2942 2941
-                              Store 2913(levels) 2943
-            2944:         245 Load 247(sCubeShadow)
-            2945:         244 Image 2944
-            2946:     47(int) ImageQueryLevels 2945
-            2947:     47(int) Load 2913(levels)
-            2948:     47(int) IAdd 2947 2946
-                              Store 2913(levels) 2948
-            2949:         299 Load 301(sCubeArray)
-            2950:         298 Image 2949
-            2951:     47(int) ImageQueryLevels 2950
-            2952:     47(int) Load 2913(levels)
-            2953:     47(int) IAdd 2952 2951
-                              Store 2913(levels) 2953
-            2954:         391 Load 393(sCubeArrayShadow)
-            2955:         390 Image 2954
-            2956:     47(int) ImageQueryLevels 2955
-            2957:     47(int) Load 2913(levels)
-            2958:     47(int) IAdd 2957 2956
-                              Store 2913(levels) 2958
-            2959:         269 Load 271(s1DArray)
-            2960:         268 Image 2959
-            2961:     47(int) ImageQueryLevels 2960
-            2962:     47(int) Load 2913(levels)
-            2963:     47(int) IAdd 2962 2961
-                              Store 2913(levels) 2963
-            2964:         284 Load 286(s2DArray)
-            2965:         283 Image 2964
-            2966:     47(int) ImageQueryLevels 2965
-            2967:     47(int) Load 2913(levels)
-            2968:     47(int) IAdd 2967 2966
-                              Store 2913(levels) 2968
-            2969:         316 Load 318(s1DArrayShadow)
-            2970:         315 Image 2969
-            2971:     47(int) ImageQueryLevels 2970
-            2972:     47(int) Load 2913(levels)
-            2973:     47(int) IAdd 2972 2971
-                              Store 2913(levels) 2973
-            2974:         337 Load 339(s2DArrayShadow)
-            2975:         336 Image 2974
-            2976:     47(int) ImageQueryLevels 2975
-            2977:     47(int) Load 2913(levels)
-            2978:     47(int) IAdd 2977 2976
-                              Store 2913(levels) 2978
-            2979:     47(int) Load 2913(levels)
-                              ReturnValue 2979
+    2823(levels):   2476(ptr) Variable Function
+                              Store 2823(levels) 2097
+            2824:         123 Load 125(s1D)
+            2825:         122 Image 2824
+            2826:     47(int) ImageQueryLevels 2825
+            2827:     47(int) Load 2823(levels)
+            2828:     47(int) IAdd 2827 2826
+                              Store 2823(levels) 2828
+            2829:         143 Load 145(s2D)
+            2830:         142 Image 2829
+            2831:     47(int) ImageQueryLevels 2830
+            2832:     47(int) Load 2823(levels)
+            2833:     47(int) IAdd 2832 2831
+                              Store 2823(levels) 2833
+            2834:         163 Load 165(s3D)
+            2835:         162 Image 2834
+            2836:     47(int) ImageQueryLevels 2835
+            2837:     47(int) Load 2823(levels)
+            2838:     47(int) IAdd 2837 2836
+                              Store 2823(levels) 2838
+            2839:         184 Load 186(sCube)
+            2840:         183 Image 2839
+            2841:     47(int) ImageQueryLevels 2840
+            2842:     47(int) Load 2823(levels)
+            2843:     47(int) IAdd 2842 2841
+                              Store 2823(levels) 2843
+            2844:         199 Load 201(s1DShadow)
+            2845:         198 Image 2844
+            2846:     47(int) ImageQueryLevels 2845
+            2847:     47(int) Load 2823(levels)
+            2848:     47(int) IAdd 2847 2846
+                              Store 2823(levels) 2848
+            2849:         224 Load 226(s2DShadow)
+            2850:         223 Image 2849
+            2851:     47(int) ImageQueryLevels 2850
+            2852:     47(int) Load 2823(levels)
+            2853:     47(int) IAdd 2852 2851
+                              Store 2823(levels) 2853
+            2854:         245 Load 247(sCubeShadow)
+            2855:         244 Image 2854
+            2856:     47(int) ImageQueryLevels 2855
+            2857:     47(int) Load 2823(levels)
+            2858:     47(int) IAdd 2857 2856
+                              Store 2823(levels) 2858
+            2859:         299 Load 301(sCubeArray)
+            2860:         298 Image 2859
+            2861:     47(int) ImageQueryLevels 2860
+            2862:     47(int) Load 2823(levels)
+            2863:     47(int) IAdd 2862 2861
+                              Store 2823(levels) 2863
+            2864:         391 Load 393(sCubeArrayShadow)
+            2865:         390 Image 2864
+            2866:     47(int) ImageQueryLevels 2865
+            2867:     47(int) Load 2823(levels)
+            2868:     47(int) IAdd 2867 2866
+                              Store 2823(levels) 2868
+            2869:         269 Load 271(s1DArray)
+            2870:         268 Image 2869
+            2871:     47(int) ImageQueryLevels 2870
+            2872:     47(int) Load 2823(levels)
+            2873:     47(int) IAdd 2872 2871
+                              Store 2823(levels) 2873
+            2874:         284 Load 286(s2DArray)
+            2875:         283 Image 2874
+            2876:     47(int) ImageQueryLevels 2875
+            2877:     47(int) Load 2823(levels)
+            2878:     47(int) IAdd 2877 2876
+                              Store 2823(levels) 2878
+            2879:         316 Load 318(s1DArrayShadow)
+            2880:         315 Image 2879
+            2881:     47(int) ImageQueryLevels 2880
+            2882:     47(int) Load 2823(levels)
+            2883:     47(int) IAdd 2882 2881
+                              Store 2823(levels) 2883
+            2884:         337 Load 339(s2DArrayShadow)
+            2885:         336 Image 2884
+            2886:     47(int) ImageQueryLevels 2885
+            2887:     47(int) Load 2823(levels)
+            2888:     47(int) IAdd 2887 2886
+                              Store 2823(levels) 2888
+            2889:     47(int) Load 2823(levels)
+                              ReturnValue 2889
                               FunctionEnd
 60(testTextureSamples():     47(int) Function None 57
               61:             Label
-   2982(samples):   2566(ptr) Variable Function
-                              Store 2982(samples) 2187
-            2983:        1309 Load 1311(s2DMS)
-            2984:        1308 Image 2983
-            2985:     47(int) ImageQuerySamples 2984
-            2986:     47(int) Load 2982(samples)
-            2987:     47(int) IAdd 2986 2985
-                              Store 2982(samples) 2987
-            2988:        1320 Load 1322(s2DMSArray)
-            2989:        1319 Image 2988
-            2990:     47(int) ImageQuerySamples 2989
-            2991:     47(int) Load 2982(samples)
-            2992:     47(int) IAdd 2991 2990
-                              Store 2982(samples) 2992
-            2993:     47(int) Load 2982(samples)
-                              ReturnValue 2993
+   2892(samples):   2476(ptr) Variable Function
+                              Store 2892(samples) 2097
+            2893:        1309 Load 1311(s2DMS)
+            2894:        1308 Image 2893
+            2895:     47(int) ImageQuerySamples 2894
+            2896:     47(int) Load 2892(samples)
+            2897:     47(int) IAdd 2896 2895
+                              Store 2892(samples) 2897
+            2898:        1320 Load 1322(s2DMSArray)
+            2899:        1319 Image 2898
+            2900:     47(int) ImageQuerySamples 2899
+            2901:     47(int) Load 2892(samples)
+            2902:     47(int) IAdd 2901 2900
+                              Store 2892(samples) 2902
+            2903:     47(int) Load 2892(samples)
+                              ReturnValue 2903
                               FunctionEnd
 62(testImageLoad():  7(f16vec4) Function None 8
               63:             Label
-     2996(texel):     64(ptr) Variable Function
-                              Store 2996(texel) 121
-            3000:        2997 Load 2999(i1D)
-            3001:   52(float) Load 128(c1)
-            3002:     47(int) ConvertFToS 3001
-            3003:  7(f16vec4) ImageRead 3000 3002
-            3004:  7(f16vec4) Load 2996(texel)
+     2906(texel):     64(ptr) Variable Function
+                              Store 2906(texel) 121
+            2910:        2907 Load 2909(i1D)
+            2911:   52(float) Load 128(c1)
+            2912:     47(int) ConvertFToS 2911
+            2913:  7(f16vec4) ImageRead 2910 2912
+            2914:  7(f16vec4) Load 2906(texel)
+            2915:  7(f16vec4) FAdd 2914 2913
+                              Store 2906(texel) 2915
+            2919:        2916 Load 2918(i2D)
+            2920:   53(fvec2) Load 148(c2)
+            2921:  721(ivec2) ConvertFToS 2920
+            2922:  7(f16vec4) ImageRead 2919 2921
+            2923:  7(f16vec4) Load 2906(texel)
+            2924:  7(f16vec4) FAdd 2923 2922
+                              Store 2906(texel) 2924
+            2928:        2925 Load 2927(i3D)
+            2929:  167(fvec3) Load 169(c3)
+            2930:  734(ivec3) ConvertFToS 2929
+            2931:  7(f16vec4) ImageRead 2928 2930
+            2932:  7(f16vec4) Load 2906(texel)
+            2933:  7(f16vec4) FAdd 2932 2931
+                              Store 2906(texel) 2933
+            2937:        2934 Load 2936(i2DRect)
+            2938:   53(fvec2) Load 148(c2)
+            2939:  721(ivec2) ConvertFToS 2938
+            2940:  7(f16vec4) ImageRead 2937 2939
+            2941:  7(f16vec4) Load 2906(texel)
+            2942:  7(f16vec4) FAdd 2941 2940
+                              Store 2906(texel) 2942
+            2946:        2943 Load 2945(iCube)
+            2947:  167(fvec3) Load 169(c3)
+            2948:  734(ivec3) ConvertFToS 2947
+            2949:  7(f16vec4) ImageRead 2946 2948
+            2950:  7(f16vec4) Load 2906(texel)
+            2951:  7(f16vec4) FAdd 2950 2949
+                              Store 2906(texel) 2951
+            2955:        2952 Load 2954(iBuffer)
+            2956:   52(float) Load 128(c1)
+            2957:     47(int) ConvertFToS 2956
+            2958:  7(f16vec4) ImageRead 2955 2957
+            2959:  7(f16vec4) Load 2906(texel)
+            2960:  7(f16vec4) FAdd 2959 2958
+                              Store 2906(texel) 2960
+            2964:        2961 Load 2963(i1DArray)
+            2965:   53(fvec2) Load 148(c2)
+            2966:  721(ivec2) ConvertFToS 2965
+            2967:  7(f16vec4) ImageRead 2964 2966
+            2968:  7(f16vec4) Load 2906(texel)
+            2969:  7(f16vec4) FAdd 2968 2967
+                              Store 2906(texel) 2969
+            2973:        2970 Load 2972(i2DArray)
+            2974:  167(fvec3) Load 169(c3)
+            2975:  734(ivec3) ConvertFToS 2974
+            2976:  7(f16vec4) ImageRead 2973 2975
+            2977:  7(f16vec4) Load 2906(texel)
+            2978:  7(f16vec4) FAdd 2977 2976
+                              Store 2906(texel) 2978
+            2982:        2979 Load 2981(iCubeArray)
+            2983:  167(fvec3) Load 169(c3)
+            2984:  734(ivec3) ConvertFToS 2983
+            2985:  7(f16vec4) ImageRead 2982 2984
+            2986:  7(f16vec4) Load 2906(texel)
+            2987:  7(f16vec4) FAdd 2986 2985
+                              Store 2906(texel) 2987
+            2991:        2988 Load 2990(i2DMS)
+            2992:   53(fvec2) Load 148(c2)
+            2993:  721(ivec2) ConvertFToS 2992
+            2994:  7(f16vec4) ImageRead 2991 2993 Sample 709
+            2995:  7(f16vec4) Load 2906(texel)
+            2996:  7(f16vec4) FAdd 2995 2994
+                              Store 2906(texel) 2996
+            3000:        2997 Load 2999(i2DMSArray)
+            3001:  167(fvec3) Load 169(c3)
+            3002:  734(ivec3) ConvertFToS 3001
+            3003:  7(f16vec4) ImageRead 3000 3002 Sample 709
+            3004:  7(f16vec4) Load 2906(texel)
             3005:  7(f16vec4) FAdd 3004 3003
-                              Store 2996(texel) 3005
-            3009:        3006 Load 3008(i2D)
-            3010:   53(fvec2) Load 148(c2)
-            3011:  721(ivec2) ConvertFToS 3010
-            3012:  7(f16vec4) ImageRead 3009 3011
-            3013:  7(f16vec4) Load 2996(texel)
-            3014:  7(f16vec4) FAdd 3013 3012
-                              Store 2996(texel) 3014
-            3018:        3015 Load 3017(i3D)
-            3019:  167(fvec3) Load 169(c3)
-            3020:  734(ivec3) ConvertFToS 3019
-            3021:  7(f16vec4) ImageRead 3018 3020
-            3022:  7(f16vec4) Load 2996(texel)
-            3023:  7(f16vec4) FAdd 3022 3021
-                              Store 2996(texel) 3023
-            3027:        3024 Load 3026(i2DRect)
-            3028:   53(fvec2) Load 148(c2)
-            3029:  721(ivec2) ConvertFToS 3028
-            3030:  7(f16vec4) ImageRead 3027 3029
-            3031:  7(f16vec4) Load 2996(texel)
-            3032:  7(f16vec4) FAdd 3031 3030
-                              Store 2996(texel) 3032
-            3036:        3033 Load 3035(iCube)
-            3037:  167(fvec3) Load 169(c3)
-            3038:  734(ivec3) ConvertFToS 3037
-            3039:  7(f16vec4) ImageRead 3036 3038
-            3040:  7(f16vec4) Load 2996(texel)
-            3041:  7(f16vec4) FAdd 3040 3039
-                              Store 2996(texel) 3041
-            3045:        3042 Load 3044(iBuffer)
-            3046:   52(float) Load 128(c1)
-            3047:     47(int) ConvertFToS 3046
-            3048:  7(f16vec4) ImageRead 3045 3047
-            3049:  7(f16vec4) Load 2996(texel)
-            3050:  7(f16vec4) FAdd 3049 3048
-                              Store 2996(texel) 3050
-            3054:        3051 Load 3053(i1DArray)
-            3055:   53(fvec2) Load 148(c2)
-            3056:  721(ivec2) ConvertFToS 3055
-            3057:  7(f16vec4) ImageRead 3054 3056
-            3058:  7(f16vec4) Load 2996(texel)
-            3059:  7(f16vec4) FAdd 3058 3057
-                              Store 2996(texel) 3059
-            3063:        3060 Load 3062(i2DArray)
-            3064:  167(fvec3) Load 169(c3)
-            3065:  734(ivec3) ConvertFToS 3064
-            3066:  7(f16vec4) ImageRead 3063 3065
-            3067:  7(f16vec4) Load 2996(texel)
-            3068:  7(f16vec4) FAdd 3067 3066
-                              Store 2996(texel) 3068
-            3072:        3069 Load 3071(iCubeArray)
-            3073:  167(fvec3) Load 169(c3)
-            3074:  734(ivec3) ConvertFToS 3073
-            3075:  7(f16vec4) ImageRead 3072 3074
-            3076:  7(f16vec4) Load 2996(texel)
-            3077:  7(f16vec4) FAdd 3076 3075
-                              Store 2996(texel) 3077
-            3081:        3078 Load 3080(i2DMS)
-            3082:   53(fvec2) Load 148(c2)
-            3083:  721(ivec2) ConvertFToS 3082
-            3084:  7(f16vec4) ImageRead 3081 3083 Sample 709
-            3085:  7(f16vec4) Load 2996(texel)
-            3086:  7(f16vec4) FAdd 3085 3084
-                              Store 2996(texel) 3086
-            3090:        3087 Load 3089(i2DMSArray)
-            3091:  167(fvec3) Load 169(c3)
-            3092:  734(ivec3) ConvertFToS 3091
-            3093:  7(f16vec4) ImageRead 3090 3092 Sample 709
-            3094:  7(f16vec4) Load 2996(texel)
-            3095:  7(f16vec4) FAdd 3094 3093
-                              Store 2996(texel) 3095
-            3096:  7(f16vec4) Load 2996(texel)
-                              ReturnValue 3096
+                              Store 2906(texel) 3005
+            3006:  7(f16vec4) Load 2906(texel)
+                              ReturnValue 3006
                               FunctionEnd
 67(testImageStore(vf164;):           2 Function None 65
         66(data):     64(ptr) FunctionParameter
               68:             Label
-            3099:        2997 Load 2999(i1D)
-            3100:   52(float) Load 128(c1)
-            3101:     47(int) ConvertFToS 3100
-            3102:  7(f16vec4) Load 66(data)
-                              ImageWrite 3099 3101 3102
-            3103:        3006 Load 3008(i2D)
-            3104:   53(fvec2) Load 148(c2)
-            3105:  721(ivec2) ConvertFToS 3104
-            3106:  7(f16vec4) Load 66(data)
-                              ImageWrite 3103 3105 3106
-            3107:        3015 Load 3017(i3D)
-            3108:  167(fvec3) Load 169(c3)
-            3109:  734(ivec3) ConvertFToS 3108
-            3110:  7(f16vec4) Load 66(data)
-                              ImageWrite 3107 3109 3110
-            3111:        3024 Load 3026(i2DRect)
-            3112:   53(fvec2) Load 148(c2)
-            3113:  721(ivec2) ConvertFToS 3112
-            3114:  7(f16vec4) Load 66(data)
-                              ImageWrite 3111 3113 3114
-            3115:        3033 Load 3035(iCube)
-            3116:  167(fvec3) Load 169(c3)
-            3117:  734(ivec3) ConvertFToS 3116
-            3118:  7(f16vec4) Load 66(data)
-                              ImageWrite 3115 3117 3118
-            3119:        3042 Load 3044(iBuffer)
-            3120:   52(float) Load 128(c1)
-            3121:     47(int) ConvertFToS 3120
-            3122:  7(f16vec4) Load 66(data)
-                              ImageWrite 3119 3121 3122
-            3123:        3051 Load 3053(i1DArray)
-            3124:   53(fvec2) Load 148(c2)
-            3125:  721(ivec2) ConvertFToS 3124
-            3126:  7(f16vec4) Load 66(data)
-                              ImageWrite 3123 3125 3126
-            3127:        3060 Load 3062(i2DArray)
-            3128:  167(fvec3) Load 169(c3)
-            3129:  734(ivec3) ConvertFToS 3128
-            3130:  7(f16vec4) Load 66(data)
-                              ImageWrite 3127 3129 3130
-            3131:        3069 Load 3071(iCubeArray)
-            3132:  167(fvec3) Load 169(c3)
-            3133:  734(ivec3) ConvertFToS 3132
-            3134:  7(f16vec4) Load 66(data)
-                              ImageWrite 3131 3133 3134
-            3135:        3078 Load 3080(i2DMS)
-            3136:   53(fvec2) Load 148(c2)
-            3137:  721(ivec2) ConvertFToS 3136
-            3138:  7(f16vec4) Load 66(data)
-                              ImageWrite 3135 3137 3138 Sample 709
-            3139:        3087 Load 3089(i2DMSArray)
-            3140:  167(fvec3) Load 169(c3)
-            3141:  734(ivec3) ConvertFToS 3140
-            3142:  7(f16vec4) Load 66(data)
-                              ImageWrite 3139 3141 3142 Sample 709
+            3009:        2907 Load 2909(i1D)
+            3010:   52(float) Load 128(c1)
+            3011:     47(int) ConvertFToS 3010
+            3012:  7(f16vec4) Load 66(data)
+                              ImageWrite 3009 3011 3012
+            3013:        2916 Load 2918(i2D)
+            3014:   53(fvec2) Load 148(c2)
+            3015:  721(ivec2) ConvertFToS 3014
+            3016:  7(f16vec4) Load 66(data)
+                              ImageWrite 3013 3015 3016
+            3017:        2925 Load 2927(i3D)
+            3018:  167(fvec3) Load 169(c3)
+            3019:  734(ivec3) ConvertFToS 3018
+            3020:  7(f16vec4) Load 66(data)
+                              ImageWrite 3017 3019 3020
+            3021:        2934 Load 2936(i2DRect)
+            3022:   53(fvec2) Load 148(c2)
+            3023:  721(ivec2) ConvertFToS 3022
+            3024:  7(f16vec4) Load 66(data)
+                              ImageWrite 3021 3023 3024
+            3025:        2943 Load 2945(iCube)
+            3026:  167(fvec3) Load 169(c3)
+            3027:  734(ivec3) ConvertFToS 3026
+            3028:  7(f16vec4) Load 66(data)
+                              ImageWrite 3025 3027 3028
+            3029:        2952 Load 2954(iBuffer)
+            3030:   52(float) Load 128(c1)
+            3031:     47(int) ConvertFToS 3030
+            3032:  7(f16vec4) Load 66(data)
+                              ImageWrite 3029 3031 3032
+            3033:        2961 Load 2963(i1DArray)
+            3034:   53(fvec2) Load 148(c2)
+            3035:  721(ivec2) ConvertFToS 3034
+            3036:  7(f16vec4) Load 66(data)
+                              ImageWrite 3033 3035 3036
+            3037:        2970 Load 2972(i2DArray)
+            3038:  167(fvec3) Load 169(c3)
+            3039:  734(ivec3) ConvertFToS 3038
+            3040:  7(f16vec4) Load 66(data)
+                              ImageWrite 3037 3039 3040
+            3041:        2979 Load 2981(iCubeArray)
+            3042:  167(fvec3) Load 169(c3)
+            3043:  734(ivec3) ConvertFToS 3042
+            3044:  7(f16vec4) Load 66(data)
+                              ImageWrite 3041 3043 3044
+            3045:        2988 Load 2990(i2DMS)
+            3046:   53(fvec2) Load 148(c2)
+            3047:  721(ivec2) ConvertFToS 3046
+            3048:  7(f16vec4) Load 66(data)
+                              ImageWrite 3045 3047 3048 Sample 709
+            3049:        2997 Load 2999(i2DMSArray)
+            3050:  167(fvec3) Load 169(c3)
+            3051:  734(ivec3) ConvertFToS 3050
+            3052:  7(f16vec4) Load 66(data)
+                              ImageWrite 3049 3051 3052 Sample 709
                               Return
                               FunctionEnd
 69(testSparseTexture():  7(f16vec4) Function None 8
               70:             Label
-     3143(texel):     64(ptr) Variable Function
-                              Store 3143(texel) 121
-            3144:         143 Load 145(s2D)
-            3145:   53(fvec2) Load 148(c2)
-            3147:3146(ResType) ImageSparseSampleImplicitLod 3144 3145
-            3148:  7(f16vec4) CompositeExtract 3147 1
-                              Store 3143(texel) 3148
-            3149:     47(int) CompositeExtract 3147 0
-            3150:         143 Load 145(s2D)
-            3151:154(f16vec2) Load 156(f16c2)
-            3152:6(float16_t) Load 137(f16bias)
-            3153:3146(ResType) ImageSparseSampleImplicitLod 3150 3151 Bias 3152
-            3154:  7(f16vec4) CompositeExtract 3153 1
-                              Store 3143(texel) 3154
-            3155:     47(int) CompositeExtract 3153 0
-            3156:         163 Load 165(s3D)
-            3157:  167(fvec3) Load 169(c3)
-            3158:3146(ResType) ImageSparseSampleImplicitLod 3156 3157
-            3159:  7(f16vec4) CompositeExtract 3158 1
-                              Store 3143(texel) 3159
-            3160:     47(int) CompositeExtract 3158 0
-            3161:         163 Load 165(s3D)
-            3162:175(f16vec3) Load 177(f16c3)
-            3163:6(float16_t) Load 137(f16bias)
-            3164:3146(ResType) ImageSparseSampleImplicitLod 3161 3162 Bias 3163
-            3165:  7(f16vec4) CompositeExtract 3164 1
-                              Store 3143(texel) 3165
-            3166:     47(int) CompositeExtract 3164 0
-            3167:         184 Load 186(sCube)
-            3168:  167(fvec3) Load 169(c3)
-            3169:3146(ResType) ImageSparseSampleImplicitLod 3167 3168
-            3170:  7(f16vec4) CompositeExtract 3169 1
-                              Store 3143(texel) 3170
+     3053(texel):     64(ptr) Variable Function
+                              Store 3053(texel) 121
+            3054:         143 Load 145(s2D)
+            3055:   53(fvec2) Load 148(c2)
+            3057:3056(ResType) ImageSparseSampleImplicitLod 3054 3055
+            3058:  7(f16vec4) CompositeExtract 3057 1
+                              Store 3053(texel) 3058
+            3059:     47(int) CompositeExtract 3057 0
+            3060:         143 Load 145(s2D)
+            3061:154(f16vec2) Load 156(f16c2)
+            3062:6(float16_t) Load 137(f16bias)
+            3063:3056(ResType) ImageSparseSampleImplicitLod 3060 3061 Bias 3062
+            3064:  7(f16vec4) CompositeExtract 3063 1
+                              Store 3053(texel) 3064
+            3065:     47(int) CompositeExtract 3063 0
+            3066:         163 Load 165(s3D)
+            3067:  167(fvec3) Load 169(c3)
+            3068:3056(ResType) ImageSparseSampleImplicitLod 3066 3067
+            3069:  7(f16vec4) CompositeExtract 3068 1
+                              Store 3053(texel) 3069
+            3070:     47(int) CompositeExtract 3068 0
+            3071:         163 Load 165(s3D)
+            3072:175(f16vec3) Load 177(f16c3)
+            3073:6(float16_t) Load 137(f16bias)
+            3074:3056(ResType) ImageSparseSampleImplicitLod 3071 3072 Bias 3073
+            3075:  7(f16vec4) CompositeExtract 3074 1
+                              Store 3053(texel) 3075
+            3076:     47(int) CompositeExtract 3074 0
+            3077:         184 Load 186(sCube)
+            3078:  167(fvec3) Load 169(c3)
+            3079:3056(ResType) ImageSparseSampleImplicitLod 3077 3078
+            3080:  7(f16vec4) CompositeExtract 3079 1
+                              Store 3053(texel) 3080
+            3081:     47(int) CompositeExtract 3079 0
+            3082:         184 Load 186(sCube)
+            3083:175(f16vec3) Load 177(f16c3)
+            3084:6(float16_t) Load 137(f16bias)
+            3085:3056(ResType) ImageSparseSampleImplicitLod 3082 3083 Bias 3084
+            3086:  7(f16vec4) CompositeExtract 3085 1
+                              Store 3053(texel) 3086
+            3087:     47(int) CompositeExtract 3085 0
+            3088:         224 Load 226(s2DShadow)
+            3089:  167(fvec3) Load 169(c3)
+            3090:    208(ptr) AccessChain 3053(texel) 207
+            3091:   52(float) CompositeExtract 3089 2
+            3093:3092(ResType) ImageSparseSampleDrefImplicitLod 3088 3089 3091
+            3094:6(float16_t) CompositeExtract 3093 1
+                              Store 3090 3094
+            3095:     47(int) CompositeExtract 3093 0
+            3096:         224 Load 226(s2DShadow)
+            3097:154(f16vec2) Load 156(f16c2)
+            3098:   52(float) Load 215(compare)
+            3099:    208(ptr) AccessChain 3053(texel) 207
+            3100:6(float16_t) Load 137(f16bias)
+            3101:3092(ResType) ImageSparseSampleDrefImplicitLod 3096 3097 3098 Bias 3100
+            3102:6(float16_t) CompositeExtract 3101 1
+                              Store 3099 3102
+            3103:     47(int) CompositeExtract 3101 0
+            3104:         245 Load 247(sCubeShadow)
+            3105:  249(fvec4) Load 251(c4)
+            3106:    208(ptr) AccessChain 3053(texel) 207
+            3107:   52(float) CompositeExtract 3105 3
+            3108:3092(ResType) ImageSparseSampleDrefImplicitLod 3104 3105 3107
+            3109:6(float16_t) CompositeExtract 3108 1
+                              Store 3106 3109
+            3110:     47(int) CompositeExtract 3108 0
+            3111:         245 Load 247(sCubeShadow)
+            3112:175(f16vec3) Load 177(f16c3)
+            3113:   52(float) Load 215(compare)
+            3114:    208(ptr) AccessChain 3053(texel) 207
+            3115:6(float16_t) Load 137(f16bias)
+            3116:3092(ResType) ImageSparseSampleDrefImplicitLod 3111 3112 3113 Bias 3115
+            3117:6(float16_t) CompositeExtract 3116 1
+                              Store 3114 3117
+            3118:     47(int) CompositeExtract 3116 0
+            3119:         284 Load 286(s2DArray)
+            3120:  167(fvec3) Load 169(c3)
+            3121:3056(ResType) ImageSparseSampleImplicitLod 3119 3120
+            3122:  7(f16vec4) CompositeExtract 3121 1
+                              Store 3053(texel) 3122
+            3123:     47(int) CompositeExtract 3121 0
+            3124:         284 Load 286(s2DArray)
+            3125:175(f16vec3) Load 177(f16c3)
+            3126:6(float16_t) Load 137(f16bias)
+            3127:3056(ResType) ImageSparseSampleImplicitLod 3124 3125 Bias 3126
+            3128:  7(f16vec4) CompositeExtract 3127 1
+                              Store 3053(texel) 3128
+            3129:     47(int) CompositeExtract 3127 0
+            3130:         299 Load 301(sCubeArray)
+            3131:  249(fvec4) Load 251(c4)
+            3132:3056(ResType) ImageSparseSampleImplicitLod 3130 3131
+            3133:  7(f16vec4) CompositeExtract 3132 1
+                              Store 3053(texel) 3133
+            3134:     47(int) CompositeExtract 3132 0
+            3135:         299 Load 301(sCubeArray)
+            3136:  7(f16vec4) Load 309(f16c4)
+            3137:6(float16_t) Load 137(f16bias)
+            3138:3056(ResType) ImageSparseSampleImplicitLod 3135 3136 Bias 3137
+            3139:  7(f16vec4) CompositeExtract 3138 1
+                              Store 3053(texel) 3139
+            3140:     47(int) CompositeExtract 3138 0
+            3141:         337 Load 339(s2DArrayShadow)
+            3142:  249(fvec4) Load 251(c4)
+            3143:    208(ptr) AccessChain 3053(texel) 207
+            3144:   52(float) CompositeExtract 3142 3
+            3145:3092(ResType) ImageSparseSampleDrefImplicitLod 3141 3142 3144
+            3146:6(float16_t) CompositeExtract 3145 1
+                              Store 3143 3146
+            3147:     47(int) CompositeExtract 3145 0
+            3148:         337 Load 339(s2DArrayShadow)
+            3149:175(f16vec3) Load 177(f16c3)
+            3150:   52(float) Load 215(compare)
+            3151:    208(ptr) AccessChain 3053(texel) 207
+            3152:3092(ResType) ImageSparseSampleDrefImplicitLod 3148 3149 3150
+            3153:6(float16_t) CompositeExtract 3152 1
+                              Store 3151 3153
+            3154:     47(int) CompositeExtract 3152 0
+            3155:         357 Load 359(s2DRect)
+            3156:   53(fvec2) Load 148(c2)
+            3157:3056(ResType) ImageSparseSampleImplicitLod 3155 3156
+            3158:  7(f16vec4) CompositeExtract 3157 1
+                              Store 3053(texel) 3158
+            3159:     47(int) CompositeExtract 3157 0
+            3160:         357 Load 359(s2DRect)
+            3161:154(f16vec2) Load 156(f16c2)
+            3162:3056(ResType) ImageSparseSampleImplicitLod 3160 3161
+            3163:  7(f16vec4) CompositeExtract 3162 1
+                              Store 3053(texel) 3163
+            3164:     47(int) CompositeExtract 3162 0
+            3165:         371 Load 373(s2DRectShadow)
+            3166:  167(fvec3) Load 169(c3)
+            3167:    208(ptr) AccessChain 3053(texel) 207
+            3168:   52(float) CompositeExtract 3166 2
+            3169:3092(ResType) ImageSparseSampleDrefImplicitLod 3165 3166 3168
+            3170:6(float16_t) CompositeExtract 3169 1
+                              Store 3167 3170
             3171:     47(int) CompositeExtract 3169 0
-            3172:         184 Load 186(sCube)
-            3173:175(f16vec3) Load 177(f16c3)
-            3174:6(float16_t) Load 137(f16bias)
-            3175:3146(ResType) ImageSparseSampleImplicitLod 3172 3173 Bias 3174
-            3176:  7(f16vec4) CompositeExtract 3175 1
-                              Store 3143(texel) 3176
-            3177:     47(int) CompositeExtract 3175 0
-            3178:         224 Load 226(s2DShadow)
-            3179:  167(fvec3) Load 169(c3)
-            3180:    208(ptr) AccessChain 3143(texel) 207
-            3181:   52(float) CompositeExtract 3179 2
-            3183:3182(ResType) ImageSparseSampleDrefImplicitLod 3178 3179 3181
+            3172:         371 Load 373(s2DRectShadow)
+            3173:154(f16vec2) Load 156(f16c2)
+            3174:   52(float) Load 215(compare)
+            3175:    208(ptr) AccessChain 3053(texel) 207
+            3176:3092(ResType) ImageSparseSampleDrefImplicitLod 3172 3173 3174
+            3177:6(float16_t) CompositeExtract 3176 1
+                              Store 3175 3177
+            3178:     47(int) CompositeExtract 3176 0
+            3179:         391 Load 393(sCubeArrayShadow)
+            3180:  249(fvec4) Load 251(c4)
+            3181:   52(float) Load 215(compare)
+            3182:    208(ptr) AccessChain 3053(texel) 207
+            3183:3092(ResType) ImageSparseSampleDrefImplicitLod 3179 3180 3181
             3184:6(float16_t) CompositeExtract 3183 1
-                              Store 3180 3184
+                              Store 3182 3184
             3185:     47(int) CompositeExtract 3183 0
-            3186:         224 Load 226(s2DShadow)
-            3187:154(f16vec2) Load 156(f16c2)
+            3186:         391 Load 393(sCubeArrayShadow)
+            3187:  7(f16vec4) Load 309(f16c4)
             3188:   52(float) Load 215(compare)
-            3189:    208(ptr) AccessChain 3143(texel) 207
-            3190:6(float16_t) Load 137(f16bias)
-            3191:3182(ResType) ImageSparseSampleDrefImplicitLod 3186 3187 3188 Bias 3190
-            3192:6(float16_t) CompositeExtract 3191 1
-                              Store 3189 3192
-            3193:     47(int) CompositeExtract 3191 0
-            3194:         245 Load 247(sCubeShadow)
-            3195:  249(fvec4) Load 251(c4)
-            3196:    208(ptr) AccessChain 3143(texel) 207
-            3197:   52(float) CompositeExtract 3195 3
-            3198:3182(ResType) ImageSparseSampleDrefImplicitLod 3194 3195 3197
-            3199:6(float16_t) CompositeExtract 3198 1
-                              Store 3196 3199
-            3200:     47(int) CompositeExtract 3198 0
-            3201:         245 Load 247(sCubeShadow)
-            3202:175(f16vec3) Load 177(f16c3)
-            3203:   52(float) Load 215(compare)
-            3204:    208(ptr) AccessChain 3143(texel) 207
-            3205:6(float16_t) Load 137(f16bias)
-            3206:3182(ResType) ImageSparseSampleDrefImplicitLod 3201 3202 3203 Bias 3205
-            3207:6(float16_t) CompositeExtract 3206 1
-                              Store 3204 3207
-            3208:     47(int) CompositeExtract 3206 0
-            3209:         284 Load 286(s2DArray)
-            3210:  167(fvec3) Load 169(c3)
-            3211:3146(ResType) ImageSparseSampleImplicitLod 3209 3210
-            3212:  7(f16vec4) CompositeExtract 3211 1
-                              Store 3143(texel) 3212
-            3213:     47(int) CompositeExtract 3211 0
-            3214:         284 Load 286(s2DArray)
-            3215:175(f16vec3) Load 177(f16c3)
-            3216:6(float16_t) Load 137(f16bias)
-            3217:3146(ResType) ImageSparseSampleImplicitLod 3214 3215 Bias 3216
-            3218:  7(f16vec4) CompositeExtract 3217 1
-                              Store 3143(texel) 3218
-            3219:     47(int) CompositeExtract 3217 0
-            3220:         299 Load 301(sCubeArray)
-            3221:  249(fvec4) Load 251(c4)
-            3222:3146(ResType) ImageSparseSampleImplicitLod 3220 3221
-            3223:  7(f16vec4) CompositeExtract 3222 1
-                              Store 3143(texel) 3223
-            3224:     47(int) CompositeExtract 3222 0
-            3225:         299 Load 301(sCubeArray)
-            3226:  7(f16vec4) Load 309(f16c4)
-            3227:6(float16_t) Load 137(f16bias)
-            3228:3146(ResType) ImageSparseSampleImplicitLod 3225 3226 Bias 3227
-            3229:  7(f16vec4) CompositeExtract 3228 1
-                              Store 3143(texel) 3229
-            3230:     47(int) CompositeExtract 3228 0
-            3231:         337 Load 339(s2DArrayShadow)
-            3232:  249(fvec4) Load 251(c4)
-            3233:    208(ptr) AccessChain 3143(texel) 207
-            3234:   52(float) CompositeExtract 3232 3
-            3235:3182(ResType) ImageSparseSampleDrefImplicitLod 3231 3232 3234
-            3236:6(float16_t) CompositeExtract 3235 1
-                              Store 3233 3236
-            3237:     47(int) CompositeExtract 3235 0
-            3238:         337 Load 339(s2DArrayShadow)
-            3239:175(f16vec3) Load 177(f16c3)
-            3240:   52(float) Load 215(compare)
-            3241:    208(ptr) AccessChain 3143(texel) 207
-            3242:3182(ResType) ImageSparseSampleDrefImplicitLod 3238 3239 3240
-            3243:6(float16_t) CompositeExtract 3242 1
-                              Store 3241 3243
-            3244:     47(int) CompositeExtract 3242 0
-            3245:         357 Load 359(s2DRect)
-            3246:   53(fvec2) Load 148(c2)
-            3247:3146(ResType) ImageSparseSampleImplicitLod 3245 3246
-            3248:  7(f16vec4) CompositeExtract 3247 1
-                              Store 3143(texel) 3248
-            3249:     47(int) CompositeExtract 3247 0
-            3250:         357 Load 359(s2DRect)
-            3251:154(f16vec2) Load 156(f16c2)
-            3252:3146(ResType) ImageSparseSampleImplicitLod 3250 3251
-            3253:  7(f16vec4) CompositeExtract 3252 1
-                              Store 3143(texel) 3253
-            3254:     47(int) CompositeExtract 3252 0
-            3255:         371 Load 373(s2DRectShadow)
-            3256:  167(fvec3) Load 169(c3)
-            3257:    208(ptr) AccessChain 3143(texel) 207
-            3258:   52(float) CompositeExtract 3256 2
-            3259:3182(ResType) ImageSparseSampleDrefImplicitLod 3255 3256 3258
-            3260:6(float16_t) CompositeExtract 3259 1
-                              Store 3257 3260
-            3261:     47(int) CompositeExtract 3259 0
-            3262:         371 Load 373(s2DRectShadow)
-            3263:154(f16vec2) Load 156(f16c2)
-            3264:   52(float) Load 215(compare)
-            3265:    208(ptr) AccessChain 3143(texel) 207
-            3266:3182(ResType) ImageSparseSampleDrefImplicitLod 3262 3263 3264
-            3267:6(float16_t) CompositeExtract 3266 1
-                              Store 3265 3267
-            3268:     47(int) CompositeExtract 3266 0
-            3269:         391 Load 393(sCubeArrayShadow)
-            3270:  249(fvec4) Load 251(c4)
-            3271:   52(float) Load 215(compare)
-            3272:    208(ptr) AccessChain 3143(texel) 207
-            3273:3182(ResType) ImageSparseSampleDrefImplicitLod 3269 3270 3271
-            3274:6(float16_t) CompositeExtract 3273 1
-                              Store 3272 3274
-            3275:     47(int) CompositeExtract 3273 0
-            3276:         391 Load 393(sCubeArrayShadow)
-            3277:  7(f16vec4) Load 309(f16c4)
-            3278:   52(float) Load 215(compare)
-            3279:    208(ptr) AccessChain 3143(texel) 207
-            3280:3182(ResType) ImageSparseSampleDrefImplicitLod 3276 3277 3278
-            3281:6(float16_t) CompositeExtract 3280 1
-                              Store 3279 3281
-            3282:     47(int) CompositeExtract 3280 0
-            3283:  7(f16vec4) Load 3143(texel)
-                              ReturnValue 3283
+            3189:    208(ptr) AccessChain 3053(texel) 207
+            3190:3092(ResType) ImageSparseSampleDrefImplicitLod 3186 3187 3188
+            3191:6(float16_t) CompositeExtract 3190 1
+                              Store 3189 3191
+            3192:     47(int) CompositeExtract 3190 0
+            3193:  7(f16vec4) Load 3053(texel)
+                              ReturnValue 3193
                               FunctionEnd
 71(testSparseTextureLod():  7(f16vec4) Function None 8
               72:             Label
-     3286(texel):     64(ptr) Variable Function
-                              Store 3286(texel) 121
-            3287:         143 Load 145(s2D)
-            3288:   53(fvec2) Load 148(c2)
-            3289:   52(float) Load 565(lod)
-            3290:3146(ResType) ImageSparseSampleExplicitLod 3287 3288 Lod 3289
-            3291:  7(f16vec4) CompositeExtract 3290 1
-                              Store 3286(texel) 3291
-            3292:     47(int) CompositeExtract 3290 0
-            3293:         143 Load 145(s2D)
-            3294:154(f16vec2) Load 156(f16c2)
-            3295:6(float16_t) Load 572(f16lod)
-            3296:3146(ResType) ImageSparseSampleExplicitLod 3293 3294 Lod 3295
-            3297:  7(f16vec4) CompositeExtract 3296 1
-                              Store 3286(texel) 3297
-            3298:     47(int) CompositeExtract 3296 0
-            3299:         163 Load 165(s3D)
-            3300:  167(fvec3) Load 169(c3)
-            3301:   52(float) Load 565(lod)
-            3302:3146(ResType) ImageSparseSampleExplicitLod 3299 3300 Lod 3301
-            3303:  7(f16vec4) CompositeExtract 3302 1
-                              Store 3286(texel) 3303
-            3304:     47(int) CompositeExtract 3302 0
-            3305:         163 Load 165(s3D)
-            3306:175(f16vec3) Load 177(f16c3)
-            3307:6(float16_t) Load 572(f16lod)
-            3308:3146(ResType) ImageSparseSampleExplicitLod 3305 3306 Lod 3307
-            3309:  7(f16vec4) CompositeExtract 3308 1
-                              Store 3286(texel) 3309
-            3310:     47(int) CompositeExtract 3308 0
-            3311:         184 Load 186(sCube)
-            3312:  167(fvec3) Load 169(c3)
-            3313:   52(float) Load 565(lod)
-            3314:3146(ResType) ImageSparseSampleExplicitLod 3311 3312 Lod 3313
-            3315:  7(f16vec4) CompositeExtract 3314 1
-                              Store 3286(texel) 3315
-            3316:     47(int) CompositeExtract 3314 0
-            3317:         184 Load 186(sCube)
-            3318:175(f16vec3) Load 177(f16c3)
-            3319:6(float16_t) Load 572(f16lod)
-            3320:3146(ResType) ImageSparseSampleExplicitLod 3317 3318 Lod 3319
-            3321:  7(f16vec4) CompositeExtract 3320 1
-                              Store 3286(texel) 3321
-            3322:     47(int) CompositeExtract 3320 0
-            3323:         224 Load 226(s2DShadow)
-            3324:  167(fvec3) Load 169(c3)
-            3325:   52(float) Load 565(lod)
-            3326:    208(ptr) AccessChain 3286(texel) 207
-            3327:   52(float) CompositeExtract 3324 2
-            3328:3182(ResType) ImageSparseSampleDrefExplicitLod 3323 3324 3327 Lod 3325
-            3329:6(float16_t) CompositeExtract 3328 1
-                              Store 3326 3329
-            3330:     47(int) CompositeExtract 3328 0
-            3331:         224 Load 226(s2DShadow)
-            3332:154(f16vec2) Load 156(f16c2)
-            3333:   52(float) Load 215(compare)
-            3334:6(float16_t) Load 572(f16lod)
-            3335:    208(ptr) AccessChain 3286(texel) 207
-            3336:3182(ResType) ImageSparseSampleDrefExplicitLod 3331 3332 3333 Lod 3334
-            3337:6(float16_t) CompositeExtract 3336 1
-                              Store 3335 3337
-            3338:     47(int) CompositeExtract 3336 0
-            3339:         284 Load 286(s2DArray)
-            3340:  167(fvec3) Load 169(c3)
-            3341:   52(float) Load 565(lod)
-            3342:3146(ResType) ImageSparseSampleExplicitLod 3339 3340 Lod 3341
-            3343:  7(f16vec4) CompositeExtract 3342 1
-                              Store 3286(texel) 3343
-            3344:     47(int) CompositeExtract 3342 0
-            3345:         284 Load 286(s2DArray)
-            3346:175(f16vec3) Load 177(f16c3)
-            3347:6(float16_t) Load 572(f16lod)
-            3348:3146(ResType) ImageSparseSampleExplicitLod 3345 3346 Lod 3347
-            3349:  7(f16vec4) CompositeExtract 3348 1
-                              Store 3286(texel) 3349
-            3350:     47(int) CompositeExtract 3348 0
-            3351:         299 Load 301(sCubeArray)
-            3352:  249(fvec4) Load 251(c4)
-            3353:   52(float) Load 565(lod)
-            3354:3146(ResType) ImageSparseSampleExplicitLod 3351 3352 Lod 3353
-            3355:  7(f16vec4) CompositeExtract 3354 1
-                              Store 3286(texel) 3355
-            3356:     47(int) CompositeExtract 3354 0
-            3357:         299 Load 301(sCubeArray)
-            3358:  7(f16vec4) Load 309(f16c4)
-            3359:6(float16_t) Load 572(f16lod)
-            3360:3146(ResType) ImageSparseSampleExplicitLod 3357 3358 Lod 3359
-            3361:  7(f16vec4) CompositeExtract 3360 1
-                              Store 3286(texel) 3361
-            3362:     47(int) CompositeExtract 3360 0
-            3363:  7(f16vec4) Load 3286(texel)
-                              ReturnValue 3363
+     3196(texel):     64(ptr) Variable Function
+                              Store 3196(texel) 121
+            3197:         143 Load 145(s2D)
+            3198:   53(fvec2) Load 148(c2)
+            3199:   52(float) Load 565(lod)
+            3200:3056(ResType) ImageSparseSampleExplicitLod 3197 3198 Lod 3199
+            3201:  7(f16vec4) CompositeExtract 3200 1
+                              Store 3196(texel) 3201
+            3202:     47(int) CompositeExtract 3200 0
+            3203:         143 Load 145(s2D)
+            3204:154(f16vec2) Load 156(f16c2)
+            3205:6(float16_t) Load 572(f16lod)
+            3206:3056(ResType) ImageSparseSampleExplicitLod 3203 3204 Lod 3205
+            3207:  7(f16vec4) CompositeExtract 3206 1
+                              Store 3196(texel) 3207
+            3208:     47(int) CompositeExtract 3206 0
+            3209:         163 Load 165(s3D)
+            3210:  167(fvec3) Load 169(c3)
+            3211:   52(float) Load 565(lod)
+            3212:3056(ResType) ImageSparseSampleExplicitLod 3209 3210 Lod 3211
+            3213:  7(f16vec4) CompositeExtract 3212 1
+                              Store 3196(texel) 3213
+            3214:     47(int) CompositeExtract 3212 0
+            3215:         163 Load 165(s3D)
+            3216:175(f16vec3) Load 177(f16c3)
+            3217:6(float16_t) Load 572(f16lod)
+            3218:3056(ResType) ImageSparseSampleExplicitLod 3215 3216 Lod 3217
+            3219:  7(f16vec4) CompositeExtract 3218 1
+                              Store 3196(texel) 3219
+            3220:     47(int) CompositeExtract 3218 0
+            3221:         184 Load 186(sCube)
+            3222:  167(fvec3) Load 169(c3)
+            3223:   52(float) Load 565(lod)
+            3224:3056(ResType) ImageSparseSampleExplicitLod 3221 3222 Lod 3223
+            3225:  7(f16vec4) CompositeExtract 3224 1
+                              Store 3196(texel) 3225
+            3226:     47(int) CompositeExtract 3224 0
+            3227:         184 Load 186(sCube)
+            3228:175(f16vec3) Load 177(f16c3)
+            3229:6(float16_t) Load 572(f16lod)
+            3230:3056(ResType) ImageSparseSampleExplicitLod 3227 3228 Lod 3229
+            3231:  7(f16vec4) CompositeExtract 3230 1
+                              Store 3196(texel) 3231
+            3232:     47(int) CompositeExtract 3230 0
+            3233:         224 Load 226(s2DShadow)
+            3234:  167(fvec3) Load 169(c3)
+            3235:   52(float) Load 565(lod)
+            3236:    208(ptr) AccessChain 3196(texel) 207
+            3237:   52(float) CompositeExtract 3234 2
+            3238:3092(ResType) ImageSparseSampleDrefExplicitLod 3233 3234 3237 Lod 3235
+            3239:6(float16_t) CompositeExtract 3238 1
+                              Store 3236 3239
+            3240:     47(int) CompositeExtract 3238 0
+            3241:         224 Load 226(s2DShadow)
+            3242:154(f16vec2) Load 156(f16c2)
+            3243:   52(float) Load 215(compare)
+            3244:6(float16_t) Load 572(f16lod)
+            3245:    208(ptr) AccessChain 3196(texel) 207
+            3246:3092(ResType) ImageSparseSampleDrefExplicitLod 3241 3242 3243 Lod 3244
+            3247:6(float16_t) CompositeExtract 3246 1
+                              Store 3245 3247
+            3248:     47(int) CompositeExtract 3246 0
+            3249:         284 Load 286(s2DArray)
+            3250:  167(fvec3) Load 169(c3)
+            3251:   52(float) Load 565(lod)
+            3252:3056(ResType) ImageSparseSampleExplicitLod 3249 3250 Lod 3251
+            3253:  7(f16vec4) CompositeExtract 3252 1
+                              Store 3196(texel) 3253
+            3254:     47(int) CompositeExtract 3252 0
+            3255:         284 Load 286(s2DArray)
+            3256:175(f16vec3) Load 177(f16c3)
+            3257:6(float16_t) Load 572(f16lod)
+            3258:3056(ResType) ImageSparseSampleExplicitLod 3255 3256 Lod 3257
+            3259:  7(f16vec4) CompositeExtract 3258 1
+                              Store 3196(texel) 3259
+            3260:     47(int) CompositeExtract 3258 0
+            3261:         299 Load 301(sCubeArray)
+            3262:  249(fvec4) Load 251(c4)
+            3263:   52(float) Load 565(lod)
+            3264:3056(ResType) ImageSparseSampleExplicitLod 3261 3262 Lod 3263
+            3265:  7(f16vec4) CompositeExtract 3264 1
+                              Store 3196(texel) 3265
+            3266:     47(int) CompositeExtract 3264 0
+            3267:         299 Load 301(sCubeArray)
+            3268:  7(f16vec4) Load 309(f16c4)
+            3269:6(float16_t) Load 572(f16lod)
+            3270:3056(ResType) ImageSparseSampleExplicitLod 3267 3268 Lod 3269
+            3271:  7(f16vec4) CompositeExtract 3270 1
+                              Store 3196(texel) 3271
+            3272:     47(int) CompositeExtract 3270 0
+            3273:  7(f16vec4) Load 3196(texel)
+                              ReturnValue 3273
                               FunctionEnd
 73(testSparseTextureOffset():  7(f16vec4) Function None 8
               74:             Label
+     3276(texel):     64(ptr) Variable Function
+                              Store 3276(texel) 121
+            3277:         143 Load 145(s2D)
+            3278:   53(fvec2) Load 148(c2)
+            3279:3056(ResType) ImageSparseSampleImplicitLod 3277 3278 ConstOffset 722
+            3280:  7(f16vec4) CompositeExtract 3279 1
+                              Store 3276(texel) 3280
+            3281:     47(int) CompositeExtract 3279 0
+            3282:         143 Load 145(s2D)
+            3283:154(f16vec2) Load 156(f16c2)
+            3284:6(float16_t) Load 137(f16bias)
+            3285:3056(ResType) ImageSparseSampleImplicitLod 3282 3283 Bias ConstOffset 3284 722
+            3286:  7(f16vec4) CompositeExtract 3285 1
+                              Store 3276(texel) 3286
+            3287:     47(int) CompositeExtract 3285 0
+            3288:         163 Load 165(s3D)
+            3289:  167(fvec3) Load 169(c3)
+            3290:3056(ResType) ImageSparseSampleImplicitLod 3288 3289 ConstOffset 735
+            3291:  7(f16vec4) CompositeExtract 3290 1
+                              Store 3276(texel) 3291
+            3292:     47(int) CompositeExtract 3290 0
+            3293:         163 Load 165(s3D)
+            3294:175(f16vec3) Load 177(f16c3)
+            3295:6(float16_t) Load 137(f16bias)
+            3296:3056(ResType) ImageSparseSampleImplicitLod 3293 3294 Bias ConstOffset 3295 735
+            3297:  7(f16vec4) CompositeExtract 3296 1
+                              Store 3276(texel) 3297
+            3298:     47(int) CompositeExtract 3296 0
+            3299:         357 Load 359(s2DRect)
+            3300:   53(fvec2) Load 148(c2)
+            3301:3056(ResType) ImageSparseSampleImplicitLod 3299 3300 ConstOffset 722
+            3302:  7(f16vec4) CompositeExtract 3301 1
+                              Store 3276(texel) 3302
+            3303:     47(int) CompositeExtract 3301 0
+            3304:         357 Load 359(s2DRect)
+            3305:154(f16vec2) Load 156(f16c2)
+            3306:3056(ResType) ImageSparseSampleImplicitLod 3304 3305 ConstOffset 722
+            3307:  7(f16vec4) CompositeExtract 3306 1
+                              Store 3276(texel) 3307
+            3308:     47(int) CompositeExtract 3306 0
+            3309:         371 Load 373(s2DRectShadow)
+            3310:  167(fvec3) Load 169(c3)
+            3311:    208(ptr) AccessChain 3276(texel) 207
+            3312:   52(float) CompositeExtract 3310 2
+            3313:3092(ResType) ImageSparseSampleDrefImplicitLod 3309 3310 3312 ConstOffset 722
+            3314:6(float16_t) CompositeExtract 3313 1
+                              Store 3311 3314
+            3315:     47(int) CompositeExtract 3313 0
+            3316:         371 Load 373(s2DRectShadow)
+            3317:154(f16vec2) Load 156(f16c2)
+            3318:   52(float) Load 215(compare)
+            3319:    208(ptr) AccessChain 3276(texel) 207
+            3320:3092(ResType) ImageSparseSampleDrefImplicitLod 3316 3317 3318 ConstOffset 722
+            3321:6(float16_t) CompositeExtract 3320 1
+                              Store 3319 3321
+            3322:     47(int) CompositeExtract 3320 0
+            3323:         224 Load 226(s2DShadow)
+            3324:  167(fvec3) Load 169(c3)
+            3325:    208(ptr) AccessChain 3276(texel) 207
+            3326:   52(float) CompositeExtract 3324 2
+            3327:3092(ResType) ImageSparseSampleDrefImplicitLod 3323 3324 3326 ConstOffset 722
+            3328:6(float16_t) CompositeExtract 3327 1
+                              Store 3325 3328
+            3329:     47(int) CompositeExtract 3327 0
+            3330:         224 Load 226(s2DShadow)
+            3331:154(f16vec2) Load 156(f16c2)
+            3332:   52(float) Load 215(compare)
+            3333:    208(ptr) AccessChain 3276(texel) 207
+            3334:6(float16_t) Load 137(f16bias)
+            3335:3092(ResType) ImageSparseSampleDrefImplicitLod 3330 3331 3332 Bias ConstOffset 3334 722
+            3336:6(float16_t) CompositeExtract 3335 1
+                              Store 3333 3336
+            3337:     47(int) CompositeExtract 3335 0
+            3338:         284 Load 286(s2DArray)
+            3339:  167(fvec3) Load 169(c3)
+            3340:3056(ResType) ImageSparseSampleImplicitLod 3338 3339 ConstOffset 722
+            3341:  7(f16vec4) CompositeExtract 3340 1
+                              Store 3276(texel) 3341
+            3342:     47(int) CompositeExtract 3340 0
+            3343:         284 Load 286(s2DArray)
+            3344:175(f16vec3) Load 177(f16c3)
+            3345:6(float16_t) Load 137(f16bias)
+            3346:3056(ResType) ImageSparseSampleImplicitLod 3343 3344 Bias ConstOffset 3345 722
+            3347:  7(f16vec4) CompositeExtract 3346 1
+                              Store 3276(texel) 3347
+            3348:     47(int) CompositeExtract 3346 0
+            3349:         337 Load 339(s2DArrayShadow)
+            3350:  249(fvec4) Load 251(c4)
+            3351:    208(ptr) AccessChain 3276(texel) 207
+            3352:   52(float) CompositeExtract 3350 3
+            3353:3092(ResType) ImageSparseSampleDrefImplicitLod 3349 3350 3352 ConstOffset 722
+            3354:6(float16_t) CompositeExtract 3353 1
+                              Store 3351 3354
+            3355:     47(int) CompositeExtract 3353 0
+            3356:         337 Load 339(s2DArrayShadow)
+            3357:175(f16vec3) Load 177(f16c3)
+            3358:   52(float) Load 215(compare)
+            3359:    208(ptr) AccessChain 3276(texel) 207
+            3360:3092(ResType) ImageSparseSampleDrefImplicitLod 3356 3357 3358 ConstOffset 722
+            3361:6(float16_t) CompositeExtract 3360 1
+                              Store 3359 3361
+            3362:     47(int) CompositeExtract 3360 0
+            3363:  7(f16vec4) Load 3276(texel)
+                              ReturnValue 3363
+                              FunctionEnd
+75(testSparseTextureLodOffset():  7(f16vec4) Function None 8
+              76:             Label
      3366(texel):     64(ptr) Variable Function
                               Store 3366(texel) 121
             3367:         143 Load 145(s2D)
             3368:   53(fvec2) Load 148(c2)
-            3369:3146(ResType) ImageSparseSampleImplicitLod 3367 3368 ConstOffset 722
-            3370:  7(f16vec4) CompositeExtract 3369 1
-                              Store 3366(texel) 3370
-            3371:     47(int) CompositeExtract 3369 0
-            3372:         143 Load 145(s2D)
-            3373:154(f16vec2) Load 156(f16c2)
-            3374:6(float16_t) Load 137(f16bias)
-            3375:3146(ResType) ImageSparseSampleImplicitLod 3372 3373 Bias ConstOffset 3374 722
-            3376:  7(f16vec4) CompositeExtract 3375 1
-                              Store 3366(texel) 3376
-            3377:     47(int) CompositeExtract 3375 0
-            3378:         163 Load 165(s3D)
-            3379:  167(fvec3) Load 169(c3)
-            3380:3146(ResType) ImageSparseSampleImplicitLod 3378 3379 ConstOffset 735
-            3381:  7(f16vec4) CompositeExtract 3380 1
-                              Store 3366(texel) 3381
-            3382:     47(int) CompositeExtract 3380 0
-            3383:         163 Load 165(s3D)
-            3384:175(f16vec3) Load 177(f16c3)
-            3385:6(float16_t) Load 137(f16bias)
-            3386:3146(ResType) ImageSparseSampleImplicitLod 3383 3384 Bias ConstOffset 3385 735
-            3387:  7(f16vec4) CompositeExtract 3386 1
-                              Store 3366(texel) 3387
-            3388:     47(int) CompositeExtract 3386 0
-            3389:         357 Load 359(s2DRect)
-            3390:   53(fvec2) Load 148(c2)
-            3391:3146(ResType) ImageSparseSampleImplicitLod 3389 3390 ConstOffset 722
-            3392:  7(f16vec4) CompositeExtract 3391 1
-                              Store 3366(texel) 3392
-            3393:     47(int) CompositeExtract 3391 0
-            3394:         357 Load 359(s2DRect)
-            3395:154(f16vec2) Load 156(f16c2)
-            3396:3146(ResType) ImageSparseSampleImplicitLod 3394 3395 ConstOffset 722
-            3397:  7(f16vec4) CompositeExtract 3396 1
-                              Store 3366(texel) 3397
+            3369:   52(float) Load 565(lod)
+            3370:3056(ResType) ImageSparseSampleExplicitLod 3367 3368 Lod ConstOffset 3369 722
+            3371:  7(f16vec4) CompositeExtract 3370 1
+                              Store 3366(texel) 3371
+            3372:     47(int) CompositeExtract 3370 0
+            3373:         143 Load 145(s2D)
+            3374:154(f16vec2) Load 156(f16c2)
+            3375:6(float16_t) Load 572(f16lod)
+            3376:3056(ResType) ImageSparseSampleExplicitLod 3373 3374 Lod ConstOffset 3375 722
+            3377:  7(f16vec4) CompositeExtract 3376 1
+                              Store 3366(texel) 3377
+            3378:     47(int) CompositeExtract 3376 0
+            3379:         163 Load 165(s3D)
+            3380:  167(fvec3) Load 169(c3)
+            3381:   52(float) Load 565(lod)
+            3382:3056(ResType) ImageSparseSampleExplicitLod 3379 3380 Lod ConstOffset 3381 735
+            3383:  7(f16vec4) CompositeExtract 3382 1
+                              Store 3366(texel) 3383
+            3384:     47(int) CompositeExtract 3382 0
+            3385:         163 Load 165(s3D)
+            3386:175(f16vec3) Load 177(f16c3)
+            3387:6(float16_t) Load 572(f16lod)
+            3388:3056(ResType) ImageSparseSampleExplicitLod 3385 3386 Lod ConstOffset 3387 735
+            3389:  7(f16vec4) CompositeExtract 3388 1
+                              Store 3366(texel) 3389
+            3390:     47(int) CompositeExtract 3388 0
+            3391:         224 Load 226(s2DShadow)
+            3392:  167(fvec3) Load 169(c3)
+            3393:   52(float) Load 565(lod)
+            3394:    208(ptr) AccessChain 3366(texel) 207
+            3395:   52(float) CompositeExtract 3392 2
+            3396:3092(ResType) ImageSparseSampleDrefExplicitLod 3391 3392 3395 Lod ConstOffset 3393 722
+            3397:6(float16_t) CompositeExtract 3396 1
+                              Store 3394 3397
             3398:     47(int) CompositeExtract 3396 0
-            3399:         371 Load 373(s2DRectShadow)
-            3400:  167(fvec3) Load 169(c3)
-            3401:    208(ptr) AccessChain 3366(texel) 207
-            3402:   52(float) CompositeExtract 3400 2
-            3403:3182(ResType) ImageSparseSampleDrefImplicitLod 3399 3400 3402 ConstOffset 722
-            3404:6(float16_t) CompositeExtract 3403 1
-                              Store 3401 3404
-            3405:     47(int) CompositeExtract 3403 0
-            3406:         371 Load 373(s2DRectShadow)
-            3407:154(f16vec2) Load 156(f16c2)
-            3408:   52(float) Load 215(compare)
-            3409:    208(ptr) AccessChain 3366(texel) 207
-            3410:3182(ResType) ImageSparseSampleDrefImplicitLod 3406 3407 3408 ConstOffset 722
-            3411:6(float16_t) CompositeExtract 3410 1
-                              Store 3409 3411
+            3399:         224 Load 226(s2DShadow)
+            3400:154(f16vec2) Load 156(f16c2)
+            3401:   52(float) Load 215(compare)
+            3402:6(float16_t) Load 572(f16lod)
+            3403:    208(ptr) AccessChain 3366(texel) 207
+            3404:3092(ResType) ImageSparseSampleDrefExplicitLod 3399 3400 3401 Lod ConstOffset 3402 722
+            3405:6(float16_t) CompositeExtract 3404 1
+                              Store 3403 3405
+            3406:     47(int) CompositeExtract 3404 0
+            3407:         284 Load 286(s2DArray)
+            3408:  167(fvec3) Load 169(c3)
+            3409:   52(float) Load 565(lod)
+            3410:3056(ResType) ImageSparseSampleExplicitLod 3407 3408 Lod ConstOffset 3409 722
+            3411:  7(f16vec4) CompositeExtract 3410 1
+                              Store 3366(texel) 3411
             3412:     47(int) CompositeExtract 3410 0
-            3413:         224 Load 226(s2DShadow)
-            3414:  167(fvec3) Load 169(c3)
-            3415:    208(ptr) AccessChain 3366(texel) 207
-            3416:   52(float) CompositeExtract 3414 2
-            3417:3182(ResType) ImageSparseSampleDrefImplicitLod 3413 3414 3416 ConstOffset 722
-            3418:6(float16_t) CompositeExtract 3417 1
-                              Store 3415 3418
-            3419:     47(int) CompositeExtract 3417 0
-            3420:         224 Load 226(s2DShadow)
-            3421:154(f16vec2) Load 156(f16c2)
-            3422:   52(float) Load 215(compare)
-            3423:    208(ptr) AccessChain 3366(texel) 207
-            3424:6(float16_t) Load 137(f16bias)
-            3425:3182(ResType) ImageSparseSampleDrefImplicitLod 3420 3421 3422 Bias ConstOffset 3424 722
-            3426:6(float16_t) CompositeExtract 3425 1
-                              Store 3423 3426
-            3427:     47(int) CompositeExtract 3425 0
-            3428:         284 Load 286(s2DArray)
-            3429:  167(fvec3) Load 169(c3)
-            3430:3146(ResType) ImageSparseSampleImplicitLod 3428 3429 ConstOffset 722
-            3431:  7(f16vec4) CompositeExtract 3430 1
-                              Store 3366(texel) 3431
-            3432:     47(int) CompositeExtract 3430 0
-            3433:         284 Load 286(s2DArray)
-            3434:175(f16vec3) Load 177(f16c3)
-            3435:6(float16_t) Load 137(f16bias)
-            3436:3146(ResType) ImageSparseSampleImplicitLod 3433 3434 Bias ConstOffset 3435 722
-            3437:  7(f16vec4) CompositeExtract 3436 1
-                              Store 3366(texel) 3437
-            3438:     47(int) CompositeExtract 3436 0
-            3439:         337 Load 339(s2DArrayShadow)
-            3440:  249(fvec4) Load 251(c4)
-            3441:    208(ptr) AccessChain 3366(texel) 207
-            3442:   52(float) CompositeExtract 3440 3
-            3443:3182(ResType) ImageSparseSampleDrefImplicitLod 3439 3440 3442 ConstOffset 722
-            3444:6(float16_t) CompositeExtract 3443 1
-                              Store 3441 3444
-            3445:     47(int) CompositeExtract 3443 0
-            3446:         337 Load 339(s2DArrayShadow)
-            3447:175(f16vec3) Load 177(f16c3)
-            3448:   52(float) Load 215(compare)
-            3449:    208(ptr) AccessChain 3366(texel) 207
-            3450:3182(ResType) ImageSparseSampleDrefImplicitLod 3446 3447 3448 ConstOffset 722
-            3451:6(float16_t) CompositeExtract 3450 1
-                              Store 3449 3451
-            3452:     47(int) CompositeExtract 3450 0
-            3453:  7(f16vec4) Load 3366(texel)
-                              ReturnValue 3453
-                              FunctionEnd
-75(testSparseTextureLodOffset():  7(f16vec4) Function None 8
-              76:             Label
-     3456(texel):     64(ptr) Variable Function
-                              Store 3456(texel) 121
-            3457:         143 Load 145(s2D)
-            3458:   53(fvec2) Load 148(c2)
-            3459:   52(float) Load 565(lod)
-            3460:3146(ResType) ImageSparseSampleExplicitLod 3457 3458 Lod ConstOffset 3459 722
-            3461:  7(f16vec4) CompositeExtract 3460 1
-                              Store 3456(texel) 3461
-            3462:     47(int) CompositeExtract 3460 0
-            3463:         143 Load 145(s2D)
-            3464:154(f16vec2) Load 156(f16c2)
-            3465:6(float16_t) Load 572(f16lod)
-            3466:3146(ResType) ImageSparseSampleExplicitLod 3463 3464 Lod ConstOffset 3465 722
-            3467:  7(f16vec4) CompositeExtract 3466 1
-                              Store 3456(texel) 3467
-            3468:     47(int) CompositeExtract 3466 0
-            3469:         163 Load 165(s3D)
-            3470:  167(fvec3) Load 169(c3)
-            3471:   52(float) Load 565(lod)
-            3472:3146(ResType) ImageSparseSampleExplicitLod 3469 3470 Lod ConstOffset 3471 735
-            3473:  7(f16vec4) CompositeExtract 3472 1
-                              Store 3456(texel) 3473
-            3474:     47(int) CompositeExtract 3472 0
-            3475:         163 Load 165(s3D)
-            3476:175(f16vec3) Load 177(f16c3)
-            3477:6(float16_t) Load 572(f16lod)
-            3478:3146(ResType) ImageSparseSampleExplicitLod 3475 3476 Lod ConstOffset 3477 735
-            3479:  7(f16vec4) CompositeExtract 3478 1
-                              Store 3456(texel) 3479
-            3480:     47(int) CompositeExtract 3478 0
-            3481:         224 Load 226(s2DShadow)
-            3482:  167(fvec3) Load 169(c3)
-            3483:   52(float) Load 565(lod)
-            3484:    208(ptr) AccessChain 3456(texel) 207
-            3485:   52(float) CompositeExtract 3482 2
-            3486:3182(ResType) ImageSparseSampleDrefExplicitLod 3481 3482 3485 Lod ConstOffset 3483 722
-            3487:6(float16_t) CompositeExtract 3486 1
-                              Store 3484 3487
-            3488:     47(int) CompositeExtract 3486 0
-            3489:         224 Load 226(s2DShadow)
-            3490:154(f16vec2) Load 156(f16c2)
-            3491:   52(float) Load 215(compare)
-            3492:6(float16_t) Load 572(f16lod)
-            3493:    208(ptr) AccessChain 3456(texel) 207
-            3494:3182(ResType) ImageSparseSampleDrefExplicitLod 3489 3490 3491 Lod ConstOffset 3492 722
-            3495:6(float16_t) CompositeExtract 3494 1
-                              Store 3493 3495
-            3496:     47(int) CompositeExtract 3494 0
-            3497:         284 Load 286(s2DArray)
-            3498:  167(fvec3) Load 169(c3)
-            3499:   52(float) Load 565(lod)
-            3500:3146(ResType) ImageSparseSampleExplicitLod 3497 3498 Lod ConstOffset 3499 722
-            3501:  7(f16vec4) CompositeExtract 3500 1
-                              Store 3456(texel) 3501
-            3502:     47(int) CompositeExtract 3500 0
-            3503:         284 Load 286(s2DArray)
-            3504:175(f16vec3) Load 177(f16c3)
-            3505:6(float16_t) Load 572(f16lod)
-            3506:3146(ResType) ImageSparseSampleExplicitLod 3503 3504 Lod ConstOffset 3505 722
-            3507:  7(f16vec4) CompositeExtract 3506 1
-                              Store 3456(texel) 3507
-            3508:     47(int) CompositeExtract 3506 0
-            3509:  7(f16vec4) Load 3456(texel)
-                              ReturnValue 3509
+            3413:         284 Load 286(s2DArray)
+            3414:175(f16vec3) Load 177(f16c3)
+            3415:6(float16_t) Load 572(f16lod)
+            3416:3056(ResType) ImageSparseSampleExplicitLod 3413 3414 Lod ConstOffset 3415 722
+            3417:  7(f16vec4) CompositeExtract 3416 1
+                              Store 3366(texel) 3417
+            3418:     47(int) CompositeExtract 3416 0
+            3419:  7(f16vec4) Load 3366(texel)
+                              ReturnValue 3419
                               FunctionEnd
 77(testSparseTextureGrad():  7(f16vec4) Function None 8
               78:             Label
-     3512(texel):     64(ptr) Variable Function
-                              Store 3512(texel) 121
-            3513:         143 Load 145(s2D)
-            3514:   53(fvec2) Load 148(c2)
-            3515:   53(fvec2) Load 1409(dPdxy2)
-            3516:   53(fvec2) Load 1409(dPdxy2)
-            3517:3146(ResType) ImageSparseSampleExplicitLod 3513 3514 Grad 3515 3516
-            3518:  7(f16vec4) CompositeExtract 3517 1
-                              Store 3512(texel) 3518
-            3519:     47(int) CompositeExtract 3517 0
-            3520:         143 Load 145(s2D)
-            3521:154(f16vec2) Load 156(f16c2)
-            3522:154(f16vec2) Load 1417(f16dPdxy2)
-            3523:154(f16vec2) Load 1417(f16dPdxy2)
-            3524:3146(ResType) ImageSparseSampleExplicitLod 3520 3521 Grad 3522 3523
-            3525:  7(f16vec4) CompositeExtract 3524 1
-                              Store 3512(texel) 3525
-            3526:     47(int) CompositeExtract 3524 0
-            3527:         163 Load 165(s3D)
-            3528:  167(fvec3) Load 169(c3)
-            3529:  167(fvec3) Load 1425(dPdxy3)
-            3530:  167(fvec3) Load 1425(dPdxy3)
-            3531:3146(ResType) ImageSparseSampleExplicitLod 3527 3528 Grad 3529 3530
-            3532:  7(f16vec4) CompositeExtract 3531 1
-                              Store 3512(texel) 3532
-            3533:     47(int) CompositeExtract 3531 0
-            3534:         163 Load 165(s3D)
-            3535:175(f16vec3) Load 177(f16c3)
-            3536:175(f16vec3) Load 1433(f16dPdxy3)
-            3537:175(f16vec3) Load 1433(f16dPdxy3)
-            3538:3146(ResType) ImageSparseSampleExplicitLod 3534 3535 Grad 3536 3537
-            3539:  7(f16vec4) CompositeExtract 3538 1
-                              Store 3512(texel) 3539
-            3540:     47(int) CompositeExtract 3538 0
-            3541:         184 Load 186(sCube)
-            3542:  167(fvec3) Load 169(c3)
-            3543:  167(fvec3) Load 1425(dPdxy3)
-            3544:  167(fvec3) Load 1425(dPdxy3)
-            3545:3146(ResType) ImageSparseSampleExplicitLod 3541 3542 Grad 3543 3544
-            3546:  7(f16vec4) CompositeExtract 3545 1
-                              Store 3512(texel) 3546
-            3547:     47(int) CompositeExtract 3545 0
-            3548:         184 Load 186(sCube)
-            3549:175(f16vec3) Load 177(f16c3)
-            3550:175(f16vec3) Load 1433(f16dPdxy3)
-            3551:175(f16vec3) Load 1433(f16dPdxy3)
-            3552:3146(ResType) ImageSparseSampleExplicitLod 3548 3549 Grad 3550 3551
-            3553:  7(f16vec4) CompositeExtract 3552 1
-                              Store 3512(texel) 3553
-            3554:     47(int) CompositeExtract 3552 0
-            3555:         357 Load 359(s2DRect)
-            3556:   53(fvec2) Load 148(c2)
-            3557:   53(fvec2) Load 1409(dPdxy2)
-            3558:   53(fvec2) Load 1409(dPdxy2)
-            3559:3146(ResType) ImageSparseSampleExplicitLod 3555 3556 Grad 3557 3558
-            3560:  7(f16vec4) CompositeExtract 3559 1
-                              Store 3512(texel) 3560
-            3561:     47(int) CompositeExtract 3559 0
-            3562:         357 Load 359(s2DRect)
-            3563:154(f16vec2) Load 156(f16c2)
-            3564:154(f16vec2) Load 1417(f16dPdxy2)
-            3565:154(f16vec2) Load 1417(f16dPdxy2)
-            3566:3146(ResType) ImageSparseSampleExplicitLod 3562 3563 Grad 3564 3565
-            3567:  7(f16vec4) CompositeExtract 3566 1
-                              Store 3512(texel) 3567
-            3568:     47(int) CompositeExtract 3566 0
-            3569:         371 Load 373(s2DRectShadow)
-            3570:  167(fvec3) Load 169(c3)
-            3571:   53(fvec2) Load 1409(dPdxy2)
-            3572:   53(fvec2) Load 1409(dPdxy2)
-            3573:    208(ptr) AccessChain 3512(texel) 207
-            3574:   52(float) CompositeExtract 3570 2
-            3575:3182(ResType) ImageSparseSampleDrefExplicitLod 3569 3570 3574 Grad 3571 3572
-            3576:6(float16_t) CompositeExtract 3575 1
-                              Store 3573 3576
-            3577:     47(int) CompositeExtract 3575 0
-            3578:         371 Load 373(s2DRectShadow)
-            3579:154(f16vec2) Load 156(f16c2)
-            3580:   52(float) Load 215(compare)
-            3581:154(f16vec2) Load 1417(f16dPdxy2)
-            3582:154(f16vec2) Load 1417(f16dPdxy2)
-            3583:    208(ptr) AccessChain 3512(texel) 207
-            3584:3182(ResType) ImageSparseSampleDrefExplicitLod 3578 3579 3580 Grad 3581 3582
-            3585:6(float16_t) CompositeExtract 3584 1
-                              Store 3583 3585
-            3586:     47(int) CompositeExtract 3584 0
-            3587:         224 Load 226(s2DShadow)
-            3588:  167(fvec3) Load 169(c3)
-            3589:   53(fvec2) Load 1409(dPdxy2)
-            3590:   53(fvec2) Load 1409(dPdxy2)
-            3591:    208(ptr) AccessChain 3512(texel) 207
-            3592:   52(float) CompositeExtract 3588 2
-            3593:3182(ResType) ImageSparseSampleDrefExplicitLod 3587 3588 3592 Grad 3589 3590
-            3594:6(float16_t) CompositeExtract 3593 1
-                              Store 3591 3594
-            3595:     47(int) CompositeExtract 3593 0
-            3596:         224 Load 226(s2DShadow)
-            3597:154(f16vec2) Load 156(f16c2)
-            3598:   52(float) Load 215(compare)
-            3599:154(f16vec2) Load 1417(f16dPdxy2)
-            3600:154(f16vec2) Load 1417(f16dPdxy2)
-            3601:    208(ptr) AccessChain 3512(texel) 207
-            3602:3182(ResType) ImageSparseSampleDrefExplicitLod 3596 3597 3598 Grad 3599 3600
-            3603:6(float16_t) CompositeExtract 3602 1
-                              Store 3601 3603
-            3604:     47(int) CompositeExtract 3602 0
-            3605:         245 Load 247(sCubeShadow)
-            3606:  249(fvec4) Load 251(c4)
-            3607:  167(fvec3) Load 1425(dPdxy3)
-            3608:  167(fvec3) Load 1425(dPdxy3)
-            3609:    208(ptr) AccessChain 3512(texel) 207
-            3610:   52(float) CompositeExtract 3606 3
-            3611:3182(ResType) ImageSparseSampleDrefExplicitLod 3605 3606 3610 Grad 3607 3608
-            3612:6(float16_t) CompositeExtract 3611 1
-                              Store 3609 3612
-            3613:     47(int) CompositeExtract 3611 0
-            3614:         245 Load 247(sCubeShadow)
-            3615:175(f16vec3) Load 177(f16c3)
-            3616:   52(float) Load 215(compare)
-            3617:175(f16vec3) Load 1433(f16dPdxy3)
-            3618:175(f16vec3) Load 1433(f16dPdxy3)
-            3619:    208(ptr) AccessChain 3512(texel) 207
-            3620:3182(ResType) ImageSparseSampleDrefExplicitLod 3614 3615 3616 Grad 3617 3618
-            3621:6(float16_t) CompositeExtract 3620 1
-                              Store 3619 3621
-            3622:     47(int) CompositeExtract 3620 0
-            3623:         284 Load 286(s2DArray)
-            3624:  167(fvec3) Load 169(c3)
-            3625:   53(fvec2) Load 1409(dPdxy2)
-            3626:   53(fvec2) Load 1409(dPdxy2)
-            3627:3146(ResType) ImageSparseSampleExplicitLod 3623 3624 Grad 3625 3626
-            3628:  7(f16vec4) CompositeExtract 3627 1
-                              Store 3512(texel) 3628
-            3629:     47(int) CompositeExtract 3627 0
-            3630:         284 Load 286(s2DArray)
-            3631:175(f16vec3) Load 177(f16c3)
-            3632:154(f16vec2) Load 1417(f16dPdxy2)
-            3633:154(f16vec2) Load 1417(f16dPdxy2)
-            3634:3146(ResType) ImageSparseSampleExplicitLod 3630 3631 Grad 3632 3633
-            3635:  7(f16vec4) CompositeExtract 3634 1
-                              Store 3512(texel) 3635
-            3636:     47(int) CompositeExtract 3634 0
-            3637:         337 Load 339(s2DArrayShadow)
-            3638:  249(fvec4) Load 251(c4)
-            3639:   53(fvec2) Load 1409(dPdxy2)
-            3640:   53(fvec2) Load 1409(dPdxy2)
-            3641:    208(ptr) AccessChain 3512(texel) 207
-            3642:   52(float) CompositeExtract 3638 3
-            3643:3182(ResType) ImageSparseSampleDrefExplicitLod 3637 3638 3642 Grad 3639 3640
-            3644:6(float16_t) CompositeExtract 3643 1
-                              Store 3641 3644
-            3645:     47(int) CompositeExtract 3643 0
-            3646:         337 Load 339(s2DArrayShadow)
-            3647:175(f16vec3) Load 177(f16c3)
-            3648:   52(float) Load 215(compare)
-            3649:154(f16vec2) Load 1417(f16dPdxy2)
-            3650:154(f16vec2) Load 1417(f16dPdxy2)
-            3651:    208(ptr) AccessChain 3512(texel) 207
-            3652:3182(ResType) ImageSparseSampleDrefExplicitLod 3646 3647 3648 Grad 3649 3650
-            3653:6(float16_t) CompositeExtract 3652 1
-                              Store 3651 3653
-            3654:     47(int) CompositeExtract 3652 0
-            3655:         299 Load 301(sCubeArray)
-            3656:  249(fvec4) Load 251(c4)
-            3657:  167(fvec3) Load 1425(dPdxy3)
-            3658:  167(fvec3) Load 1425(dPdxy3)
-            3659:3146(ResType) ImageSparseSampleExplicitLod 3655 3656 Grad 3657 3658
-            3660:  7(f16vec4) CompositeExtract 3659 1
-                              Store 3512(texel) 3660
-            3661:     47(int) CompositeExtract 3659 0
-            3662:         299 Load 301(sCubeArray)
-            3663:  7(f16vec4) Load 309(f16c4)
-            3664:175(f16vec3) Load 1433(f16dPdxy3)
-            3665:175(f16vec3) Load 1433(f16dPdxy3)
-            3666:3146(ResType) ImageSparseSampleExplicitLod 3662 3663 Grad 3664 3665
-            3667:  7(f16vec4) CompositeExtract 3666 1
-                              Store 3512(texel) 3667
-            3668:     47(int) CompositeExtract 3666 0
-            3669:  7(f16vec4) Load 3512(texel)
-                              ReturnValue 3669
+     3422(texel):     64(ptr) Variable Function
+                              Store 3422(texel) 121
+            3423:         143 Load 145(s2D)
+            3424:   53(fvec2) Load 148(c2)
+            3425:   53(fvec2) Load 1407(dPdxy2)
+            3426:3056(ResType) ImageSparseSampleExplicitLod 3423 3424 Grad 3425 3425
+            3427:  7(f16vec4) CompositeExtract 3426 1
+                              Store 3422(texel) 3427
+            3428:     47(int) CompositeExtract 3426 0
+            3429:         143 Load 145(s2D)
+            3430:154(f16vec2) Load 156(f16c2)
+            3431:154(f16vec2) Load 1414(f16dPdxy2)
+            3432:3056(ResType) ImageSparseSampleExplicitLod 3429 3430 Grad 3431 3431
+            3433:  7(f16vec4) CompositeExtract 3432 1
+                              Store 3422(texel) 3433
+            3434:     47(int) CompositeExtract 3432 0
+            3435:         163 Load 165(s3D)
+            3436:  167(fvec3) Load 169(c3)
+            3437:  167(fvec3) Load 1421(dPdxy3)
+            3438:3056(ResType) ImageSparseSampleExplicitLod 3435 3436 Grad 3437 3437
+            3439:  7(f16vec4) CompositeExtract 3438 1
+                              Store 3422(texel) 3439
+            3440:     47(int) CompositeExtract 3438 0
+            3441:         163 Load 165(s3D)
+            3442:175(f16vec3) Load 177(f16c3)
+            3443:175(f16vec3) Load 1428(f16dPdxy3)
+            3444:3056(ResType) ImageSparseSampleExplicitLod 3441 3442 Grad 3443 3443
+            3445:  7(f16vec4) CompositeExtract 3444 1
+                              Store 3422(texel) 3445
+            3446:     47(int) CompositeExtract 3444 0
+            3447:         184 Load 186(sCube)
+            3448:  167(fvec3) Load 169(c3)
+            3449:  167(fvec3) Load 1421(dPdxy3)
+            3450:3056(ResType) ImageSparseSampleExplicitLod 3447 3448 Grad 3449 3449
+            3451:  7(f16vec4) CompositeExtract 3450 1
+                              Store 3422(texel) 3451
+            3452:     47(int) CompositeExtract 3450 0
+            3453:         184 Load 186(sCube)
+            3454:175(f16vec3) Load 177(f16c3)
+            3455:175(f16vec3) Load 1428(f16dPdxy3)
+            3456:3056(ResType) ImageSparseSampleExplicitLod 3453 3454 Grad 3455 3455
+            3457:  7(f16vec4) CompositeExtract 3456 1
+                              Store 3422(texel) 3457
+            3458:     47(int) CompositeExtract 3456 0
+            3459:         357 Load 359(s2DRect)
+            3460:   53(fvec2) Load 148(c2)
+            3461:   53(fvec2) Load 1407(dPdxy2)
+            3462:3056(ResType) ImageSparseSampleExplicitLod 3459 3460 Grad 3461 3461
+            3463:  7(f16vec4) CompositeExtract 3462 1
+                              Store 3422(texel) 3463
+            3464:     47(int) CompositeExtract 3462 0
+            3465:         357 Load 359(s2DRect)
+            3466:154(f16vec2) Load 156(f16c2)
+            3467:154(f16vec2) Load 1414(f16dPdxy2)
+            3468:3056(ResType) ImageSparseSampleExplicitLod 3465 3466 Grad 3467 3467
+            3469:  7(f16vec4) CompositeExtract 3468 1
+                              Store 3422(texel) 3469
+            3470:     47(int) CompositeExtract 3468 0
+            3471:         371 Load 373(s2DRectShadow)
+            3472:  167(fvec3) Load 169(c3)
+            3473:   53(fvec2) Load 1407(dPdxy2)
+            3474:    208(ptr) AccessChain 3422(texel) 207
+            3475:   52(float) CompositeExtract 3472 2
+            3476:3092(ResType) ImageSparseSampleDrefExplicitLod 3471 3472 3475 Grad 3473 3473
+            3477:6(float16_t) CompositeExtract 3476 1
+                              Store 3474 3477
+            3478:     47(int) CompositeExtract 3476 0
+            3479:         371 Load 373(s2DRectShadow)
+            3480:154(f16vec2) Load 156(f16c2)
+            3481:   52(float) Load 215(compare)
+            3482:154(f16vec2) Load 1414(f16dPdxy2)
+            3483:    208(ptr) AccessChain 3422(texel) 207
+            3484:3092(ResType) ImageSparseSampleDrefExplicitLod 3479 3480 3481 Grad 3482 3482
+            3485:6(float16_t) CompositeExtract 3484 1
+                              Store 3483 3485
+            3486:     47(int) CompositeExtract 3484 0
+            3487:         224 Load 226(s2DShadow)
+            3488:  167(fvec3) Load 169(c3)
+            3489:   53(fvec2) Load 1407(dPdxy2)
+            3490:    208(ptr) AccessChain 3422(texel) 207
+            3491:   52(float) CompositeExtract 3488 2
+            3492:3092(ResType) ImageSparseSampleDrefExplicitLod 3487 3488 3491 Grad 3489 3489
+            3493:6(float16_t) CompositeExtract 3492 1
+                              Store 3490 3493
+            3494:     47(int) CompositeExtract 3492 0
+            3495:         224 Load 226(s2DShadow)
+            3496:154(f16vec2) Load 156(f16c2)
+            3497:   52(float) Load 215(compare)
+            3498:154(f16vec2) Load 1414(f16dPdxy2)
+            3499:    208(ptr) AccessChain 3422(texel) 207
+            3500:3092(ResType) ImageSparseSampleDrefExplicitLod 3495 3496 3497 Grad 3498 3498
+            3501:6(float16_t) CompositeExtract 3500 1
+                              Store 3499 3501
+            3502:     47(int) CompositeExtract 3500 0
+            3503:         245 Load 247(sCubeShadow)
+            3504:  249(fvec4) Load 251(c4)
+            3505:  167(fvec3) Load 1421(dPdxy3)
+            3506:    208(ptr) AccessChain 3422(texel) 207
+            3507:   52(float) CompositeExtract 3504 3
+            3508:3092(ResType) ImageSparseSampleDrefExplicitLod 3503 3504 3507 Grad 3505 3505
+            3509:6(float16_t) CompositeExtract 3508 1
+                              Store 3506 3509
+            3510:     47(int) CompositeExtract 3508 0
+            3511:         245 Load 247(sCubeShadow)
+            3512:175(f16vec3) Load 177(f16c3)
+            3513:   52(float) Load 215(compare)
+            3514:175(f16vec3) Load 1428(f16dPdxy3)
+            3515:    208(ptr) AccessChain 3422(texel) 207
+            3516:3092(ResType) ImageSparseSampleDrefExplicitLod 3511 3512 3513 Grad 3514 3514
+            3517:6(float16_t) CompositeExtract 3516 1
+                              Store 3515 3517
+            3518:     47(int) CompositeExtract 3516 0
+            3519:         284 Load 286(s2DArray)
+            3520:  167(fvec3) Load 169(c3)
+            3521:   53(fvec2) Load 1407(dPdxy2)
+            3522:3056(ResType) ImageSparseSampleExplicitLod 3519 3520 Grad 3521 3521
+            3523:  7(f16vec4) CompositeExtract 3522 1
+                              Store 3422(texel) 3523
+            3524:     47(int) CompositeExtract 3522 0
+            3525:         284 Load 286(s2DArray)
+            3526:175(f16vec3) Load 177(f16c3)
+            3527:154(f16vec2) Load 1414(f16dPdxy2)
+            3528:3056(ResType) ImageSparseSampleExplicitLod 3525 3526 Grad 3527 3527
+            3529:  7(f16vec4) CompositeExtract 3528 1
+                              Store 3422(texel) 3529
+            3530:     47(int) CompositeExtract 3528 0
+            3531:         337 Load 339(s2DArrayShadow)
+            3532:  249(fvec4) Load 251(c4)
+            3533:   53(fvec2) Load 1407(dPdxy2)
+            3534:    208(ptr) AccessChain 3422(texel) 207
+            3535:   52(float) CompositeExtract 3532 3
+            3536:3092(ResType) ImageSparseSampleDrefExplicitLod 3531 3532 3535 Grad 3533 3533
+            3537:6(float16_t) CompositeExtract 3536 1
+                              Store 3534 3537
+            3538:     47(int) CompositeExtract 3536 0
+            3539:         337 Load 339(s2DArrayShadow)
+            3540:175(f16vec3) Load 177(f16c3)
+            3541:   52(float) Load 215(compare)
+            3542:154(f16vec2) Load 1414(f16dPdxy2)
+            3543:    208(ptr) AccessChain 3422(texel) 207
+            3544:3092(ResType) ImageSparseSampleDrefExplicitLod 3539 3540 3541 Grad 3542 3542
+            3545:6(float16_t) CompositeExtract 3544 1
+                              Store 3543 3545
+            3546:     47(int) CompositeExtract 3544 0
+            3547:         299 Load 301(sCubeArray)
+            3548:  249(fvec4) Load 251(c4)
+            3549:  167(fvec3) Load 1421(dPdxy3)
+            3550:3056(ResType) ImageSparseSampleExplicitLod 3547 3548 Grad 3549 3549
+            3551:  7(f16vec4) CompositeExtract 3550 1
+                              Store 3422(texel) 3551
+            3552:     47(int) CompositeExtract 3550 0
+            3553:         299 Load 301(sCubeArray)
+            3554:  7(f16vec4) Load 309(f16c4)
+            3555:175(f16vec3) Load 1428(f16dPdxy3)
+            3556:3056(ResType) ImageSparseSampleExplicitLod 3553 3554 Grad 3555 3555
+            3557:  7(f16vec4) CompositeExtract 3556 1
+                              Store 3422(texel) 3557
+            3558:     47(int) CompositeExtract 3556 0
+            3559:  7(f16vec4) Load 3422(texel)
+                              ReturnValue 3559
                               FunctionEnd
 79(testSparseTextureGradOffset():  7(f16vec4) Function None 8
               80:             Label
-     3672(texel):     64(ptr) Variable Function
-                              Store 3672(texel) 121
-            3673:         143 Load 145(s2D)
-            3674:   53(fvec2) Load 148(c2)
-            3675:   53(fvec2) Load 1409(dPdxy2)
-            3676:   53(fvec2) Load 1409(dPdxy2)
-            3677:3146(ResType) ImageSparseSampleExplicitLod 3673 3674 Grad ConstOffset 3675 3676 722
-            3678:  7(f16vec4) CompositeExtract 3677 1
-                              Store 3672(texel) 3678
-            3679:     47(int) CompositeExtract 3677 0
-            3680:         143 Load 145(s2D)
-            3681:154(f16vec2) Load 156(f16c2)
-            3682:154(f16vec2) Load 1417(f16dPdxy2)
-            3683:154(f16vec2) Load 1417(f16dPdxy2)
-            3684:3146(ResType) ImageSparseSampleExplicitLod 3680 3681 Grad ConstOffset 3682 3683 722
-            3685:  7(f16vec4) CompositeExtract 3684 1
-                              Store 3672(texel) 3685
-            3686:     47(int) CompositeExtract 3684 0
-            3687:         163 Load 165(s3D)
-            3688:  167(fvec3) Load 169(c3)
-            3689:  167(fvec3) Load 1425(dPdxy3)
-            3690:  167(fvec3) Load 1425(dPdxy3)
-            3691:3146(ResType) ImageSparseSampleExplicitLod 3687 3688 Grad ConstOffset 3689 3690 735
-            3692:  7(f16vec4) CompositeExtract 3691 1
-                              Store 3672(texel) 3692
-            3693:     47(int) CompositeExtract 3691 0
-            3694:         163 Load 165(s3D)
-            3695:175(f16vec3) Load 177(f16c3)
-            3696:175(f16vec3) Load 1433(f16dPdxy3)
-            3697:175(f16vec3) Load 1433(f16dPdxy3)
-            3698:3146(ResType) ImageSparseSampleExplicitLod 3694 3695 Grad ConstOffset 3696 3697 735
-            3699:  7(f16vec4) CompositeExtract 3698 1
-                              Store 3672(texel) 3699
-            3700:     47(int) CompositeExtract 3698 0
-            3701:         357 Load 359(s2DRect)
-            3702:   53(fvec2) Load 148(c2)
-            3703:   53(fvec2) Load 1409(dPdxy2)
-            3704:   53(fvec2) Load 1409(dPdxy2)
-            3705:3146(ResType) ImageSparseSampleExplicitLod 3701 3702 Grad ConstOffset 3703 3704 722
-            3706:  7(f16vec4) CompositeExtract 3705 1
-                              Store 3672(texel) 3706
-            3707:     47(int) CompositeExtract 3705 0
-            3708:         357 Load 359(s2DRect)
-            3709:154(f16vec2) Load 156(f16c2)
-            3710:154(f16vec2) Load 1417(f16dPdxy2)
-            3711:154(f16vec2) Load 1417(f16dPdxy2)
-            3712:3146(ResType) ImageSparseSampleExplicitLod 3708 3709 Grad ConstOffset 3710 3711 722
-            3713:  7(f16vec4) CompositeExtract 3712 1
-                              Store 3672(texel) 3713
-            3714:     47(int) CompositeExtract 3712 0
-            3715:         371 Load 373(s2DRectShadow)
-            3716:  167(fvec3) Load 169(c3)
-            3717:   53(fvec2) Load 1409(dPdxy2)
-            3718:   53(fvec2) Load 1409(dPdxy2)
-            3719:    208(ptr) AccessChain 3672(texel) 207
-            3720:   52(float) CompositeExtract 3716 2
-            3721:3182(ResType) ImageSparseSampleDrefExplicitLod 3715 3716 3720 Grad ConstOffset 3717 3718 722
-            3722:6(float16_t) CompositeExtract 3721 1
-                              Store 3719 3722
-            3723:     47(int) CompositeExtract 3721 0
-            3724:         371 Load 373(s2DRectShadow)
-            3725:154(f16vec2) Load 156(f16c2)
-            3726:   52(float) Load 215(compare)
-            3727:154(f16vec2) Load 1417(f16dPdxy2)
-            3728:154(f16vec2) Load 1417(f16dPdxy2)
-            3729:    208(ptr) AccessChain 3672(texel) 207
-            3730:3182(ResType) ImageSparseSampleDrefExplicitLod 3724 3725 3726 Grad ConstOffset 3727 3728 722
-            3731:6(float16_t) CompositeExtract 3730 1
-                              Store 3729 3731
-            3732:     47(int) CompositeExtract 3730 0
-            3733:         224 Load 226(s2DShadow)
-            3734:  167(fvec3) Load 169(c3)
-            3735:   53(fvec2) Load 1409(dPdxy2)
-            3736:   53(fvec2) Load 1409(dPdxy2)
-            3737:    208(ptr) AccessChain 3672(texel) 207
-            3738:   52(float) CompositeExtract 3734 2
-            3739:3182(ResType) ImageSparseSampleDrefExplicitLod 3733 3734 3738 Grad ConstOffset 3735 3736 722
-            3740:6(float16_t) CompositeExtract 3739 1
-                              Store 3737 3740
-            3741:     47(int) CompositeExtract 3739 0
-            3742:         224 Load 226(s2DShadow)
-            3743:154(f16vec2) Load 156(f16c2)
-            3744:   52(float) Load 215(compare)
-            3745:154(f16vec2) Load 1417(f16dPdxy2)
-            3746:154(f16vec2) Load 1417(f16dPdxy2)
-            3747:    208(ptr) AccessChain 3672(texel) 207
-            3748:3182(ResType) ImageSparseSampleDrefExplicitLod 3742 3743 3744 Grad ConstOffset 3745 3746 722
-            3749:6(float16_t) CompositeExtract 3748 1
-                              Store 3747 3749
-            3750:     47(int) CompositeExtract 3748 0
-            3751:         284 Load 286(s2DArray)
-            3752:  167(fvec3) Load 169(c3)
-            3753:   53(fvec2) Load 1409(dPdxy2)
-            3754:   53(fvec2) Load 1409(dPdxy2)
-            3755:3146(ResType) ImageSparseSampleExplicitLod 3751 3752 Grad ConstOffset 3753 3754 722
-            3756:  7(f16vec4) CompositeExtract 3755 1
-                              Store 3672(texel) 3756
-            3757:     47(int) CompositeExtract 3755 0
-            3758:         284 Load 286(s2DArray)
-            3759:175(f16vec3) Load 177(f16c3)
-            3760:154(f16vec2) Load 1417(f16dPdxy2)
-            3761:154(f16vec2) Load 1417(f16dPdxy2)
-            3762:3146(ResType) ImageSparseSampleExplicitLod 3758 3759 Grad ConstOffset 3760 3761 722
-            3763:  7(f16vec4) CompositeExtract 3762 1
-                              Store 3672(texel) 3763
-            3764:     47(int) CompositeExtract 3762 0
-            3765:         337 Load 339(s2DArrayShadow)
-            3766:  249(fvec4) Load 251(c4)
-            3767:   53(fvec2) Load 1409(dPdxy2)
-            3768:   53(fvec2) Load 1409(dPdxy2)
-            3769:    208(ptr) AccessChain 3672(texel) 207
-            3770:   52(float) CompositeExtract 3766 3
-            3771:3182(ResType) ImageSparseSampleDrefExplicitLod 3765 3766 3770 Grad ConstOffset 3767 3768 722
-            3772:6(float16_t) CompositeExtract 3771 1
-                              Store 3769 3772
-            3773:     47(int) CompositeExtract 3771 0
-            3774:         337 Load 339(s2DArrayShadow)
-            3775:175(f16vec3) Load 177(f16c3)
-            3776:   52(float) Load 215(compare)
-            3777:154(f16vec2) Load 1417(f16dPdxy2)
-            3778:154(f16vec2) Load 1417(f16dPdxy2)
-            3779:    208(ptr) AccessChain 3672(texel) 207
-            3780:3182(ResType) ImageSparseSampleDrefExplicitLod 3774 3775 3776 Grad ConstOffset 3777 3778 722
-            3781:6(float16_t) CompositeExtract 3780 1
-                              Store 3779 3781
-            3782:     47(int) CompositeExtract 3780 0
-            3783:  7(f16vec4) Load 3672(texel)
-                              ReturnValue 3783
+     3562(texel):     64(ptr) Variable Function
+                              Store 3562(texel) 121
+            3563:         143 Load 145(s2D)
+            3564:   53(fvec2) Load 148(c2)
+            3565:   53(fvec2) Load 1407(dPdxy2)
+            3566:3056(ResType) ImageSparseSampleExplicitLod 3563 3564 Grad ConstOffset 3565 3565 722
+            3567:  7(f16vec4) CompositeExtract 3566 1
+                              Store 3562(texel) 3567
+            3568:     47(int) CompositeExtract 3566 0
+            3569:         143 Load 145(s2D)
+            3570:154(f16vec2) Load 156(f16c2)
+            3571:154(f16vec2) Load 1414(f16dPdxy2)
+            3572:3056(ResType) ImageSparseSampleExplicitLod 3569 3570 Grad ConstOffset 3571 3571 722
+            3573:  7(f16vec4) CompositeExtract 3572 1
+                              Store 3562(texel) 3573
+            3574:     47(int) CompositeExtract 3572 0
+            3575:         163 Load 165(s3D)
+            3576:  167(fvec3) Load 169(c3)
+            3577:  167(fvec3) Load 1421(dPdxy3)
+            3578:3056(ResType) ImageSparseSampleExplicitLod 3575 3576 Grad ConstOffset 3577 3577 735
+            3579:  7(f16vec4) CompositeExtract 3578 1
+                              Store 3562(texel) 3579
+            3580:     47(int) CompositeExtract 3578 0
+            3581:         163 Load 165(s3D)
+            3582:175(f16vec3) Load 177(f16c3)
+            3583:175(f16vec3) Load 1428(f16dPdxy3)
+            3584:3056(ResType) ImageSparseSampleExplicitLod 3581 3582 Grad ConstOffset 3583 3583 735
+            3585:  7(f16vec4) CompositeExtract 3584 1
+                              Store 3562(texel) 3585
+            3586:     47(int) CompositeExtract 3584 0
+            3587:         357 Load 359(s2DRect)
+            3588:   53(fvec2) Load 148(c2)
+            3589:   53(fvec2) Load 1407(dPdxy2)
+            3590:3056(ResType) ImageSparseSampleExplicitLod 3587 3588 Grad ConstOffset 3589 3589 722
+            3591:  7(f16vec4) CompositeExtract 3590 1
+                              Store 3562(texel) 3591
+            3592:     47(int) CompositeExtract 3590 0
+            3593:         357 Load 359(s2DRect)
+            3594:154(f16vec2) Load 156(f16c2)
+            3595:154(f16vec2) Load 1414(f16dPdxy2)
+            3596:3056(ResType) ImageSparseSampleExplicitLod 3593 3594 Grad ConstOffset 3595 3595 722
+            3597:  7(f16vec4) CompositeExtract 3596 1
+                              Store 3562(texel) 3597
+            3598:     47(int) CompositeExtract 3596 0
+            3599:         371 Load 373(s2DRectShadow)
+            3600:  167(fvec3) Load 169(c3)
+            3601:   53(fvec2) Load 1407(dPdxy2)
+            3602:    208(ptr) AccessChain 3562(texel) 207
+            3603:   52(float) CompositeExtract 3600 2
+            3604:3092(ResType) ImageSparseSampleDrefExplicitLod 3599 3600 3603 Grad ConstOffset 3601 3601 722
+            3605:6(float16_t) CompositeExtract 3604 1
+                              Store 3602 3605
+            3606:     47(int) CompositeExtract 3604 0
+            3607:         371 Load 373(s2DRectShadow)
+            3608:154(f16vec2) Load 156(f16c2)
+            3609:   52(float) Load 215(compare)
+            3610:154(f16vec2) Load 1414(f16dPdxy2)
+            3611:    208(ptr) AccessChain 3562(texel) 207
+            3612:3092(ResType) ImageSparseSampleDrefExplicitLod 3607 3608 3609 Grad ConstOffset 3610 3610 722
+            3613:6(float16_t) CompositeExtract 3612 1
+                              Store 3611 3613
+            3614:     47(int) CompositeExtract 3612 0
+            3615:         224 Load 226(s2DShadow)
+            3616:  167(fvec3) Load 169(c3)
+            3617:   53(fvec2) Load 1407(dPdxy2)
+            3618:    208(ptr) AccessChain 3562(texel) 207
+            3619:   52(float) CompositeExtract 3616 2
+            3620:3092(ResType) ImageSparseSampleDrefExplicitLod 3615 3616 3619 Grad ConstOffset 3617 3617 722
+            3621:6(float16_t) CompositeExtract 3620 1
+                              Store 3618 3621
+            3622:     47(int) CompositeExtract 3620 0
+            3623:         224 Load 226(s2DShadow)
+            3624:154(f16vec2) Load 156(f16c2)
+            3625:   52(float) Load 215(compare)
+            3626:154(f16vec2) Load 1414(f16dPdxy2)
+            3627:    208(ptr) AccessChain 3562(texel) 207
+            3628:3092(ResType) ImageSparseSampleDrefExplicitLod 3623 3624 3625 Grad ConstOffset 3626 3626 722
+            3629:6(float16_t) CompositeExtract 3628 1
+                              Store 3627 3629
+            3630:     47(int) CompositeExtract 3628 0
+            3631:         284 Load 286(s2DArray)
+            3632:  167(fvec3) Load 169(c3)
+            3633:   53(fvec2) Load 1407(dPdxy2)
+            3634:3056(ResType) ImageSparseSampleExplicitLod 3631 3632 Grad ConstOffset 3633 3633 722
+            3635:  7(f16vec4) CompositeExtract 3634 1
+                              Store 3562(texel) 3635
+            3636:     47(int) CompositeExtract 3634 0
+            3637:         284 Load 286(s2DArray)
+            3638:175(f16vec3) Load 177(f16c3)
+            3639:154(f16vec2) Load 1414(f16dPdxy2)
+            3640:3056(ResType) ImageSparseSampleExplicitLod 3637 3638 Grad ConstOffset 3639 3639 722
+            3641:  7(f16vec4) CompositeExtract 3640 1
+                              Store 3562(texel) 3641
+            3642:     47(int) CompositeExtract 3640 0
+            3643:         337 Load 339(s2DArrayShadow)
+            3644:  249(fvec4) Load 251(c4)
+            3645:   53(fvec2) Load 1407(dPdxy2)
+            3646:    208(ptr) AccessChain 3562(texel) 207
+            3647:   52(float) CompositeExtract 3644 3
+            3648:3092(ResType) ImageSparseSampleDrefExplicitLod 3643 3644 3647 Grad ConstOffset 3645 3645 722
+            3649:6(float16_t) CompositeExtract 3648 1
+                              Store 3646 3649
+            3650:     47(int) CompositeExtract 3648 0
+            3651:         337 Load 339(s2DArrayShadow)
+            3652:175(f16vec3) Load 177(f16c3)
+            3653:   52(float) Load 215(compare)
+            3654:154(f16vec2) Load 1414(f16dPdxy2)
+            3655:    208(ptr) AccessChain 3562(texel) 207
+            3656:3092(ResType) ImageSparseSampleDrefExplicitLod 3651 3652 3653 Grad ConstOffset 3654 3654 722
+            3657:6(float16_t) CompositeExtract 3656 1
+                              Store 3655 3657
+            3658:     47(int) CompositeExtract 3656 0
+            3659:  7(f16vec4) Load 3562(texel)
+                              ReturnValue 3659
                               FunctionEnd
 81(testSparseTexelFetch():  7(f16vec4) Function None 8
               82:             Label
-     3786(texel):     64(ptr) Variable Function
-                              Store 3786(texel) 121
-            3787:         143 Load 145(s2D)
-            3788:   53(fvec2) Load 148(c2)
-            3789:  721(ivec2) ConvertFToS 3788
-            3790:   52(float) Load 565(lod)
-            3791:     47(int) ConvertFToS 3790
-            3792:         142 Image 3787
-            3793:3146(ResType) ImageSparseFetch 3792 3789 Lod 3791
-            3794:  7(f16vec4) CompositeExtract 3793 1
-                              Store 3786(texel) 3794
-            3795:     47(int) CompositeExtract 3793 0
-            3796:         163 Load 165(s3D)
-            3797:  167(fvec3) Load 169(c3)
-            3798:  734(ivec3) ConvertFToS 3797
-            3799:   52(float) Load 565(lod)
-            3800:     47(int) ConvertFToS 3799
-            3801:         162 Image 3796
-            3802:3146(ResType) ImageSparseFetch 3801 3798 Lod 3800
-            3803:  7(f16vec4) CompositeExtract 3802 1
-                              Store 3786(texel) 3803
-            3804:     47(int) CompositeExtract 3802 0
-            3805:         357 Load 359(s2DRect)
-            3806:   53(fvec2) Load 148(c2)
-            3807:  721(ivec2) ConvertFToS 3806
-            3808:         356 Image 3805
-            3809:3146(ResType) ImageSparseFetch 3808 3807
-            3810:  7(f16vec4) CompositeExtract 3809 1
-                              Store 3786(texel) 3810
-            3811:     47(int) CompositeExtract 3809 0
-            3812:         284 Load 286(s2DArray)
-            3813:  167(fvec3) Load 169(c3)
-            3814:  734(ivec3) ConvertFToS 3813
-            3815:   52(float) Load 565(lod)
-            3816:     47(int) ConvertFToS 3815
-            3817:         283 Image 3812
-            3818:3146(ResType) ImageSparseFetch 3817 3814 Lod 3816
-            3819:  7(f16vec4) CompositeExtract 3818 1
-                              Store 3786(texel) 3819
-            3820:     47(int) CompositeExtract 3818 0
-            3821:        1309 Load 1311(s2DMS)
-            3822:   53(fvec2) Load 148(c2)
-            3823:  721(ivec2) ConvertFToS 3822
-            3824:        1308 Image 3821
-            3825:3146(ResType) ImageSparseFetch 3824 3823 Sample 709
-            3826:  7(f16vec4) CompositeExtract 3825 1
-                              Store 3786(texel) 3826
-            3827:     47(int) CompositeExtract 3825 0
-            3828:        1320 Load 1322(s2DMSArray)
-            3829:  167(fvec3) Load 169(c3)
-            3830:  734(ivec3) ConvertFToS 3829
-            3831:        1319 Image 3828
-            3832:3146(ResType) ImageSparseFetch 3831 3830 Sample 1326
-            3833:  7(f16vec4) CompositeExtract 3832 1
-                              Store 3786(texel) 3833
-            3834:     47(int) CompositeExtract 3832 0
-            3835:  7(f16vec4) Load 3786(texel)
-                              ReturnValue 3835
+     3662(texel):     64(ptr) Variable Function
+                              Store 3662(texel) 121
+            3663:         143 Load 145(s2D)
+            3664:   53(fvec2) Load 148(c2)
+            3665:  721(ivec2) ConvertFToS 3664
+            3666:   52(float) Load 565(lod)
+            3667:     47(int) ConvertFToS 3666
+            3668:         142 Image 3663
+            3669:3056(ResType) ImageSparseFetch 3668 3665 Lod 3667
+            3670:  7(f16vec4) CompositeExtract 3669 1
+                              Store 3662(texel) 3670
+            3671:     47(int) CompositeExtract 3669 0
+            3672:         163 Load 165(s3D)
+            3673:  167(fvec3) Load 169(c3)
+            3674:  734(ivec3) ConvertFToS 3673
+            3675:   52(float) Load 565(lod)
+            3676:     47(int) ConvertFToS 3675
+            3677:         162 Image 3672
+            3678:3056(ResType) ImageSparseFetch 3677 3674 Lod 3676
+            3679:  7(f16vec4) CompositeExtract 3678 1
+                              Store 3662(texel) 3679
+            3680:     47(int) CompositeExtract 3678 0
+            3681:         357 Load 359(s2DRect)
+            3682:   53(fvec2) Load 148(c2)
+            3683:  721(ivec2) ConvertFToS 3682
+            3684:         356 Image 3681
+            3685:3056(ResType) ImageSparseFetch 3684 3683
+            3686:  7(f16vec4) CompositeExtract 3685 1
+                              Store 3662(texel) 3686
+            3687:     47(int) CompositeExtract 3685 0
+            3688:         284 Load 286(s2DArray)
+            3689:  167(fvec3) Load 169(c3)
+            3690:  734(ivec3) ConvertFToS 3689
+            3691:   52(float) Load 565(lod)
+            3692:     47(int) ConvertFToS 3691
+            3693:         283 Image 3688
+            3694:3056(ResType) ImageSparseFetch 3693 3690 Lod 3692
+            3695:  7(f16vec4) CompositeExtract 3694 1
+                              Store 3662(texel) 3695
+            3696:     47(int) CompositeExtract 3694 0
+            3697:        1309 Load 1311(s2DMS)
+            3698:   53(fvec2) Load 148(c2)
+            3699:  721(ivec2) ConvertFToS 3698
+            3700:        1308 Image 3697
+            3701:3056(ResType) ImageSparseFetch 3700 3699 Sample 709
+            3702:  7(f16vec4) CompositeExtract 3701 1
+                              Store 3662(texel) 3702
+            3703:     47(int) CompositeExtract 3701 0
+            3704:        1320 Load 1322(s2DMSArray)
+            3705:  167(fvec3) Load 169(c3)
+            3706:  734(ivec3) ConvertFToS 3705
+            3707:        1319 Image 3704
+            3708:3056(ResType) ImageSparseFetch 3707 3706 Sample 1326
+            3709:  7(f16vec4) CompositeExtract 3708 1
+                              Store 3662(texel) 3709
+            3710:     47(int) CompositeExtract 3708 0
+            3711:  7(f16vec4) Load 3662(texel)
+                              ReturnValue 3711
                               FunctionEnd
 83(testSparseTexelFetchOffset():  7(f16vec4) Function None 8
               84:             Label
-     3838(texel):     64(ptr) Variable Function
-                              Store 3838(texel) 121
-            3839:         143 Load 145(s2D)
-            3840:   53(fvec2) Load 148(c2)
-            3841:  721(ivec2) ConvertFToS 3840
-            3842:   52(float) Load 565(lod)
-            3843:     47(int) ConvertFToS 3842
-            3844:         142 Image 3839
-            3845:3146(ResType) ImageSparseFetch 3844 3841 Lod ConstOffset 3843 722
-            3846:  7(f16vec4) CompositeExtract 3845 1
-                              Store 3838(texel) 3846
-            3847:     47(int) CompositeExtract 3845 0
-            3848:         163 Load 165(s3D)
-            3849:  167(fvec3) Load 169(c3)
-            3850:  734(ivec3) ConvertFToS 3849
-            3851:   52(float) Load 565(lod)
-            3852:     47(int) ConvertFToS 3851
-            3853:         162 Image 3848
-            3854:3146(ResType) ImageSparseFetch 3853 3850 Lod ConstOffset 3852 735
-            3855:  7(f16vec4) CompositeExtract 3854 1
-                              Store 3838(texel) 3855
-            3856:     47(int) CompositeExtract 3854 0
-            3857:         357 Load 359(s2DRect)
-            3858:   53(fvec2) Load 148(c2)
-            3859:  721(ivec2) ConvertFToS 3858
-            3860:         356 Image 3857
-            3861:3146(ResType) ImageSparseFetch 3860 3859 ConstOffset 722
-            3862:  7(f16vec4) CompositeExtract 3861 1
-                              Store 3838(texel) 3862
-            3863:     47(int) CompositeExtract 3861 0
-            3864:         284 Load 286(s2DArray)
-            3865:  167(fvec3) Load 169(c3)
-            3866:  734(ivec3) ConvertFToS 3865
-            3867:   52(float) Load 565(lod)
-            3868:     47(int) ConvertFToS 3867
-            3869:         283 Image 3864
-            3870:3146(ResType) ImageSparseFetch 3869 3866 Lod ConstOffset 3868 722
-            3871:  7(f16vec4) CompositeExtract 3870 1
-                              Store 3838(texel) 3871
-            3872:     47(int) CompositeExtract 3870 0
-            3873:  7(f16vec4) Load 3838(texel)
-                              ReturnValue 3873
+     3714(texel):     64(ptr) Variable Function
+                              Store 3714(texel) 121
+            3715:         143 Load 145(s2D)
+            3716:   53(fvec2) Load 148(c2)
+            3717:  721(ivec2) ConvertFToS 3716
+            3718:   52(float) Load 565(lod)
+            3719:     47(int) ConvertFToS 3718
+            3720:         142 Image 3715
+            3721:3056(ResType) ImageSparseFetch 3720 3717 Lod ConstOffset 3719 722
+            3722:  7(f16vec4) CompositeExtract 3721 1
+                              Store 3714(texel) 3722
+            3723:     47(int) CompositeExtract 3721 0
+            3724:         163 Load 165(s3D)
+            3725:  167(fvec3) Load 169(c3)
+            3726:  734(ivec3) ConvertFToS 3725
+            3727:   52(float) Load 565(lod)
+            3728:     47(int) ConvertFToS 3727
+            3729:         162 Image 3724
+            3730:3056(ResType) ImageSparseFetch 3729 3726 Lod ConstOffset 3728 735
+            3731:  7(f16vec4) CompositeExtract 3730 1
+                              Store 3714(texel) 3731
+            3732:     47(int) CompositeExtract 3730 0
+            3733:         357 Load 359(s2DRect)
+            3734:   53(fvec2) Load 148(c2)
+            3735:  721(ivec2) ConvertFToS 3734
+            3736:         356 Image 3733
+            3737:3056(ResType) ImageSparseFetch 3736 3735 ConstOffset 722
+            3738:  7(f16vec4) CompositeExtract 3737 1
+                              Store 3714(texel) 3738
+            3739:     47(int) CompositeExtract 3737 0
+            3740:         284 Load 286(s2DArray)
+            3741:  167(fvec3) Load 169(c3)
+            3742:  734(ivec3) ConvertFToS 3741
+            3743:   52(float) Load 565(lod)
+            3744:     47(int) ConvertFToS 3743
+            3745:         283 Image 3740
+            3746:3056(ResType) ImageSparseFetch 3745 3742 Lod ConstOffset 3744 722
+            3747:  7(f16vec4) CompositeExtract 3746 1
+                              Store 3714(texel) 3747
+            3748:     47(int) CompositeExtract 3746 0
+            3749:  7(f16vec4) Load 3714(texel)
+                              ReturnValue 3749
                               FunctionEnd
 85(testSparseTextureGather():  7(f16vec4) Function None 8
               86:             Label
-     3876(texel):     64(ptr) Variable Function
-                              Store 3876(texel) 121
-            3877:         143 Load 145(s2D)
-            3878:   53(fvec2) Load 148(c2)
-            3879:3146(ResType) ImageSparseGather 3877 3878 2187
-            3880:  7(f16vec4) CompositeExtract 3879 1
-                              Store 3876(texel) 3880
-            3881:     47(int) CompositeExtract 3879 0
-            3882:         143 Load 145(s2D)
-            3883:154(f16vec2) Load 156(f16c2)
-            3884:6(float16_t) Load 137(f16bias)
-            3885:3146(ResType) ImageSparseGather 3882 3883 2187 Bias 3884
-            3886:  7(f16vec4) CompositeExtract 3885 1
-                              Store 3876(texel) 3886
-            3887:     47(int) CompositeExtract 3885 0
-            3888:         284 Load 286(s2DArray)
-            3889:  167(fvec3) Load 169(c3)
-            3890:3146(ResType) ImageSparseGather 3888 3889 2187
-            3891:  7(f16vec4) CompositeExtract 3890 1
-                              Store 3876(texel) 3891
-            3892:     47(int) CompositeExtract 3890 0
-            3893:         284 Load 286(s2DArray)
-            3894:175(f16vec3) Load 177(f16c3)
-            3895:6(float16_t) Load 137(f16bias)
-            3896:3146(ResType) ImageSparseGather 3893 3894 2187 Bias 3895
-            3897:  7(f16vec4) CompositeExtract 3896 1
-                              Store 3876(texel) 3897
-            3898:     47(int) CompositeExtract 3896 0
-            3899:         184 Load 186(sCube)
-            3900:  167(fvec3) Load 169(c3)
-            3901:3146(ResType) ImageSparseGather 3899 3900 2187
-            3902:  7(f16vec4) CompositeExtract 3901 1
-                              Store 3876(texel) 3902
-            3903:     47(int) CompositeExtract 3901 0
-            3904:         184 Load 186(sCube)
-            3905:175(f16vec3) Load 177(f16c3)
-            3906:6(float16_t) Load 137(f16bias)
-            3907:3146(ResType) ImageSparseGather 3904 3905 2187 Bias 3906
-            3908:  7(f16vec4) CompositeExtract 3907 1
-                              Store 3876(texel) 3908
-            3909:     47(int) CompositeExtract 3907 0
-            3910:         299 Load 301(sCubeArray)
-            3911:  249(fvec4) Load 251(c4)
-            3912:3146(ResType) ImageSparseGather 3910 3911 2187
-            3913:  7(f16vec4) CompositeExtract 3912 1
-                              Store 3876(texel) 3913
-            3914:     47(int) CompositeExtract 3912 0
-            3915:         299 Load 301(sCubeArray)
-            3916:  7(f16vec4) Load 309(f16c4)
-            3917:6(float16_t) Load 137(f16bias)
-            3918:3146(ResType) ImageSparseGather 3915 3916 2187 Bias 3917
-            3919:  7(f16vec4) CompositeExtract 3918 1
-                              Store 3876(texel) 3919
-            3920:     47(int) CompositeExtract 3918 0
-            3921:         357 Load 359(s2DRect)
-            3922:   53(fvec2) Load 148(c2)
-            3923:3146(ResType) ImageSparseGather 3921 3922 2187
-            3924:  7(f16vec4) CompositeExtract 3923 1
-                              Store 3876(texel) 3924
-            3925:     47(int) CompositeExtract 3923 0
-            3926:         357 Load 359(s2DRect)
-            3927:154(f16vec2) Load 156(f16c2)
-            3928:3146(ResType) ImageSparseGather 3926 3927 2187
-            3929:  7(f16vec4) CompositeExtract 3928 1
-                              Store 3876(texel) 3929
-            3930:     47(int) CompositeExtract 3928 0
-            3931:         224 Load 226(s2DShadow)
-            3932:   53(fvec2) Load 148(c2)
-            3933:   52(float) Load 215(compare)
-            3934:3146(ResType) ImageSparseDrefGather 3931 3932 3933
-            3935:  7(f16vec4) CompositeExtract 3934 1
-                              Store 3876(texel) 3935
-            3936:     47(int) CompositeExtract 3934 0
-            3937:         224 Load 226(s2DShadow)
-            3938:154(f16vec2) Load 156(f16c2)
-            3939:   52(float) Load 215(compare)
-            3940:3146(ResType) ImageSparseDrefGather 3937 3938 3939
-            3941:  7(f16vec4) CompositeExtract 3940 1
-                              Store 3876(texel) 3941
-            3942:     47(int) CompositeExtract 3940 0
-            3943:         337 Load 339(s2DArrayShadow)
-            3944:  167(fvec3) Load 169(c3)
-            3945:   52(float) Load 215(compare)
-            3946:3146(ResType) ImageSparseDrefGather 3943 3944 3945
-            3947:  7(f16vec4) CompositeExtract 3946 1
-                              Store 3876(texel) 3947
-            3948:     47(int) CompositeExtract 3946 0
-            3949:         337 Load 339(s2DArrayShadow)
-            3950:175(f16vec3) Load 177(f16c3)
-            3951:   52(float) Load 215(compare)
-            3952:3146(ResType) ImageSparseDrefGather 3949 3950 3951
-            3953:  7(f16vec4) CompositeExtract 3952 1
-                              Store 3876(texel) 3953
-            3954:     47(int) CompositeExtract 3952 0
-            3955:         245 Load 247(sCubeShadow)
-            3956:  167(fvec3) Load 169(c3)
-            3957:   52(float) Load 215(compare)
-            3958:3146(ResType) ImageSparseDrefGather 3955 3956 3957
-            3959:  7(f16vec4) CompositeExtract 3958 1
-                              Store 3876(texel) 3959
-            3960:     47(int) CompositeExtract 3958 0
-            3961:         245 Load 247(sCubeShadow)
-            3962:175(f16vec3) Load 177(f16c3)
-            3963:   52(float) Load 215(compare)
-            3964:3146(ResType) ImageSparseDrefGather 3961 3962 3963
-            3965:  7(f16vec4) CompositeExtract 3964 1
-                              Store 3876(texel) 3965
-            3966:     47(int) CompositeExtract 3964 0
-            3967:         391 Load 393(sCubeArrayShadow)
-            3968:  249(fvec4) Load 251(c4)
-            3969:   52(float) Load 215(compare)
-            3970:3146(ResType) ImageSparseDrefGather 3967 3968 3969
-            3971:  7(f16vec4) CompositeExtract 3970 1
-                              Store 3876(texel) 3971
-            3972:     47(int) CompositeExtract 3970 0
-            3973:         391 Load 393(sCubeArrayShadow)
-            3974:  7(f16vec4) Load 309(f16c4)
-            3975:   52(float) Load 215(compare)
-            3976:3146(ResType) ImageSparseDrefGather 3973 3974 3975
-            3977:  7(f16vec4) CompositeExtract 3976 1
-                              Store 3876(texel) 3977
-            3978:     47(int) CompositeExtract 3976 0
-            3979:         371 Load 373(s2DRectShadow)
-            3980:   53(fvec2) Load 148(c2)
-            3981:   52(float) Load 215(compare)
-            3982:3146(ResType) ImageSparseDrefGather 3979 3980 3981
-            3983:  7(f16vec4) CompositeExtract 3982 1
-                              Store 3876(texel) 3983
-            3984:     47(int) CompositeExtract 3982 0
-            3985:         371 Load 373(s2DRectShadow)
-            3986:154(f16vec2) Load 156(f16c2)
-            3987:   52(float) Load 215(compare)
-            3988:3146(ResType) ImageSparseDrefGather 3985 3986 3987
-            3989:  7(f16vec4) CompositeExtract 3988 1
-                              Store 3876(texel) 3989
-            3990:     47(int) CompositeExtract 3988 0
-            3991:  7(f16vec4) Load 3876(texel)
-                              ReturnValue 3991
+     3752(texel):     64(ptr) Variable Function
+                              Store 3752(texel) 121
+            3753:         143 Load 145(s2D)
+            3754:   53(fvec2) Load 148(c2)
+            3755:3056(ResType) ImageSparseGather 3753 3754 2097
+            3756:  7(f16vec4) CompositeExtract 3755 1
+                              Store 3752(texel) 3756
+            3757:     47(int) CompositeExtract 3755 0
+            3758:         143 Load 145(s2D)
+            3759:154(f16vec2) Load 156(f16c2)
+            3760:6(float16_t) Load 137(f16bias)
+            3761:3056(ResType) ImageSparseGather 3758 3759 2097 Bias 3760
+            3762:  7(f16vec4) CompositeExtract 3761 1
+                              Store 3752(texel) 3762
+            3763:     47(int) CompositeExtract 3761 0
+            3764:         284 Load 286(s2DArray)
+            3765:  167(fvec3) Load 169(c3)
+            3766:3056(ResType) ImageSparseGather 3764 3765 2097
+            3767:  7(f16vec4) CompositeExtract 3766 1
+                              Store 3752(texel) 3767
+            3768:     47(int) CompositeExtract 3766 0
+            3769:         284 Load 286(s2DArray)
+            3770:175(f16vec3) Load 177(f16c3)
+            3771:6(float16_t) Load 137(f16bias)
+            3772:3056(ResType) ImageSparseGather 3769 3770 2097 Bias 3771
+            3773:  7(f16vec4) CompositeExtract 3772 1
+                              Store 3752(texel) 3773
+            3774:     47(int) CompositeExtract 3772 0
+            3775:         184 Load 186(sCube)
+            3776:  167(fvec3) Load 169(c3)
+            3777:3056(ResType) ImageSparseGather 3775 3776 2097
+            3778:  7(f16vec4) CompositeExtract 3777 1
+                              Store 3752(texel) 3778
+            3779:     47(int) CompositeExtract 3777 0
+            3780:         184 Load 186(sCube)
+            3781:175(f16vec3) Load 177(f16c3)
+            3782:6(float16_t) Load 137(f16bias)
+            3783:3056(ResType) ImageSparseGather 3780 3781 2097 Bias 3782
+            3784:  7(f16vec4) CompositeExtract 3783 1
+                              Store 3752(texel) 3784
+            3785:     47(int) CompositeExtract 3783 0
+            3786:         299 Load 301(sCubeArray)
+            3787:  249(fvec4) Load 251(c4)
+            3788:3056(ResType) ImageSparseGather 3786 3787 2097
+            3789:  7(f16vec4) CompositeExtract 3788 1
+                              Store 3752(texel) 3789
+            3790:     47(int) CompositeExtract 3788 0
+            3791:         299 Load 301(sCubeArray)
+            3792:  7(f16vec4) Load 309(f16c4)
+            3793:6(float16_t) Load 137(f16bias)
+            3794:3056(ResType) ImageSparseGather 3791 3792 2097 Bias 3793
+            3795:  7(f16vec4) CompositeExtract 3794 1
+                              Store 3752(texel) 3795
+            3796:     47(int) CompositeExtract 3794 0
+            3797:         357 Load 359(s2DRect)
+            3798:   53(fvec2) Load 148(c2)
+            3799:3056(ResType) ImageSparseGather 3797 3798 2097
+            3800:  7(f16vec4) CompositeExtract 3799 1
+                              Store 3752(texel) 3800
+            3801:     47(int) CompositeExtract 3799 0
+            3802:         357 Load 359(s2DRect)
+            3803:154(f16vec2) Load 156(f16c2)
+            3804:3056(ResType) ImageSparseGather 3802 3803 2097
+            3805:  7(f16vec4) CompositeExtract 3804 1
+                              Store 3752(texel) 3805
+            3806:     47(int) CompositeExtract 3804 0
+            3807:         224 Load 226(s2DShadow)
+            3808:   53(fvec2) Load 148(c2)
+            3809:   52(float) Load 215(compare)
+            3810:3056(ResType) ImageSparseDrefGather 3807 3808 3809
+            3811:  7(f16vec4) CompositeExtract 3810 1
+                              Store 3752(texel) 3811
+            3812:     47(int) CompositeExtract 3810 0
+            3813:         224 Load 226(s2DShadow)
+            3814:154(f16vec2) Load 156(f16c2)
+            3815:   52(float) Load 215(compare)
+            3816:3056(ResType) ImageSparseDrefGather 3813 3814 3815
+            3817:  7(f16vec4) CompositeExtract 3816 1
+                              Store 3752(texel) 3817
+            3818:     47(int) CompositeExtract 3816 0
+            3819:         337 Load 339(s2DArrayShadow)
+            3820:  167(fvec3) Load 169(c3)
+            3821:   52(float) Load 215(compare)
+            3822:3056(ResType) ImageSparseDrefGather 3819 3820 3821
+            3823:  7(f16vec4) CompositeExtract 3822 1
+                              Store 3752(texel) 3823
+            3824:     47(int) CompositeExtract 3822 0
+            3825:         337 Load 339(s2DArrayShadow)
+            3826:175(f16vec3) Load 177(f16c3)
+            3827:   52(float) Load 215(compare)
+            3828:3056(ResType) ImageSparseDrefGather 3825 3826 3827
+            3829:  7(f16vec4) CompositeExtract 3828 1
+                              Store 3752(texel) 3829
+            3830:     47(int) CompositeExtract 3828 0
+            3831:         245 Load 247(sCubeShadow)
+            3832:  167(fvec3) Load 169(c3)
+            3833:   52(float) Load 215(compare)
+            3834:3056(ResType) ImageSparseDrefGather 3831 3832 3833
+            3835:  7(f16vec4) CompositeExtract 3834 1
+                              Store 3752(texel) 3835
+            3836:     47(int) CompositeExtract 3834 0
+            3837:         245 Load 247(sCubeShadow)
+            3838:175(f16vec3) Load 177(f16c3)
+            3839:   52(float) Load 215(compare)
+            3840:3056(ResType) ImageSparseDrefGather 3837 3838 3839
+            3841:  7(f16vec4) CompositeExtract 3840 1
+                              Store 3752(texel) 3841
+            3842:     47(int) CompositeExtract 3840 0
+            3843:         391 Load 393(sCubeArrayShadow)
+            3844:  249(fvec4) Load 251(c4)
+            3845:   52(float) Load 215(compare)
+            3846:3056(ResType) ImageSparseDrefGather 3843 3844 3845
+            3847:  7(f16vec4) CompositeExtract 3846 1
+                              Store 3752(texel) 3847
+            3848:     47(int) CompositeExtract 3846 0
+            3849:         391 Load 393(sCubeArrayShadow)
+            3850:  7(f16vec4) Load 309(f16c4)
+            3851:   52(float) Load 215(compare)
+            3852:3056(ResType) ImageSparseDrefGather 3849 3850 3851
+            3853:  7(f16vec4) CompositeExtract 3852 1
+                              Store 3752(texel) 3853
+            3854:     47(int) CompositeExtract 3852 0
+            3855:         371 Load 373(s2DRectShadow)
+            3856:   53(fvec2) Load 148(c2)
+            3857:   52(float) Load 215(compare)
+            3858:3056(ResType) ImageSparseDrefGather 3855 3856 3857
+            3859:  7(f16vec4) CompositeExtract 3858 1
+                              Store 3752(texel) 3859
+            3860:     47(int) CompositeExtract 3858 0
+            3861:         371 Load 373(s2DRectShadow)
+            3862:154(f16vec2) Load 156(f16c2)
+            3863:   52(float) Load 215(compare)
+            3864:3056(ResType) ImageSparseDrefGather 3861 3862 3863
+            3865:  7(f16vec4) CompositeExtract 3864 1
+                              Store 3752(texel) 3865
+            3866:     47(int) CompositeExtract 3864 0
+            3867:  7(f16vec4) Load 3752(texel)
+                              ReturnValue 3867
                               FunctionEnd
 87(testSparseTextureGatherOffset():  7(f16vec4) Function None 8
               88:             Label
-     3994(texel):     64(ptr) Variable Function
-                              Store 3994(texel) 121
-            3995:         143 Load 145(s2D)
-            3996:   53(fvec2) Load 148(c2)
-            3997:3146(ResType) ImageSparseGather 3995 3996 2187 ConstOffset 722
-            3998:  7(f16vec4) CompositeExtract 3997 1
-                              Store 3994(texel) 3998
-            3999:     47(int) CompositeExtract 3997 0
-            4000:         143 Load 145(s2D)
-            4001:154(f16vec2) Load 156(f16c2)
-            4002:6(float16_t) Load 137(f16bias)
-            4003:3146(ResType) ImageSparseGather 4000 4001 2187 Bias ConstOffset 4002 722
-            4004:  7(f16vec4) CompositeExtract 4003 1
-                              Store 3994(texel) 4004
-            4005:     47(int) CompositeExtract 4003 0
-            4006:         284 Load 286(s2DArray)
-            4007:  167(fvec3) Load 169(c3)
-            4008:3146(ResType) ImageSparseGather 4006 4007 2187 ConstOffset 722
-            4009:  7(f16vec4) CompositeExtract 4008 1
-                              Store 3994(texel) 4009
-            4010:     47(int) CompositeExtract 4008 0
-            4011:         284 Load 286(s2DArray)
-            4012:175(f16vec3) Load 177(f16c3)
-            4013:6(float16_t) Load 137(f16bias)
-            4014:3146(ResType) ImageSparseGather 4011 4012 2187 Bias ConstOffset 4013 722
-            4015:  7(f16vec4) CompositeExtract 4014 1
-                              Store 3994(texel) 4015
-            4016:     47(int) CompositeExtract 4014 0
-            4017:         357 Load 359(s2DRect)
-            4018:   53(fvec2) Load 148(c2)
-            4019:3146(ResType) ImageSparseGather 4017 4018 2187 ConstOffset 722
-            4020:  7(f16vec4) CompositeExtract 4019 1
-                              Store 3994(texel) 4020
-            4021:     47(int) CompositeExtract 4019 0
-            4022:         357 Load 359(s2DRect)
-            4023:154(f16vec2) Load 156(f16c2)
-            4024:3146(ResType) ImageSparseGather 4022 4023 2187 ConstOffset 722
-            4025:  7(f16vec4) CompositeExtract 4024 1
-                              Store 3994(texel) 4025
-            4026:     47(int) CompositeExtract 4024 0
-            4027:         224 Load 226(s2DShadow)
-            4028:   53(fvec2) Load 148(c2)
-            4029:   52(float) Load 215(compare)
-            4030:3146(ResType) ImageSparseDrefGather 4027 4028 4029 ConstOffset 722
-            4031:  7(f16vec4) CompositeExtract 4030 1
-                              Store 3994(texel) 4031
-            4032:     47(int) CompositeExtract 4030 0
-            4033:         224 Load 226(s2DShadow)
-            4034:154(f16vec2) Load 156(f16c2)
-            4035:   52(float) Load 215(compare)
-            4036:3146(ResType) ImageSparseDrefGather 4033 4034 4035 ConstOffset 722
-            4037:  7(f16vec4) CompositeExtract 4036 1
-                              Store 3994(texel) 4037
-            4038:     47(int) CompositeExtract 4036 0
-            4039:         337 Load 339(s2DArrayShadow)
-            4040:  167(fvec3) Load 169(c3)
-            4041:   52(float) Load 215(compare)
-            4042:3146(ResType) ImageSparseDrefGather 4039 4040 4041 ConstOffset 722
-            4043:  7(f16vec4) CompositeExtract 4042 1
-                              Store 3994(texel) 4043
-            4044:     47(int) CompositeExtract 4042 0
-            4045:         337 Load 339(s2DArrayShadow)
-            4046:175(f16vec3) Load 177(f16c3)
-            4047:   52(float) Load 215(compare)
-            4048:3146(ResType) ImageSparseDrefGather 4045 4046 4047 ConstOffset 722
-            4049:  7(f16vec4) CompositeExtract 4048 1
-                              Store 3994(texel) 4049
-            4050:     47(int) CompositeExtract 4048 0
-            4051:         371 Load 373(s2DRectShadow)
-            4052:   53(fvec2) Load 148(c2)
-            4053:   52(float) Load 215(compare)
-            4054:3146(ResType) ImageSparseDrefGather 4051 4052 4053 ConstOffset 722
-            4055:  7(f16vec4) CompositeExtract 4054 1
-                              Store 3994(texel) 4055
-            4056:     47(int) CompositeExtract 4054 0
-            4057:         371 Load 373(s2DRectShadow)
-            4058:154(f16vec2) Load 156(f16c2)
-            4059:   52(float) Load 215(compare)
-            4060:3146(ResType) ImageSparseDrefGather 4057 4058 4059 ConstOffset 722
-            4061:  7(f16vec4) CompositeExtract 4060 1
-                              Store 3994(texel) 4061
-            4062:     47(int) CompositeExtract 4060 0
-            4063:  7(f16vec4) Load 3994(texel)
-                              ReturnValue 4063
+     3870(texel):     64(ptr) Variable Function
+                              Store 3870(texel) 121
+            3871:         143 Load 145(s2D)
+            3872:   53(fvec2) Load 148(c2)
+            3873:3056(ResType) ImageSparseGather 3871 3872 2097 ConstOffset 722
+            3874:  7(f16vec4) CompositeExtract 3873 1
+                              Store 3870(texel) 3874
+            3875:     47(int) CompositeExtract 3873 0
+            3876:         143 Load 145(s2D)
+            3877:154(f16vec2) Load 156(f16c2)
+            3878:6(float16_t) Load 137(f16bias)
+            3879:3056(ResType) ImageSparseGather 3876 3877 2097 Bias ConstOffset 3878 722
+            3880:  7(f16vec4) CompositeExtract 3879 1
+                              Store 3870(texel) 3880
+            3881:     47(int) CompositeExtract 3879 0
+            3882:         284 Load 286(s2DArray)
+            3883:  167(fvec3) Load 169(c3)
+            3884:3056(ResType) ImageSparseGather 3882 3883 2097 ConstOffset 722
+            3885:  7(f16vec4) CompositeExtract 3884 1
+                              Store 3870(texel) 3885
+            3886:     47(int) CompositeExtract 3884 0
+            3887:         284 Load 286(s2DArray)
+            3888:175(f16vec3) Load 177(f16c3)
+            3889:6(float16_t) Load 137(f16bias)
+            3890:3056(ResType) ImageSparseGather 3887 3888 2097 Bias ConstOffset 3889 722
+            3891:  7(f16vec4) CompositeExtract 3890 1
+                              Store 3870(texel) 3891
+            3892:     47(int) CompositeExtract 3890 0
+            3893:         357 Load 359(s2DRect)
+            3894:   53(fvec2) Load 148(c2)
+            3895:3056(ResType) ImageSparseGather 3893 3894 2097 ConstOffset 722
+            3896:  7(f16vec4) CompositeExtract 3895 1
+                              Store 3870(texel) 3896
+            3897:     47(int) CompositeExtract 3895 0
+            3898:         357 Load 359(s2DRect)
+            3899:154(f16vec2) Load 156(f16c2)
+            3900:3056(ResType) ImageSparseGather 3898 3899 2097 ConstOffset 722
+            3901:  7(f16vec4) CompositeExtract 3900 1
+                              Store 3870(texel) 3901
+            3902:     47(int) CompositeExtract 3900 0
+            3903:         224 Load 226(s2DShadow)
+            3904:   53(fvec2) Load 148(c2)
+            3905:   52(float) Load 215(compare)
+            3906:3056(ResType) ImageSparseDrefGather 3903 3904 3905 ConstOffset 722
+            3907:  7(f16vec4) CompositeExtract 3906 1
+                              Store 3870(texel) 3907
+            3908:     47(int) CompositeExtract 3906 0
+            3909:         224 Load 226(s2DShadow)
+            3910:154(f16vec2) Load 156(f16c2)
+            3911:   52(float) Load 215(compare)
+            3912:3056(ResType) ImageSparseDrefGather 3909 3910 3911 ConstOffset 722
+            3913:  7(f16vec4) CompositeExtract 3912 1
+                              Store 3870(texel) 3913
+            3914:     47(int) CompositeExtract 3912 0
+            3915:         337 Load 339(s2DArrayShadow)
+            3916:  167(fvec3) Load 169(c3)
+            3917:   52(float) Load 215(compare)
+            3918:3056(ResType) ImageSparseDrefGather 3915 3916 3917 ConstOffset 722
+            3919:  7(f16vec4) CompositeExtract 3918 1
+                              Store 3870(texel) 3919
+            3920:     47(int) CompositeExtract 3918 0
+            3921:         337 Load 339(s2DArrayShadow)
+            3922:175(f16vec3) Load 177(f16c3)
+            3923:   52(float) Load 215(compare)
+            3924:3056(ResType) ImageSparseDrefGather 3921 3922 3923 ConstOffset 722
+            3925:  7(f16vec4) CompositeExtract 3924 1
+                              Store 3870(texel) 3925
+            3926:     47(int) CompositeExtract 3924 0
+            3927:         371 Load 373(s2DRectShadow)
+            3928:   53(fvec2) Load 148(c2)
+            3929:   52(float) Load 215(compare)
+            3930:3056(ResType) ImageSparseDrefGather 3927 3928 3929 ConstOffset 722
+            3931:  7(f16vec4) CompositeExtract 3930 1
+                              Store 3870(texel) 3931
+            3932:     47(int) CompositeExtract 3930 0
+            3933:         371 Load 373(s2DRectShadow)
+            3934:154(f16vec2) Load 156(f16c2)
+            3935:   52(float) Load 215(compare)
+            3936:3056(ResType) ImageSparseDrefGather 3933 3934 3935 ConstOffset 722
+            3937:  7(f16vec4) CompositeExtract 3936 1
+                              Store 3870(texel) 3937
+            3938:     47(int) CompositeExtract 3936 0
+            3939:  7(f16vec4) Load 3870(texel)
+                              ReturnValue 3939
                               FunctionEnd
 89(testSparseTextureGatherOffsets():  7(f16vec4) Function None 8
               90:             Label
-     4066(texel):     64(ptr) Variable Function
-                              Store 4066(texel) 121
-            4067:         143 Load 145(s2D)
-            4068:   53(fvec2) Load 148(c2)
-            4079:3146(ResType) ImageSparseGather 4067 4068 2187 ConstOffsets 4078
-            4080:  7(f16vec4) CompositeExtract 4079 1
-                              Store 4066(texel) 4080
-            4081:     47(int) CompositeExtract 4079 0
-            4082:         143 Load 145(s2D)
-            4083:154(f16vec2) Load 156(f16c2)
-            4084:6(float16_t) Load 137(f16bias)
-            4085:3146(ResType) ImageSparseGather 4082 4083 2187 Bias ConstOffsets 4084 4078
-            4086:  7(f16vec4) CompositeExtract 4085 1
-                              Store 4066(texel) 4086
-            4087:     47(int) CompositeExtract 4085 0
-            4088:         284 Load 286(s2DArray)
-            4089:  167(fvec3) Load 169(c3)
-            4090:3146(ResType) ImageSparseGather 4088 4089 2187 ConstOffsets 4078
-            4091:  7(f16vec4) CompositeExtract 4090 1
-                              Store 4066(texel) 4091
-            4092:     47(int) CompositeExtract 4090 0
-            4093:         284 Load 286(s2DArray)
-            4094:175(f16vec3) Load 177(f16c3)
-            4095:6(float16_t) Load 137(f16bias)
-            4096:3146(ResType) ImageSparseGather 4093 4094 2187 Bias ConstOffsets 4095 4078
-            4097:  7(f16vec4) CompositeExtract 4096 1
-                              Store 4066(texel) 4097
-            4098:     47(int) CompositeExtract 4096 0
-            4099:         357 Load 359(s2DRect)
-            4100:   53(fvec2) Load 148(c2)
-            4101:3146(ResType) ImageSparseGather 4099 4100 2187 ConstOffsets 4078
-            4102:  7(f16vec4) CompositeExtract 4101 1
-                              Store 4066(texel) 4102
-            4103:     47(int) CompositeExtract 4101 0
-            4104:         357 Load 359(s2DRect)
-            4105:154(f16vec2) Load 156(f16c2)
-            4106:3146(ResType) ImageSparseGather 4104 4105 2187 ConstOffsets 4078
-            4107:  7(f16vec4) CompositeExtract 4106 1
-                              Store 4066(texel) 4107
-            4108:     47(int) CompositeExtract 4106 0
-            4109:         224 Load 226(s2DShadow)
-            4110:   53(fvec2) Load 148(c2)
-            4111:   52(float) Load 215(compare)
-            4112:3146(ResType) ImageSparseDrefGather 4109 4110 4111 ConstOffsets 4078
-            4113:  7(f16vec4) CompositeExtract 4112 1
-                              Store 4066(texel) 4113
-            4114:     47(int) CompositeExtract 4112 0
-            4115:         224 Load 226(s2DShadow)
-            4116:154(f16vec2) Load 156(f16c2)
-            4117:   52(float) Load 215(compare)
-            4118:3146(ResType) ImageSparseDrefGather 4115 4116 4117 ConstOffsets 4078
-            4119:  7(f16vec4) CompositeExtract 4118 1
-                              Store 4066(texel) 4119
-            4120:     47(int) CompositeExtract 4118 0
-            4121:         337 Load 339(s2DArrayShadow)
-            4122:  167(fvec3) Load 169(c3)
-            4123:   52(float) Load 215(compare)
-            4124:3146(ResType) ImageSparseDrefGather 4121 4122 4123 ConstOffsets 4078
-            4125:  7(f16vec4) CompositeExtract 4124 1
-                              Store 4066(texel) 4125
-            4126:     47(int) CompositeExtract 4124 0
-            4127:         337 Load 339(s2DArrayShadow)
-            4128:175(f16vec3) Load 177(f16c3)
-            4129:   52(float) Load 215(compare)
-            4130:3146(ResType) ImageSparseDrefGather 4127 4128 4129 ConstOffsets 4078
-            4131:  7(f16vec4) CompositeExtract 4130 1
-                              Store 4066(texel) 4131
-            4132:     47(int) CompositeExtract 4130 0
-            4133:         371 Load 373(s2DRectShadow)
-            4134:   53(fvec2) Load 148(c2)
-            4135:   52(float) Load 215(compare)
-            4136:3146(ResType) ImageSparseDrefGather 4133 4134 4135 ConstOffsets 4078
-            4137:  7(f16vec4) CompositeExtract 4136 1
-                              Store 4066(texel) 4137
-            4138:     47(int) CompositeExtract 4136 0
-            4139:         371 Load 373(s2DRectShadow)
-            4140:154(f16vec2) Load 156(f16c2)
-            4141:   52(float) Load 215(compare)
-            4142:3146(ResType) ImageSparseDrefGather 4139 4140 4141 ConstOffsets 4078
-            4143:  7(f16vec4) CompositeExtract 4142 1
-                              Store 4066(texel) 4143
-            4144:     47(int) CompositeExtract 4142 0
-            4145:  7(f16vec4) Load 4066(texel)
-                              ReturnValue 4145
+     3942(texel):     64(ptr) Variable Function
+                              Store 3942(texel) 121
+            3943:         143 Load 145(s2D)
+            3944:   53(fvec2) Load 148(c2)
+            3955:3056(ResType) ImageSparseGather 3943 3944 2097 ConstOffsets 3954
+            3956:  7(f16vec4) CompositeExtract 3955 1
+                              Store 3942(texel) 3956
+            3957:     47(int) CompositeExtract 3955 0
+            3958:         143 Load 145(s2D)
+            3959:154(f16vec2) Load 156(f16c2)
+            3960:6(float16_t) Load 137(f16bias)
+            3961:3056(ResType) ImageSparseGather 3958 3959 2097 Bias ConstOffsets 3960 3954
+            3962:  7(f16vec4) CompositeExtract 3961 1
+                              Store 3942(texel) 3962
+            3963:     47(int) CompositeExtract 3961 0
+            3964:         284 Load 286(s2DArray)
+            3965:  167(fvec3) Load 169(c3)
+            3966:3056(ResType) ImageSparseGather 3964 3965 2097 ConstOffsets 3954
+            3967:  7(f16vec4) CompositeExtract 3966 1
+                              Store 3942(texel) 3967
+            3968:     47(int) CompositeExtract 3966 0
+            3969:         284 Load 286(s2DArray)
+            3970:175(f16vec3) Load 177(f16c3)
+            3971:6(float16_t) Load 137(f16bias)
+            3972:3056(ResType) ImageSparseGather 3969 3970 2097 Bias ConstOffsets 3971 3954
+            3973:  7(f16vec4) CompositeExtract 3972 1
+                              Store 3942(texel) 3973
+            3974:     47(int) CompositeExtract 3972 0
+            3975:         357 Load 359(s2DRect)
+            3976:   53(fvec2) Load 148(c2)
+            3977:3056(ResType) ImageSparseGather 3975 3976 2097 ConstOffsets 3954
+            3978:  7(f16vec4) CompositeExtract 3977 1
+                              Store 3942(texel) 3978
+            3979:     47(int) CompositeExtract 3977 0
+            3980:         357 Load 359(s2DRect)
+            3981:154(f16vec2) Load 156(f16c2)
+            3982:3056(ResType) ImageSparseGather 3980 3981 2097 ConstOffsets 3954
+            3983:  7(f16vec4) CompositeExtract 3982 1
+                              Store 3942(texel) 3983
+            3984:     47(int) CompositeExtract 3982 0
+            3985:         224 Load 226(s2DShadow)
+            3986:   53(fvec2) Load 148(c2)
+            3987:   52(float) Load 215(compare)
+            3988:3056(ResType) ImageSparseDrefGather 3985 3986 3987 ConstOffsets 3954
+            3989:  7(f16vec4) CompositeExtract 3988 1
+                              Store 3942(texel) 3989
+            3990:     47(int) CompositeExtract 3988 0
+            3991:         224 Load 226(s2DShadow)
+            3992:154(f16vec2) Load 156(f16c2)
+            3993:   52(float) Load 215(compare)
+            3994:3056(ResType) ImageSparseDrefGather 3991 3992 3993 ConstOffsets 3954
+            3995:  7(f16vec4) CompositeExtract 3994 1
+                              Store 3942(texel) 3995
+            3996:     47(int) CompositeExtract 3994 0
+            3997:         337 Load 339(s2DArrayShadow)
+            3998:  167(fvec3) Load 169(c3)
+            3999:   52(float) Load 215(compare)
+            4000:3056(ResType) ImageSparseDrefGather 3997 3998 3999 ConstOffsets 3954
+            4001:  7(f16vec4) CompositeExtract 4000 1
+                              Store 3942(texel) 4001
+            4002:     47(int) CompositeExtract 4000 0
+            4003:         337 Load 339(s2DArrayShadow)
+            4004:175(f16vec3) Load 177(f16c3)
+            4005:   52(float) Load 215(compare)
+            4006:3056(ResType) ImageSparseDrefGather 4003 4004 4005 ConstOffsets 3954
+            4007:  7(f16vec4) CompositeExtract 4006 1
+                              Store 3942(texel) 4007
+            4008:     47(int) CompositeExtract 4006 0
+            4009:         371 Load 373(s2DRectShadow)
+            4010:   53(fvec2) Load 148(c2)
+            4011:   52(float) Load 215(compare)
+            4012:3056(ResType) ImageSparseDrefGather 4009 4010 4011 ConstOffsets 3954
+            4013:  7(f16vec4) CompositeExtract 4012 1
+                              Store 3942(texel) 4013
+            4014:     47(int) CompositeExtract 4012 0
+            4015:         371 Load 373(s2DRectShadow)
+            4016:154(f16vec2) Load 156(f16c2)
+            4017:   52(float) Load 215(compare)
+            4018:3056(ResType) ImageSparseDrefGather 4015 4016 4017 ConstOffsets 3954
+            4019:  7(f16vec4) CompositeExtract 4018 1
+                              Store 3942(texel) 4019
+            4020:     47(int) CompositeExtract 4018 0
+            4021:  7(f16vec4) Load 3942(texel)
+                              ReturnValue 4021
                               FunctionEnd
 91(testSparseTextureGatherLod():  7(f16vec4) Function None 8
               92:             Label
-     4148(texel):     64(ptr) Variable Function
-                              Store 4148(texel) 121
-            4149:         143 Load 145(s2D)
-            4150:   53(fvec2) Load 148(c2)
-            4151:   52(float) Load 565(lod)
-            4152:3146(ResType) ImageSparseGather 4149 4150 2187 Lod 4151
-            4153:  7(f16vec4) CompositeExtract 4152 1
-                              Store 4148(texel) 4153
-            4154:     47(int) CompositeExtract 4152 0
-            4155:         143 Load 145(s2D)
-            4156:154(f16vec2) Load 156(f16c2)
-            4157:6(float16_t) Load 572(f16lod)
-            4158:3146(ResType) ImageSparseGather 4155 4156 2187 Lod 4157
-            4159:  7(f16vec4) CompositeExtract 4158 1
-                              Store 4148(texel) 4159
-            4160:     47(int) CompositeExtract 4158 0
-            4161:         284 Load 286(s2DArray)
-            4162:  167(fvec3) Load 169(c3)
-            4163:   52(float) Load 565(lod)
-            4164:3146(ResType) ImageSparseGather 4161 4162 2187 Lod 4163
-            4165:  7(f16vec4) CompositeExtract 4164 1
-                              Store 4148(texel) 4165
-            4166:     47(int) CompositeExtract 4164 0
-            4167:         284 Load 286(s2DArray)
-            4168:175(f16vec3) Load 177(f16c3)
-            4169:6(float16_t) Load 572(f16lod)
-            4170:3146(ResType) ImageSparseGather 4167 4168 2187 Lod 4169
-            4171:  7(f16vec4) CompositeExtract 4170 1
-                              Store 4148(texel) 4171
-            4172:     47(int) CompositeExtract 4170 0
-            4173:         184 Load 186(sCube)
-            4174:  167(fvec3) Load 169(c3)
-            4175:   52(float) Load 565(lod)
-            4176:3146(ResType) ImageSparseGather 4173 4174 2187 Lod 4175
-            4177:  7(f16vec4) CompositeExtract 4176 1
-                              Store 4148(texel) 4177
-            4178:     47(int) CompositeExtract 4176 0
-            4179:         184 Load 186(sCube)
-            4180:175(f16vec3) Load 177(f16c3)
-            4181:6(float16_t) Load 572(f16lod)
-            4182:3146(ResType) ImageSparseGather 4179 4180 2187 Lod 4181
-            4183:  7(f16vec4) CompositeExtract 4182 1
-                              Store 4148(texel) 4183
-            4184:     47(int) CompositeExtract 4182 0
-            4185:         299 Load 301(sCubeArray)
-            4186:  249(fvec4) Load 251(c4)
-            4187:   52(float) Load 565(lod)
-            4188:3146(ResType) ImageSparseGather 4185 4186 2187 Lod 4187
-            4189:  7(f16vec4) CompositeExtract 4188 1
-                              Store 4148(texel) 4189
-            4190:     47(int) CompositeExtract 4188 0
-            4191:         299 Load 301(sCubeArray)
-            4192:  7(f16vec4) Load 309(f16c4)
-            4193:6(float16_t) Load 572(f16lod)
-            4194:3146(ResType) ImageSparseGather 4191 4192 2187 Lod 4193
-            4195:  7(f16vec4) CompositeExtract 4194 1
-                              Store 4148(texel) 4195
-            4196:     47(int) CompositeExtract 4194 0
-            4197:  7(f16vec4) Load 4148(texel)
-                              ReturnValue 4197
+     4024(texel):     64(ptr) Variable Function
+                              Store 4024(texel) 121
+            4025:         143 Load 145(s2D)
+            4026:   53(fvec2) Load 148(c2)
+            4027:   52(float) Load 565(lod)
+            4028:3056(ResType) ImageSparseGather 4025 4026 2097 Lod 4027
+            4029:  7(f16vec4) CompositeExtract 4028 1
+                              Store 4024(texel) 4029
+            4030:     47(int) CompositeExtract 4028 0
+            4031:         143 Load 145(s2D)
+            4032:154(f16vec2) Load 156(f16c2)
+            4033:6(float16_t) Load 572(f16lod)
+            4034:3056(ResType) ImageSparseGather 4031 4032 2097 Lod 4033
+            4035:  7(f16vec4) CompositeExtract 4034 1
+                              Store 4024(texel) 4035
+            4036:     47(int) CompositeExtract 4034 0
+            4037:         284 Load 286(s2DArray)
+            4038:  167(fvec3) Load 169(c3)
+            4039:   52(float) Load 565(lod)
+            4040:3056(ResType) ImageSparseGather 4037 4038 2097 Lod 4039
+            4041:  7(f16vec4) CompositeExtract 4040 1
+                              Store 4024(texel) 4041
+            4042:     47(int) CompositeExtract 4040 0
+            4043:         284 Load 286(s2DArray)
+            4044:175(f16vec3) Load 177(f16c3)
+            4045:6(float16_t) Load 572(f16lod)
+            4046:3056(ResType) ImageSparseGather 4043 4044 2097 Lod 4045
+            4047:  7(f16vec4) CompositeExtract 4046 1
+                              Store 4024(texel) 4047
+            4048:     47(int) CompositeExtract 4046 0
+            4049:         184 Load 186(sCube)
+            4050:  167(fvec3) Load 169(c3)
+            4051:   52(float) Load 565(lod)
+            4052:3056(ResType) ImageSparseGather 4049 4050 2097 Lod 4051
+            4053:  7(f16vec4) CompositeExtract 4052 1
+                              Store 4024(texel) 4053
+            4054:     47(int) CompositeExtract 4052 0
+            4055:         184 Load 186(sCube)
+            4056:175(f16vec3) Load 177(f16c3)
+            4057:6(float16_t) Load 572(f16lod)
+            4058:3056(ResType) ImageSparseGather 4055 4056 2097 Lod 4057
+            4059:  7(f16vec4) CompositeExtract 4058 1
+                              Store 4024(texel) 4059
+            4060:     47(int) CompositeExtract 4058 0
+            4061:         299 Load 301(sCubeArray)
+            4062:  249(fvec4) Load 251(c4)
+            4063:   52(float) Load 565(lod)
+            4064:3056(ResType) ImageSparseGather 4061 4062 2097 Lod 4063
+            4065:  7(f16vec4) CompositeExtract 4064 1
+                              Store 4024(texel) 4065
+            4066:     47(int) CompositeExtract 4064 0
+            4067:         299 Load 301(sCubeArray)
+            4068:  7(f16vec4) Load 309(f16c4)
+            4069:6(float16_t) Load 572(f16lod)
+            4070:3056(ResType) ImageSparseGather 4067 4068 2097 Lod 4069
+            4071:  7(f16vec4) CompositeExtract 4070 1
+                              Store 4024(texel) 4071
+            4072:     47(int) CompositeExtract 4070 0
+            4073:  7(f16vec4) Load 4024(texel)
+                              ReturnValue 4073
                               FunctionEnd
 93(testSparseTextureGatherLodOffset():  7(f16vec4) Function None 8
               94:             Label
-     4200(texel):     64(ptr) Variable Function
-                              Store 4200(texel) 121
-            4201:         143 Load 145(s2D)
-            4202:   53(fvec2) Load 148(c2)
-            4203:   52(float) Load 565(lod)
-            4204:3146(ResType) ImageSparseGather 4201 4202 2187 Lod ConstOffset 4203 722
-            4205:  7(f16vec4) CompositeExtract 4204 1
-                              Store 4200(texel) 4205
-            4206:     47(int) CompositeExtract 4204 0
-            4207:         143 Load 145(s2D)
-            4208:154(f16vec2) Load 156(f16c2)
-            4209:6(float16_t) Load 572(f16lod)
-            4210:3146(ResType) ImageSparseGather 4207 4208 2187 Lod ConstOffset 4209 722
-            4211:  7(f16vec4) CompositeExtract 4210 1
-                              Store 4200(texel) 4211
-            4212:     47(int) CompositeExtract 4210 0
-            4213:         284 Load 286(s2DArray)
-            4214:  167(fvec3) Load 169(c3)
-            4215:   52(float) Load 565(lod)
-            4216:3146(ResType) ImageSparseGather 4213 4214 2187 Lod ConstOffset 4215 722
-            4217:  7(f16vec4) CompositeExtract 4216 1
-                              Store 4200(texel) 4217
-            4218:     47(int) CompositeExtract 4216 0
-            4219:         284 Load 286(s2DArray)
-            4220:175(f16vec3) Load 177(f16c3)
-            4221:6(float16_t) Load 572(f16lod)
-            4222:3146(ResType) ImageSparseGather 4219 4220 2187 Lod ConstOffset 4221 722
-            4223:  7(f16vec4) CompositeExtract 4222 1
-                              Store 4200(texel) 4223
-            4224:     47(int) CompositeExtract 4222 0
-            4225:  7(f16vec4) Load 4200(texel)
-                              ReturnValue 4225
+     4076(texel):     64(ptr) Variable Function
+                              Store 4076(texel) 121
+            4077:         143 Load 145(s2D)
+            4078:   53(fvec2) Load 148(c2)
+            4079:   52(float) Load 565(lod)
+            4080:3056(ResType) ImageSparseGather 4077 4078 2097 Lod ConstOffset 4079 722
+            4081:  7(f16vec4) CompositeExtract 4080 1
+                              Store 4076(texel) 4081
+            4082:     47(int) CompositeExtract 4080 0
+            4083:         143 Load 145(s2D)
+            4084:154(f16vec2) Load 156(f16c2)
+            4085:6(float16_t) Load 572(f16lod)
+            4086:3056(ResType) ImageSparseGather 4083 4084 2097 Lod ConstOffset 4085 722
+            4087:  7(f16vec4) CompositeExtract 4086 1
+                              Store 4076(texel) 4087
+            4088:     47(int) CompositeExtract 4086 0
+            4089:         284 Load 286(s2DArray)
+            4090:  167(fvec3) Load 169(c3)
+            4091:   52(float) Load 565(lod)
+            4092:3056(ResType) ImageSparseGather 4089 4090 2097 Lod ConstOffset 4091 722
+            4093:  7(f16vec4) CompositeExtract 4092 1
+                              Store 4076(texel) 4093
+            4094:     47(int) CompositeExtract 4092 0
+            4095:         284 Load 286(s2DArray)
+            4096:175(f16vec3) Load 177(f16c3)
+            4097:6(float16_t) Load 572(f16lod)
+            4098:3056(ResType) ImageSparseGather 4095 4096 2097 Lod ConstOffset 4097 722
+            4099:  7(f16vec4) CompositeExtract 4098 1
+                              Store 4076(texel) 4099
+            4100:     47(int) CompositeExtract 4098 0
+            4101:  7(f16vec4) Load 4076(texel)
+                              ReturnValue 4101
                               FunctionEnd
 95(testSparseTextureGatherLodOffsets():  7(f16vec4) Function None 8
               96:             Label
-     4228(texel):     64(ptr) Variable Function
-                              Store 4228(texel) 121
-            4229:         143 Load 145(s2D)
-            4230:   53(fvec2) Load 148(c2)
-            4231:   52(float) Load 565(lod)
-            4232:3146(ResType) ImageSparseGather 4229 4230 2187 Lod ConstOffsets 4231 2380
-            4233:  7(f16vec4) CompositeExtract 4232 1
-                              Store 4228(texel) 4233
-            4234:     47(int) CompositeExtract 4232 0
-            4235:         143 Load 145(s2D)
-            4236:154(f16vec2) Load 156(f16c2)
-            4237:6(float16_t) Load 572(f16lod)
-            4238:3146(ResType) ImageSparseGather 4235 4236 2187 Lod ConstOffsets 4237 2380
-            4239:  7(f16vec4) CompositeExtract 4238 1
-                              Store 4228(texel) 4239
-            4240:     47(int) CompositeExtract 4238 0
-            4241:         284 Load 286(s2DArray)
-            4242:  167(fvec3) Load 169(c3)
-            4243:   52(float) Load 565(lod)
-            4244:3146(ResType) ImageSparseGather 4241 4242 2187 Lod ConstOffsets 4243 2380
-            4245:  7(f16vec4) CompositeExtract 4244 1
-                              Store 4228(texel) 4245
-            4246:     47(int) CompositeExtract 4244 0
-            4247:         284 Load 286(s2DArray)
-            4248:175(f16vec3) Load 177(f16c3)
-            4249:6(float16_t) Load 572(f16lod)
-            4250:3146(ResType) ImageSparseGather 4247 4248 2187 Lod ConstOffsets 4249 2380
-            4251:  7(f16vec4) CompositeExtract 4250 1
-                              Store 4228(texel) 4251
-            4252:     47(int) CompositeExtract 4250 0
-            4253:  7(f16vec4) Load 4228(texel)
-                              ReturnValue 4253
+     4104(texel):     64(ptr) Variable Function
+                              Store 4104(texel) 121
+            4105:         143 Load 145(s2D)
+            4106:   53(fvec2) Load 148(c2)
+            4107:   52(float) Load 565(lod)
+            4108:3056(ResType) ImageSparseGather 4105 4106 2097 Lod ConstOffsets 4107 2290
+            4109:  7(f16vec4) CompositeExtract 4108 1
+                              Store 4104(texel) 4109
+            4110:     47(int) CompositeExtract 4108 0
+            4111:         143 Load 145(s2D)
+            4112:154(f16vec2) Load 156(f16c2)
+            4113:6(float16_t) Load 572(f16lod)
+            4114:3056(ResType) ImageSparseGather 4111 4112 2097 Lod ConstOffsets 4113 2290
+            4115:  7(f16vec4) CompositeExtract 4114 1
+                              Store 4104(texel) 4115
+            4116:     47(int) CompositeExtract 4114 0
+            4117:         284 Load 286(s2DArray)
+            4118:  167(fvec3) Load 169(c3)
+            4119:   52(float) Load 565(lod)
+            4120:3056(ResType) ImageSparseGather 4117 4118 2097 Lod ConstOffsets 4119 2290
+            4121:  7(f16vec4) CompositeExtract 4120 1
+                              Store 4104(texel) 4121
+            4122:     47(int) CompositeExtract 4120 0
+            4123:         284 Load 286(s2DArray)
+            4124:175(f16vec3) Load 177(f16c3)
+            4125:6(float16_t) Load 572(f16lod)
+            4126:3056(ResType) ImageSparseGather 4123 4124 2097 Lod ConstOffsets 4125 2290
+            4127:  7(f16vec4) CompositeExtract 4126 1
+                              Store 4104(texel) 4127
+            4128:     47(int) CompositeExtract 4126 0
+            4129:  7(f16vec4) Load 4104(texel)
+                              ReturnValue 4129
                               FunctionEnd
 97(testSparseImageLoad():  7(f16vec4) Function None 8
               98:             Label
-     4256(texel):     64(ptr) Variable Function
-                              Store 4256(texel) 121
-            4257:        3006 Load 3008(i2D)
-            4258:   53(fvec2) Load 148(c2)
-            4259:  721(ivec2) ConvertFToS 4258
-            4260:3146(ResType) ImageSparseRead 4257 4259
-            4261:  7(f16vec4) CompositeExtract 4260 1
-                              Store 4256(texel) 4261
-            4262:     47(int) CompositeExtract 4260 0
-            4263:        3015 Load 3017(i3D)
-            4264:  167(fvec3) Load 169(c3)
-            4265:  734(ivec3) ConvertFToS 4264
-            4266:3146(ResType) ImageSparseRead 4263 4265
-            4267:  7(f16vec4) CompositeExtract 4266 1
-                              Store 4256(texel) 4267
-            4268:     47(int) CompositeExtract 4266 0
-            4269:        3024 Load 3026(i2DRect)
-            4270:   53(fvec2) Load 148(c2)
-            4271:  721(ivec2) ConvertFToS 4270
-            4272:3146(ResType) ImageSparseRead 4269 4271
-            4273:  7(f16vec4) CompositeExtract 4272 1
-                              Store 4256(texel) 4273
-            4274:     47(int) CompositeExtract 4272 0
-            4275:        3033 Load 3035(iCube)
-            4276:  167(fvec3) Load 169(c3)
-            4277:  734(ivec3) ConvertFToS 4276
-            4278:3146(ResType) ImageSparseRead 4275 4277
-            4279:  7(f16vec4) CompositeExtract 4278 1
-                              Store 4256(texel) 4279
-            4280:     47(int) CompositeExtract 4278 0
-            4281:        3060 Load 3062(i2DArray)
-            4282:  167(fvec3) Load 169(c3)
-            4283:  734(ivec3) ConvertFToS 4282
-            4284:3146(ResType) ImageSparseRead 4281 4283
-            4285:  7(f16vec4) CompositeExtract 4284 1
-                              Store 4256(texel) 4285
-            4286:     47(int) CompositeExtract 4284 0
-            4287:        3069 Load 3071(iCubeArray)
-            4288:  167(fvec3) Load 169(c3)
-            4289:  734(ivec3) ConvertFToS 4288
-            4290:3146(ResType) ImageSparseRead 4287 4289
-            4291:  7(f16vec4) CompositeExtract 4290 1
-                              Store 4256(texel) 4291
-            4292:     47(int) CompositeExtract 4290 0
-            4293:        3078 Load 3080(i2DMS)
-            4294:   53(fvec2) Load 148(c2)
-            4295:  721(ivec2) ConvertFToS 4294
-            4296:3146(ResType) ImageSparseRead 4293 4295 Sample 709
-            4297:  7(f16vec4) CompositeExtract 4296 1
-                              Store 4256(texel) 4297
-            4298:     47(int) CompositeExtract 4296 0
-            4299:        3087 Load 3089(i2DMSArray)
-            4300:  167(fvec3) Load 169(c3)
-            4301:  734(ivec3) ConvertFToS 4300
-            4302:3146(ResType) ImageSparseRead 4299 4301 Sample 1326
-            4303:  7(f16vec4) CompositeExtract 4302 1
-                              Store 4256(texel) 4303
-            4304:     47(int) CompositeExtract 4302 0
-            4305:  7(f16vec4) Load 4256(texel)
-                              ReturnValue 4305
+     4132(texel):     64(ptr) Variable Function
+                              Store 4132(texel) 121
+            4133:        2916 Load 2918(i2D)
+            4134:   53(fvec2) Load 148(c2)
+            4135:  721(ivec2) ConvertFToS 4134
+            4136:3056(ResType) ImageSparseRead 4133 4135
+            4137:  7(f16vec4) CompositeExtract 4136 1
+                              Store 4132(texel) 4137
+            4138:     47(int) CompositeExtract 4136 0
+            4139:        2925 Load 2927(i3D)
+            4140:  167(fvec3) Load 169(c3)
+            4141:  734(ivec3) ConvertFToS 4140
+            4142:3056(ResType) ImageSparseRead 4139 4141
+            4143:  7(f16vec4) CompositeExtract 4142 1
+                              Store 4132(texel) 4143
+            4144:     47(int) CompositeExtract 4142 0
+            4145:        2934 Load 2936(i2DRect)
+            4146:   53(fvec2) Load 148(c2)
+            4147:  721(ivec2) ConvertFToS 4146
+            4148:3056(ResType) ImageSparseRead 4145 4147
+            4149:  7(f16vec4) CompositeExtract 4148 1
+                              Store 4132(texel) 4149
+            4150:     47(int) CompositeExtract 4148 0
+            4151:        2943 Load 2945(iCube)
+            4152:  167(fvec3) Load 169(c3)
+            4153:  734(ivec3) ConvertFToS 4152
+            4154:3056(ResType) ImageSparseRead 4151 4153
+            4155:  7(f16vec4) CompositeExtract 4154 1
+                              Store 4132(texel) 4155
+            4156:     47(int) CompositeExtract 4154 0
+            4157:        2970 Load 2972(i2DArray)
+            4158:  167(fvec3) Load 169(c3)
+            4159:  734(ivec3) ConvertFToS 4158
+            4160:3056(ResType) ImageSparseRead 4157 4159
+            4161:  7(f16vec4) CompositeExtract 4160 1
+                              Store 4132(texel) 4161
+            4162:     47(int) CompositeExtract 4160 0
+            4163:        2979 Load 2981(iCubeArray)
+            4164:  167(fvec3) Load 169(c3)
+            4165:  734(ivec3) ConvertFToS 4164
+            4166:3056(ResType) ImageSparseRead 4163 4165
+            4167:  7(f16vec4) CompositeExtract 4166 1
+                              Store 4132(texel) 4167
+            4168:     47(int) CompositeExtract 4166 0
+            4169:        2988 Load 2990(i2DMS)
+            4170:   53(fvec2) Load 148(c2)
+            4171:  721(ivec2) ConvertFToS 4170
+            4172:3056(ResType) ImageSparseRead 4169 4171 Sample 709
+            4173:  7(f16vec4) CompositeExtract 4172 1
+                              Store 4132(texel) 4173
+            4174:     47(int) CompositeExtract 4172 0
+            4175:        2997 Load 2999(i2DMSArray)
+            4176:  167(fvec3) Load 169(c3)
+            4177:  734(ivec3) ConvertFToS 4176
+            4178:3056(ResType) ImageSparseRead 4175 4177 Sample 1326
+            4179:  7(f16vec4) CompositeExtract 4178 1
+                              Store 4132(texel) 4179
+            4180:     47(int) CompositeExtract 4178 0
+            4181:  7(f16vec4) Load 4132(texel)
+                              ReturnValue 4181
                               FunctionEnd
 99(testSparseTextureClamp():  7(f16vec4) Function None 8
              100:             Label
-     4308(texel):     64(ptr) Variable Function
-                              Store 4308(texel) 121
-            4309:         143 Load 145(s2D)
-            4310:   53(fvec2) Load 148(c2)
-            4312:   52(float) Load 4311(lodClamp)
-            4313:3146(ResType) ImageSparseSampleImplicitLod 4309 4310 MinLod 4312
-            4314:  7(f16vec4) CompositeExtract 4313 1
-                              Store 4308(texel) 4314
-            4315:     47(int) CompositeExtract 4313 0
-            4316:         143 Load 145(s2D)
-            4317:154(f16vec2) Load 156(f16c2)
-            4319:6(float16_t) Load 4318(f16lodClamp)
-            4320:6(float16_t) Load 137(f16bias)
-            4321:3146(ResType) ImageSparseSampleImplicitLod 4316 4317 Bias MinLod 4320 4319
-            4322:  7(f16vec4) CompositeExtract 4321 1
-                              Store 4308(texel) 4322
-            4323:     47(int) CompositeExtract 4321 0
-            4324:         163 Load 165(s3D)
-            4325:  167(fvec3) Load 169(c3)
-            4326:   52(float) Load 4311(lodClamp)
-            4327:3146(ResType) ImageSparseSampleImplicitLod 4324 4325 MinLod 4326
-            4328:  7(f16vec4) CompositeExtract 4327 1
-                              Store 4308(texel) 4328
-            4329:     47(int) CompositeExtract 4327 0
-            4330:         163 Load 165(s3D)
-            4331:175(f16vec3) Load 177(f16c3)
-            4332:6(float16_t) Load 4318(f16lodClamp)
-            4333:6(float16_t) Load 137(f16bias)
-            4334:3146(ResType) ImageSparseSampleImplicitLod 4330 4331 Bias MinLod 4333 4332
-            4335:  7(f16vec4) CompositeExtract 4334 1
-                              Store 4308(texel) 4335
-            4336:     47(int) CompositeExtract 4334 0
-            4337:         184 Load 186(sCube)
-            4338:  167(fvec3) Load 169(c3)
-            4339:   52(float) Load 4311(lodClamp)
-            4340:3146(ResType) ImageSparseSampleImplicitLod 4337 4338 MinLod 4339
-            4341:  7(f16vec4) CompositeExtract 4340 1
-                              Store 4308(texel) 4341
-            4342:     47(int) CompositeExtract 4340 0
-            4343:         184 Load 186(sCube)
-            4344:175(f16vec3) Load 177(f16c3)
-            4345:6(float16_t) Load 4318(f16lodClamp)
-            4346:6(float16_t) Load 137(f16bias)
-            4347:3146(ResType) ImageSparseSampleImplicitLod 4343 4344 Bias MinLod 4346 4345
-            4348:  7(f16vec4) CompositeExtract 4347 1
-                              Store 4308(texel) 4348
-            4349:     47(int) CompositeExtract 4347 0
-            4350:         224 Load 226(s2DShadow)
-            4351:  167(fvec3) Load 169(c3)
-            4352:   52(float) Load 4311(lodClamp)
-            4353:    208(ptr) AccessChain 4308(texel) 207
-            4354:   52(float) CompositeExtract 4351 2
-            4355:3182(ResType) ImageSparseSampleDrefImplicitLod 4350 4351 4354 MinLod 4352
-            4356:6(float16_t) CompositeExtract 4355 1
-                              Store 4353 4356
-            4357:     47(int) CompositeExtract 4355 0
-            4358:         224 Load 226(s2DShadow)
-            4359:154(f16vec2) Load 156(f16c2)
-            4360:   52(float) Load 215(compare)
-            4361:6(float16_t) Load 4318(f16lodClamp)
-            4362:    208(ptr) AccessChain 4308(texel) 207
-            4363:6(float16_t) Load 137(f16bias)
-            4364:3182(ResType) ImageSparseSampleDrefImplicitLod 4358 4359 4360 Bias MinLod 4363 4361
-            4365:6(float16_t) CompositeExtract 4364 1
-                              Store 4362 4365
-            4366:     47(int) CompositeExtract 4364 0
-            4367:         245 Load 247(sCubeShadow)
-            4368:  249(fvec4) Load 251(c4)
-            4369:   52(float) Load 4311(lodClamp)
-            4370:    208(ptr) AccessChain 4308(texel) 207
-            4371:   52(float) CompositeExtract 4368 3
-            4372:3182(ResType) ImageSparseSampleDrefImplicitLod 4367 4368 4371 MinLod 4369
-            4373:6(float16_t) CompositeExtract 4372 1
-                              Store 4370 4373
-            4374:     47(int) CompositeExtract 4372 0
-            4375:         245 Load 247(sCubeShadow)
-            4376:175(f16vec3) Load 177(f16c3)
-            4377:   52(float) Load 215(compare)
-            4378:6(float16_t) Load 4318(f16lodClamp)
-            4379:    208(ptr) AccessChain 4308(texel) 207
-            4380:6(float16_t) Load 137(f16bias)
-            4381:3182(ResType) ImageSparseSampleDrefImplicitLod 4375 4376 4377 Bias MinLod 4380 4378
-            4382:6(float16_t) CompositeExtract 4381 1
-                              Store 4379 4382
-            4383:     47(int) CompositeExtract 4381 0
-            4384:         284 Load 286(s2DArray)
-            4385:  167(fvec3) Load 169(c3)
-            4386:   52(float) Load 4311(lodClamp)
-            4387:3146(ResType) ImageSparseSampleImplicitLod 4384 4385 MinLod 4386
-            4388:  7(f16vec4) CompositeExtract 4387 1
-                              Store 4308(texel) 4388
-            4389:     47(int) CompositeExtract 4387 0
-            4390:         284 Load 286(s2DArray)
-            4391:175(f16vec3) Load 177(f16c3)
-            4392:6(float16_t) Load 4318(f16lodClamp)
-            4393:6(float16_t) Load 137(f16bias)
-            4394:3146(ResType) ImageSparseSampleImplicitLod 4390 4391 Bias MinLod 4393 4392
-            4395:  7(f16vec4) CompositeExtract 4394 1
-                              Store 4308(texel) 4395
-            4396:     47(int) CompositeExtract 4394 0
-            4397:         299 Load 301(sCubeArray)
-            4398:  249(fvec4) Load 251(c4)
-            4399:   52(float) Load 4311(lodClamp)
-            4400:3146(ResType) ImageSparseSampleImplicitLod 4397 4398 MinLod 4399
-            4401:  7(f16vec4) CompositeExtract 4400 1
-                              Store 4308(texel) 4401
-            4402:     47(int) CompositeExtract 4400 0
-            4403:         299 Load 301(sCubeArray)
-            4404:  7(f16vec4) Load 309(f16c4)
-            4405:6(float16_t) Load 4318(f16lodClamp)
-            4406:6(float16_t) Load 137(f16bias)
-            4407:3146(ResType) ImageSparseSampleImplicitLod 4403 4404 Bias MinLod 4406 4405
-            4408:  7(f16vec4) CompositeExtract 4407 1
-                              Store 4308(texel) 4408
-            4409:     47(int) CompositeExtract 4407 0
-            4410:         337 Load 339(s2DArrayShadow)
-            4411:  249(fvec4) Load 251(c4)
-            4412:   52(float) Load 4311(lodClamp)
-            4413:    208(ptr) AccessChain 4308(texel) 207
-            4414:   52(float) CompositeExtract 4411 3
-            4415:3182(ResType) ImageSparseSampleDrefImplicitLod 4410 4411 4414 MinLod 4412
-            4416:6(float16_t) CompositeExtract 4415 1
-                              Store 4413 4416
-            4417:     47(int) CompositeExtract 4415 0
-            4418:         337 Load 339(s2DArrayShadow)
-            4419:175(f16vec3) Load 177(f16c3)
-            4420:   52(float) Load 215(compare)
-            4421:6(float16_t) Load 4318(f16lodClamp)
-            4422:    208(ptr) AccessChain 4308(texel) 207
-            4423:3182(ResType) ImageSparseSampleDrefImplicitLod 4418 4419 4420 MinLod 4421
-            4424:6(float16_t) CompositeExtract 4423 1
-                              Store 4422 4424
-            4425:     47(int) CompositeExtract 4423 0
-            4426:         391 Load 393(sCubeArrayShadow)
-            4427:  249(fvec4) Load 251(c4)
-            4428:   52(float) Load 215(compare)
-            4429:   52(float) Load 4311(lodClamp)
-            4430:    208(ptr) AccessChain 4308(texel) 207
-            4431:3182(ResType) ImageSparseSampleDrefImplicitLod 4426 4427 4428 MinLod 4429
-            4432:6(float16_t) CompositeExtract 4431 1
-                              Store 4430 4432
-            4433:     47(int) CompositeExtract 4431 0
-            4434:         391 Load 393(sCubeArrayShadow)
-            4435:  7(f16vec4) Load 309(f16c4)
-            4436:   52(float) Load 215(compare)
-            4437:6(float16_t) Load 4318(f16lodClamp)
-            4438:    208(ptr) AccessChain 4308(texel) 207
-            4439:3182(ResType) ImageSparseSampleDrefImplicitLod 4434 4435 4436 MinLod 4437
-            4440:6(float16_t) CompositeExtract 4439 1
-                              Store 4438 4440
-            4441:     47(int) CompositeExtract 4439 0
-            4442:  7(f16vec4) Load 4308(texel)
-                              ReturnValue 4442
+     4184(texel):     64(ptr) Variable Function
+                              Store 4184(texel) 121
+            4185:         143 Load 145(s2D)
+            4186:   53(fvec2) Load 148(c2)
+            4188:   52(float) Load 4187(lodClamp)
+            4189:3056(ResType) ImageSparseSampleImplicitLod 4185 4186 MinLod 4188
+            4190:  7(f16vec4) CompositeExtract 4189 1
+                              Store 4184(texel) 4190
+            4191:     47(int) CompositeExtract 4189 0
+            4192:         143 Load 145(s2D)
+            4193:154(f16vec2) Load 156(f16c2)
+            4195:6(float16_t) Load 4194(f16lodClamp)
+            4196:6(float16_t) Load 137(f16bias)
+            4197:3056(ResType) ImageSparseSampleImplicitLod 4192 4193 Bias MinLod 4196 4195
+            4198:  7(f16vec4) CompositeExtract 4197 1
+                              Store 4184(texel) 4198
+            4199:     47(int) CompositeExtract 4197 0
+            4200:         163 Load 165(s3D)
+            4201:  167(fvec3) Load 169(c3)
+            4202:   52(float) Load 4187(lodClamp)
+            4203:3056(ResType) ImageSparseSampleImplicitLod 4200 4201 MinLod 4202
+            4204:  7(f16vec4) CompositeExtract 4203 1
+                              Store 4184(texel) 4204
+            4205:     47(int) CompositeExtract 4203 0
+            4206:         163 Load 165(s3D)
+            4207:175(f16vec3) Load 177(f16c3)
+            4208:6(float16_t) Load 4194(f16lodClamp)
+            4209:6(float16_t) Load 137(f16bias)
+            4210:3056(ResType) ImageSparseSampleImplicitLod 4206 4207 Bias MinLod 4209 4208
+            4211:  7(f16vec4) CompositeExtract 4210 1
+                              Store 4184(texel) 4211
+            4212:     47(int) CompositeExtract 4210 0
+            4213:         184 Load 186(sCube)
+            4214:  167(fvec3) Load 169(c3)
+            4215:   52(float) Load 4187(lodClamp)
+            4216:3056(ResType) ImageSparseSampleImplicitLod 4213 4214 MinLod 4215
+            4217:  7(f16vec4) CompositeExtract 4216 1
+                              Store 4184(texel) 4217
+            4218:     47(int) CompositeExtract 4216 0
+            4219:         184 Load 186(sCube)
+            4220:175(f16vec3) Load 177(f16c3)
+            4221:6(float16_t) Load 4194(f16lodClamp)
+            4222:6(float16_t) Load 137(f16bias)
+            4223:3056(ResType) ImageSparseSampleImplicitLod 4219 4220 Bias MinLod 4222 4221
+            4224:  7(f16vec4) CompositeExtract 4223 1
+                              Store 4184(texel) 4224
+            4225:     47(int) CompositeExtract 4223 0
+            4226:         224 Load 226(s2DShadow)
+            4227:  167(fvec3) Load 169(c3)
+            4228:   52(float) Load 4187(lodClamp)
+            4229:    208(ptr) AccessChain 4184(texel) 207
+            4230:   52(float) CompositeExtract 4227 2
+            4231:3092(ResType) ImageSparseSampleDrefImplicitLod 4226 4227 4230 MinLod 4228
+            4232:6(float16_t) CompositeExtract 4231 1
+                              Store 4229 4232
+            4233:     47(int) CompositeExtract 4231 0
+            4234:         224 Load 226(s2DShadow)
+            4235:154(f16vec2) Load 156(f16c2)
+            4236:   52(float) Load 215(compare)
+            4237:6(float16_t) Load 4194(f16lodClamp)
+            4238:    208(ptr) AccessChain 4184(texel) 207
+            4239:6(float16_t) Load 137(f16bias)
+            4240:3092(ResType) ImageSparseSampleDrefImplicitLod 4234 4235 4236 Bias MinLod 4239 4237
+            4241:6(float16_t) CompositeExtract 4240 1
+                              Store 4238 4241
+            4242:     47(int) CompositeExtract 4240 0
+            4243:         245 Load 247(sCubeShadow)
+            4244:  249(fvec4) Load 251(c4)
+            4245:   52(float) Load 4187(lodClamp)
+            4246:    208(ptr) AccessChain 4184(texel) 207
+            4247:   52(float) CompositeExtract 4244 3
+            4248:3092(ResType) ImageSparseSampleDrefImplicitLod 4243 4244 4247 MinLod 4245
+            4249:6(float16_t) CompositeExtract 4248 1
+                              Store 4246 4249
+            4250:     47(int) CompositeExtract 4248 0
+            4251:         245 Load 247(sCubeShadow)
+            4252:175(f16vec3) Load 177(f16c3)
+            4253:   52(float) Load 215(compare)
+            4254:6(float16_t) Load 4194(f16lodClamp)
+            4255:    208(ptr) AccessChain 4184(texel) 207
+            4256:6(float16_t) Load 137(f16bias)
+            4257:3092(ResType) ImageSparseSampleDrefImplicitLod 4251 4252 4253 Bias MinLod 4256 4254
+            4258:6(float16_t) CompositeExtract 4257 1
+                              Store 4255 4258
+            4259:     47(int) CompositeExtract 4257 0
+            4260:         284 Load 286(s2DArray)
+            4261:  167(fvec3) Load 169(c3)
+            4262:   52(float) Load 4187(lodClamp)
+            4263:3056(ResType) ImageSparseSampleImplicitLod 4260 4261 MinLod 4262
+            4264:  7(f16vec4) CompositeExtract 4263 1
+                              Store 4184(texel) 4264
+            4265:     47(int) CompositeExtract 4263 0
+            4266:         284 Load 286(s2DArray)
+            4267:175(f16vec3) Load 177(f16c3)
+            4268:6(float16_t) Load 4194(f16lodClamp)
+            4269:6(float16_t) Load 137(f16bias)
+            4270:3056(ResType) ImageSparseSampleImplicitLod 4266 4267 Bias MinLod 4269 4268
+            4271:  7(f16vec4) CompositeExtract 4270 1
+                              Store 4184(texel) 4271
+            4272:     47(int) CompositeExtract 4270 0
+            4273:         299 Load 301(sCubeArray)
+            4274:  249(fvec4) Load 251(c4)
+            4275:   52(float) Load 4187(lodClamp)
+            4276:3056(ResType) ImageSparseSampleImplicitLod 4273 4274 MinLod 4275
+            4277:  7(f16vec4) CompositeExtract 4276 1
+                              Store 4184(texel) 4277
+            4278:     47(int) CompositeExtract 4276 0
+            4279:         299 Load 301(sCubeArray)
+            4280:  7(f16vec4) Load 309(f16c4)
+            4281:6(float16_t) Load 4194(f16lodClamp)
+            4282:6(float16_t) Load 137(f16bias)
+            4283:3056(ResType) ImageSparseSampleImplicitLod 4279 4280 Bias MinLod 4282 4281
+            4284:  7(f16vec4) CompositeExtract 4283 1
+                              Store 4184(texel) 4284
+            4285:     47(int) CompositeExtract 4283 0
+            4286:         337 Load 339(s2DArrayShadow)
+            4287:  249(fvec4) Load 251(c4)
+            4288:   52(float) Load 4187(lodClamp)
+            4289:    208(ptr) AccessChain 4184(texel) 207
+            4290:   52(float) CompositeExtract 4287 3
+            4291:3092(ResType) ImageSparseSampleDrefImplicitLod 4286 4287 4290 MinLod 4288
+            4292:6(float16_t) CompositeExtract 4291 1
+                              Store 4289 4292
+            4293:     47(int) CompositeExtract 4291 0
+            4294:         337 Load 339(s2DArrayShadow)
+            4295:175(f16vec3) Load 177(f16c3)
+            4296:   52(float) Load 215(compare)
+            4297:6(float16_t) Load 4194(f16lodClamp)
+            4298:    208(ptr) AccessChain 4184(texel) 207
+            4299:3092(ResType) ImageSparseSampleDrefImplicitLod 4294 4295 4296 MinLod 4297
+            4300:6(float16_t) CompositeExtract 4299 1
+                              Store 4298 4300
+            4301:     47(int) CompositeExtract 4299 0
+            4302:         391 Load 393(sCubeArrayShadow)
+            4303:  249(fvec4) Load 251(c4)
+            4304:   52(float) Load 215(compare)
+            4305:   52(float) Load 4187(lodClamp)
+            4306:    208(ptr) AccessChain 4184(texel) 207
+            4307:3092(ResType) ImageSparseSampleDrefImplicitLod 4302 4303 4304 MinLod 4305
+            4308:6(float16_t) CompositeExtract 4307 1
+                              Store 4306 4308
+            4309:     47(int) CompositeExtract 4307 0
+            4310:         391 Load 393(sCubeArrayShadow)
+            4311:  7(f16vec4) Load 309(f16c4)
+            4312:   52(float) Load 215(compare)
+            4313:6(float16_t) Load 4194(f16lodClamp)
+            4314:    208(ptr) AccessChain 4184(texel) 207
+            4315:3092(ResType) ImageSparseSampleDrefImplicitLod 4310 4311 4312 MinLod 4313
+            4316:6(float16_t) CompositeExtract 4315 1
+                              Store 4314 4316
+            4317:     47(int) CompositeExtract 4315 0
+            4318:  7(f16vec4) Load 4184(texel)
+                              ReturnValue 4318
                               FunctionEnd
 101(testTextureClamp():  7(f16vec4) Function None 8
              102:             Label
-     4445(texel):     64(ptr) Variable Function
-                              Store 4445(texel) 121
-            4446:         123 Load 125(s1D)
-            4447:   52(float) Load 128(c1)
-            4448:   52(float) Load 4311(lodClamp)
-            4449:  7(f16vec4) ImageSampleImplicitLod 4446 4447 MinLod 4448
-            4450:  7(f16vec4) Load 4445(texel)
-            4451:  7(f16vec4) FAdd 4450 4449
-                              Store 4445(texel) 4451
-            4452:         123 Load 125(s1D)
-            4453:6(float16_t) Load 135(f16c1)
-            4454:6(float16_t) Load 4318(f16lodClamp)
-            4455:6(float16_t) Load 137(f16bias)
-            4456:  7(f16vec4) ImageSampleImplicitLod 4452 4453 Bias MinLod 4455 4454
-            4457:  7(f16vec4) Load 4445(texel)
-            4458:  7(f16vec4) FAdd 4457 4456
-                              Store 4445(texel) 4458
-            4459:         143 Load 145(s2D)
-            4460:   53(fvec2) Load 148(c2)
-            4461:   52(float) Load 4311(lodClamp)
-            4462:  7(f16vec4) ImageSampleImplicitLod 4459 4460 MinLod 4461
-            4463:  7(f16vec4) Load 4445(texel)
-            4464:  7(f16vec4) FAdd 4463 4462
-                              Store 4445(texel) 4464
-            4465:         143 Load 145(s2D)
-            4466:154(f16vec2) Load 156(f16c2)
-            4467:6(float16_t) Load 4318(f16lodClamp)
-            4468:6(float16_t) Load 137(f16bias)
-            4469:  7(f16vec4) ImageSampleImplicitLod 4465 4466 Bias MinLod 4468 4467
-            4470:  7(f16vec4) Load 4445(texel)
-            4471:  7(f16vec4) FAdd 4470 4469
-                              Store 4445(texel) 4471
-            4472:         163 Load 165(s3D)
-            4473:  167(fvec3) Load 169(c3)
-            4474:   52(float) Load 4311(lodClamp)
-            4475:  7(f16vec4) ImageSampleImplicitLod 4472 4473 MinLod 4474
-            4476:  7(f16vec4) Load 4445(texel)
-            4477:  7(f16vec4) FAdd 4476 4475
-                              Store 4445(texel) 4477
-            4478:         163 Load 165(s3D)
-            4479:175(f16vec3) Load 177(f16c3)
-            4480:6(float16_t) Load 4318(f16lodClamp)
-            4481:6(float16_t) Load 137(f16bias)
-            4482:  7(f16vec4) ImageSampleImplicitLod 4478 4479 Bias MinLod 4481 4480
-            4483:  7(f16vec4) Load 4445(texel)
-            4484:  7(f16vec4) FAdd 4483 4482
-                              Store 4445(texel) 4484
-            4485:         184 Load 186(sCube)
-            4486:  167(fvec3) Load 169(c3)
-            4487:   52(float) Load 4311(lodClamp)
-            4488:  7(f16vec4) ImageSampleImplicitLod 4485 4486 MinLod 4487
-            4489:  7(f16vec4) Load 4445(texel)
-            4490:  7(f16vec4) FAdd 4489 4488
-                              Store 4445(texel) 4490
-            4491:         184 Load 186(sCube)
-            4492:175(f16vec3) Load 177(f16c3)
-            4493:6(float16_t) Load 4318(f16lodClamp)
-            4494:6(float16_t) Load 137(f16bias)
-            4495:  7(f16vec4) ImageSampleImplicitLod 4491 4492 Bias MinLod 4494 4493
-            4496:  7(f16vec4) Load 4445(texel)
-            4497:  7(f16vec4) FAdd 4496 4495
-                              Store 4445(texel) 4497
-            4498:         199 Load 201(s1DShadow)
-            4499:  167(fvec3) Load 169(c3)
-            4500:   52(float) Load 4311(lodClamp)
-            4501:   52(float) CompositeExtract 4499 2
-            4502:6(float16_t) ImageSampleDrefImplicitLod 4498 4499 4501 MinLod 4500
-            4503:    208(ptr) AccessChain 4445(texel) 207
+     4321(texel):     64(ptr) Variable Function
+                              Store 4321(texel) 121
+            4322:         123 Load 125(s1D)
+            4323:   52(float) Load 128(c1)
+            4324:   52(float) Load 4187(lodClamp)
+            4325:  7(f16vec4) ImageSampleImplicitLod 4322 4323 MinLod 4324
+            4326:  7(f16vec4) Load 4321(texel)
+            4327:  7(f16vec4) FAdd 4326 4325
+                              Store 4321(texel) 4327
+            4328:         123 Load 125(s1D)
+            4329:6(float16_t) Load 135(f16c1)
+            4330:6(float16_t) Load 4194(f16lodClamp)
+            4331:6(float16_t) Load 137(f16bias)
+            4332:  7(f16vec4) ImageSampleImplicitLod 4328 4329 Bias MinLod 4331 4330
+            4333:  7(f16vec4) Load 4321(texel)
+            4334:  7(f16vec4) FAdd 4333 4332
+                              Store 4321(texel) 4334
+            4335:         143 Load 145(s2D)
+            4336:   53(fvec2) Load 148(c2)
+            4337:   52(float) Load 4187(lodClamp)
+            4338:  7(f16vec4) ImageSampleImplicitLod 4335 4336 MinLod 4337
+            4339:  7(f16vec4) Load 4321(texel)
+            4340:  7(f16vec4) FAdd 4339 4338
+                              Store 4321(texel) 4340
+            4341:         143 Load 145(s2D)
+            4342:154(f16vec2) Load 156(f16c2)
+            4343:6(float16_t) Load 4194(f16lodClamp)
+            4344:6(float16_t) Load 137(f16bias)
+            4345:  7(f16vec4) ImageSampleImplicitLod 4341 4342 Bias MinLod 4344 4343
+            4346:  7(f16vec4) Load 4321(texel)
+            4347:  7(f16vec4) FAdd 4346 4345
+                              Store 4321(texel) 4347
+            4348:         163 Load 165(s3D)
+            4349:  167(fvec3) Load 169(c3)
+            4350:   52(float) Load 4187(lodClamp)
+            4351:  7(f16vec4) ImageSampleImplicitLod 4348 4349 MinLod 4350
+            4352:  7(f16vec4) Load 4321(texel)
+            4353:  7(f16vec4) FAdd 4352 4351
+                              Store 4321(texel) 4353
+            4354:         163 Load 165(s3D)
+            4355:175(f16vec3) Load 177(f16c3)
+            4356:6(float16_t) Load 4194(f16lodClamp)
+            4357:6(float16_t) Load 137(f16bias)
+            4358:  7(f16vec4) ImageSampleImplicitLod 4354 4355 Bias MinLod 4357 4356
+            4359:  7(f16vec4) Load 4321(texel)
+            4360:  7(f16vec4) FAdd 4359 4358
+                              Store 4321(texel) 4360
+            4361:         184 Load 186(sCube)
+            4362:  167(fvec3) Load 169(c3)
+            4363:   52(float) Load 4187(lodClamp)
+            4364:  7(f16vec4) ImageSampleImplicitLod 4361 4362 MinLod 4363
+            4365:  7(f16vec4) Load 4321(texel)
+            4366:  7(f16vec4) FAdd 4365 4364
+                              Store 4321(texel) 4366
+            4367:         184 Load 186(sCube)
+            4368:175(f16vec3) Load 177(f16c3)
+            4369:6(float16_t) Load 4194(f16lodClamp)
+            4370:6(float16_t) Load 137(f16bias)
+            4371:  7(f16vec4) ImageSampleImplicitLod 4367 4368 Bias MinLod 4370 4369
+            4372:  7(f16vec4) Load 4321(texel)
+            4373:  7(f16vec4) FAdd 4372 4371
+                              Store 4321(texel) 4373
+            4374:         199 Load 201(s1DShadow)
+            4375:  167(fvec3) Load 169(c3)
+            4376:   52(float) Load 4187(lodClamp)
+            4377:   52(float) CompositeExtract 4375 2
+            4378:6(float16_t) ImageSampleDrefImplicitLod 4374 4375 4377 MinLod 4376
+            4379:    208(ptr) AccessChain 4321(texel) 207
+            4380:6(float16_t) Load 4379
+            4381:6(float16_t) FAdd 4380 4378
+            4382:    208(ptr) AccessChain 4321(texel) 207
+                              Store 4382 4381
+            4383:         199 Load 201(s1DShadow)
+            4384:154(f16vec2) Load 156(f16c2)
+            4385:   52(float) Load 215(compare)
+            4386:6(float16_t) Load 4194(f16lodClamp)
+            4387:6(float16_t) Load 137(f16bias)
+            4388:6(float16_t) ImageSampleDrefImplicitLod 4383 4384 4385 Bias MinLod 4387 4386
+            4389:    208(ptr) AccessChain 4321(texel) 207
+            4390:6(float16_t) Load 4389
+            4391:6(float16_t) FAdd 4390 4388
+            4392:    208(ptr) AccessChain 4321(texel) 207
+                              Store 4392 4391
+            4393:         224 Load 226(s2DShadow)
+            4394:  167(fvec3) Load 169(c3)
+            4395:   52(float) Load 4187(lodClamp)
+            4396:   52(float) CompositeExtract 4394 2
+            4397:6(float16_t) ImageSampleDrefImplicitLod 4393 4394 4396 MinLod 4395
+            4398:    208(ptr) AccessChain 4321(texel) 207
+            4399:6(float16_t) Load 4398
+            4400:6(float16_t) FAdd 4399 4397
+            4401:    208(ptr) AccessChain 4321(texel) 207
+                              Store 4401 4400
+            4402:         224 Load 226(s2DShadow)
+            4403:154(f16vec2) Load 156(f16c2)
+            4404:   52(float) Load 215(compare)
+            4405:6(float16_t) Load 4194(f16lodClamp)
+            4406:6(float16_t) Load 137(f16bias)
+            4407:6(float16_t) ImageSampleDrefImplicitLod 4402 4403 4404 Bias MinLod 4406 4405
+            4408:    208(ptr) AccessChain 4321(texel) 207
+            4409:6(float16_t) Load 4408
+            4410:6(float16_t) FAdd 4409 4407
+            4411:    208(ptr) AccessChain 4321(texel) 207
+                              Store 4411 4410
+            4412:         245 Load 247(sCubeShadow)
+            4413:  249(fvec4) Load 251(c4)
+            4414:   52(float) Load 4187(lodClamp)
+            4415:   52(float) CompositeExtract 4413 3
+            4416:6(float16_t) ImageSampleDrefImplicitLod 4412 4413 4415 MinLod 4414
+            4417:    208(ptr) AccessChain 4321(texel) 207
+            4418:6(float16_t) Load 4417
+            4419:6(float16_t) FAdd 4418 4416
+            4420:    208(ptr) AccessChain 4321(texel) 207
+                              Store 4420 4419
+            4421:         245 Load 247(sCubeShadow)
+            4422:175(f16vec3) Load 177(f16c3)
+            4423:   52(float) Load 215(compare)
+            4424:6(float16_t) Load 4194(f16lodClamp)
+            4425:6(float16_t) Load 137(f16bias)
+            4426:6(float16_t) ImageSampleDrefImplicitLod 4421 4422 4423 Bias MinLod 4425 4424
+            4427:    208(ptr) AccessChain 4321(texel) 207
+            4428:6(float16_t) Load 4427
+            4429:6(float16_t) FAdd 4428 4426
+            4430:    208(ptr) AccessChain 4321(texel) 207
+                              Store 4430 4429
+            4431:         269 Load 271(s1DArray)
+            4432:   53(fvec2) Load 148(c2)
+            4433:   52(float) Load 4187(lodClamp)
+            4434:  7(f16vec4) ImageSampleImplicitLod 4431 4432 MinLod 4433
+            4435:  7(f16vec4) Load 4321(texel)
+            4436:  7(f16vec4) FAdd 4435 4434
+                              Store 4321(texel) 4436
+            4437:         269 Load 271(s1DArray)
+            4438:154(f16vec2) Load 156(f16c2)
+            4439:6(float16_t) Load 4194(f16lodClamp)
+            4440:6(float16_t) Load 137(f16bias)
+            4441:  7(f16vec4) ImageSampleImplicitLod 4437 4438 Bias MinLod 4440 4439
+            4442:  7(f16vec4) Load 4321(texel)
+            4443:  7(f16vec4) FAdd 4442 4441
+                              Store 4321(texel) 4443
+            4444:         284 Load 286(s2DArray)
+            4445:  167(fvec3) Load 169(c3)
+            4446:   52(float) Load 4187(lodClamp)
+            4447:  7(f16vec4) ImageSampleImplicitLod 4444 4445 MinLod 4446
+            4448:  7(f16vec4) Load 4321(texel)
+            4449:  7(f16vec4) FAdd 4448 4447
+                              Store 4321(texel) 4449
+            4450:         284 Load 286(s2DArray)
+            4451:175(f16vec3) Load 177(f16c3)
+            4452:6(float16_t) Load 4194(f16lodClamp)
+            4453:6(float16_t) Load 137(f16bias)
+            4454:  7(f16vec4) ImageSampleImplicitLod 4450 4451 Bias MinLod 4453 4452
+            4455:  7(f16vec4) Load 4321(texel)
+            4456:  7(f16vec4) FAdd 4455 4454
+                              Store 4321(texel) 4456
+            4457:         299 Load 301(sCubeArray)
+            4458:  249(fvec4) Load 251(c4)
+            4459:   52(float) Load 4187(lodClamp)
+            4460:  7(f16vec4) ImageSampleImplicitLod 4457 4458 MinLod 4459
+            4461:  7(f16vec4) Load 4321(texel)
+            4462:  7(f16vec4) FAdd 4461 4460
+                              Store 4321(texel) 4462
+            4463:         299 Load 301(sCubeArray)
+            4464:  7(f16vec4) Load 309(f16c4)
+            4465:6(float16_t) Load 4194(f16lodClamp)
+            4466:6(float16_t) Load 137(f16bias)
+            4467:  7(f16vec4) ImageSampleImplicitLod 4463 4464 Bias MinLod 4466 4465
+            4468:  7(f16vec4) Load 4321(texel)
+            4469:  7(f16vec4) FAdd 4468 4467
+                              Store 4321(texel) 4469
+            4470:         316 Load 318(s1DArrayShadow)
+            4471:  167(fvec3) Load 169(c3)
+            4472:   52(float) Load 4187(lodClamp)
+            4473:   52(float) CompositeExtract 4471 2
+            4474:6(float16_t) ImageSampleDrefImplicitLod 4470 4471 4473 MinLod 4472
+            4475:    208(ptr) AccessChain 4321(texel) 207
+            4476:6(float16_t) Load 4475
+            4477:6(float16_t) FAdd 4476 4474
+            4478:    208(ptr) AccessChain 4321(texel) 207
+                              Store 4478 4477
+            4479:         316 Load 318(s1DArrayShadow)
+            4480:154(f16vec2) Load 156(f16c2)
+            4481:   52(float) Load 215(compare)
+            4482:6(float16_t) Load 4194(f16lodClamp)
+            4483:6(float16_t) Load 137(f16bias)
+            4484:6(float16_t) ImageSampleDrefImplicitLod 4479 4480 4481 Bias MinLod 4483 4482
+            4485:    208(ptr) AccessChain 4321(texel) 207
+            4486:6(float16_t) Load 4485
+            4487:6(float16_t) FAdd 4486 4484
+            4488:    208(ptr) AccessChain 4321(texel) 207
+                              Store 4488 4487
+            4489:         337 Load 339(s2DArrayShadow)
+            4490:  249(fvec4) Load 251(c4)
+            4491:   52(float) Load 4187(lodClamp)
+            4492:   52(float) CompositeExtract 4490 3
+            4493:6(float16_t) ImageSampleDrefImplicitLod 4489 4490 4492 MinLod 4491
+            4494:    208(ptr) AccessChain 4321(texel) 207
+            4495:6(float16_t) Load 4494
+            4496:6(float16_t) FAdd 4495 4493
+            4497:    208(ptr) AccessChain 4321(texel) 207
+                              Store 4497 4496
+            4498:         337 Load 339(s2DArrayShadow)
+            4499:175(f16vec3) Load 177(f16c3)
+            4500:   52(float) Load 215(compare)
+            4501:6(float16_t) Load 4194(f16lodClamp)
+            4502:6(float16_t) ImageSampleDrefImplicitLod 4498 4499 4500 MinLod 4501
+            4503:    208(ptr) AccessChain 4321(texel) 207
             4504:6(float16_t) Load 4503
             4505:6(float16_t) FAdd 4504 4502
-            4506:    208(ptr) AccessChain 4445(texel) 207
+            4506:    208(ptr) AccessChain 4321(texel) 207
                               Store 4506 4505
-            4507:         199 Load 201(s1DShadow)
-            4508:154(f16vec2) Load 156(f16c2)
+            4507:         391 Load 393(sCubeArrayShadow)
+            4508:  249(fvec4) Load 251(c4)
             4509:   52(float) Load 215(compare)
-            4510:6(float16_t) Load 4318(f16lodClamp)
-            4511:6(float16_t) Load 137(f16bias)
-            4512:6(float16_t) ImageSampleDrefImplicitLod 4507 4508 4509 Bias MinLod 4511 4510
-            4513:    208(ptr) AccessChain 4445(texel) 207
-            4514:6(float16_t) Load 4513
-            4515:6(float16_t) FAdd 4514 4512
-            4516:    208(ptr) AccessChain 4445(texel) 207
-                              Store 4516 4515
-            4517:         224 Load 226(s2DShadow)
-            4518:  167(fvec3) Load 169(c3)
-            4519:   52(float) Load 4311(lodClamp)
-            4520:   52(float) CompositeExtract 4518 2
-            4521:6(float16_t) ImageSampleDrefImplicitLod 4517 4518 4520 MinLod 4519
-            4522:    208(ptr) AccessChain 4445(texel) 207
-            4523:6(float16_t) Load 4522
-            4524:6(float16_t) FAdd 4523 4521
-            4525:    208(ptr) AccessChain 4445(texel) 207
-                              Store 4525 4524
-            4526:         224 Load 226(s2DShadow)
-            4527:154(f16vec2) Load 156(f16c2)
-            4528:   52(float) Load 215(compare)
-            4529:6(float16_t) Load 4318(f16lodClamp)
-            4530:6(float16_t) Load 137(f16bias)
-            4531:6(float16_t) ImageSampleDrefImplicitLod 4526 4527 4528 Bias MinLod 4530 4529
-            4532:    208(ptr) AccessChain 4445(texel) 207
-            4533:6(float16_t) Load 4532
-            4534:6(float16_t) FAdd 4533 4531
-            4535:    208(ptr) AccessChain 4445(texel) 207
-                              Store 4535 4534
-            4536:         245 Load 247(sCubeShadow)
-            4537:  249(fvec4) Load 251(c4)
-            4538:   52(float) Load 4311(lodClamp)
-            4539:   52(float) CompositeExtract 4537 3
-            4540:6(float16_t) ImageSampleDrefImplicitLod 4536 4537 4539 MinLod 4538
-            4541:    208(ptr) AccessChain 4445(texel) 207
-            4542:6(float16_t) Load 4541
-            4543:6(float16_t) FAdd 4542 4540
-            4544:    208(ptr) AccessChain 4445(texel) 207
-                              Store 4544 4543
-            4545:         245 Load 247(sCubeShadow)
-            4546:175(f16vec3) Load 177(f16c3)
-            4547:   52(float) Load 215(compare)
-            4548:6(float16_t) Load 4318(f16lodClamp)
-            4549:6(float16_t) Load 137(f16bias)
-            4550:6(float16_t) ImageSampleDrefImplicitLod 4545 4546 4547 Bias MinLod 4549 4548
-            4551:    208(ptr) AccessChain 4445(texel) 207
-            4552:6(float16_t) Load 4551
-            4553:6(float16_t) FAdd 4552 4550
-            4554:    208(ptr) AccessChain 4445(texel) 207
-                              Store 4554 4553
-            4555:         269 Load 271(s1DArray)
-            4556:   53(fvec2) Load 148(c2)
-            4557:   52(float) Load 4311(lodClamp)
-            4558:  7(f16vec4) ImageSampleImplicitLod 4555 4556 MinLod 4557
-            4559:  7(f16vec4) Load 4445(texel)
-            4560:  7(f16vec4) FAdd 4559 4558
-                              Store 4445(texel) 4560
-            4561:         269 Load 271(s1DArray)
-            4562:154(f16vec2) Load 156(f16c2)
-            4563:6(float16_t) Load 4318(f16lodClamp)
-            4564:6(float16_t) Load 137(f16bias)
-            4565:  7(f16vec4) ImageSampleImplicitLod 4561 4562 Bias MinLod 4564 4563
-            4566:  7(f16vec4) Load 4445(texel)
-            4567:  7(f16vec4) FAdd 4566 4565
-                              Store 4445(texel) 4567
-            4568:         284 Load 286(s2DArray)
-            4569:  167(fvec3) Load 169(c3)
-            4570:   52(float) Load 4311(lodClamp)
-            4571:  7(f16vec4) ImageSampleImplicitLod 4568 4569 MinLod 4570
-            4572:  7(f16vec4) Load 4445(texel)
-            4573:  7(f16vec4) FAdd 4572 4571
-                              Store 4445(texel) 4573
-            4574:         284 Load 286(s2DArray)
-            4575:175(f16vec3) Load 177(f16c3)
-            4576:6(float16_t) Load 4318(f16lodClamp)
-            4577:6(float16_t) Load 137(f16bias)
-            4578:  7(f16vec4) ImageSampleImplicitLod 4574 4575 Bias MinLod 4577 4576
-            4579:  7(f16vec4) Load 4445(texel)
-            4580:  7(f16vec4) FAdd 4579 4578
-                              Store 4445(texel) 4580
-            4581:         299 Load 301(sCubeArray)
-            4582:  249(fvec4) Load 251(c4)
-            4583:   52(float) Load 4311(lodClamp)
-            4584:  7(f16vec4) ImageSampleImplicitLod 4581 4582 MinLod 4583
-            4585:  7(f16vec4) Load 4445(texel)
-            4586:  7(f16vec4) FAdd 4585 4584
-                              Store 4445(texel) 4586
-            4587:         299 Load 301(sCubeArray)
-            4588:  7(f16vec4) Load 309(f16c4)
-            4589:6(float16_t) Load 4318(f16lodClamp)
-            4590:6(float16_t) Load 137(f16bias)
-            4591:  7(f16vec4) ImageSampleImplicitLod 4587 4588 Bias MinLod 4590 4589
-            4592:  7(f16vec4) Load 4445(texel)
-            4593:  7(f16vec4) FAdd 4592 4591
-                              Store 4445(texel) 4593
-            4594:         316 Load 318(s1DArrayShadow)
-            4595:  167(fvec3) Load 169(c3)
-            4596:   52(float) Load 4311(lodClamp)
-            4597:   52(float) CompositeExtract 4595 2
-            4598:6(float16_t) ImageSampleDrefImplicitLod 4594 4595 4597 MinLod 4596
-            4599:    208(ptr) AccessChain 4445(texel) 207
-            4600:6(float16_t) Load 4599
-            4601:6(float16_t) FAdd 4600 4598
-            4602:    208(ptr) AccessChain 4445(texel) 207
-                              Store 4602 4601
-            4603:         316 Load 318(s1DArrayShadow)
-            4604:154(f16vec2) Load 156(f16c2)
-            4605:   52(float) Load 215(compare)
-            4606:6(float16_t) Load 4318(f16lodClamp)
-            4607:6(float16_t) Load 137(f16bias)
-            4608:6(float16_t) ImageSampleDrefImplicitLod 4603 4604 4605 Bias MinLod 4607 4606
-            4609:    208(ptr) AccessChain 4445(texel) 207
-            4610:6(float16_t) Load 4609
-            4611:6(float16_t) FAdd 4610 4608
-            4612:    208(ptr) AccessChain 4445(texel) 207
-                              Store 4612 4611
-            4613:         337 Load 339(s2DArrayShadow)
-            4614:  249(fvec4) Load 251(c4)
-            4615:   52(float) Load 4311(lodClamp)
-            4616:   52(float) CompositeExtract 4614 3
-            4617:6(float16_t) ImageSampleDrefImplicitLod 4613 4614 4616 MinLod 4615
-            4618:    208(ptr) AccessChain 4445(texel) 207
-            4619:6(float16_t) Load 4618
-            4620:6(float16_t) FAdd 4619 4617
-            4621:    208(ptr) AccessChain 4445(texel) 207
-                              Store 4621 4620
-            4622:         337 Load 339(s2DArrayShadow)
-            4623:175(f16vec3) Load 177(f16c3)
-            4624:   52(float) Load 215(compare)
-            4625:6(float16_t) Load 4318(f16lodClamp)
-            4626:6(float16_t) ImageSampleDrefImplicitLod 4622 4623 4624 MinLod 4625
-            4627:    208(ptr) AccessChain 4445(texel) 207
-            4628:6(float16_t) Load 4627
-            4629:6(float16_t) FAdd 4628 4626
-            4630:    208(ptr) AccessChain 4445(texel) 207
-                              Store 4630 4629
-            4631:         391 Load 393(sCubeArrayShadow)
-            4632:  249(fvec4) Load 251(c4)
-            4633:   52(float) Load 215(compare)
-            4634:   52(float) Load 4311(lodClamp)
-            4635:6(float16_t) ImageSampleDrefImplicitLod 4631 4632 4633 MinLod 4634
-            4636:    208(ptr) AccessChain 4445(texel) 207
-            4637:6(float16_t) Load 4636
-            4638:6(float16_t) FAdd 4637 4635
-            4639:    208(ptr) AccessChain 4445(texel) 207
-                              Store 4639 4638
-            4640:         391 Load 393(sCubeArrayShadow)
-            4641:  7(f16vec4) Load 309(f16c4)
-            4642:   52(float) Load 215(compare)
-            4643:6(float16_t) Load 4318(f16lodClamp)
-            4644:6(float16_t) ImageSampleDrefImplicitLod 4640 4641 4642 MinLod 4643
-            4645:    208(ptr) AccessChain 4445(texel) 207
-            4646:6(float16_t) Load 4645
-            4647:6(float16_t) FAdd 4646 4644
-            4648:    208(ptr) AccessChain 4445(texel) 207
-                              Store 4648 4647
-            4649:  7(f16vec4) Load 4445(texel)
-                              ReturnValue 4649
+            4510:   52(float) Load 4187(lodClamp)
+            4511:6(float16_t) ImageSampleDrefImplicitLod 4507 4508 4509 MinLod 4510
+            4512:    208(ptr) AccessChain 4321(texel) 207
+            4513:6(float16_t) Load 4512
+            4514:6(float16_t) FAdd 4513 4511
+            4515:    208(ptr) AccessChain 4321(texel) 207
+                              Store 4515 4514
+            4516:         391 Load 393(sCubeArrayShadow)
+            4517:  7(f16vec4) Load 309(f16c4)
+            4518:   52(float) Load 215(compare)
+            4519:6(float16_t) Load 4194(f16lodClamp)
+            4520:6(float16_t) ImageSampleDrefImplicitLod 4516 4517 4518 MinLod 4519
+            4521:    208(ptr) AccessChain 4321(texel) 207
+            4522:6(float16_t) Load 4521
+            4523:6(float16_t) FAdd 4522 4520
+            4524:    208(ptr) AccessChain 4321(texel) 207
+                              Store 4524 4523
+            4525:  7(f16vec4) Load 4321(texel)
+                              ReturnValue 4525
                               FunctionEnd
 103(testSparseTextureOffsetClamp():  7(f16vec4) Function None 8
              104:             Label
-     4652(texel):     64(ptr) Variable Function
-                              Store 4652(texel) 121
-            4653:         143 Load 145(s2D)
-            4654:   53(fvec2) Load 148(c2)
-            4655:   52(float) Load 4311(lodClamp)
-            4656:3146(ResType) ImageSparseSampleImplicitLod 4653 4654 ConstOffset MinLod 722 4655
-            4657:  7(f16vec4) CompositeExtract 4656 1
-                              Store 4652(texel) 4657
-            4658:     47(int) CompositeExtract 4656 0
-            4659:         143 Load 145(s2D)
-            4660:154(f16vec2) Load 156(f16c2)
-            4661:6(float16_t) Load 4318(f16lodClamp)
-            4662:6(float16_t) Load 137(f16bias)
-            4663:3146(ResType) ImageSparseSampleImplicitLod 4659 4660 Bias ConstOffset MinLod 4662 722 4661
-            4664:  7(f16vec4) CompositeExtract 4663 1
-                              Store 4652(texel) 4664
-            4665:     47(int) CompositeExtract 4663 0
-            4666:         163 Load 165(s3D)
-            4667:  167(fvec3) Load 169(c3)
-            4668:   52(float) Load 4311(lodClamp)
-            4669:3146(ResType) ImageSparseSampleImplicitLod 4666 4667 ConstOffset MinLod 735 4668
-            4670:  7(f16vec4) CompositeExtract 4669 1
-                              Store 4652(texel) 4670
-            4671:     47(int) CompositeExtract 4669 0
-            4672:         163 Load 165(s3D)
-            4673:175(f16vec3) Load 177(f16c3)
-            4674:6(float16_t) Load 4318(f16lodClamp)
-            4675:6(float16_t) Load 137(f16bias)
-            4676:3146(ResType) ImageSparseSampleImplicitLod 4672 4673 Bias ConstOffset MinLod 4675 735 4674
-            4677:  7(f16vec4) CompositeExtract 4676 1
-                              Store 4652(texel) 4677
-            4678:     47(int) CompositeExtract 4676 0
-            4679:         224 Load 226(s2DShadow)
-            4680:  167(fvec3) Load 169(c3)
-            4681:   52(float) Load 4311(lodClamp)
-            4682:    208(ptr) AccessChain 4652(texel) 207
-            4683:   52(float) CompositeExtract 4680 2
-            4684:3182(ResType) ImageSparseSampleDrefImplicitLod 4679 4680 4683 ConstOffset MinLod 722 4681
-            4685:6(float16_t) CompositeExtract 4684 1
-                              Store 4682 4685
-            4686:     47(int) CompositeExtract 4684 0
-            4687:         224 Load 226(s2DShadow)
-            4688:154(f16vec2) Load 156(f16c2)
-            4689:   52(float) Load 215(compare)
-            4690:6(float16_t) Load 4318(f16lodClamp)
-            4691:    208(ptr) AccessChain 4652(texel) 207
-            4692:6(float16_t) Load 137(f16bias)
-            4693:3182(ResType) ImageSparseSampleDrefImplicitLod 4687 4688 4689 Bias ConstOffset MinLod 4692 722 4690
-            4694:6(float16_t) CompositeExtract 4693 1
-                              Store 4691 4694
-            4695:     47(int) CompositeExtract 4693 0
-            4696:         284 Load 286(s2DArray)
-            4697:  167(fvec3) Load 169(c3)
-            4698:   52(float) Load 4311(lodClamp)
-            4699:3146(ResType) ImageSparseSampleImplicitLod 4696 4697 ConstOffset MinLod 722 4698
-            4700:  7(f16vec4) CompositeExtract 4699 1
-                              Store 4652(texel) 4700
-            4701:     47(int) CompositeExtract 4699 0
-            4702:         284 Load 286(s2DArray)
-            4703:175(f16vec3) Load 177(f16c3)
-            4704:6(float16_t) Load 4318(f16lodClamp)
-            4705:6(float16_t) Load 137(f16bias)
-            4706:3146(ResType) ImageSparseSampleImplicitLod 4702 4703 Bias ConstOffset MinLod 4705 722 4704
-            4707:  7(f16vec4) CompositeExtract 4706 1
-                              Store 4652(texel) 4707
-            4708:     47(int) CompositeExtract 4706 0
-            4709:         337 Load 339(s2DArrayShadow)
-            4710:  249(fvec4) Load 251(c4)
-            4711:   52(float) Load 4311(lodClamp)
-            4712:    208(ptr) AccessChain 4652(texel) 207
-            4713:   52(float) CompositeExtract 4710 3
-            4714:3182(ResType) ImageSparseSampleDrefImplicitLod 4709 4710 4713 ConstOffset MinLod 722 4711
-            4715:6(float16_t) CompositeExtract 4714 1
-                              Store 4712 4715
-            4716:     47(int) CompositeExtract 4714 0
-            4717:         337 Load 339(s2DArrayShadow)
-            4718:175(f16vec3) Load 177(f16c3)
-            4719:   52(float) Load 215(compare)
-            4720:6(float16_t) Load 4318(f16lodClamp)
-            4721:    208(ptr) AccessChain 4652(texel) 207
-            4722:3182(ResType) ImageSparseSampleDrefImplicitLod 4717 4718 4719 ConstOffset MinLod 722 4720
-            4723:6(float16_t) CompositeExtract 4722 1
-                              Store 4721 4723
-            4724:     47(int) CompositeExtract 4722 0
-            4725:  7(f16vec4) Load 4652(texel)
-                              ReturnValue 4725
+     4528(texel):     64(ptr) Variable Function
+                              Store 4528(texel) 121
+            4529:         143 Load 145(s2D)
+            4530:   53(fvec2) Load 148(c2)
+            4531:   52(float) Load 4187(lodClamp)
+            4532:3056(ResType) ImageSparseSampleImplicitLod 4529 4530 ConstOffset MinLod 722 4531
+            4533:  7(f16vec4) CompositeExtract 4532 1
+                              Store 4528(texel) 4533
+            4534:     47(int) CompositeExtract 4532 0
+            4535:         143 Load 145(s2D)
+            4536:154(f16vec2) Load 156(f16c2)
+            4537:6(float16_t) Load 4194(f16lodClamp)
+            4538:6(float16_t) Load 137(f16bias)
+            4539:3056(ResType) ImageSparseSampleImplicitLod 4535 4536 Bias ConstOffset MinLod 4538 722 4537
+            4540:  7(f16vec4) CompositeExtract 4539 1
+                              Store 4528(texel) 4540
+            4541:     47(int) CompositeExtract 4539 0
+            4542:         163 Load 165(s3D)
+            4543:  167(fvec3) Load 169(c3)
+            4544:   52(float) Load 4187(lodClamp)
+            4545:3056(ResType) ImageSparseSampleImplicitLod 4542 4543 ConstOffset MinLod 735 4544
+            4546:  7(f16vec4) CompositeExtract 4545 1
+                              Store 4528(texel) 4546
+            4547:     47(int) CompositeExtract 4545 0
+            4548:         163 Load 165(s3D)
+            4549:175(f16vec3) Load 177(f16c3)
+            4550:6(float16_t) Load 4194(f16lodClamp)
+            4551:6(float16_t) Load 137(f16bias)
+            4552:3056(ResType) ImageSparseSampleImplicitLod 4548 4549 Bias ConstOffset MinLod 4551 735 4550
+            4553:  7(f16vec4) CompositeExtract 4552 1
+                              Store 4528(texel) 4553
+            4554:     47(int) CompositeExtract 4552 0
+            4555:         224 Load 226(s2DShadow)
+            4556:  167(fvec3) Load 169(c3)
+            4557:   52(float) Load 4187(lodClamp)
+            4558:    208(ptr) AccessChain 4528(texel) 207
+            4559:   52(float) CompositeExtract 4556 2
+            4560:3092(ResType) ImageSparseSampleDrefImplicitLod 4555 4556 4559 ConstOffset MinLod 722 4557
+            4561:6(float16_t) CompositeExtract 4560 1
+                              Store 4558 4561
+            4562:     47(int) CompositeExtract 4560 0
+            4563:         224 Load 226(s2DShadow)
+            4564:154(f16vec2) Load 156(f16c2)
+            4565:   52(float) Load 215(compare)
+            4566:6(float16_t) Load 4194(f16lodClamp)
+            4567:    208(ptr) AccessChain 4528(texel) 207
+            4568:6(float16_t) Load 137(f16bias)
+            4569:3092(ResType) ImageSparseSampleDrefImplicitLod 4563 4564 4565 Bias ConstOffset MinLod 4568 722 4566
+            4570:6(float16_t) CompositeExtract 4569 1
+                              Store 4567 4570
+            4571:     47(int) CompositeExtract 4569 0
+            4572:         284 Load 286(s2DArray)
+            4573:  167(fvec3) Load 169(c3)
+            4574:   52(float) Load 4187(lodClamp)
+            4575:3056(ResType) ImageSparseSampleImplicitLod 4572 4573 ConstOffset MinLod 722 4574
+            4576:  7(f16vec4) CompositeExtract 4575 1
+                              Store 4528(texel) 4576
+            4577:     47(int) CompositeExtract 4575 0
+            4578:         284 Load 286(s2DArray)
+            4579:175(f16vec3) Load 177(f16c3)
+            4580:6(float16_t) Load 4194(f16lodClamp)
+            4581:6(float16_t) Load 137(f16bias)
+            4582:3056(ResType) ImageSparseSampleImplicitLod 4578 4579 Bias ConstOffset MinLod 4581 722 4580
+            4583:  7(f16vec4) CompositeExtract 4582 1
+                              Store 4528(texel) 4583
+            4584:     47(int) CompositeExtract 4582 0
+            4585:         337 Load 339(s2DArrayShadow)
+            4586:  249(fvec4) Load 251(c4)
+            4587:   52(float) Load 4187(lodClamp)
+            4588:    208(ptr) AccessChain 4528(texel) 207
+            4589:   52(float) CompositeExtract 4586 3
+            4590:3092(ResType) ImageSparseSampleDrefImplicitLod 4585 4586 4589 ConstOffset MinLod 722 4587
+            4591:6(float16_t) CompositeExtract 4590 1
+                              Store 4588 4591
+            4592:     47(int) CompositeExtract 4590 0
+            4593:         337 Load 339(s2DArrayShadow)
+            4594:175(f16vec3) Load 177(f16c3)
+            4595:   52(float) Load 215(compare)
+            4596:6(float16_t) Load 4194(f16lodClamp)
+            4597:    208(ptr) AccessChain 4528(texel) 207
+            4598:3092(ResType) ImageSparseSampleDrefImplicitLod 4593 4594 4595 ConstOffset MinLod 722 4596
+            4599:6(float16_t) CompositeExtract 4598 1
+                              Store 4597 4599
+            4600:     47(int) CompositeExtract 4598 0
+            4601:  7(f16vec4) Load 4528(texel)
+                              ReturnValue 4601
                               FunctionEnd
 105(testTextureOffsetClamp():  7(f16vec4) Function None 8
              106:             Label
-     4728(texel):     64(ptr) Variable Function
-                              Store 4728(texel) 121
-            4729:         123 Load 125(s1D)
-            4730:   52(float) Load 128(c1)
-            4731:   52(float) Load 4311(lodClamp)
-            4732:  7(f16vec4) ImageSampleImplicitLod 4729 4730 ConstOffset MinLod 709 4731
-            4733:  7(f16vec4) Load 4728(texel)
-            4734:  7(f16vec4) FAdd 4733 4732
-                              Store 4728(texel) 4734
-            4735:         123 Load 125(s1D)
-            4736:6(float16_t) Load 135(f16c1)
-            4737:6(float16_t) Load 4318(f16lodClamp)
-            4738:6(float16_t) Load 137(f16bias)
-            4739:  7(f16vec4) ImageSampleImplicitLod 4735 4736 Bias ConstOffset MinLod 4738 709 4737
-            4740:  7(f16vec4) Load 4728(texel)
-            4741:  7(f16vec4) FAdd 4740 4739
-                              Store 4728(texel) 4741
-            4742:         143 Load 145(s2D)
-            4743:   53(fvec2) Load 148(c2)
-            4744:   52(float) Load 4311(lodClamp)
-            4745:  7(f16vec4) ImageSampleImplicitLod 4742 4743 ConstOffset MinLod 722 4744
-            4746:  7(f16vec4) Load 4728(texel)
-            4747:  7(f16vec4) FAdd 4746 4745
-                              Store 4728(texel) 4747
-            4748:         143 Load 145(s2D)
-            4749:154(f16vec2) Load 156(f16c2)
-            4750:6(float16_t) Load 4318(f16lodClamp)
-            4751:6(float16_t) Load 137(f16bias)
-            4752:  7(f16vec4) ImageSampleImplicitLod 4748 4749 Bias ConstOffset MinLod 4751 722 4750
-            4753:  7(f16vec4) Load 4728(texel)
-            4754:  7(f16vec4) FAdd 4753 4752
-                              Store 4728(texel) 4754
-            4755:         163 Load 165(s3D)
-            4756:  167(fvec3) Load 169(c3)
-            4757:   52(float) Load 4311(lodClamp)
-            4758:  7(f16vec4) ImageSampleImplicitLod 4755 4756 ConstOffset MinLod 735 4757
-            4759:  7(f16vec4) Load 4728(texel)
-            4760:  7(f16vec4) FAdd 4759 4758
-                              Store 4728(texel) 4760
-            4761:         163 Load 165(s3D)
-            4762:175(f16vec3) Load 177(f16c3)
-            4763:6(float16_t) Load 4318(f16lodClamp)
-            4764:6(float16_t) Load 137(f16bias)
-            4765:  7(f16vec4) ImageSampleImplicitLod 4761 4762 Bias ConstOffset MinLod 4764 735 4763
-            4766:  7(f16vec4) Load 4728(texel)
-            4767:  7(f16vec4) FAdd 4766 4765
-                              Store 4728(texel) 4767
-            4768:         199 Load 201(s1DShadow)
-            4769:  167(fvec3) Load 169(c3)
-            4770:   52(float) Load 4311(lodClamp)
-            4771:   52(float) CompositeExtract 4769 2
-            4772:6(float16_t) ImageSampleDrefImplicitLod 4768 4769 4771 ConstOffset MinLod 709 4770
-            4773:    208(ptr) AccessChain 4728(texel) 207
-            4774:6(float16_t) Load 4773
-            4775:6(float16_t) FAdd 4774 4772
-            4776:    208(ptr) AccessChain 4728(texel) 207
-                              Store 4776 4775
-            4777:         199 Load 201(s1DShadow)
-            4778:154(f16vec2) Load 156(f16c2)
-            4779:   52(float) Load 215(compare)
-            4780:6(float16_t) Load 4318(f16lodClamp)
-            4781:6(float16_t) Load 137(f16bias)
-            4782:6(float16_t) ImageSampleDrefImplicitLod 4777 4778 4779 Bias ConstOffset MinLod 4781 709 4780
-            4783:    208(ptr) AccessChain 4728(texel) 207
-            4784:6(float16_t) Load 4783
-            4785:6(float16_t) FAdd 4784 4782
-            4786:    208(ptr) AccessChain 4728(texel) 207
-                              Store 4786 4785
-            4787:         224 Load 226(s2DShadow)
-            4788:  167(fvec3) Load 169(c3)
-            4789:   52(float) Load 4311(lodClamp)
-            4790:   52(float) CompositeExtract 4788 2
-            4791:6(float16_t) ImageSampleDrefImplicitLod 4787 4788 4790 ConstOffset MinLod 722 4789
-            4792:    208(ptr) AccessChain 4728(texel) 207
-            4793:6(float16_t) Load 4792
-            4794:6(float16_t) FAdd 4793 4791
-            4795:    208(ptr) AccessChain 4728(texel) 207
-                              Store 4795 4794
-            4796:         224 Load 226(s2DShadow)
-            4797:154(f16vec2) Load 156(f16c2)
-            4798:   52(float) Load 215(compare)
-            4799:6(float16_t) Load 4318(f16lodClamp)
-            4800:6(float16_t) Load 137(f16bias)
-            4801:6(float16_t) ImageSampleDrefImplicitLod 4796 4797 4798 Bias ConstOffset MinLod 4800 722 4799
-            4802:    208(ptr) AccessChain 4728(texel) 207
-            4803:6(float16_t) Load 4802
-            4804:6(float16_t) FAdd 4803 4801
-            4805:    208(ptr) AccessChain 4728(texel) 207
-                              Store 4805 4804
-            4806:         269 Load 271(s1DArray)
-            4807:   53(fvec2) Load 148(c2)
-            4808:   52(float) Load 4311(lodClamp)
-            4809:  7(f16vec4) ImageSampleImplicitLod 4806 4807 ConstOffset MinLod 709 4808
-            4810:  7(f16vec4) Load 4728(texel)
-            4811:  7(f16vec4) FAdd 4810 4809
-                              Store 4728(texel) 4811
-            4812:         269 Load 271(s1DArray)
-            4813:154(f16vec2) Load 156(f16c2)
-            4814:6(float16_t) Load 4318(f16lodClamp)
-            4815:6(float16_t) Load 137(f16bias)
-            4816:  7(f16vec4) ImageSampleImplicitLod 4812 4813 Bias ConstOffset MinLod 4815 709 4814
-            4817:  7(f16vec4) Load 4728(texel)
-            4818:  7(f16vec4) FAdd 4817 4816
-                              Store 4728(texel) 4818
-            4819:         284 Load 286(s2DArray)
-            4820:  167(fvec3) Load 169(c3)
-            4821:   52(float) Load 4311(lodClamp)
-            4822:  7(f16vec4) ImageSampleImplicitLod 4819 4820 ConstOffset MinLod 722 4821
-            4823:  7(f16vec4) Load 4728(texel)
-            4824:  7(f16vec4) FAdd 4823 4822
-                              Store 4728(texel) 4824
-            4825:         284 Load 286(s2DArray)
-            4826:175(f16vec3) Load 177(f16c3)
-            4827:6(float16_t) Load 4318(f16lodClamp)
-            4828:6(float16_t) Load 137(f16bias)
-            4829:  7(f16vec4) ImageSampleImplicitLod 4825 4826 Bias ConstOffset MinLod 4828 722 4827
-            4830:  7(f16vec4) Load 4728(texel)
-            4831:  7(f16vec4) FAdd 4830 4829
-                              Store 4728(texel) 4831
-            4832:         316 Load 318(s1DArrayShadow)
-            4833:  167(fvec3) Load 169(c3)
-            4834:   52(float) Load 4311(lodClamp)
-            4835:   52(float) CompositeExtract 4833 2
-            4836:6(float16_t) ImageSampleDrefImplicitLod 4832 4833 4835 ConstOffset MinLod 709 4834
-            4837:    208(ptr) AccessChain 4728(texel) 207
-            4838:6(float16_t) Load 4837
-            4839:6(float16_t) FAdd 4838 4836
-            4840:    208(ptr) AccessChain 4728(texel) 207
-                              Store 4840 4839
-            4841:         316 Load 318(s1DArrayShadow)
-            4842:154(f16vec2) Load 156(f16c2)
-            4843:   52(float) Load 215(compare)
-            4844:6(float16_t) Load 4318(f16lodClamp)
-            4845:6(float16_t) Load 137(f16bias)
-            4846:6(float16_t) ImageSampleDrefImplicitLod 4841 4842 4843 Bias ConstOffset MinLod 4845 709 4844
-            4847:    208(ptr) AccessChain 4728(texel) 207
-            4848:6(float16_t) Load 4847
-            4849:6(float16_t) FAdd 4848 4846
-            4850:    208(ptr) AccessChain 4728(texel) 207
-                              Store 4850 4849
-            4851:         337 Load 339(s2DArrayShadow)
-            4852:  249(fvec4) Load 251(c4)
-            4853:   52(float) Load 4311(lodClamp)
-            4854:   52(float) CompositeExtract 4852 3
-            4855:6(float16_t) ImageSampleDrefImplicitLod 4851 4852 4854 ConstOffset MinLod 722 4853
-            4856:    208(ptr) AccessChain 4728(texel) 207
-            4857:6(float16_t) Load 4856
-            4858:6(float16_t) FAdd 4857 4855
-            4859:    208(ptr) AccessChain 4728(texel) 207
-                              Store 4859 4858
-            4860:         337 Load 339(s2DArrayShadow)
-            4861:175(f16vec3) Load 177(f16c3)
-            4862:   52(float) Load 215(compare)
-            4863:6(float16_t) Load 4318(f16lodClamp)
-            4864:6(float16_t) ImageSampleDrefImplicitLod 4860 4861 4862 ConstOffset MinLod 722 4863
-            4865:    208(ptr) AccessChain 4728(texel) 207
-            4866:6(float16_t) Load 4865
-            4867:6(float16_t) FAdd 4866 4864
-            4868:    208(ptr) AccessChain 4728(texel) 207
-                              Store 4868 4867
-            4869:  7(f16vec4) Load 4728(texel)
-                              ReturnValue 4869
+     4604(texel):     64(ptr) Variable Function
+                              Store 4604(texel) 121
+            4605:         123 Load 125(s1D)
+            4606:   52(float) Load 128(c1)
+            4607:   52(float) Load 4187(lodClamp)
+            4608:  7(f16vec4) ImageSampleImplicitLod 4605 4606 ConstOffset MinLod 709 4607
+            4609:  7(f16vec4) Load 4604(texel)
+            4610:  7(f16vec4) FAdd 4609 4608
+                              Store 4604(texel) 4610
+            4611:         123 Load 125(s1D)
+            4612:6(float16_t) Load 135(f16c1)
+            4613:6(float16_t) Load 4194(f16lodClamp)
+            4614:6(float16_t) Load 137(f16bias)
+            4615:  7(f16vec4) ImageSampleImplicitLod 4611 4612 Bias ConstOffset MinLod 4614 709 4613
+            4616:  7(f16vec4) Load 4604(texel)
+            4617:  7(f16vec4) FAdd 4616 4615
+                              Store 4604(texel) 4617
+            4618:         143 Load 145(s2D)
+            4619:   53(fvec2) Load 148(c2)
+            4620:   52(float) Load 4187(lodClamp)
+            4621:  7(f16vec4) ImageSampleImplicitLod 4618 4619 ConstOffset MinLod 722 4620
+            4622:  7(f16vec4) Load 4604(texel)
+            4623:  7(f16vec4) FAdd 4622 4621
+                              Store 4604(texel) 4623
+            4624:         143 Load 145(s2D)
+            4625:154(f16vec2) Load 156(f16c2)
+            4626:6(float16_t) Load 4194(f16lodClamp)
+            4627:6(float16_t) Load 137(f16bias)
+            4628:  7(f16vec4) ImageSampleImplicitLod 4624 4625 Bias ConstOffset MinLod 4627 722 4626
+            4629:  7(f16vec4) Load 4604(texel)
+            4630:  7(f16vec4) FAdd 4629 4628
+                              Store 4604(texel) 4630
+            4631:         163 Load 165(s3D)
+            4632:  167(fvec3) Load 169(c3)
+            4633:   52(float) Load 4187(lodClamp)
+            4634:  7(f16vec4) ImageSampleImplicitLod 4631 4632 ConstOffset MinLod 735 4633
+            4635:  7(f16vec4) Load 4604(texel)
+            4636:  7(f16vec4) FAdd 4635 4634
+                              Store 4604(texel) 4636
+            4637:         163 Load 165(s3D)
+            4638:175(f16vec3) Load 177(f16c3)
+            4639:6(float16_t) Load 4194(f16lodClamp)
+            4640:6(float16_t) Load 137(f16bias)
+            4641:  7(f16vec4) ImageSampleImplicitLod 4637 4638 Bias ConstOffset MinLod 4640 735 4639
+            4642:  7(f16vec4) Load 4604(texel)
+            4643:  7(f16vec4) FAdd 4642 4641
+                              Store 4604(texel) 4643
+            4644:         199 Load 201(s1DShadow)
+            4645:  167(fvec3) Load 169(c3)
+            4646:   52(float) Load 4187(lodClamp)
+            4647:   52(float) CompositeExtract 4645 2
+            4648:6(float16_t) ImageSampleDrefImplicitLod 4644 4645 4647 ConstOffset MinLod 709 4646
+            4649:    208(ptr) AccessChain 4604(texel) 207
+            4650:6(float16_t) Load 4649
+            4651:6(float16_t) FAdd 4650 4648
+            4652:    208(ptr) AccessChain 4604(texel) 207
+                              Store 4652 4651
+            4653:         199 Load 201(s1DShadow)
+            4654:154(f16vec2) Load 156(f16c2)
+            4655:   52(float) Load 215(compare)
+            4656:6(float16_t) Load 4194(f16lodClamp)
+            4657:6(float16_t) Load 137(f16bias)
+            4658:6(float16_t) ImageSampleDrefImplicitLod 4653 4654 4655 Bias ConstOffset MinLod 4657 709 4656
+            4659:    208(ptr) AccessChain 4604(texel) 207
+            4660:6(float16_t) Load 4659
+            4661:6(float16_t) FAdd 4660 4658
+            4662:    208(ptr) AccessChain 4604(texel) 207
+                              Store 4662 4661
+            4663:         224 Load 226(s2DShadow)
+            4664:  167(fvec3) Load 169(c3)
+            4665:   52(float) Load 4187(lodClamp)
+            4666:   52(float) CompositeExtract 4664 2
+            4667:6(float16_t) ImageSampleDrefImplicitLod 4663 4664 4666 ConstOffset MinLod 722 4665
+            4668:    208(ptr) AccessChain 4604(texel) 207
+            4669:6(float16_t) Load 4668
+            4670:6(float16_t) FAdd 4669 4667
+            4671:    208(ptr) AccessChain 4604(texel) 207
+                              Store 4671 4670
+            4672:         224 Load 226(s2DShadow)
+            4673:154(f16vec2) Load 156(f16c2)
+            4674:   52(float) Load 215(compare)
+            4675:6(float16_t) Load 4194(f16lodClamp)
+            4676:6(float16_t) Load 137(f16bias)
+            4677:6(float16_t) ImageSampleDrefImplicitLod 4672 4673 4674 Bias ConstOffset MinLod 4676 722 4675
+            4678:    208(ptr) AccessChain 4604(texel) 207
+            4679:6(float16_t) Load 4678
+            4680:6(float16_t) FAdd 4679 4677
+            4681:    208(ptr) AccessChain 4604(texel) 207
+                              Store 4681 4680
+            4682:         269 Load 271(s1DArray)
+            4683:   53(fvec2) Load 148(c2)
+            4684:   52(float) Load 4187(lodClamp)
+            4685:  7(f16vec4) ImageSampleImplicitLod 4682 4683 ConstOffset MinLod 709 4684
+            4686:  7(f16vec4) Load 4604(texel)
+            4687:  7(f16vec4) FAdd 4686 4685
+                              Store 4604(texel) 4687
+            4688:         269 Load 271(s1DArray)
+            4689:154(f16vec2) Load 156(f16c2)
+            4690:6(float16_t) Load 4194(f16lodClamp)
+            4691:6(float16_t) Load 137(f16bias)
+            4692:  7(f16vec4) ImageSampleImplicitLod 4688 4689 Bias ConstOffset MinLod 4691 709 4690
+            4693:  7(f16vec4) Load 4604(texel)
+            4694:  7(f16vec4) FAdd 4693 4692
+                              Store 4604(texel) 4694
+            4695:         284 Load 286(s2DArray)
+            4696:  167(fvec3) Load 169(c3)
+            4697:   52(float) Load 4187(lodClamp)
+            4698:  7(f16vec4) ImageSampleImplicitLod 4695 4696 ConstOffset MinLod 722 4697
+            4699:  7(f16vec4) Load 4604(texel)
+            4700:  7(f16vec4) FAdd 4699 4698
+                              Store 4604(texel) 4700
+            4701:         284 Load 286(s2DArray)
+            4702:175(f16vec3) Load 177(f16c3)
+            4703:6(float16_t) Load 4194(f16lodClamp)
+            4704:6(float16_t) Load 137(f16bias)
+            4705:  7(f16vec4) ImageSampleImplicitLod 4701 4702 Bias ConstOffset MinLod 4704 722 4703
+            4706:  7(f16vec4) Load 4604(texel)
+            4707:  7(f16vec4) FAdd 4706 4705
+                              Store 4604(texel) 4707
+            4708:         316 Load 318(s1DArrayShadow)
+            4709:  167(fvec3) Load 169(c3)
+            4710:   52(float) Load 4187(lodClamp)
+            4711:   52(float) CompositeExtract 4709 2
+            4712:6(float16_t) ImageSampleDrefImplicitLod 4708 4709 4711 ConstOffset MinLod 709 4710
+            4713:    208(ptr) AccessChain 4604(texel) 207
+            4714:6(float16_t) Load 4713
+            4715:6(float16_t) FAdd 4714 4712
+            4716:    208(ptr) AccessChain 4604(texel) 207
+                              Store 4716 4715
+            4717:         316 Load 318(s1DArrayShadow)
+            4718:154(f16vec2) Load 156(f16c2)
+            4719:   52(float) Load 215(compare)
+            4720:6(float16_t) Load 4194(f16lodClamp)
+            4721:6(float16_t) Load 137(f16bias)
+            4722:6(float16_t) ImageSampleDrefImplicitLod 4717 4718 4719 Bias ConstOffset MinLod 4721 709 4720
+            4723:    208(ptr) AccessChain 4604(texel) 207
+            4724:6(float16_t) Load 4723
+            4725:6(float16_t) FAdd 4724 4722
+            4726:    208(ptr) AccessChain 4604(texel) 207
+                              Store 4726 4725
+            4727:         337 Load 339(s2DArrayShadow)
+            4728:  249(fvec4) Load 251(c4)
+            4729:   52(float) Load 4187(lodClamp)
+            4730:   52(float) CompositeExtract 4728 3
+            4731:6(float16_t) ImageSampleDrefImplicitLod 4727 4728 4730 ConstOffset MinLod 722 4729
+            4732:    208(ptr) AccessChain 4604(texel) 207
+            4733:6(float16_t) Load 4732
+            4734:6(float16_t) FAdd 4733 4731
+            4735:    208(ptr) AccessChain 4604(texel) 207
+                              Store 4735 4734
+            4736:         337 Load 339(s2DArrayShadow)
+            4737:175(f16vec3) Load 177(f16c3)
+            4738:   52(float) Load 215(compare)
+            4739:6(float16_t) Load 4194(f16lodClamp)
+            4740:6(float16_t) ImageSampleDrefImplicitLod 4736 4737 4738 ConstOffset MinLod 722 4739
+            4741:    208(ptr) AccessChain 4604(texel) 207
+            4742:6(float16_t) Load 4741
+            4743:6(float16_t) FAdd 4742 4740
+            4744:    208(ptr) AccessChain 4604(texel) 207
+                              Store 4744 4743
+            4745:  7(f16vec4) Load 4604(texel)
+                              ReturnValue 4745
                               FunctionEnd
 107(testSparseTextureGradClamp():  7(f16vec4) Function None 8
              108:             Label
-     4872(texel):     64(ptr) Variable Function
-                              Store 4872(texel) 121
-            4873:         143 Load 145(s2D)
-            4874:   53(fvec2) Load 148(c2)
-            4875:   53(fvec2) Load 1409(dPdxy2)
-            4876:   53(fvec2) Load 1409(dPdxy2)
-            4877:   52(float) Load 4311(lodClamp)
-            4878:3146(ResType) ImageSparseSampleExplicitLod 4873 4874 Grad MinLod 4875 4876 4877
-            4879:  7(f16vec4) CompositeExtract 4878 1
-                              Store 4872(texel) 4879
-            4880:     47(int) CompositeExtract 4878 0
-            4881:         143 Load 145(s2D)
-            4882:154(f16vec2) Load 156(f16c2)
-            4883:154(f16vec2) Load 1417(f16dPdxy2)
-            4884:154(f16vec2) Load 1417(f16dPdxy2)
-            4885:6(float16_t) Load 4318(f16lodClamp)
-            4886:3146(ResType) ImageSparseSampleExplicitLod 4881 4882 Grad MinLod 4883 4884 4885
-            4887:  7(f16vec4) CompositeExtract 4886 1
-                              Store 4872(texel) 4887
-            4888:     47(int) CompositeExtract 4886 0
-            4889:         163 Load 165(s3D)
-            4890:  167(fvec3) Load 169(c3)
-            4891:  167(fvec3) Load 1425(dPdxy3)
-            4892:  167(fvec3) Load 1425(dPdxy3)
-            4893:   52(float) Load 4311(lodClamp)
-            4894:3146(ResType) ImageSparseSampleExplicitLod 4889 4890 Grad MinLod 4891 4892 4893
-            4895:  7(f16vec4) CompositeExtract 4894 1
-                              Store 4872(texel) 4895
-            4896:     47(int) CompositeExtract 4894 0
-            4897:         163 Load 165(s3D)
-            4898:175(f16vec3) Load 177(f16c3)
-            4899:175(f16vec3) Load 1433(f16dPdxy3)
-            4900:175(f16vec3) Load 1433(f16dPdxy3)
-            4901:6(float16_t) Load 4318(f16lodClamp)
-            4902:3146(ResType) ImageSparseSampleExplicitLod 4897 4898 Grad MinLod 4899 4900 4901
-            4903:  7(f16vec4) CompositeExtract 4902 1
-                              Store 4872(texel) 4903
-            4904:     47(int) CompositeExtract 4902 0
-            4905:         184 Load 186(sCube)
-            4906:  167(fvec3) Load 169(c3)
-            4907:  167(fvec3) Load 1425(dPdxy3)
-            4908:  167(fvec3) Load 1425(dPdxy3)
-            4909:   52(float) Load 4311(lodClamp)
-            4910:3146(ResType) ImageSparseSampleExplicitLod 4905 4906 Grad MinLod 4907 4908 4909
-            4911:  7(f16vec4) CompositeExtract 4910 1
-                              Store 4872(texel) 4911
-            4912:     47(int) CompositeExtract 4910 0
-            4913:         184 Load 186(sCube)
-            4914:175(f16vec3) Load 177(f16c3)
-            4915:175(f16vec3) Load 1433(f16dPdxy3)
-            4916:175(f16vec3) Load 1433(f16dPdxy3)
-            4917:6(float16_t) Load 4318(f16lodClamp)
-            4918:3146(ResType) ImageSparseSampleExplicitLod 4913 4914 Grad MinLod 4915 4916 4917
-            4919:  7(f16vec4) CompositeExtract 4918 1
-                              Store 4872(texel) 4919
-            4920:     47(int) CompositeExtract 4918 0
-            4921:         224 Load 226(s2DShadow)
-            4922:  167(fvec3) Load 169(c3)
-            4923:   53(fvec2) Load 1409(dPdxy2)
-            4924:   53(fvec2) Load 1409(dPdxy2)
-            4925:   52(float) Load 4311(lodClamp)
-            4926:    208(ptr) AccessChain 4872(texel) 207
-            4927:   52(float) CompositeExtract 4922 2
-            4928:3182(ResType) ImageSparseSampleDrefExplicitLod 4921 4922 4927 Grad MinLod 4923 4924 4925
-            4929:6(float16_t) CompositeExtract 4928 1
-                              Store 4926 4929
-            4930:     47(int) CompositeExtract 4928 0
-            4931:         224 Load 226(s2DShadow)
-            4932:154(f16vec2) Load 156(f16c2)
-            4933:   52(float) Load 215(compare)
-            4934:154(f16vec2) Load 1417(f16dPdxy2)
-            4935:154(f16vec2) Load 1417(f16dPdxy2)
-            4936:6(float16_t) Load 4318(f16lodClamp)
-            4937:    208(ptr) AccessChain 4872(texel) 207
-            4938:3182(ResType) ImageSparseSampleDrefExplicitLod 4931 4932 4933 Grad MinLod 4934 4935 4936
-            4939:6(float16_t) CompositeExtract 4938 1
-                              Store 4937 4939
-            4940:     47(int) CompositeExtract 4938 0
-            4941:         245 Load 247(sCubeShadow)
-            4942:  249(fvec4) Load 251(c4)
-            4943:  167(fvec3) Load 1425(dPdxy3)
-            4944:  167(fvec3) Load 1425(dPdxy3)
-            4945:   52(float) Load 4311(lodClamp)
-            4946:    208(ptr) AccessChain 4872(texel) 207
-            4947:   52(float) CompositeExtract 4942 3
-            4948:3182(ResType) ImageSparseSampleDrefExplicitLod 4941 4942 4947 Grad MinLod 4943 4944 4945
-            4949:6(float16_t) CompositeExtract 4948 1
-                              Store 4946 4949
-            4950:     47(int) CompositeExtract 4948 0
-            4951:         245 Load 247(sCubeShadow)
-            4952:175(f16vec3) Load 177(f16c3)
-            4953:   52(float) Load 215(compare)
-            4954:175(f16vec3) Load 1433(f16dPdxy3)
-            4955:175(f16vec3) Load 1433(f16dPdxy3)
-            4956:6(float16_t) Load 4318(f16lodClamp)
-            4957:    208(ptr) AccessChain 4872(texel) 207
-            4958:3182(ResType) ImageSparseSampleDrefExplicitLod 4951 4952 4953 Grad MinLod 4954 4955 4956
-            4959:6(float16_t) CompositeExtract 4958 1
-                              Store 4957 4959
-            4960:     47(int) CompositeExtract 4958 0
-            4961:         284 Load 286(s2DArray)
-            4962:  167(fvec3) Load 169(c3)
-            4963:   53(fvec2) Load 1409(dPdxy2)
-            4964:   53(fvec2) Load 1409(dPdxy2)
-            4965:   52(float) Load 4311(lodClamp)
-            4966:3146(ResType) ImageSparseSampleExplicitLod 4961 4962 Grad MinLod 4963 4964 4965
-            4967:  7(f16vec4) CompositeExtract 4966 1
-                              Store 4872(texel) 4967
-            4968:     47(int) CompositeExtract 4966 0
-            4969:         284 Load 286(s2DArray)
-            4970:175(f16vec3) Load 177(f16c3)
-            4971:154(f16vec2) Load 1417(f16dPdxy2)
-            4972:154(f16vec2) Load 1417(f16dPdxy2)
-            4973:6(float16_t) Load 4318(f16lodClamp)
-            4974:3146(ResType) ImageSparseSampleExplicitLod 4969 4970 Grad MinLod 4971 4972 4973
-            4975:  7(f16vec4) CompositeExtract 4974 1
-                              Store 4872(texel) 4975
-            4976:     47(int) CompositeExtract 4974 0
-            4977:         337 Load 339(s2DArrayShadow)
-            4978:  249(fvec4) Load 251(c4)
-            4979:   53(fvec2) Load 1409(dPdxy2)
-            4980:   53(fvec2) Load 1409(dPdxy2)
-            4981:   52(float) Load 4311(lodClamp)
-            4982:    208(ptr) AccessChain 4872(texel) 207
-            4983:   52(float) CompositeExtract 4978 3
-            4984:3182(ResType) ImageSparseSampleDrefExplicitLod 4977 4978 4983 Grad MinLod 4979 4980 4981
-            4985:6(float16_t) CompositeExtract 4984 1
-                              Store 4982 4985
-            4986:     47(int) CompositeExtract 4984 0
-            4987:         337 Load 339(s2DArrayShadow)
-            4988:175(f16vec3) Load 177(f16c3)
-            4989:   52(float) Load 215(compare)
-            4990:154(f16vec2) Load 1417(f16dPdxy2)
-            4991:154(f16vec2) Load 1417(f16dPdxy2)
-            4992:6(float16_t) Load 4318(f16lodClamp)
-            4993:    208(ptr) AccessChain 4872(texel) 207
-            4994:3182(ResType) ImageSparseSampleDrefExplicitLod 4987 4988 4989 Grad MinLod 4990 4991 4992
-            4995:6(float16_t) CompositeExtract 4994 1
-                              Store 4993 4995
-            4996:     47(int) CompositeExtract 4994 0
-            4997:         299 Load 301(sCubeArray)
-            4998:  249(fvec4) Load 251(c4)
-            4999:  167(fvec3) Load 1425(dPdxy3)
-            5000:  167(fvec3) Load 1425(dPdxy3)
-            5001:   52(float) Load 4311(lodClamp)
-            5002:3146(ResType) ImageSparseSampleExplicitLod 4997 4998 Grad MinLod 4999 5000 5001
-            5003:  7(f16vec4) CompositeExtract 5002 1
-                              Store 4872(texel) 5003
-            5004:     47(int) CompositeExtract 5002 0
-            5005:         299 Load 301(sCubeArray)
-            5006:  7(f16vec4) Load 309(f16c4)
-            5007:175(f16vec3) Load 1433(f16dPdxy3)
-            5008:175(f16vec3) Load 1433(f16dPdxy3)
-            5009:6(float16_t) Load 4318(f16lodClamp)
-            5010:3146(ResType) ImageSparseSampleExplicitLod 5005 5006 Grad MinLod 5007 5008 5009
-            5011:  7(f16vec4) CompositeExtract 5010 1
-                              Store 4872(texel) 5011
-            5012:     47(int) CompositeExtract 5010 0
-            5013:  7(f16vec4) Load 4872(texel)
-                              ReturnValue 5013
+     4748(texel):     64(ptr) Variable Function
+                              Store 4748(texel) 121
+            4749:         143 Load 145(s2D)
+            4750:   53(fvec2) Load 148(c2)
+            4751:   53(fvec2) Load 1407(dPdxy2)
+            4752:   52(float) Load 4187(lodClamp)
+            4753:3056(ResType) ImageSparseSampleExplicitLod 4749 4750 Grad MinLod 4751 4751 4752
+            4754:  7(f16vec4) CompositeExtract 4753 1
+                              Store 4748(texel) 4754
+            4755:     47(int) CompositeExtract 4753 0
+            4756:         143 Load 145(s2D)
+            4757:154(f16vec2) Load 156(f16c2)
+            4758:154(f16vec2) Load 1414(f16dPdxy2)
+            4759:6(float16_t) Load 4194(f16lodClamp)
+            4760:3056(ResType) ImageSparseSampleExplicitLod 4756 4757 Grad MinLod 4758 4758 4759
+            4761:  7(f16vec4) CompositeExtract 4760 1
+                              Store 4748(texel) 4761
+            4762:     47(int) CompositeExtract 4760 0
+            4763:         163 Load 165(s3D)
+            4764:  167(fvec3) Load 169(c3)
+            4765:  167(fvec3) Load 1421(dPdxy3)
+            4766:   52(float) Load 4187(lodClamp)
+            4767:3056(ResType) ImageSparseSampleExplicitLod 4763 4764 Grad MinLod 4765 4765 4766
+            4768:  7(f16vec4) CompositeExtract 4767 1
+                              Store 4748(texel) 4768
+            4769:     47(int) CompositeExtract 4767 0
+            4770:         163 Load 165(s3D)
+            4771:175(f16vec3) Load 177(f16c3)
+            4772:175(f16vec3) Load 1428(f16dPdxy3)
+            4773:6(float16_t) Load 4194(f16lodClamp)
+            4774:3056(ResType) ImageSparseSampleExplicitLod 4770 4771 Grad MinLod 4772 4772 4773
+            4775:  7(f16vec4) CompositeExtract 4774 1
+                              Store 4748(texel) 4775
+            4776:     47(int) CompositeExtract 4774 0
+            4777:         184 Load 186(sCube)
+            4778:  167(fvec3) Load 169(c3)
+            4779:  167(fvec3) Load 1421(dPdxy3)
+            4780:   52(float) Load 4187(lodClamp)
+            4781:3056(ResType) ImageSparseSampleExplicitLod 4777 4778 Grad MinLod 4779 4779 4780
+            4782:  7(f16vec4) CompositeExtract 4781 1
+                              Store 4748(texel) 4782
+            4783:     47(int) CompositeExtract 4781 0
+            4784:         184 Load 186(sCube)
+            4785:175(f16vec3) Load 177(f16c3)
+            4786:175(f16vec3) Load 1428(f16dPdxy3)
+            4787:6(float16_t) Load 4194(f16lodClamp)
+            4788:3056(ResType) ImageSparseSampleExplicitLod 4784 4785 Grad MinLod 4786 4786 4787
+            4789:  7(f16vec4) CompositeExtract 4788 1
+                              Store 4748(texel) 4789
+            4790:     47(int) CompositeExtract 4788 0
+            4791:         224 Load 226(s2DShadow)
+            4792:  167(fvec3) Load 169(c3)
+            4793:   53(fvec2) Load 1407(dPdxy2)
+            4794:   52(float) Load 4187(lodClamp)
+            4795:    208(ptr) AccessChain 4748(texel) 207
+            4796:   52(float) CompositeExtract 4792 2
+            4797:3092(ResType) ImageSparseSampleDrefExplicitLod 4791 4792 4796 Grad MinLod 4793 4793 4794
+            4798:6(float16_t) CompositeExtract 4797 1
+                              Store 4795 4798
+            4799:     47(int) CompositeExtract 4797 0
+            4800:         224 Load 226(s2DShadow)
+            4801:154(f16vec2) Load 156(f16c2)
+            4802:   52(float) Load 215(compare)
+            4803:154(f16vec2) Load 1414(f16dPdxy2)
+            4804:6(float16_t) Load 4194(f16lodClamp)
+            4805:    208(ptr) AccessChain 4748(texel) 207
+            4806:3092(ResType) ImageSparseSampleDrefExplicitLod 4800 4801 4802 Grad MinLod 4803 4803 4804
+            4807:6(float16_t) CompositeExtract 4806 1
+                              Store 4805 4807
+            4808:     47(int) CompositeExtract 4806 0
+            4809:         245 Load 247(sCubeShadow)
+            4810:  249(fvec4) Load 251(c4)
+            4811:  167(fvec3) Load 1421(dPdxy3)
+            4812:   52(float) Load 4187(lodClamp)
+            4813:    208(ptr) AccessChain 4748(texel) 207
+            4814:   52(float) CompositeExtract 4810 3
+            4815:3092(ResType) ImageSparseSampleDrefExplicitLod 4809 4810 4814 Grad MinLod 4811 4811 4812
+            4816:6(float16_t) CompositeExtract 4815 1
+                              Store 4813 4816
+            4817:     47(int) CompositeExtract 4815 0
+            4818:         245 Load 247(sCubeShadow)
+            4819:175(f16vec3) Load 177(f16c3)
+            4820:   52(float) Load 215(compare)
+            4821:175(f16vec3) Load 1428(f16dPdxy3)
+            4822:6(float16_t) Load 4194(f16lodClamp)
+            4823:    208(ptr) AccessChain 4748(texel) 207
+            4824:3092(ResType) ImageSparseSampleDrefExplicitLod 4818 4819 4820 Grad MinLod 4821 4821 4822
+            4825:6(float16_t) CompositeExtract 4824 1
+                              Store 4823 4825
+            4826:     47(int) CompositeExtract 4824 0
+            4827:         284 Load 286(s2DArray)
+            4828:  167(fvec3) Load 169(c3)
+            4829:   53(fvec2) Load 1407(dPdxy2)
+            4830:   52(float) Load 4187(lodClamp)
+            4831:3056(ResType) ImageSparseSampleExplicitLod 4827 4828 Grad MinLod 4829 4829 4830
+            4832:  7(f16vec4) CompositeExtract 4831 1
+                              Store 4748(texel) 4832
+            4833:     47(int) CompositeExtract 4831 0
+            4834:         284 Load 286(s2DArray)
+            4835:175(f16vec3) Load 177(f16c3)
+            4836:154(f16vec2) Load 1414(f16dPdxy2)
+            4837:6(float16_t) Load 4194(f16lodClamp)
+            4838:3056(ResType) ImageSparseSampleExplicitLod 4834 4835 Grad MinLod 4836 4836 4837
+            4839:  7(f16vec4) CompositeExtract 4838 1
+                              Store 4748(texel) 4839
+            4840:     47(int) CompositeExtract 4838 0
+            4841:         337 Load 339(s2DArrayShadow)
+            4842:  249(fvec4) Load 251(c4)
+            4843:   53(fvec2) Load 1407(dPdxy2)
+            4844:   52(float) Load 4187(lodClamp)
+            4845:    208(ptr) AccessChain 4748(texel) 207
+            4846:   52(float) CompositeExtract 4842 3
+            4847:3092(ResType) ImageSparseSampleDrefExplicitLod 4841 4842 4846 Grad MinLod 4843 4843 4844
+            4848:6(float16_t) CompositeExtract 4847 1
+                              Store 4845 4848
+            4849:     47(int) CompositeExtract 4847 0
+            4850:         337 Load 339(s2DArrayShadow)
+            4851:175(f16vec3) Load 177(f16c3)
+            4852:   52(float) Load 215(compare)
+            4853:154(f16vec2) Load 1414(f16dPdxy2)
+            4854:6(float16_t) Load 4194(f16lodClamp)
+            4855:    208(ptr) AccessChain 4748(texel) 207
+            4856:3092(ResType) ImageSparseSampleDrefExplicitLod 4850 4851 4852 Grad MinLod 4853 4853 4854
+            4857:6(float16_t) CompositeExtract 4856 1
+                              Store 4855 4857
+            4858:     47(int) CompositeExtract 4856 0
+            4859:         299 Load 301(sCubeArray)
+            4860:  249(fvec4) Load 251(c4)
+            4861:  167(fvec3) Load 1421(dPdxy3)
+            4862:   52(float) Load 4187(lodClamp)
+            4863:3056(ResType) ImageSparseSampleExplicitLod 4859 4860 Grad MinLod 4861 4861 4862
+            4864:  7(f16vec4) CompositeExtract 4863 1
+                              Store 4748(texel) 4864
+            4865:     47(int) CompositeExtract 4863 0
+            4866:         299 Load 301(sCubeArray)
+            4867:  7(f16vec4) Load 309(f16c4)
+            4868:175(f16vec3) Load 1428(f16dPdxy3)
+            4869:6(float16_t) Load 4194(f16lodClamp)
+            4870:3056(ResType) ImageSparseSampleExplicitLod 4866 4867 Grad MinLod 4868 4868 4869
+            4871:  7(f16vec4) CompositeExtract 4870 1
+                              Store 4748(texel) 4871
+            4872:     47(int) CompositeExtract 4870 0
+            4873:  7(f16vec4) Load 4748(texel)
+                              ReturnValue 4873
                               FunctionEnd
 109(testTextureGradClamp():  7(f16vec4) Function None 8
              110:             Label
-     5016(texel):     64(ptr) Variable Function
-                              Store 5016(texel) 121
-            5017:         123 Load 125(s1D)
-            5018:   52(float) Load 128(c1)
-            5019:   52(float) Load 1393(dPdxy1)
-            5020:   52(float) Load 1393(dPdxy1)
-            5021:   52(float) Load 4311(lodClamp)
-            5022:  7(f16vec4) ImageSampleExplicitLod 5017 5018 Grad MinLod 5019 5020 5021
-            5023:  7(f16vec4) Load 5016(texel)
-            5024:  7(f16vec4) FAdd 5023 5022
-                              Store 5016(texel) 5024
-            5025:         123 Load 125(s1D)
-            5026:6(float16_t) Load 135(f16c1)
-            5027:6(float16_t) Load 1401(f16dPdxy1)
-            5028:6(float16_t) Load 1401(f16dPdxy1)
-            5029:6(float16_t) Load 4318(f16lodClamp)
-            5030:  7(f16vec4) ImageSampleExplicitLod 5025 5026 Grad MinLod 5027 5028 5029
-            5031:  7(f16vec4) Load 5016(texel)
-            5032:  7(f16vec4) FAdd 5031 5030
-                              Store 5016(texel) 5032
-            5033:         143 Load 145(s2D)
-            5034:   53(fvec2) Load 148(c2)
-            5035:   53(fvec2) Load 1409(dPdxy2)
-            5036:   53(fvec2) Load 1409(dPdxy2)
-            5037:   52(float) Load 4311(lodClamp)
-            5038:  7(f16vec4) ImageSampleExplicitLod 5033 5034 Grad MinLod 5035 5036 5037
-            5039:  7(f16vec4) Load 5016(texel)
-            5040:  7(f16vec4) FAdd 5039 5038
-                              Store 5016(texel) 5040
-            5041:         143 Load 145(s2D)
-            5042:154(f16vec2) Load 156(f16c2)
-            5043:154(f16vec2) Load 1417(f16dPdxy2)
-            5044:154(f16vec2) Load 1417(f16dPdxy2)
-            5045:6(float16_t) Load 4318(f16lodClamp)
-            5046:  7(f16vec4) ImageSampleExplicitLod 5041 5042 Grad MinLod 5043 5044 5045
-            5047:  7(f16vec4) Load 5016(texel)
-            5048:  7(f16vec4) FAdd 5047 5046
-                              Store 5016(texel) 5048
-            5049:         163 Load 165(s3D)
-            5050:  167(fvec3) Load 169(c3)
-            5051:  167(fvec3) Load 1425(dPdxy3)
-            5052:  167(fvec3) Load 1425(dPdxy3)
-            5053:   52(float) Load 4311(lodClamp)
-            5054:  7(f16vec4) ImageSampleExplicitLod 5049 5050 Grad MinLod 5051 5052 5053
-            5055:  7(f16vec4) Load 5016(texel)
-            5056:  7(f16vec4) FAdd 5055 5054
-                              Store 5016(texel) 5056
-            5057:         163 Load 165(s3D)
-            5058:175(f16vec3) Load 177(f16c3)
-            5059:175(f16vec3) Load 1433(f16dPdxy3)
-            5060:175(f16vec3) Load 1433(f16dPdxy3)
-            5061:6(float16_t) Load 4318(f16lodClamp)
-            5062:  7(f16vec4) ImageSampleExplicitLod 5057 5058 Grad MinLod 5059 5060 5061
-            5063:  7(f16vec4) Load 5016(texel)
-            5064:  7(f16vec4) FAdd 5063 5062
-                              Store 5016(texel) 5064
-            5065:         184 Load 186(sCube)
-            5066:  167(fvec3) Load 169(c3)
-            5067:  167(fvec3) Load 1425(dPdxy3)
-            5068:  167(fvec3) Load 1425(dPdxy3)
-            5069:   52(float) Load 4311(lodClamp)
-            5070:  7(f16vec4) ImageSampleExplicitLod 5065 5066 Grad MinLod 5067 5068 5069
-            5071:  7(f16vec4) Load 5016(texel)
-            5072:  7(f16vec4) FAdd 5071 5070
-                              Store 5016(texel) 5072
-            5073:         184 Load 186(sCube)
-            5074:175(f16vec3) Load 177(f16c3)
-            5075:175(f16vec3) Load 1433(f16dPdxy3)
-            5076:175(f16vec3) Load 1433(f16dPdxy3)
-            5077:6(float16_t) Load 4318(f16lodClamp)
-            5078:  7(f16vec4) ImageSampleExplicitLod 5073 5074 Grad MinLod 5075 5076 5077
-            5079:  7(f16vec4) Load 5016(texel)
-            5080:  7(f16vec4) FAdd 5079 5078
-                              Store 5016(texel) 5080
-            5081:         199 Load 201(s1DShadow)
-            5082:  167(fvec3) Load 169(c3)
-            5083:   52(float) Load 1393(dPdxy1)
-            5084:   52(float) Load 1393(dPdxy1)
-            5085:   52(float) Load 4311(lodClamp)
-            5086:   52(float) CompositeExtract 5082 2
-            5087:6(float16_t) ImageSampleDrefExplicitLod 5081 5082 5086 Grad MinLod 5083 5084 5085
-            5088:    208(ptr) AccessChain 5016(texel) 207
-            5089:6(float16_t) Load 5088
-            5090:6(float16_t) FAdd 5089 5087
-            5091:    208(ptr) AccessChain 5016(texel) 207
-                              Store 5091 5090
-            5092:         199 Load 201(s1DShadow)
-            5093:154(f16vec2) Load 156(f16c2)
-            5094:   52(float) Load 215(compare)
-            5095:6(float16_t) Load 1401(f16dPdxy1)
-            5096:6(float16_t) Load 1401(f16dPdxy1)
-            5097:6(float16_t) Load 4318(f16lodClamp)
-            5098:6(float16_t) ImageSampleDrefExplicitLod 5092 5093 5094 Grad MinLod 5095 5096 5097
-            5099:    208(ptr) AccessChain 5016(texel) 207
-            5100:6(float16_t) Load 5099
-            5101:6(float16_t) FAdd 5100 5098
-            5102:    208(ptr) AccessChain 5016(texel) 207
-                              Store 5102 5101
-            5103:         224 Load 226(s2DShadow)
-            5104:  167(fvec3) Load 169(c3)
-            5105:   53(fvec2) Load 1409(dPdxy2)
-            5106:   53(fvec2) Load 1409(dPdxy2)
-            5107:   52(float) Load 4311(lodClamp)
-            5108:   52(float) CompositeExtract 5104 2
-            5109:6(float16_t) ImageSampleDrefExplicitLod 5103 5104 5108 Grad MinLod 5105 5106 5107
-            5110:    208(ptr) AccessChain 5016(texel) 207
-            5111:6(float16_t) Load 5110
-            5112:6(float16_t) FAdd 5111 5109
-            5113:    208(ptr) AccessChain 5016(texel) 207
-                              Store 5113 5112
-            5114:         224 Load 226(s2DShadow)
-            5115:154(f16vec2) Load 156(f16c2)
-            5116:   52(float) Load 215(compare)
-            5117:154(f16vec2) Load 1417(f16dPdxy2)
-            5118:154(f16vec2) Load 1417(f16dPdxy2)
-            5119:6(float16_t) Load 4318(f16lodClamp)
-            5120:6(float16_t) ImageSampleDrefExplicitLod 5114 5115 5116 Grad MinLod 5117 5118 5119
-            5121:    208(ptr) AccessChain 5016(texel) 207
-            5122:6(float16_t) Load 5121
-            5123:6(float16_t) FAdd 5122 5120
-            5124:    208(ptr) AccessChain 5016(texel) 207
-                              Store 5124 5123
-            5125:         245 Load 247(sCubeShadow)
-            5126:  249(fvec4) Load 251(c4)
-            5127:  167(fvec3) Load 1425(dPdxy3)
-            5128:  167(fvec3) Load 1425(dPdxy3)
-            5129:   52(float) Load 4311(lodClamp)
-            5130:   52(float) CompositeExtract 5126 3
-            5131:6(float16_t) ImageSampleDrefExplicitLod 5125 5126 5130 Grad MinLod 5127 5128 5129
-            5132:    208(ptr) AccessChain 5016(texel) 207
-            5133:6(float16_t) Load 5132
-            5134:6(float16_t) FAdd 5133 5131
-            5135:    208(ptr) AccessChain 5016(texel) 207
-                              Store 5135 5134
-            5136:         245 Load 247(sCubeShadow)
-            5137:175(f16vec3) Load 177(f16c3)
-            5138:   52(float) Load 215(compare)
-            5139:175(f16vec3) Load 1433(f16dPdxy3)
-            5140:175(f16vec3) Load 1433(f16dPdxy3)
-            5141:6(float16_t) Load 4318(f16lodClamp)
-            5142:6(float16_t) ImageSampleDrefExplicitLod 5136 5137 5138 Grad MinLod 5139 5140 5141
-            5143:    208(ptr) AccessChain 5016(texel) 207
-            5144:6(float16_t) Load 5143
-            5145:6(float16_t) FAdd 5144 5142
-            5146:    208(ptr) AccessChain 5016(texel) 207
-                              Store 5146 5145
-            5147:         269 Load 271(s1DArray)
-            5148:   53(fvec2) Load 148(c2)
-            5149:   52(float) Load 1393(dPdxy1)
-            5150:   52(float) Load 1393(dPdxy1)
-            5151:   52(float) Load 4311(lodClamp)
-            5152:  7(f16vec4) ImageSampleExplicitLod 5147 5148 Grad MinLod 5149 5150 5151
-            5153:  7(f16vec4) Load 5016(texel)
-            5154:  7(f16vec4) FAdd 5153 5152
-                              Store 5016(texel) 5154
-            5155:         269 Load 271(s1DArray)
-            5156:154(f16vec2) Load 156(f16c2)
-            5157:6(float16_t) Load 1401(f16dPdxy1)
-            5158:6(float16_t) Load 1401(f16dPdxy1)
-            5159:6(float16_t) Load 4318(f16lodClamp)
-            5160:  7(f16vec4) ImageSampleExplicitLod 5155 5156 Grad MinLod 5157 5158 5159
-            5161:  7(f16vec4) Load 5016(texel)
-            5162:  7(f16vec4) FAdd 5161 5160
-                              Store 5016(texel) 5162
-            5163:         284 Load 286(s2DArray)
-            5164:  167(fvec3) Load 169(c3)
-            5165:   53(fvec2) Load 1409(dPdxy2)
-            5166:   53(fvec2) Load 1409(dPdxy2)
-            5167:   52(float) Load 4311(lodClamp)
-            5168:  7(f16vec4) ImageSampleExplicitLod 5163 5164 Grad MinLod 5165 5166 5167
-            5169:  7(f16vec4) Load 5016(texel)
-            5170:  7(f16vec4) FAdd 5169 5168
-                              Store 5016(texel) 5170
-            5171:         284 Load 286(s2DArray)
-            5172:175(f16vec3) Load 177(f16c3)
-            5173:154(f16vec2) Load 1417(f16dPdxy2)
-            5174:154(f16vec2) Load 1417(f16dPdxy2)
-            5175:6(float16_t) Load 4318(f16lodClamp)
-            5176:  7(f16vec4) ImageSampleExplicitLod 5171 5172 Grad MinLod 5173 5174 5175
-            5177:  7(f16vec4) Load 5016(texel)
-            5178:  7(f16vec4) FAdd 5177 5176
-                              Store 5016(texel) 5178
-            5179:         316 Load 318(s1DArrayShadow)
-            5180:  167(fvec3) Load 169(c3)
-            5181:   52(float) Load 1393(dPdxy1)
-            5182:   52(float) Load 1393(dPdxy1)
-            5183:   52(float) Load 4311(lodClamp)
-            5184:   52(float) CompositeExtract 5180 2
-            5185:6(float16_t) ImageSampleDrefExplicitLod 5179 5180 5184 Grad MinLod 5181 5182 5183
-            5186:    208(ptr) AccessChain 5016(texel) 207
-            5187:6(float16_t) Load 5186
-            5188:6(float16_t) FAdd 5187 5185
-            5189:    208(ptr) AccessChain 5016(texel) 207
-                              Store 5189 5188
-            5190:         316 Load 318(s1DArrayShadow)
-            5191:154(f16vec2) Load 156(f16c2)
-            5192:   52(float) Load 215(compare)
-            5193:6(float16_t) Load 1401(f16dPdxy1)
-            5194:6(float16_t) Load 1401(f16dPdxy1)
-            5195:6(float16_t) Load 4318(f16lodClamp)
-            5196:6(float16_t) ImageSampleDrefExplicitLod 5190 5191 5192 Grad MinLod 5193 5194 5195
-            5197:    208(ptr) AccessChain 5016(texel) 207
-            5198:6(float16_t) Load 5197
-            5199:6(float16_t) FAdd 5198 5196
-            5200:    208(ptr) AccessChain 5016(texel) 207
-                              Store 5200 5199
-            5201:         337 Load 339(s2DArrayShadow)
-            5202:  249(fvec4) Load 251(c4)
-            5203:   53(fvec2) Load 1409(dPdxy2)
-            5204:   53(fvec2) Load 1409(dPdxy2)
-            5205:   52(float) Load 4311(lodClamp)
-            5206:   52(float) CompositeExtract 5202 3
-            5207:6(float16_t) ImageSampleDrefExplicitLod 5201 5202 5206 Grad MinLod 5203 5204 5205
-            5208:    208(ptr) AccessChain 5016(texel) 207
-            5209:6(float16_t) Load 5208
-            5210:6(float16_t) FAdd 5209 5207
-            5211:    208(ptr) AccessChain 5016(texel) 207
-                              Store 5211 5210
-            5212:         337 Load 339(s2DArrayShadow)
-            5213:175(f16vec3) Load 177(f16c3)
-            5214:   52(float) Load 215(compare)
-            5215:154(f16vec2) Load 1417(f16dPdxy2)
-            5216:154(f16vec2) Load 1417(f16dPdxy2)
-            5217:6(float16_t) Load 4318(f16lodClamp)
-            5218:6(float16_t) ImageSampleDrefExplicitLod 5212 5213 5214 Grad MinLod 5215 5216 5217
-            5219:    208(ptr) AccessChain 5016(texel) 207
-            5220:6(float16_t) Load 5219
-            5221:6(float16_t) FAdd 5220 5218
-            5222:    208(ptr) AccessChain 5016(texel) 207
-                              Store 5222 5221
-            5223:         299 Load 301(sCubeArray)
-            5224:  249(fvec4) Load 251(c4)
-            5225:  167(fvec3) Load 1425(dPdxy3)
-            5226:  167(fvec3) Load 1425(dPdxy3)
-            5227:   52(float) Load 4311(lodClamp)
-            5228:  7(f16vec4) ImageSampleExplicitLod 5223 5224 Grad MinLod 5225 5226 5227
-            5229:  7(f16vec4) Load 5016(texel)
-            5230:  7(f16vec4) FAdd 5229 5228
-                              Store 5016(texel) 5230
-            5231:         299 Load 301(sCubeArray)
-            5232:  7(f16vec4) Load 309(f16c4)
-            5233:175(f16vec3) Load 1433(f16dPdxy3)
-            5234:175(f16vec3) Load 1433(f16dPdxy3)
-            5235:6(float16_t) Load 4318(f16lodClamp)
-            5236:  7(f16vec4) ImageSampleExplicitLod 5231 5232 Grad MinLod 5233 5234 5235
-            5237:  7(f16vec4) Load 5016(texel)
-            5238:  7(f16vec4) FAdd 5237 5236
-                              Store 5016(texel) 5238
-            5239:  7(f16vec4) Load 5016(texel)
-                              ReturnValue 5239
+     4876(texel):     64(ptr) Variable Function
+                              Store 4876(texel) 121
+            4877:         123 Load 125(s1D)
+            4878:   52(float) Load 128(c1)
+            4879:   52(float) Load 1393(dPdxy1)
+            4880:   52(float) Load 4187(lodClamp)
+            4881:  7(f16vec4) ImageSampleExplicitLod 4877 4878 Grad MinLod 4879 4879 4880
+            4882:  7(f16vec4) Load 4876(texel)
+            4883:  7(f16vec4) FAdd 4882 4881
+                              Store 4876(texel) 4883
+            4884:         123 Load 125(s1D)
+            4885:6(float16_t) Load 135(f16c1)
+            4886:6(float16_t) Load 1400(f16dPdxy1)
+            4887:6(float16_t) Load 4194(f16lodClamp)
+            4888:  7(f16vec4) ImageSampleExplicitLod 4884 4885 Grad MinLod 4886 4886 4887
+            4889:  7(f16vec4) Load 4876(texel)
+            4890:  7(f16vec4) FAdd 4889 4888
+                              Store 4876(texel) 4890
+            4891:         143 Load 145(s2D)
+            4892:   53(fvec2) Load 148(c2)
+            4893:   53(fvec2) Load 1407(dPdxy2)
+            4894:   52(float) Load 4187(lodClamp)
+            4895:  7(f16vec4) ImageSampleExplicitLod 4891 4892 Grad MinLod 4893 4893 4894
+            4896:  7(f16vec4) Load 4876(texel)
+            4897:  7(f16vec4) FAdd 4896 4895
+                              Store 4876(texel) 4897
+            4898:         143 Load 145(s2D)
+            4899:154(f16vec2) Load 156(f16c2)
+            4900:154(f16vec2) Load 1414(f16dPdxy2)
+            4901:6(float16_t) Load 4194(f16lodClamp)
+            4902:  7(f16vec4) ImageSampleExplicitLod 4898 4899 Grad MinLod 4900 4900 4901
+            4903:  7(f16vec4) Load 4876(texel)
+            4904:  7(f16vec4) FAdd 4903 4902
+                              Store 4876(texel) 4904
+            4905:         163 Load 165(s3D)
+            4906:  167(fvec3) Load 169(c3)
+            4907:  167(fvec3) Load 1421(dPdxy3)
+            4908:   52(float) Load 4187(lodClamp)
+            4909:  7(f16vec4) ImageSampleExplicitLod 4905 4906 Grad MinLod 4907 4907 4908
+            4910:  7(f16vec4) Load 4876(texel)
+            4911:  7(f16vec4) FAdd 4910 4909
+                              Store 4876(texel) 4911
+            4912:         163 Load 165(s3D)
+            4913:175(f16vec3) Load 177(f16c3)
+            4914:175(f16vec3) Load 1428(f16dPdxy3)
+            4915:6(float16_t) Load 4194(f16lodClamp)
+            4916:  7(f16vec4) ImageSampleExplicitLod 4912 4913 Grad MinLod 4914 4914 4915
+            4917:  7(f16vec4) Load 4876(texel)
+            4918:  7(f16vec4) FAdd 4917 4916
+                              Store 4876(texel) 4918
+            4919:         184 Load 186(sCube)
+            4920:  167(fvec3) Load 169(c3)
+            4921:  167(fvec3) Load 1421(dPdxy3)
+            4922:   52(float) Load 4187(lodClamp)
+            4923:  7(f16vec4) ImageSampleExplicitLod 4919 4920 Grad MinLod 4921 4921 4922
+            4924:  7(f16vec4) Load 4876(texel)
+            4925:  7(f16vec4) FAdd 4924 4923
+                              Store 4876(texel) 4925
+            4926:         184 Load 186(sCube)
+            4927:175(f16vec3) Load 177(f16c3)
+            4928:175(f16vec3) Load 1428(f16dPdxy3)
+            4929:6(float16_t) Load 4194(f16lodClamp)
+            4930:  7(f16vec4) ImageSampleExplicitLod 4926 4927 Grad MinLod 4928 4928 4929
+            4931:  7(f16vec4) Load 4876(texel)
+            4932:  7(f16vec4) FAdd 4931 4930
+                              Store 4876(texel) 4932
+            4933:         199 Load 201(s1DShadow)
+            4934:  167(fvec3) Load 169(c3)
+            4935:   52(float) Load 1393(dPdxy1)
+            4936:   52(float) Load 4187(lodClamp)
+            4937:   52(float) CompositeExtract 4934 2
+            4938:6(float16_t) ImageSampleDrefExplicitLod 4933 4934 4937 Grad MinLod 4935 4935 4936
+            4939:    208(ptr) AccessChain 4876(texel) 207
+            4940:6(float16_t) Load 4939
+            4941:6(float16_t) FAdd 4940 4938
+            4942:    208(ptr) AccessChain 4876(texel) 207
+                              Store 4942 4941
+            4943:         199 Load 201(s1DShadow)
+            4944:154(f16vec2) Load 156(f16c2)
+            4945:   52(float) Load 215(compare)
+            4946:6(float16_t) Load 1400(f16dPdxy1)
+            4947:6(float16_t) Load 4194(f16lodClamp)
+            4948:6(float16_t) ImageSampleDrefExplicitLod 4943 4944 4945 Grad MinLod 4946 4946 4947
+            4949:    208(ptr) AccessChain 4876(texel) 207
+            4950:6(float16_t) Load 4949
+            4951:6(float16_t) FAdd 4950 4948
+            4952:    208(ptr) AccessChain 4876(texel) 207
+                              Store 4952 4951
+            4953:         224 Load 226(s2DShadow)
+            4954:  167(fvec3) Load 169(c3)
+            4955:   53(fvec2) Load 1407(dPdxy2)
+            4956:   52(float) Load 4187(lodClamp)
+            4957:   52(float) CompositeExtract 4954 2
+            4958:6(float16_t) ImageSampleDrefExplicitLod 4953 4954 4957 Grad MinLod 4955 4955 4956
+            4959:    208(ptr) AccessChain 4876(texel) 207
+            4960:6(float16_t) Load 4959
+            4961:6(float16_t) FAdd 4960 4958
+            4962:    208(ptr) AccessChain 4876(texel) 207
+                              Store 4962 4961
+            4963:         224 Load 226(s2DShadow)
+            4964:154(f16vec2) Load 156(f16c2)
+            4965:   52(float) Load 215(compare)
+            4966:154(f16vec2) Load 1414(f16dPdxy2)
+            4967:6(float16_t) Load 4194(f16lodClamp)
+            4968:6(float16_t) ImageSampleDrefExplicitLod 4963 4964 4965 Grad MinLod 4966 4966 4967
+            4969:    208(ptr) AccessChain 4876(texel) 207
+            4970:6(float16_t) Load 4969
+            4971:6(float16_t) FAdd 4970 4968
+            4972:    208(ptr) AccessChain 4876(texel) 207
+                              Store 4972 4971
+            4973:         245 Load 247(sCubeShadow)
+            4974:  249(fvec4) Load 251(c4)
+            4975:  167(fvec3) Load 1421(dPdxy3)
+            4976:   52(float) Load 4187(lodClamp)
+            4977:   52(float) CompositeExtract 4974 3
+            4978:6(float16_t) ImageSampleDrefExplicitLod 4973 4974 4977 Grad MinLod 4975 4975 4976
+            4979:    208(ptr) AccessChain 4876(texel) 207
+            4980:6(float16_t) Load 4979
+            4981:6(float16_t) FAdd 4980 4978
+            4982:    208(ptr) AccessChain 4876(texel) 207
+                              Store 4982 4981
+            4983:         245 Load 247(sCubeShadow)
+            4984:175(f16vec3) Load 177(f16c3)
+            4985:   52(float) Load 215(compare)
+            4986:175(f16vec3) Load 1428(f16dPdxy3)
+            4987:6(float16_t) Load 4194(f16lodClamp)
+            4988:6(float16_t) ImageSampleDrefExplicitLod 4983 4984 4985 Grad MinLod 4986 4986 4987
+            4989:    208(ptr) AccessChain 4876(texel) 207
+            4990:6(float16_t) Load 4989
+            4991:6(float16_t) FAdd 4990 4988
+            4992:    208(ptr) AccessChain 4876(texel) 207
+                              Store 4992 4991
+            4993:         269 Load 271(s1DArray)
+            4994:   53(fvec2) Load 148(c2)
+            4995:   52(float) Load 1393(dPdxy1)
+            4996:   52(float) Load 4187(lodClamp)
+            4997:  7(f16vec4) ImageSampleExplicitLod 4993 4994 Grad MinLod 4995 4995 4996
+            4998:  7(f16vec4) Load 4876(texel)
+            4999:  7(f16vec4) FAdd 4998 4997
+                              Store 4876(texel) 4999
+            5000:         269 Load 271(s1DArray)
+            5001:154(f16vec2) Load 156(f16c2)
+            5002:6(float16_t) Load 1400(f16dPdxy1)
+            5003:6(float16_t) Load 4194(f16lodClamp)
+            5004:  7(f16vec4) ImageSampleExplicitLod 5000 5001 Grad MinLod 5002 5002 5003
+            5005:  7(f16vec4) Load 4876(texel)
+            5006:  7(f16vec4) FAdd 5005 5004
+                              Store 4876(texel) 5006
+            5007:         284 Load 286(s2DArray)
+            5008:  167(fvec3) Load 169(c3)
+            5009:   53(fvec2) Load 1407(dPdxy2)
+            5010:   52(float) Load 4187(lodClamp)
+            5011:  7(f16vec4) ImageSampleExplicitLod 5007 5008 Grad MinLod 5009 5009 5010
+            5012:  7(f16vec4) Load 4876(texel)
+            5013:  7(f16vec4) FAdd 5012 5011
+                              Store 4876(texel) 5013
+            5014:         284 Load 286(s2DArray)
+            5015:175(f16vec3) Load 177(f16c3)
+            5016:154(f16vec2) Load 1414(f16dPdxy2)
+            5017:6(float16_t) Load 4194(f16lodClamp)
+            5018:  7(f16vec4) ImageSampleExplicitLod 5014 5015 Grad MinLod 5016 5016 5017
+            5019:  7(f16vec4) Load 4876(texel)
+            5020:  7(f16vec4) FAdd 5019 5018
+                              Store 4876(texel) 5020
+            5021:         316 Load 318(s1DArrayShadow)
+            5022:  167(fvec3) Load 169(c3)
+            5023:   52(float) Load 1393(dPdxy1)
+            5024:   52(float) Load 4187(lodClamp)
+            5025:   52(float) CompositeExtract 5022 2
+            5026:6(float16_t) ImageSampleDrefExplicitLod 5021 5022 5025 Grad MinLod 5023 5023 5024
+            5027:    208(ptr) AccessChain 4876(texel) 207
+            5028:6(float16_t) Load 5027
+            5029:6(float16_t) FAdd 5028 5026
+            5030:    208(ptr) AccessChain 4876(texel) 207
+                              Store 5030 5029
+            5031:         316 Load 318(s1DArrayShadow)
+            5032:154(f16vec2) Load 156(f16c2)
+            5033:   52(float) Load 215(compare)
+            5034:6(float16_t) Load 1400(f16dPdxy1)
+            5035:6(float16_t) Load 4194(f16lodClamp)
+            5036:6(float16_t) ImageSampleDrefExplicitLod 5031 5032 5033 Grad MinLod 5034 5034 5035
+            5037:    208(ptr) AccessChain 4876(texel) 207
+            5038:6(float16_t) Load 5037
+            5039:6(float16_t) FAdd 5038 5036
+            5040:    208(ptr) AccessChain 4876(texel) 207
+                              Store 5040 5039
+            5041:         337 Load 339(s2DArrayShadow)
+            5042:  249(fvec4) Load 251(c4)
+            5043:   53(fvec2) Load 1407(dPdxy2)
+            5044:   52(float) Load 4187(lodClamp)
+            5045:   52(float) CompositeExtract 5042 3
+            5046:6(float16_t) ImageSampleDrefExplicitLod 5041 5042 5045 Grad MinLod 5043 5043 5044
+            5047:    208(ptr) AccessChain 4876(texel) 207
+            5048:6(float16_t) Load 5047
+            5049:6(float16_t) FAdd 5048 5046
+            5050:    208(ptr) AccessChain 4876(texel) 207
+                              Store 5050 5049
+            5051:         337 Load 339(s2DArrayShadow)
+            5052:175(f16vec3) Load 177(f16c3)
+            5053:   52(float) Load 215(compare)
+            5054:154(f16vec2) Load 1414(f16dPdxy2)
+            5055:6(float16_t) Load 4194(f16lodClamp)
+            5056:6(float16_t) ImageSampleDrefExplicitLod 5051 5052 5053 Grad MinLod 5054 5054 5055
+            5057:    208(ptr) AccessChain 4876(texel) 207
+            5058:6(float16_t) Load 5057
+            5059:6(float16_t) FAdd 5058 5056
+            5060:    208(ptr) AccessChain 4876(texel) 207
+                              Store 5060 5059
+            5061:         299 Load 301(sCubeArray)
+            5062:  249(fvec4) Load 251(c4)
+            5063:  167(fvec3) Load 1421(dPdxy3)
+            5064:   52(float) Load 4187(lodClamp)
+            5065:  7(f16vec4) ImageSampleExplicitLod 5061 5062 Grad MinLod 5063 5063 5064
+            5066:  7(f16vec4) Load 4876(texel)
+            5067:  7(f16vec4) FAdd 5066 5065
+                              Store 4876(texel) 5067
+            5068:         299 Load 301(sCubeArray)
+            5069:  7(f16vec4) Load 309(f16c4)
+            5070:175(f16vec3) Load 1428(f16dPdxy3)
+            5071:6(float16_t) Load 4194(f16lodClamp)
+            5072:  7(f16vec4) ImageSampleExplicitLod 5068 5069 Grad MinLod 5070 5070 5071
+            5073:  7(f16vec4) Load 4876(texel)
+            5074:  7(f16vec4) FAdd 5073 5072
+                              Store 4876(texel) 5074
+            5075:  7(f16vec4) Load 4876(texel)
+                              ReturnValue 5075
                               FunctionEnd
 111(testSparseTextureGradOffsetClamp():  7(f16vec4) Function None 8
              112:             Label
-     5242(texel):     64(ptr) Variable Function
-                              Store 5242(texel) 121
-            5243:         143 Load 145(s2D)
-            5244:   53(fvec2) Load 148(c2)
-            5245:   53(fvec2) Load 1409(dPdxy2)
-            5246:   53(fvec2) Load 1409(dPdxy2)
-            5247:   52(float) Load 4311(lodClamp)
-            5248:3146(ResType) ImageSparseSampleExplicitLod 5243 5244 Grad ConstOffset MinLod 5245 5246 722 5247
-            5249:  7(f16vec4) CompositeExtract 5248 1
-                              Store 5242(texel) 5249
-            5250:     47(int) CompositeExtract 5248 0
-            5251:         143 Load 145(s2D)
-            5252:154(f16vec2) Load 156(f16c2)
-            5253:154(f16vec2) Load 1417(f16dPdxy2)
-            5254:154(f16vec2) Load 1417(f16dPdxy2)
-            5255:6(float16_t) Load 4318(f16lodClamp)
-            5256:3146(ResType) ImageSparseSampleExplicitLod 5251 5252 Grad ConstOffset MinLod 5253 5254 722 5255
-            5257:  7(f16vec4) CompositeExtract 5256 1
-                              Store 5242(texel) 5257
-            5258:     47(int) CompositeExtract 5256 0
-            5259:         163 Load 165(s3D)
-            5260:  167(fvec3) Load 169(c3)
-            5261:  167(fvec3) Load 1425(dPdxy3)
-            5262:  167(fvec3) Load 1425(dPdxy3)
-            5263:   52(float) Load 4311(lodClamp)
-            5264:3146(ResType) ImageSparseSampleExplicitLod 5259 5260 Grad ConstOffset MinLod 5261 5262 735 5263
-            5265:  7(f16vec4) CompositeExtract 5264 1
-                              Store 5242(texel) 5265
-            5266:     47(int) CompositeExtract 5264 0
-            5267:         163 Load 165(s3D)
-            5268:175(f16vec3) Load 177(f16c3)
-            5269:175(f16vec3) Load 1433(f16dPdxy3)
-            5270:175(f16vec3) Load 1433(f16dPdxy3)
-            5271:6(float16_t) Load 4318(f16lodClamp)
-            5272:3146(ResType) ImageSparseSampleExplicitLod 5267 5268 Grad ConstOffset MinLod 5269 5270 735 5271
-            5273:  7(f16vec4) CompositeExtract 5272 1
-                              Store 5242(texel) 5273
-            5274:     47(int) CompositeExtract 5272 0
-            5275:         224 Load 226(s2DShadow)
-            5276:  167(fvec3) Load 169(c3)
-            5277:   53(fvec2) Load 1409(dPdxy2)
-            5278:   53(fvec2) Load 1409(dPdxy2)
-            5279:   52(float) Load 4311(lodClamp)
-            5280:    208(ptr) AccessChain 5242(texel) 207
-            5281:   52(float) CompositeExtract 5276 2
-            5282:3182(ResType) ImageSparseSampleDrefExplicitLod 5275 5276 5281 Grad ConstOffset MinLod 5277 5278 722 5279
-            5283:6(float16_t) CompositeExtract 5282 1
-                              Store 5280 5283
-            5284:     47(int) CompositeExtract 5282 0
-            5285:         224 Load 226(s2DShadow)
-            5286:154(f16vec2) Load 156(f16c2)
-            5287:   52(float) Load 215(compare)
-            5288:154(f16vec2) Load 1417(f16dPdxy2)
-            5289:154(f16vec2) Load 1417(f16dPdxy2)
-            5290:6(float16_t) Load 4318(f16lodClamp)
-            5291:    208(ptr) AccessChain 5242(texel) 207
-            5292:3182(ResType) ImageSparseSampleDrefExplicitLod 5285 5286 5287 Grad ConstOffset MinLod 5288 5289 722 5290
-            5293:6(float16_t) CompositeExtract 5292 1
-                              Store 5291 5293
-            5294:     47(int) CompositeExtract 5292 0
-            5295:         284 Load 286(s2DArray)
-            5296:  167(fvec3) Load 169(c3)
-            5297:   53(fvec2) Load 1409(dPdxy2)
-            5298:   53(fvec2) Load 1409(dPdxy2)
-            5299:   52(float) Load 4311(lodClamp)
-            5300:3146(ResType) ImageSparseSampleExplicitLod 5295 5296 Grad ConstOffset MinLod 5297 5298 722 5299
-            5301:  7(f16vec4) CompositeExtract 5300 1
-                              Store 5242(texel) 5301
-            5302:     47(int) CompositeExtract 5300 0
-            5303:         284 Load 286(s2DArray)
-            5304:175(f16vec3) Load 177(f16c3)
-            5305:154(f16vec2) Load 1417(f16dPdxy2)
-            5306:154(f16vec2) Load 1417(f16dPdxy2)
-            5307:6(float16_t) Load 4318(f16lodClamp)
-            5308:3146(ResType) ImageSparseSampleExplicitLod 5303 5304 Grad ConstOffset MinLod 5305 5306 722 5307
-            5309:  7(f16vec4) CompositeExtract 5308 1
-                              Store 5242(texel) 5309
-            5310:     47(int) CompositeExtract 5308 0
-            5311:         337 Load 339(s2DArrayShadow)
-            5312:  249(fvec4) Load 251(c4)
-            5313:   53(fvec2) Load 1409(dPdxy2)
-            5314:   53(fvec2) Load 1409(dPdxy2)
-            5315:   52(float) Load 4311(lodClamp)
-            5316:    208(ptr) AccessChain 5242(texel) 207
-            5317:   52(float) CompositeExtract 5312 3
-            5318:3182(ResType) ImageSparseSampleDrefExplicitLod 5311 5312 5317 Grad ConstOffset MinLod 5313 5314 722 5315
-            5319:6(float16_t) CompositeExtract 5318 1
-                              Store 5316 5319
-            5320:     47(int) CompositeExtract 5318 0
-            5321:         337 Load 339(s2DArrayShadow)
-            5322:175(f16vec3) Load 177(f16c3)
-            5323:   52(float) Load 215(compare)
-            5324:154(f16vec2) Load 1417(f16dPdxy2)
-            5325:154(f16vec2) Load 1417(f16dPdxy2)
-            5326:6(float16_t) Load 4318(f16lodClamp)
-            5327:    208(ptr) AccessChain 5242(texel) 207
-            5328:3182(ResType) ImageSparseSampleDrefExplicitLod 5321 5322 5323 Grad ConstOffset MinLod 5324 5325 722 5326
-            5329:6(float16_t) CompositeExtract 5328 1
-                              Store 5327 5329
-            5330:     47(int) CompositeExtract 5328 0
-            5331:  7(f16vec4) Load 5242(texel)
-                              ReturnValue 5331
+     5078(texel):     64(ptr) Variable Function
+                              Store 5078(texel) 121
+            5079:         143 Load 145(s2D)
+            5080:   53(fvec2) Load 148(c2)
+            5081:   53(fvec2) Load 1407(dPdxy2)
+            5082:   52(float) Load 4187(lodClamp)
+            5083:3056(ResType) ImageSparseSampleExplicitLod 5079 5080 Grad ConstOffset MinLod 5081 5081 722 5082
+            5084:  7(f16vec4) CompositeExtract 5083 1
+                              Store 5078(texel) 5084
+            5085:     47(int) CompositeExtract 5083 0
+            5086:         143 Load 145(s2D)
+            5087:154(f16vec2) Load 156(f16c2)
+            5088:154(f16vec2) Load 1414(f16dPdxy2)
+            5089:6(float16_t) Load 4194(f16lodClamp)
+            5090:3056(ResType) ImageSparseSampleExplicitLod 5086 5087 Grad ConstOffset MinLod 5088 5088 722 5089
+            5091:  7(f16vec4) CompositeExtract 5090 1
+                              Store 5078(texel) 5091
+            5092:     47(int) CompositeExtract 5090 0
+            5093:         163 Load 165(s3D)
+            5094:  167(fvec3) Load 169(c3)
+            5095:  167(fvec3) Load 1421(dPdxy3)
+            5096:   52(float) Load 4187(lodClamp)
+            5097:3056(ResType) ImageSparseSampleExplicitLod 5093 5094 Grad ConstOffset MinLod 5095 5095 735 5096
+            5098:  7(f16vec4) CompositeExtract 5097 1
+                              Store 5078(texel) 5098
+            5099:     47(int) CompositeExtract 5097 0
+            5100:         163 Load 165(s3D)
+            5101:175(f16vec3) Load 177(f16c3)
+            5102:175(f16vec3) Load 1428(f16dPdxy3)
+            5103:6(float16_t) Load 4194(f16lodClamp)
+            5104:3056(ResType) ImageSparseSampleExplicitLod 5100 5101 Grad ConstOffset MinLod 5102 5102 735 5103
+            5105:  7(f16vec4) CompositeExtract 5104 1
+                              Store 5078(texel) 5105
+            5106:     47(int) CompositeExtract 5104 0
+            5107:         224 Load 226(s2DShadow)
+            5108:  167(fvec3) Load 169(c3)
+            5109:   53(fvec2) Load 1407(dPdxy2)
+            5110:   52(float) Load 4187(lodClamp)
+            5111:    208(ptr) AccessChain 5078(texel) 207
+            5112:   52(float) CompositeExtract 5108 2
+            5113:3092(ResType) ImageSparseSampleDrefExplicitLod 5107 5108 5112 Grad ConstOffset MinLod 5109 5109 722 5110
+            5114:6(float16_t) CompositeExtract 5113 1
+                              Store 5111 5114
+            5115:     47(int) CompositeExtract 5113 0
+            5116:         224 Load 226(s2DShadow)
+            5117:154(f16vec2) Load 156(f16c2)
+            5118:   52(float) Load 215(compare)
+            5119:154(f16vec2) Load 1414(f16dPdxy2)
+            5120:6(float16_t) Load 4194(f16lodClamp)
+            5121:    208(ptr) AccessChain 5078(texel) 207
+            5122:3092(ResType) ImageSparseSampleDrefExplicitLod 5116 5117 5118 Grad ConstOffset MinLod 5119 5119 722 5120
+            5123:6(float16_t) CompositeExtract 5122 1
+                              Store 5121 5123
+            5124:     47(int) CompositeExtract 5122 0
+            5125:         284 Load 286(s2DArray)
+            5126:  167(fvec3) Load 169(c3)
+            5127:   53(fvec2) Load 1407(dPdxy2)
+            5128:   52(float) Load 4187(lodClamp)
+            5129:3056(ResType) ImageSparseSampleExplicitLod 5125 5126 Grad ConstOffset MinLod 5127 5127 722 5128
+            5130:  7(f16vec4) CompositeExtract 5129 1
+                              Store 5078(texel) 5130
+            5131:     47(int) CompositeExtract 5129 0
+            5132:         284 Load 286(s2DArray)
+            5133:175(f16vec3) Load 177(f16c3)
+            5134:154(f16vec2) Load 1414(f16dPdxy2)
+            5135:6(float16_t) Load 4194(f16lodClamp)
+            5136:3056(ResType) ImageSparseSampleExplicitLod 5132 5133 Grad ConstOffset MinLod 5134 5134 722 5135
+            5137:  7(f16vec4) CompositeExtract 5136 1
+                              Store 5078(texel) 5137
+            5138:     47(int) CompositeExtract 5136 0
+            5139:         337 Load 339(s2DArrayShadow)
+            5140:  249(fvec4) Load 251(c4)
+            5141:   53(fvec2) Load 1407(dPdxy2)
+            5142:   52(float) Load 4187(lodClamp)
+            5143:    208(ptr) AccessChain 5078(texel) 207
+            5144:   52(float) CompositeExtract 5140 3
+            5145:3092(ResType) ImageSparseSampleDrefExplicitLod 5139 5140 5144 Grad ConstOffset MinLod 5141 5141 722 5142
+            5146:6(float16_t) CompositeExtract 5145 1
+                              Store 5143 5146
+            5147:     47(int) CompositeExtract 5145 0
+            5148:         337 Load 339(s2DArrayShadow)
+            5149:175(f16vec3) Load 177(f16c3)
+            5150:   52(float) Load 215(compare)
+            5151:154(f16vec2) Load 1414(f16dPdxy2)
+            5152:6(float16_t) Load 4194(f16lodClamp)
+            5153:    208(ptr) AccessChain 5078(texel) 207
+            5154:3092(ResType) ImageSparseSampleDrefExplicitLod 5148 5149 5150 Grad ConstOffset MinLod 5151 5151 722 5152
+            5155:6(float16_t) CompositeExtract 5154 1
+                              Store 5153 5155
+            5156:     47(int) CompositeExtract 5154 0
+            5157:  7(f16vec4) Load 5078(texel)
+                              ReturnValue 5157
                               FunctionEnd
 113(testTextureGradOffsetClamp():  7(f16vec4) Function None 8
              114:             Label
-     5334(texel):     64(ptr) Variable Function
-                              Store 5334(texel) 121
-            5335:         123 Load 125(s1D)
-            5336:   52(float) Load 128(c1)
-            5337:   52(float) Load 1393(dPdxy1)
-            5338:   52(float) Load 1393(dPdxy1)
-            5339:   52(float) Load 4311(lodClamp)
-            5340:  7(f16vec4) ImageSampleExplicitLod 5335 5336 Grad ConstOffset MinLod 5337 5338 709 5339
-            5341:  7(f16vec4) Load 5334(texel)
-            5342:  7(f16vec4) FAdd 5341 5340
-                              Store 5334(texel) 5342
-            5343:         123 Load 125(s1D)
-            5344:6(float16_t) Load 135(f16c1)
-            5345:6(float16_t) Load 1401(f16dPdxy1)
-            5346:6(float16_t) Load 1401(f16dPdxy1)
-            5347:6(float16_t) Load 4318(f16lodClamp)
-            5348:  7(f16vec4) ImageSampleExplicitLod 5343 5344 Grad ConstOffset MinLod 5345 5346 709 5347
-            5349:  7(f16vec4) Load 5334(texel)
-            5350:  7(f16vec4) FAdd 5349 5348
-                              Store 5334(texel) 5350
-            5351:         143 Load 145(s2D)
-            5352:   53(fvec2) Load 148(c2)
-            5353:   53(fvec2) Load 1409(dPdxy2)
-            5354:   53(fvec2) Load 1409(dPdxy2)
-            5355:   52(float) Load 4311(lodClamp)
-            5356:  7(f16vec4) ImageSampleExplicitLod 5351 5352 Grad ConstOffset MinLod 5353 5354 722 5355
-            5357:  7(f16vec4) Load 5334(texel)
-            5358:  7(f16vec4) FAdd 5357 5356
-                              Store 5334(texel) 5358
-            5359:         143 Load 145(s2D)
-            5360:154(f16vec2) Load 156(f16c2)
-            5361:154(f16vec2) Load 1417(f16dPdxy2)
-            5362:154(f16vec2) Load 1417(f16dPdxy2)
-            5363:6(float16_t) Load 4318(f16lodClamp)
-            5364:  7(f16vec4) ImageSampleExplicitLod 5359 5360 Grad ConstOffset MinLod 5361 5362 722 5363
-            5365:  7(f16vec4) Load 5334(texel)
-            5366:  7(f16vec4) FAdd 5365 5364
-                              Store 5334(texel) 5366
-            5367:         163 Load 165(s3D)
-            5368:  167(fvec3) Load 169(c3)
-            5369:  167(fvec3) Load 1425(dPdxy3)
-            5370:  167(fvec3) Load 1425(dPdxy3)
-            5371:   52(float) Load 4311(lodClamp)
-            5372:  7(f16vec4) ImageSampleExplicitLod 5367 5368 Grad ConstOffset MinLod 5369 5370 735 5371
-            5373:  7(f16vec4) Load 5334(texel)
-            5374:  7(f16vec4) FAdd 5373 5372
-                              Store 5334(texel) 5374
-            5375:         163 Load 165(s3D)
-            5376:175(f16vec3) Load 177(f16c3)
-            5377:175(f16vec3) Load 1433(f16dPdxy3)
-            5378:175(f16vec3) Load 1433(f16dPdxy3)
-            5379:6(float16_t) Load 4318(f16lodClamp)
-            5380:  7(f16vec4) ImageSampleExplicitLod 5375 5376 Grad ConstOffset MinLod 5377 5378 735 5379
-            5381:  7(f16vec4) Load 5334(texel)
-            5382:  7(f16vec4) FAdd 5381 5380
-                              Store 5334(texel) 5382
-            5383:         199 Load 201(s1DShadow)
-            5384:  167(fvec3) Load 169(c3)
-            5385:   52(float) Load 1393(dPdxy1)
-            5386:   52(float) Load 1393(dPdxy1)
-            5387:   52(float) Load 4311(lodClamp)
-            5388:   52(float) CompositeExtract 5384 2
-            5389:6(float16_t) ImageSampleDrefExplicitLod 5383 5384 5388 Grad ConstOffset MinLod 5385 5386 709 5387
-            5390:    208(ptr) AccessChain 5334(texel) 207
-            5391:6(float16_t) Load 5390
-            5392:6(float16_t) FAdd 5391 5389
-            5393:    208(ptr) AccessChain 5334(texel) 207
-                              Store 5393 5392
-            5394:         199 Load 201(s1DShadow)
-            5395:154(f16vec2) Load 156(f16c2)
-            5396:   52(float) Load 215(compare)
-            5397:6(float16_t) Load 1401(f16dPdxy1)
-            5398:6(float16_t) Load 1401(f16dPdxy1)
-            5399:6(float16_t) Load 4318(f16lodClamp)
-            5400:6(float16_t) ImageSampleDrefExplicitLod 5394 5395 5396 Grad ConstOffset MinLod 5397 5398 709 5399
-            5401:    208(ptr) AccessChain 5334(texel) 207
-            5402:6(float16_t) Load 5401
-            5403:6(float16_t) FAdd 5402 5400
-            5404:    208(ptr) AccessChain 5334(texel) 207
-                              Store 5404 5403
-            5405:         224 Load 226(s2DShadow)
-            5406:  167(fvec3) Load 169(c3)
-            5407:   53(fvec2) Load 1409(dPdxy2)
-            5408:   53(fvec2) Load 1409(dPdxy2)
-            5409:   52(float) Load 4311(lodClamp)
-            5410:   52(float) CompositeExtract 5406 2
-            5411:6(float16_t) ImageSampleDrefExplicitLod 5405 5406 5410 Grad ConstOffset MinLod 5407 5408 722 5409
-            5412:    208(ptr) AccessChain 5334(texel) 207
-            5413:6(float16_t) Load 5412
-            5414:6(float16_t) FAdd 5413 5411
-            5415:    208(ptr) AccessChain 5334(texel) 207
-                              Store 5415 5414
-            5416:         224 Load 226(s2DShadow)
-            5417:154(f16vec2) Load 156(f16c2)
-            5418:   52(float) Load 215(compare)
-            5419:154(f16vec2) Load 1417(f16dPdxy2)
-            5420:154(f16vec2) Load 1417(f16dPdxy2)
-            5421:6(float16_t) Load 4318(f16lodClamp)
-            5422:6(float16_t) ImageSampleDrefExplicitLod 5416 5417 5418 Grad ConstOffset MinLod 5419 5420 722 5421
-            5423:    208(ptr) AccessChain 5334(texel) 207
-            5424:6(float16_t) Load 5423
-            5425:6(float16_t) FAdd 5424 5422
-            5426:    208(ptr) AccessChain 5334(texel) 207
-                              Store 5426 5425
-            5427:         269 Load 271(s1DArray)
-            5428:   53(fvec2) Load 148(c2)
-            5429:   52(float) Load 1393(dPdxy1)
-            5430:   52(float) Load 1393(dPdxy1)
-            5431:   52(float) Load 4311(lodClamp)
-            5432:  7(f16vec4) ImageSampleExplicitLod 5427 5428 Grad ConstOffset MinLod 5429 5430 709 5431
-            5433:  7(f16vec4) Load 5334(texel)
-            5434:  7(f16vec4) FAdd 5433 5432
-                              Store 5334(texel) 5434
-            5435:         269 Load 271(s1DArray)
-            5436:154(f16vec2) Load 156(f16c2)
-            5437:6(float16_t) Load 1401(f16dPdxy1)
-            5438:6(float16_t) Load 1401(f16dPdxy1)
-            5439:6(float16_t) Load 4318(f16lodClamp)
-            5440:  7(f16vec4) ImageSampleExplicitLod 5435 5436 Grad ConstOffset MinLod 5437 5438 709 5439
-            5441:  7(f16vec4) Load 5334(texel)
-            5442:  7(f16vec4) FAdd 5441 5440
-                              Store 5334(texel) 5442
-            5443:         284 Load 286(s2DArray)
-            5444:  167(fvec3) Load 169(c3)
-            5445:   53(fvec2) Load 1409(dPdxy2)
-            5446:   53(fvec2) Load 1409(dPdxy2)
-            5447:   52(float) Load 4311(lodClamp)
-            5448:  7(f16vec4) ImageSampleExplicitLod 5443 5444 Grad ConstOffset MinLod 5445 5446 722 5447
-            5449:  7(f16vec4) Load 5334(texel)
-            5450:  7(f16vec4) FAdd 5449 5448
-                              Store 5334(texel) 5450
-            5451:         284 Load 286(s2DArray)
-            5452:175(f16vec3) Load 177(f16c3)
-            5453:154(f16vec2) Load 1417(f16dPdxy2)
-            5454:154(f16vec2) Load 1417(f16dPdxy2)
-            5455:6(float16_t) Load 4318(f16lodClamp)
-            5456:  7(f16vec4) ImageSampleExplicitLod 5451 5452 Grad ConstOffset MinLod 5453 5454 722 5455
-            5457:  7(f16vec4) Load 5334(texel)
-            5458:  7(f16vec4) FAdd 5457 5456
-                              Store 5334(texel) 5458
-            5459:         316 Load 318(s1DArrayShadow)
-            5460:  167(fvec3) Load 169(c3)
-            5461:   52(float) Load 1393(dPdxy1)
-            5462:   52(float) Load 1393(dPdxy1)
-            5463:   52(float) Load 4311(lodClamp)
-            5464:   52(float) CompositeExtract 5460 2
-            5465:6(float16_t) ImageSampleDrefExplicitLod 5459 5460 5464 Grad ConstOffset MinLod 5461 5462 709 5463
-            5466:    208(ptr) AccessChain 5334(texel) 207
-            5467:6(float16_t) Load 5466
-            5468:6(float16_t) FAdd 5467 5465
-            5469:    208(ptr) AccessChain 5334(texel) 207
-                              Store 5469 5468
-            5470:         316 Load 318(s1DArrayShadow)
-            5471:154(f16vec2) Load 156(f16c2)
-            5472:   52(float) Load 215(compare)
-            5473:6(float16_t) Load 1401(f16dPdxy1)
-            5474:6(float16_t) Load 1401(f16dPdxy1)
-            5475:6(float16_t) Load 4318(f16lodClamp)
-            5476:6(float16_t) ImageSampleDrefExplicitLod 5470 5471 5472 Grad ConstOffset MinLod 5473 5474 709 5475
-            5477:    208(ptr) AccessChain 5334(texel) 207
-            5478:6(float16_t) Load 5477
-            5479:6(float16_t) FAdd 5478 5476
-            5480:    208(ptr) AccessChain 5334(texel) 207
-                              Store 5480 5479
-            5481:         337 Load 339(s2DArrayShadow)
-            5482:  249(fvec4) Load 251(c4)
-            5483:   53(fvec2) Load 1409(dPdxy2)
-            5484:   53(fvec2) Load 1409(dPdxy2)
-            5485:   52(float) Load 4311(lodClamp)
-            5486:   52(float) CompositeExtract 5482 3
-            5487:6(float16_t) ImageSampleDrefExplicitLod 5481 5482 5486 Grad ConstOffset MinLod 5483 5484 722 5485
-            5488:    208(ptr) AccessChain 5334(texel) 207
-            5489:6(float16_t) Load 5488
-            5490:6(float16_t) FAdd 5489 5487
-            5491:    208(ptr) AccessChain 5334(texel) 207
-                              Store 5491 5490
-            5492:         337 Load 339(s2DArrayShadow)
-            5493:175(f16vec3) Load 177(f16c3)
-            5494:   52(float) Load 215(compare)
-            5495:154(f16vec2) Load 1417(f16dPdxy2)
-            5496:154(f16vec2) Load 1417(f16dPdxy2)
-            5497:6(float16_t) Load 4318(f16lodClamp)
-            5498:6(float16_t) ImageSampleDrefExplicitLod 5492 5493 5494 Grad ConstOffset MinLod 5495 5496 722 5497
-            5499:    208(ptr) AccessChain 5334(texel) 207
-            5500:6(float16_t) Load 5499
-            5501:6(float16_t) FAdd 5500 5498
-            5502:    208(ptr) AccessChain 5334(texel) 207
-                              Store 5502 5501
-            5503:  7(f16vec4) Load 5334(texel)
-                              ReturnValue 5503
+     5160(texel):     64(ptr) Variable Function
+                              Store 5160(texel) 121
+            5161:         123 Load 125(s1D)
+            5162:   52(float) Load 128(c1)
+            5163:   52(float) Load 1393(dPdxy1)
+            5164:   52(float) Load 4187(lodClamp)
+            5165:  7(f16vec4) ImageSampleExplicitLod 5161 5162 Grad ConstOffset MinLod 5163 5163 709 5164
+            5166:  7(f16vec4) Load 5160(texel)
+            5167:  7(f16vec4) FAdd 5166 5165
+                              Store 5160(texel) 5167
+            5168:         123 Load 125(s1D)
+            5169:6(float16_t) Load 135(f16c1)
+            5170:6(float16_t) Load 1400(f16dPdxy1)
+            5171:6(float16_t) Load 4194(f16lodClamp)
+            5172:  7(f16vec4) ImageSampleExplicitLod 5168 5169 Grad ConstOffset MinLod 5170 5170 709 5171
+            5173:  7(f16vec4) Load 5160(texel)
+            5174:  7(f16vec4) FAdd 5173 5172
+                              Store 5160(texel) 5174
+            5175:         143 Load 145(s2D)
+            5176:   53(fvec2) Load 148(c2)
+            5177:   53(fvec2) Load 1407(dPdxy2)
+            5178:   52(float) Load 4187(lodClamp)
+            5179:  7(f16vec4) ImageSampleExplicitLod 5175 5176 Grad ConstOffset MinLod 5177 5177 722 5178
+            5180:  7(f16vec4) Load 5160(texel)
+            5181:  7(f16vec4) FAdd 5180 5179
+                              Store 5160(texel) 5181
+            5182:         143 Load 145(s2D)
+            5183:154(f16vec2) Load 156(f16c2)
+            5184:154(f16vec2) Load 1414(f16dPdxy2)
+            5185:6(float16_t) Load 4194(f16lodClamp)
+            5186:  7(f16vec4) ImageSampleExplicitLod 5182 5183 Grad ConstOffset MinLod 5184 5184 722 5185
+            5187:  7(f16vec4) Load 5160(texel)
+            5188:  7(f16vec4) FAdd 5187 5186
+                              Store 5160(texel) 5188
+            5189:         163 Load 165(s3D)
+            5190:  167(fvec3) Load 169(c3)
+            5191:  167(fvec3) Load 1421(dPdxy3)
+            5192:   52(float) Load 4187(lodClamp)
+            5193:  7(f16vec4) ImageSampleExplicitLod 5189 5190 Grad ConstOffset MinLod 5191 5191 735 5192
+            5194:  7(f16vec4) Load 5160(texel)
+            5195:  7(f16vec4) FAdd 5194 5193
+                              Store 5160(texel) 5195
+            5196:         163 Load 165(s3D)
+            5197:175(f16vec3) Load 177(f16c3)
+            5198:175(f16vec3) Load 1428(f16dPdxy3)
+            5199:6(float16_t) Load 4194(f16lodClamp)
+            5200:  7(f16vec4) ImageSampleExplicitLod 5196 5197 Grad ConstOffset MinLod 5198 5198 735 5199
+            5201:  7(f16vec4) Load 5160(texel)
+            5202:  7(f16vec4) FAdd 5201 5200
+                              Store 5160(texel) 5202
+            5203:         199 Load 201(s1DShadow)
+            5204:  167(fvec3) Load 169(c3)
+            5205:   52(float) Load 1393(dPdxy1)
+            5206:   52(float) Load 4187(lodClamp)
+            5207:   52(float) CompositeExtract 5204 2
+            5208:6(float16_t) ImageSampleDrefExplicitLod 5203 5204 5207 Grad ConstOffset MinLod 5205 5205 709 5206
+            5209:    208(ptr) AccessChain 5160(texel) 207
+            5210:6(float16_t) Load 5209
+            5211:6(float16_t) FAdd 5210 5208
+            5212:    208(ptr) AccessChain 5160(texel) 207
+                              Store 5212 5211
+            5213:         199 Load 201(s1DShadow)
+            5214:154(f16vec2) Load 156(f16c2)
+            5215:   52(float) Load 215(compare)
+            5216:6(float16_t) Load 1400(f16dPdxy1)
+            5217:6(float16_t) Load 4194(f16lodClamp)
+            5218:6(float16_t) ImageSampleDrefExplicitLod 5213 5214 5215 Grad ConstOffset MinLod 5216 5216 709 5217
+            5219:    208(ptr) AccessChain 5160(texel) 207
+            5220:6(float16_t) Load 5219
+            5221:6(float16_t) FAdd 5220 5218
+            5222:    208(ptr) AccessChain 5160(texel) 207
+                              Store 5222 5221
+            5223:         224 Load 226(s2DShadow)
+            5224:  167(fvec3) Load 169(c3)
+            5225:   53(fvec2) Load 1407(dPdxy2)
+            5226:   52(float) Load 4187(lodClamp)
+            5227:   52(float) CompositeExtract 5224 2
+            5228:6(float16_t) ImageSampleDrefExplicitLod 5223 5224 5227 Grad ConstOffset MinLod 5225 5225 722 5226
+            5229:    208(ptr) AccessChain 5160(texel) 207
+            5230:6(float16_t) Load 5229
+            5231:6(float16_t) FAdd 5230 5228
+            5232:    208(ptr) AccessChain 5160(texel) 207
+                              Store 5232 5231
+            5233:         224 Load 226(s2DShadow)
+            5234:154(f16vec2) Load 156(f16c2)
+            5235:   52(float) Load 215(compare)
+            5236:154(f16vec2) Load 1414(f16dPdxy2)
+            5237:6(float16_t) Load 4194(f16lodClamp)
+            5238:6(float16_t) ImageSampleDrefExplicitLod 5233 5234 5235 Grad ConstOffset MinLod 5236 5236 722 5237
+            5239:    208(ptr) AccessChain 5160(texel) 207
+            5240:6(float16_t) Load 5239
+            5241:6(float16_t) FAdd 5240 5238
+            5242:    208(ptr) AccessChain 5160(texel) 207
+                              Store 5242 5241
+            5243:         269 Load 271(s1DArray)
+            5244:   53(fvec2) Load 148(c2)
+            5245:   52(float) Load 1393(dPdxy1)
+            5246:   52(float) Load 4187(lodClamp)
+            5247:  7(f16vec4) ImageSampleExplicitLod 5243 5244 Grad ConstOffset MinLod 5245 5245 709 5246
+            5248:  7(f16vec4) Load 5160(texel)
+            5249:  7(f16vec4) FAdd 5248 5247
+                              Store 5160(texel) 5249
+            5250:         269 Load 271(s1DArray)
+            5251:154(f16vec2) Load 156(f16c2)
+            5252:6(float16_t) Load 1400(f16dPdxy1)
+            5253:6(float16_t) Load 4194(f16lodClamp)
+            5254:  7(f16vec4) ImageSampleExplicitLod 5250 5251 Grad ConstOffset MinLod 5252 5252 709 5253
+            5255:  7(f16vec4) Load 5160(texel)
+            5256:  7(f16vec4) FAdd 5255 5254
+                              Store 5160(texel) 5256
+            5257:         284 Load 286(s2DArray)
+            5258:  167(fvec3) Load 169(c3)
+            5259:   53(fvec2) Load 1407(dPdxy2)
+            5260:   52(float) Load 4187(lodClamp)
+            5261:  7(f16vec4) ImageSampleExplicitLod 5257 5258 Grad ConstOffset MinLod 5259 5259 722 5260
+            5262:  7(f16vec4) Load 5160(texel)
+            5263:  7(f16vec4) FAdd 5262 5261
+                              Store 5160(texel) 5263
+            5264:         284 Load 286(s2DArray)
+            5265:175(f16vec3) Load 177(f16c3)
+            5266:154(f16vec2) Load 1414(f16dPdxy2)
+            5267:6(float16_t) Load 4194(f16lodClamp)
+            5268:  7(f16vec4) ImageSampleExplicitLod 5264 5265 Grad ConstOffset MinLod 5266 5266 722 5267
+            5269:  7(f16vec4) Load 5160(texel)
+            5270:  7(f16vec4) FAdd 5269 5268
+                              Store 5160(texel) 5270
+            5271:         316 Load 318(s1DArrayShadow)
+            5272:  167(fvec3) Load 169(c3)
+            5273:   52(float) Load 1393(dPdxy1)
+            5274:   52(float) Load 4187(lodClamp)
+            5275:   52(float) CompositeExtract 5272 2
+            5276:6(float16_t) ImageSampleDrefExplicitLod 5271 5272 5275 Grad ConstOffset MinLod 5273 5273 709 5274
+            5277:    208(ptr) AccessChain 5160(texel) 207
+            5278:6(float16_t) Load 5277
+            5279:6(float16_t) FAdd 5278 5276
+            5280:    208(ptr) AccessChain 5160(texel) 207
+                              Store 5280 5279
+            5281:         316 Load 318(s1DArrayShadow)
+            5282:154(f16vec2) Load 156(f16c2)
+            5283:   52(float) Load 215(compare)
+            5284:6(float16_t) Load 1400(f16dPdxy1)
+            5285:6(float16_t) Load 4194(f16lodClamp)
+            5286:6(float16_t) ImageSampleDrefExplicitLod 5281 5282 5283 Grad ConstOffset MinLod 5284 5284 709 5285
+            5287:    208(ptr) AccessChain 5160(texel) 207
+            5288:6(float16_t) Load 5287
+            5289:6(float16_t) FAdd 5288 5286
+            5290:    208(ptr) AccessChain 5160(texel) 207
+                              Store 5290 5289
+            5291:         337 Load 339(s2DArrayShadow)
+            5292:  249(fvec4) Load 251(c4)
+            5293:   53(fvec2) Load 1407(dPdxy2)
+            5294:   52(float) Load 4187(lodClamp)
+            5295:   52(float) CompositeExtract 5292 3
+            5296:6(float16_t) ImageSampleDrefExplicitLod 5291 5292 5295 Grad ConstOffset MinLod 5293 5293 722 5294
+            5297:    208(ptr) AccessChain 5160(texel) 207
+            5298:6(float16_t) Load 5297
+            5299:6(float16_t) FAdd 5298 5296
+            5300:    208(ptr) AccessChain 5160(texel) 207
+                              Store 5300 5299
+            5301:         337 Load 339(s2DArrayShadow)
+            5302:175(f16vec3) Load 177(f16c3)
+            5303:   52(float) Load 215(compare)
+            5304:154(f16vec2) Load 1414(f16dPdxy2)
+            5305:6(float16_t) Load 4194(f16lodClamp)
+            5306:6(float16_t) ImageSampleDrefExplicitLod 5301 5302 5303 Grad ConstOffset MinLod 5304 5304 722 5305
+            5307:    208(ptr) AccessChain 5160(texel) 207
+            5308:6(float16_t) Load 5307
+            5309:6(float16_t) FAdd 5308 5306
+            5310:    208(ptr) AccessChain 5160(texel) 207
+                              Store 5310 5309
+            5311:  7(f16vec4) Load 5160(texel)
+                              ReturnValue 5311
                               FunctionEnd
 115(testCombinedTextureSampler():  7(f16vec4) Function None 8
              116:             Label
-     5506(texel):     64(ptr) Variable Function
-                              Store 5506(texel) 121
-            5509:         122 Load 5508(t1D)
-            5513:        5510 Load 5512(s)
-            5514:         123 SampledImage 5509 5513
-            5515:   52(float) Load 128(c1)
-            5516:  7(f16vec4) ImageSampleImplicitLod 5514 5515
-            5517:  7(f16vec4) Load 5506(texel)
-            5518:  7(f16vec4) FAdd 5517 5516
-                              Store 5506(texel) 5518
-            5519:         122 Load 5508(t1D)
-            5520:        5510 Load 5512(s)
-            5521:         123 SampledImage 5519 5520
-            5522:6(float16_t) Load 135(f16c1)
-            5523:6(float16_t) Load 137(f16bias)
-            5524:  7(f16vec4) ImageSampleImplicitLod 5521 5522 Bias 5523
-            5525:  7(f16vec4) Load 5506(texel)
-            5526:  7(f16vec4) FAdd 5525 5524
-                              Store 5506(texel) 5526
-            5529:         142 Load 5528(t2D)
-            5530:        5510 Load 5512(s)
-            5531:         143 SampledImage 5529 5530
-            5532:   53(fvec2) Load 148(c2)
-            5533:  7(f16vec4) ImageSampleImplicitLod 5531 5532
-            5534:  7(f16vec4) Load 5506(texel)
-            5535:  7(f16vec4) FAdd 5534 5533
-                              Store 5506(texel) 5535
-            5536:         142 Load 5528(t2D)
-            5537:        5510 Load 5512(s)
-            5538:         143 SampledImage 5536 5537
-            5539:154(f16vec2) Load 156(f16c2)
-            5540:6(float16_t) Load 137(f16bias)
-            5541:  7(f16vec4) ImageSampleImplicitLod 5538 5539 Bias 5540
-            5542:  7(f16vec4) Load 5506(texel)
-            5543:  7(f16vec4) FAdd 5542 5541
-                              Store 5506(texel) 5543
-            5546:         162 Load 5545(t3D)
-            5547:        5510 Load 5512(s)
-            5548:         163 SampledImage 5546 5547
-            5549:  167(fvec3) Load 169(c3)
-            5550:  7(f16vec4) ImageSampleImplicitLod 5548 5549
-            5551:  7(f16vec4) Load 5506(texel)
-            5552:  7(f16vec4) FAdd 5551 5550
-                              Store 5506(texel) 5552
-            5553:         162 Load 5545(t3D)
-            5554:        5510 Load 5512(s)
-            5555:         163 SampledImage 5553 5554
-            5556:175(f16vec3) Load 177(f16c3)
-            5557:6(float16_t) Load 137(f16bias)
-            5558:  7(f16vec4) ImageSampleImplicitLod 5555 5556 Bias 5557
-            5559:  7(f16vec4) Load 5506(texel)
-            5560:  7(f16vec4) FAdd 5559 5558
-                              Store 5506(texel) 5560
-            5563:         183 Load 5562(tCube)
-            5564:        5510 Load 5512(s)
-            5565:         184 SampledImage 5563 5564
-            5566:  167(fvec3) Load 169(c3)
-            5567:  7(f16vec4) ImageSampleImplicitLod 5565 5566
-            5568:  7(f16vec4) Load 5506(texel)
-            5569:  7(f16vec4) FAdd 5568 5567
-                              Store 5506(texel) 5569
-            5570:         183 Load 5562(tCube)
-            5571:        5510 Load 5512(s)
-            5572:         184 SampledImage 5570 5571
-            5573:175(f16vec3) Load 177(f16c3)
-            5574:6(float16_t) Load 137(f16bias)
-            5575:  7(f16vec4) ImageSampleImplicitLod 5572 5573 Bias 5574
-            5576:  7(f16vec4) Load 5506(texel)
-            5577:  7(f16vec4) FAdd 5576 5575
-                              Store 5506(texel) 5577
-            5578:         122 Load 5508(t1D)
-            5580:        5510 Load 5579(sShadow)
-            5581:         199 SampledImage 5578 5580
-            5582:  167(fvec3) Load 169(c3)
-            5583:   52(float) CompositeExtract 5582 2
-            5584:6(float16_t) ImageSampleDrefImplicitLod 5581 5582 5583
-            5585:    208(ptr) AccessChain 5506(texel) 207
-            5586:6(float16_t) Load 5585
-            5587:6(float16_t) FAdd 5586 5584
-            5588:    208(ptr) AccessChain 5506(texel) 207
-                              Store 5588 5587
-            5589:         122 Load 5508(t1D)
-            5590:        5510 Load 5579(sShadow)
-            5591:         199 SampledImage 5589 5590
-            5592:154(f16vec2) Load 156(f16c2)
-            5593:   52(float) Load 215(compare)
-            5594:6(float16_t) Load 137(f16bias)
-            5595:6(float16_t) ImageSampleDrefImplicitLod 5591 5592 5593 Bias 5594
-            5596:    208(ptr) AccessChain 5506(texel) 207
-            5597:6(float16_t) Load 5596
-            5598:6(float16_t) FAdd 5597 5595
-            5599:    208(ptr) AccessChain 5506(texel) 207
-                              Store 5599 5598
-            5600:         142 Load 5528(t2D)
-            5601:        5510 Load 5579(sShadow)
-            5602:         224 SampledImage 5600 5601
-            5603:  167(fvec3) Load 169(c3)
-            5604:   52(float) CompositeExtract 5603 2
-            5605:6(float16_t) ImageSampleDrefImplicitLod 5602 5603 5604
-            5606:    208(ptr) AccessChain 5506(texel) 207
-            5607:6(float16_t) Load 5606
-            5608:6(float16_t) FAdd 5607 5605
-            5609:    208(ptr) AccessChain 5506(texel) 207
-                              Store 5609 5608
-            5610:         142 Load 5528(t2D)
-            5611:        5510 Load 5579(sShadow)
-            5612:         224 SampledImage 5610 5611
-            5613:154(f16vec2) Load 156(f16c2)
-            5614:   52(float) Load 215(compare)
-            5615:6(float16_t) Load 137(f16bias)
-            5616:6(float16_t) ImageSampleDrefImplicitLod 5612 5613 5614 Bias 5615
-            5617:    208(ptr) AccessChain 5506(texel) 207
-            5618:6(float16_t) Load 5617
-            5619:6(float16_t) FAdd 5618 5616
-            5620:    208(ptr) AccessChain 5506(texel) 207
-                              Store 5620 5619
-            5621:         183 Load 5562(tCube)
-            5622:        5510 Load 5579(sShadow)
-            5623:         245 SampledImage 5621 5622
-            5624:  249(fvec4) Load 251(c4)
-            5625:   52(float) CompositeExtract 5624 3
-            5626:6(float16_t) ImageSampleDrefImplicitLod 5623 5624 5625
-            5627:    208(ptr) AccessChain 5506(texel) 207
-            5628:6(float16_t) Load 5627
-            5629:6(float16_t) FAdd 5628 5626
-            5630:    208(ptr) AccessChain 5506(texel) 207
-                              Store 5630 5629
-            5631:         183 Load 5562(tCube)
-            5632:        5510 Load 5579(sShadow)
-            5633:         245 SampledImage 5631 5632
-            5634:175(f16vec3) Load 177(f16c3)
-            5635:   52(float) Load 215(compare)
-            5636:6(float16_t) Load 137(f16bias)
-            5637:6(float16_t) ImageSampleDrefImplicitLod 5633 5634 5635 Bias 5636
-            5638:    208(ptr) AccessChain 5506(texel) 207
-            5639:6(float16_t) Load 5638
-            5640:6(float16_t) FAdd 5639 5637
-            5641:    208(ptr) AccessChain 5506(texel) 207
-                              Store 5641 5640
-            5644:         268 Load 5643(t1DArray)
-            5645:        5510 Load 5512(s)
-            5646:         269 SampledImage 5644 5645
-            5647:   53(fvec2) Load 148(c2)
-            5648:  7(f16vec4) ImageSampleImplicitLod 5646 5647
-            5649:  7(f16vec4) Load 5506(texel)
-            5650:  7(f16vec4) FAdd 5649 5648
-                              Store 5506(texel) 5650
-            5651:         268 Load 5643(t1DArray)
-            5652:        5510 Load 5512(s)
-            5653:         269 SampledImage 5651 5652
-            5654:154(f16vec2) Load 156(f16c2)
-            5655:6(float16_t) Load 137(f16bias)
-            5656:  7(f16vec4) ImageSampleImplicitLod 5653 5654 Bias 5655
-            5657:  7(f16vec4) Load 5506(texel)
-            5658:  7(f16vec4) FAdd 5657 5656
-                              Store 5506(texel) 5658
-            5661:         283 Load 5660(t2DArray)
-            5662:        5510 Load 5512(s)
-            5663:         284 SampledImage 5661 5662
-            5664:  167(fvec3) Load 169(c3)
-            5665:  7(f16vec4) ImageSampleImplicitLod 5663 5664
-            5666:  7(f16vec4) Load 5506(texel)
-            5667:  7(f16vec4) FAdd 5666 5665
-                              Store 5506(texel) 5667
-            5668:         283 Load 5660(t2DArray)
-            5669:        5510 Load 5512(s)
-            5670:         284 SampledImage 5668 5669
-            5671:175(f16vec3) Load 177(f16c3)
-            5672:6(float16_t) Load 137(f16bias)
-            5673:  7(f16vec4) ImageSampleImplicitLod 5670 5671 Bias 5672
-            5674:  7(f16vec4) Load 5506(texel)
-            5675:  7(f16vec4) FAdd 5674 5673
-                              Store 5506(texel) 5675
-            5678:         298 Load 5677(tCubeArray)
-            5679:        5510 Load 5512(s)
-            5680:         299 SampledImage 5678 5679
-            5681:  249(fvec4) Load 251(c4)
-            5682:  7(f16vec4) ImageSampleImplicitLod 5680 5681
-            5683:  7(f16vec4) Load 5506(texel)
-            5684:  7(f16vec4) FAdd 5683 5682
-                              Store 5506(texel) 5684
-            5685:         298 Load 5677(tCubeArray)
-            5686:        5510 Load 5512(s)
-            5687:         299 SampledImage 5685 5686
-            5688:  7(f16vec4) Load 309(f16c4)
-            5689:6(float16_t) Load 137(f16bias)
-            5690:  7(f16vec4) ImageSampleImplicitLod 5687 5688 Bias 5689
-            5691:  7(f16vec4) Load 5506(texel)
-            5692:  7(f16vec4) FAdd 5691 5690
-                              Store 5506(texel) 5692
-            5693:         268 Load 5643(t1DArray)
-            5694:        5510 Load 5579(sShadow)
-            5695:         316 SampledImage 5693 5694
-            5696:  167(fvec3) Load 169(c3)
-            5697:   52(float) CompositeExtract 5696 2
-            5698:6(float16_t) ImageSampleDrefImplicitLod 5695 5696 5697
-            5699:    208(ptr) AccessChain 5506(texel) 207
-            5700:6(float16_t) Load 5699
-            5701:6(float16_t) FAdd 5700 5698
-            5702:    208(ptr) AccessChain 5506(texel) 207
-                              Store 5702 5701
-            5703:         268 Load 5643(t1DArray)
-            5704:        5510 Load 5579(sShadow)
-            5705:         316 SampledImage 5703 5704
-            5706:154(f16vec2) Load 156(f16c2)
-            5707:   52(float) Load 215(compare)
-            5708:6(float16_t) Load 137(f16bias)
-            5709:6(float16_t) ImageSampleDrefImplicitLod 5705 5706 5707 Bias 5708
-            5710:    208(ptr) AccessChain 5506(texel) 207
-            5711:6(float16_t) Load 5710
-            5712:6(float16_t) FAdd 5711 5709
-            5713:    208(ptr) AccessChain 5506(texel) 207
-                              Store 5713 5712
-            5714:         283 Load 5660(t2DArray)
-            5715:        5510 Load 5579(sShadow)
-            5716:         337 SampledImage 5714 5715
-            5717:  249(fvec4) Load 251(c4)
-            5718:   52(float) CompositeExtract 5717 3
-            5719:6(float16_t) ImageSampleDrefImplicitLod 5716 5717 5718
-            5720:    208(ptr) AccessChain 5506(texel) 207
-            5721:6(float16_t) Load 5720
-            5722:6(float16_t) FAdd 5721 5719
-            5723:    208(ptr) AccessChain 5506(texel) 207
-                              Store 5723 5722
-            5724:         283 Load 5660(t2DArray)
-            5725:        5510 Load 5579(sShadow)
-            5726:         337 SampledImage 5724 5725
-            5727:175(f16vec3) Load 177(f16c3)
-            5728:   52(float) Load 215(compare)
-            5729:6(float16_t) ImageSampleDrefImplicitLod 5726 5727 5728
-            5730:    208(ptr) AccessChain 5506(texel) 207
-            5731:6(float16_t) Load 5730
-            5732:6(float16_t) FAdd 5731 5729
-            5733:    208(ptr) AccessChain 5506(texel) 207
-                              Store 5733 5732
-            5736:         356 Load 5735(t2DRect)
-            5737:        5510 Load 5512(s)
-            5738:         357 SampledImage 5736 5737
-            5739:   53(fvec2) Load 148(c2)
-            5740:  7(f16vec4) ImageSampleImplicitLod 5738 5739
-            5741:  7(f16vec4) Load 5506(texel)
-            5742:  7(f16vec4) FAdd 5741 5740
-                              Store 5506(texel) 5742
-            5743:         356 Load 5735(t2DRect)
-            5744:        5510 Load 5512(s)
-            5745:         357 SampledImage 5743 5744
-            5746:154(f16vec2) Load 156(f16c2)
-            5747:  7(f16vec4) ImageSampleImplicitLod 5745 5746
-            5748:  7(f16vec4) Load 5506(texel)
-            5749:  7(f16vec4) FAdd 5748 5747
-                              Store 5506(texel) 5749
-            5750:         356 Load 5735(t2DRect)
-            5751:        5510 Load 5579(sShadow)
-            5752:         371 SampledImage 5750 5751
-            5753:  167(fvec3) Load 169(c3)
-            5754:   52(float) CompositeExtract 5753 2
-            5755:6(float16_t) ImageSampleDrefImplicitLod 5752 5753 5754
-            5756:    208(ptr) AccessChain 5506(texel) 207
-            5757:6(float16_t) Load 5756
-            5758:6(float16_t) FAdd 5757 5755
-            5759:    208(ptr) AccessChain 5506(texel) 207
-                              Store 5759 5758
-            5760:         356 Load 5735(t2DRect)
-            5761:        5510 Load 5579(sShadow)
-            5762:         371 SampledImage 5760 5761
-            5763:154(f16vec2) Load 156(f16c2)
-            5764:   52(float) Load 215(compare)
-            5765:6(float16_t) ImageSampleDrefImplicitLod 5762 5763 5764
-            5766:    208(ptr) AccessChain 5506(texel) 207
-            5767:6(float16_t) Load 5766
-            5768:6(float16_t) FAdd 5767 5765
-            5769:    208(ptr) AccessChain 5506(texel) 207
-                              Store 5769 5768
-            5770:         298 Load 5677(tCubeArray)
-            5771:        5510 Load 5579(sShadow)
-            5772:         391 SampledImage 5770 5771
-            5773:  249(fvec4) Load 251(c4)
-            5774:   52(float) Load 215(compare)
-            5775:6(float16_t) ImageSampleDrefImplicitLod 5772 5773 5774
-            5776:    208(ptr) AccessChain 5506(texel) 207
-            5777:6(float16_t) Load 5776
-            5778:6(float16_t) FAdd 5777 5775
-            5779:    208(ptr) AccessChain 5506(texel) 207
-                              Store 5779 5778
-            5780:         298 Load 5677(tCubeArray)
-            5781:        5510 Load 5579(sShadow)
-            5782:         391 SampledImage 5780 5781
-            5783:  7(f16vec4) Load 309(f16c4)
-            5784:   52(float) Load 215(compare)
-            5785:6(float16_t) ImageSampleDrefImplicitLod 5782 5783 5784
-            5786:    208(ptr) AccessChain 5506(texel) 207
-            5787:6(float16_t) Load 5786
-            5788:6(float16_t) FAdd 5787 5785
-            5789:    208(ptr) AccessChain 5506(texel) 207
-                              Store 5789 5788
-            5790:  7(f16vec4) Load 5506(texel)
-                              ReturnValue 5790
+     5314(texel):     64(ptr) Variable Function
+                              Store 5314(texel) 121
+            5317:         122 Load 5316(t1D)
+            5321:        5318 Load 5320(s)
+            5322:         123 SampledImage 5317 5321
+            5323:   52(float) Load 128(c1)
+            5324:  7(f16vec4) ImageSampleImplicitLod 5322 5323
+            5325:  7(f16vec4) Load 5314(texel)
+            5326:  7(f16vec4) FAdd 5325 5324
+                              Store 5314(texel) 5326
+            5327:         122 Load 5316(t1D)
+            5328:        5318 Load 5320(s)
+            5329:         123 SampledImage 5327 5328
+            5330:6(float16_t) Load 135(f16c1)
+            5331:6(float16_t) Load 137(f16bias)
+            5332:  7(f16vec4) ImageSampleImplicitLod 5329 5330 Bias 5331
+            5333:  7(f16vec4) Load 5314(texel)
+            5334:  7(f16vec4) FAdd 5333 5332
+                              Store 5314(texel) 5334
+            5337:         142 Load 5336(t2D)
+            5338:        5318 Load 5320(s)
+            5339:         143 SampledImage 5337 5338
+            5340:   53(fvec2) Load 148(c2)
+            5341:  7(f16vec4) ImageSampleImplicitLod 5339 5340
+            5342:  7(f16vec4) Load 5314(texel)
+            5343:  7(f16vec4) FAdd 5342 5341
+                              Store 5314(texel) 5343
+            5344:         142 Load 5336(t2D)
+            5345:        5318 Load 5320(s)
+            5346:         143 SampledImage 5344 5345
+            5347:154(f16vec2) Load 156(f16c2)
+            5348:6(float16_t) Load 137(f16bias)
+            5349:  7(f16vec4) ImageSampleImplicitLod 5346 5347 Bias 5348
+            5350:  7(f16vec4) Load 5314(texel)
+            5351:  7(f16vec4) FAdd 5350 5349
+                              Store 5314(texel) 5351
+            5354:         162 Load 5353(t3D)
+            5355:        5318 Load 5320(s)
+            5356:         163 SampledImage 5354 5355
+            5357:  167(fvec3) Load 169(c3)
+            5358:  7(f16vec4) ImageSampleImplicitLod 5356 5357
+            5359:  7(f16vec4) Load 5314(texel)
+            5360:  7(f16vec4) FAdd 5359 5358
+                              Store 5314(texel) 5360
+            5361:         162 Load 5353(t3D)
+            5362:        5318 Load 5320(s)
+            5363:         163 SampledImage 5361 5362
+            5364:175(f16vec3) Load 177(f16c3)
+            5365:6(float16_t) Load 137(f16bias)
+            5366:  7(f16vec4) ImageSampleImplicitLod 5363 5364 Bias 5365
+            5367:  7(f16vec4) Load 5314(texel)
+            5368:  7(f16vec4) FAdd 5367 5366
+                              Store 5314(texel) 5368
+            5371:         183 Load 5370(tCube)
+            5372:        5318 Load 5320(s)
+            5373:         184 SampledImage 5371 5372
+            5374:  167(fvec3) Load 169(c3)
+            5375:  7(f16vec4) ImageSampleImplicitLod 5373 5374
+            5376:  7(f16vec4) Load 5314(texel)
+            5377:  7(f16vec4) FAdd 5376 5375
+                              Store 5314(texel) 5377
+            5378:         183 Load 5370(tCube)
+            5379:        5318 Load 5320(s)
+            5380:         184 SampledImage 5378 5379
+            5381:175(f16vec3) Load 177(f16c3)
+            5382:6(float16_t) Load 137(f16bias)
+            5383:  7(f16vec4) ImageSampleImplicitLod 5380 5381 Bias 5382
+            5384:  7(f16vec4) Load 5314(texel)
+            5385:  7(f16vec4) FAdd 5384 5383
+                              Store 5314(texel) 5385
+            5386:         122 Load 5316(t1D)
+            5388:        5318 Load 5387(sShadow)
+            5389:         199 SampledImage 5386 5388
+            5390:  167(fvec3) Load 169(c3)
+            5391:   52(float) CompositeExtract 5390 2
+            5392:6(float16_t) ImageSampleDrefImplicitLod 5389 5390 5391
+            5393:    208(ptr) AccessChain 5314(texel) 207
+            5394:6(float16_t) Load 5393
+            5395:6(float16_t) FAdd 5394 5392
+            5396:    208(ptr) AccessChain 5314(texel) 207
+                              Store 5396 5395
+            5397:         122 Load 5316(t1D)
+            5398:        5318 Load 5387(sShadow)
+            5399:         199 SampledImage 5397 5398
+            5400:154(f16vec2) Load 156(f16c2)
+            5401:   52(float) Load 215(compare)
+            5402:6(float16_t) Load 137(f16bias)
+            5403:6(float16_t) ImageSampleDrefImplicitLod 5399 5400 5401 Bias 5402
+            5404:    208(ptr) AccessChain 5314(texel) 207
+            5405:6(float16_t) Load 5404
+            5406:6(float16_t) FAdd 5405 5403
+            5407:    208(ptr) AccessChain 5314(texel) 207
+                              Store 5407 5406
+            5408:         142 Load 5336(t2D)
+            5409:        5318 Load 5387(sShadow)
+            5410:         224 SampledImage 5408 5409
+            5411:  167(fvec3) Load 169(c3)
+            5412:   52(float) CompositeExtract 5411 2
+            5413:6(float16_t) ImageSampleDrefImplicitLod 5410 5411 5412
+            5414:    208(ptr) AccessChain 5314(texel) 207
+            5415:6(float16_t) Load 5414
+            5416:6(float16_t) FAdd 5415 5413
+            5417:    208(ptr) AccessChain 5314(texel) 207
+                              Store 5417 5416
+            5418:         142 Load 5336(t2D)
+            5419:        5318 Load 5387(sShadow)
+            5420:         224 SampledImage 5418 5419
+            5421:154(f16vec2) Load 156(f16c2)
+            5422:   52(float) Load 215(compare)
+            5423:6(float16_t) Load 137(f16bias)
+            5424:6(float16_t) ImageSampleDrefImplicitLod 5420 5421 5422 Bias 5423
+            5425:    208(ptr) AccessChain 5314(texel) 207
+            5426:6(float16_t) Load 5425
+            5427:6(float16_t) FAdd 5426 5424
+            5428:    208(ptr) AccessChain 5314(texel) 207
+                              Store 5428 5427
+            5429:         183 Load 5370(tCube)
+            5430:        5318 Load 5387(sShadow)
+            5431:         245 SampledImage 5429 5430
+            5432:  249(fvec4) Load 251(c4)
+            5433:   52(float) CompositeExtract 5432 3
+            5434:6(float16_t) ImageSampleDrefImplicitLod 5431 5432 5433
+            5435:    208(ptr) AccessChain 5314(texel) 207
+            5436:6(float16_t) Load 5435
+            5437:6(float16_t) FAdd 5436 5434
+            5438:    208(ptr) AccessChain 5314(texel) 207
+                              Store 5438 5437
+            5439:         183 Load 5370(tCube)
+            5440:        5318 Load 5387(sShadow)
+            5441:         245 SampledImage 5439 5440
+            5442:175(f16vec3) Load 177(f16c3)
+            5443:   52(float) Load 215(compare)
+            5444:6(float16_t) Load 137(f16bias)
+            5445:6(float16_t) ImageSampleDrefImplicitLod 5441 5442 5443 Bias 5444
+            5446:    208(ptr) AccessChain 5314(texel) 207
+            5447:6(float16_t) Load 5446
+            5448:6(float16_t) FAdd 5447 5445
+            5449:    208(ptr) AccessChain 5314(texel) 207
+                              Store 5449 5448
+            5452:         268 Load 5451(t1DArray)
+            5453:        5318 Load 5320(s)
+            5454:         269 SampledImage 5452 5453
+            5455:   53(fvec2) Load 148(c2)
+            5456:  7(f16vec4) ImageSampleImplicitLod 5454 5455
+            5457:  7(f16vec4) Load 5314(texel)
+            5458:  7(f16vec4) FAdd 5457 5456
+                              Store 5314(texel) 5458
+            5459:         268 Load 5451(t1DArray)
+            5460:        5318 Load 5320(s)
+            5461:         269 SampledImage 5459 5460
+            5462:154(f16vec2) Load 156(f16c2)
+            5463:6(float16_t) Load 137(f16bias)
+            5464:  7(f16vec4) ImageSampleImplicitLod 5461 5462 Bias 5463
+            5465:  7(f16vec4) Load 5314(texel)
+            5466:  7(f16vec4) FAdd 5465 5464
+                              Store 5314(texel) 5466
+            5469:         283 Load 5468(t2DArray)
+            5470:        5318 Load 5320(s)
+            5471:         284 SampledImage 5469 5470
+            5472:  167(fvec3) Load 169(c3)
+            5473:  7(f16vec4) ImageSampleImplicitLod 5471 5472
+            5474:  7(f16vec4) Load 5314(texel)
+            5475:  7(f16vec4) FAdd 5474 5473
+                              Store 5314(texel) 5475
+            5476:         283 Load 5468(t2DArray)
+            5477:        5318 Load 5320(s)
+            5478:         284 SampledImage 5476 5477
+            5479:175(f16vec3) Load 177(f16c3)
+            5480:6(float16_t) Load 137(f16bias)
+            5481:  7(f16vec4) ImageSampleImplicitLod 5478 5479 Bias 5480
+            5482:  7(f16vec4) Load 5314(texel)
+            5483:  7(f16vec4) FAdd 5482 5481
+                              Store 5314(texel) 5483
+            5486:         298 Load 5485(tCubeArray)
+            5487:        5318 Load 5320(s)
+            5488:         299 SampledImage 5486 5487
+            5489:  249(fvec4) Load 251(c4)
+            5490:  7(f16vec4) ImageSampleImplicitLod 5488 5489
+            5491:  7(f16vec4) Load 5314(texel)
+            5492:  7(f16vec4) FAdd 5491 5490
+                              Store 5314(texel) 5492
+            5493:         298 Load 5485(tCubeArray)
+            5494:        5318 Load 5320(s)
+            5495:         299 SampledImage 5493 5494
+            5496:  7(f16vec4) Load 309(f16c4)
+            5497:6(float16_t) Load 137(f16bias)
+            5498:  7(f16vec4) ImageSampleImplicitLod 5495 5496 Bias 5497
+            5499:  7(f16vec4) Load 5314(texel)
+            5500:  7(f16vec4) FAdd 5499 5498
+                              Store 5314(texel) 5500
+            5501:         268 Load 5451(t1DArray)
+            5502:        5318 Load 5387(sShadow)
+            5503:         316 SampledImage 5501 5502
+            5504:  167(fvec3) Load 169(c3)
+            5505:   52(float) CompositeExtract 5504 2
+            5506:6(float16_t) ImageSampleDrefImplicitLod 5503 5504 5505
+            5507:    208(ptr) AccessChain 5314(texel) 207
+            5508:6(float16_t) Load 5507
+            5509:6(float16_t) FAdd 5508 5506
+            5510:    208(ptr) AccessChain 5314(texel) 207
+                              Store 5510 5509
+            5511:         268 Load 5451(t1DArray)
+            5512:        5318 Load 5387(sShadow)
+            5513:         316 SampledImage 5511 5512
+            5514:154(f16vec2) Load 156(f16c2)
+            5515:   52(float) Load 215(compare)
+            5516:6(float16_t) Load 137(f16bias)
+            5517:6(float16_t) ImageSampleDrefImplicitLod 5513 5514 5515 Bias 5516
+            5518:    208(ptr) AccessChain 5314(texel) 207
+            5519:6(float16_t) Load 5518
+            5520:6(float16_t) FAdd 5519 5517
+            5521:    208(ptr) AccessChain 5314(texel) 207
+                              Store 5521 5520
+            5522:         283 Load 5468(t2DArray)
+            5523:        5318 Load 5387(sShadow)
+            5524:         337 SampledImage 5522 5523
+            5525:  249(fvec4) Load 251(c4)
+            5526:   52(float) CompositeExtract 5525 3
+            5527:6(float16_t) ImageSampleDrefImplicitLod 5524 5525 5526
+            5528:    208(ptr) AccessChain 5314(texel) 207
+            5529:6(float16_t) Load 5528
+            5530:6(float16_t) FAdd 5529 5527
+            5531:    208(ptr) AccessChain 5314(texel) 207
+                              Store 5531 5530
+            5532:         283 Load 5468(t2DArray)
+            5533:        5318 Load 5387(sShadow)
+            5534:         337 SampledImage 5532 5533
+            5535:175(f16vec3) Load 177(f16c3)
+            5536:   52(float) Load 215(compare)
+            5537:6(float16_t) ImageSampleDrefImplicitLod 5534 5535 5536
+            5538:    208(ptr) AccessChain 5314(texel) 207
+            5539:6(float16_t) Load 5538
+            5540:6(float16_t) FAdd 5539 5537
+            5541:    208(ptr) AccessChain 5314(texel) 207
+                              Store 5541 5540
+            5544:         356 Load 5543(t2DRect)
+            5545:        5318 Load 5320(s)
+            5546:         357 SampledImage 5544 5545
+            5547:   53(fvec2) Load 148(c2)
+            5548:  7(f16vec4) ImageSampleImplicitLod 5546 5547
+            5549:  7(f16vec4) Load 5314(texel)
+            5550:  7(f16vec4) FAdd 5549 5548
+                              Store 5314(texel) 5550
+            5551:         356 Load 5543(t2DRect)
+            5552:        5318 Load 5320(s)
+            5553:         357 SampledImage 5551 5552
+            5554:154(f16vec2) Load 156(f16c2)
+            5555:  7(f16vec4) ImageSampleImplicitLod 5553 5554
+            5556:  7(f16vec4) Load 5314(texel)
+            5557:  7(f16vec4) FAdd 5556 5555
+                              Store 5314(texel) 5557
+            5558:         356 Load 5543(t2DRect)
+            5559:        5318 Load 5387(sShadow)
+            5560:         371 SampledImage 5558 5559
+            5561:  167(fvec3) Load 169(c3)
+            5562:   52(float) CompositeExtract 5561 2
+            5563:6(float16_t) ImageSampleDrefImplicitLod 5560 5561 5562
+            5564:    208(ptr) AccessChain 5314(texel) 207
+            5565:6(float16_t) Load 5564
+            5566:6(float16_t) FAdd 5565 5563
+            5567:    208(ptr) AccessChain 5314(texel) 207
+                              Store 5567 5566
+            5568:         356 Load 5543(t2DRect)
+            5569:        5318 Load 5387(sShadow)
+            5570:         371 SampledImage 5568 5569
+            5571:154(f16vec2) Load 156(f16c2)
+            5572:   52(float) Load 215(compare)
+            5573:6(float16_t) ImageSampleDrefImplicitLod 5570 5571 5572
+            5574:    208(ptr) AccessChain 5314(texel) 207
+            5575:6(float16_t) Load 5574
+            5576:6(float16_t) FAdd 5575 5573
+            5577:    208(ptr) AccessChain 5314(texel) 207
+                              Store 5577 5576
+            5578:         298 Load 5485(tCubeArray)
+            5579:        5318 Load 5387(sShadow)
+            5580:         391 SampledImage 5578 5579
+            5581:  249(fvec4) Load 251(c4)
+            5582:   52(float) Load 215(compare)
+            5583:6(float16_t) ImageSampleDrefImplicitLod 5580 5581 5582
+            5584:    208(ptr) AccessChain 5314(texel) 207
+            5585:6(float16_t) Load 5584
+            5586:6(float16_t) FAdd 5585 5583
+            5587:    208(ptr) AccessChain 5314(texel) 207
+                              Store 5587 5586
+            5588:         298 Load 5485(tCubeArray)
+            5589:        5318 Load 5387(sShadow)
+            5590:         391 SampledImage 5588 5589
+            5591:  7(f16vec4) Load 309(f16c4)
+            5592:   52(float) Load 215(compare)
+            5593:6(float16_t) ImageSampleDrefImplicitLod 5590 5591 5592
+            5594:    208(ptr) AccessChain 5314(texel) 207
+            5595:6(float16_t) Load 5594
+            5596:6(float16_t) FAdd 5595 5593
+            5597:    208(ptr) AccessChain 5314(texel) 207
+                              Store 5597 5596
+            5598:  7(f16vec4) Load 5314(texel)
+                              ReturnValue 5598
                               FunctionEnd
 117(testSubpassLoad():  7(f16vec4) Function None 8
              118:             Label
-            5796:        5793 Load 5795(subpass)
-            5798:  7(f16vec4) ImageRead 5796 5797
-            5802:        5799 Load 5801(subpassMS)
-            5803:  7(f16vec4) ImageRead 5802 5797 Sample 1326
-            5804:  7(f16vec4) FAdd 5798 5803
-                              ReturnValue 5804
+            5604:        5601 Load 5603(subpass)
+            5606:  7(f16vec4) ImageRead 5604 5605
+            5610:        5607 Load 5609(subpassMS)
+            5611:  7(f16vec4) ImageRead 5610 5605 Sample 1326
+            5612:  7(f16vec4) FAdd 5606 5611
+                              ReturnValue 5612
                               FunctionEnd
diff --git a/Test/baseResults/spv.float16NoRelaxed.vert.out b/Test/baseResults/spv.float16NoRelaxed.vert.out
index 9e821ab..2f72839 100644
--- a/Test/baseResults/spv.float16NoRelaxed.vert.out
+++ b/Test/baseResults/spv.float16NoRelaxed.vert.out
@@ -27,10 +27,10 @@
                               Decorate 11(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
                               Decorate 12 RelaxedPrecision
                               Decorate 25 ArrayStride 4
-                              MemberDecorate 26(Buffer1) 0 Offset 0
                               Decorate 26(Buffer1) Block
-                              Decorate 28 DescriptorSet 0
+                              MemberDecorate 26(Buffer1) 0 Offset 0
                               Decorate 28 Binding 0
+                              Decorate 28 DescriptorSet 0
                               Decorate 30(gl_VertexIndex) BuiltIn VertexIndex
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.float32.frag.out b/Test/baseResults/spv.float32.frag.out
index d2cc609..082a417 100644
--- a/Test/baseResults/spv.float32.frag.out
+++ b/Test/baseResults/spv.float32.frag.out
@@ -1,7 +1,7 @@
 spv.float32.frag
 // Module Version 10300
 // Generated by (magic number): 8000b
-// Id's are bound by 541
+// Id's are bound by 544
 
                               Capability Shader
                               Capability Float16
@@ -13,7 +13,7 @@
                               Capability InterpolationFunction
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 471
+                              EntryPoint Fragment 4  "main" 474
                               ExecutionMode 4 OriginUpperLeft
                               Source GLSL 450
                               SourceExtension  "GL_EXT_shader_explicit_arithmetic_types"
@@ -60,75 +60,76 @@
                               Name 280  "f32v1"
                               Name 301  "f32"
                               Name 305  "f32v3"
-                              Name 345  "bv"
-                              Name 366  "b"
-                              Name 376  "iv"
-                              Name 377  "ResType"
-                              Name 384  "f32"
-                              Name 385  "f32v1"
-                              Name 389  "f32v2"
-                              Name 395  "f32v3"
-                              Name 414  "f32m3"
-                              Name 415  "f32m1"
-                              Name 417  "f32m2"
-                              Name 426  "f32v1"
-                              Name 428  "f32v2"
-                              Name 433  "f32m4"
-                              Name 436  "f32"
-                              Name 439  "f32m5"
-                              Name 444  "f32m6"
-                              Name 445  "f32m7"
-                              Name 448  "bv"
-                              Name 449  "f32v1"
-                              Name 451  "f32v2"
-                              Name 469  "f32v"
-                              Name 471  "if32v"
-                              Name 528  "S"
-                              MemberName 528(S) 0  "x"
-                              MemberName 528(S) 1  "y"
-                              MemberName 528(S) 2  "z"
-                              Name 530  "B1"
-                              MemberName 530(B1) 0  "a"
-                              MemberName 530(B1) 1  "b"
-                              MemberName 530(B1) 2  "c"
-                              MemberName 530(B1) 3  "d"
-                              MemberName 530(B1) 4  "e"
-                              MemberName 530(B1) 5  "f"
-                              MemberName 530(B1) 6  "g"
-                              MemberName 530(B1) 7  "h"
-                              Name 532  ""
-                              Name 533  "sf16"
-                              Name 534  "sf"
-                              Name 535  "sd"
-                              Name 536  "f16_to_f"
-                              Name 538  "f16_to_d"
-                              Name 539  "f_to_f16"
-                              Name 540  "d_to_f16"
-                              Decorate 471(if32v) Location 0
-                              Decorate 526 ArrayStride 16
-                              Decorate 527 ArrayStride 32
-                              MemberDecorate 528(S) 0 Offset 0
-                              MemberDecorate 528(S) 1 Offset 8
-                              MemberDecorate 528(S) 2 Offset 16
-                              Decorate 529 ArrayStride 32
-                              MemberDecorate 530(B1) 0 Offset 0
-                              MemberDecorate 530(B1) 1 Offset 8
-                              MemberDecorate 530(B1) 2 Offset 16
-                              MemberDecorate 530(B1) 3 Offset 32
-                              MemberDecorate 530(B1) 4 ColMajor
-                              MemberDecorate 530(B1) 4 Offset 64
-                              MemberDecorate 530(B1) 4 MatrixStride 16
-                              MemberDecorate 530(B1) 5 ColMajor
-                              MemberDecorate 530(B1) 5 Offset 96
-                              MemberDecorate 530(B1) 5 MatrixStride 16
-                              MemberDecorate 530(B1) 6 Offset 160
-                              MemberDecorate 530(B1) 7 Offset 192
-                              Decorate 530(B1) Block
-                              Decorate 532 DescriptorSet 0
-                              Decorate 532 Binding 0
-                              Decorate 533(sf16) SpecId 100
-                              Decorate 534(sf) SpecId 101
-                              Decorate 535(sd) SpecId 102
+                              Name 307  "ResType"
+                              Name 348  "bv"
+                              Name 369  "b"
+                              Name 379  "iv"
+                              Name 380  "ResType"
+                              Name 387  "f32"
+                              Name 388  "f32v1"
+                              Name 392  "f32v2"
+                              Name 398  "f32v3"
+                              Name 417  "f32m3"
+                              Name 418  "f32m1"
+                              Name 420  "f32m2"
+                              Name 429  "f32v1"
+                              Name 431  "f32v2"
+                              Name 436  "f32m4"
+                              Name 439  "f32"
+                              Name 442  "f32m5"
+                              Name 447  "f32m6"
+                              Name 448  "f32m7"
+                              Name 451  "bv"
+                              Name 452  "f32v1"
+                              Name 454  "f32v2"
+                              Name 472  "f32v"
+                              Name 474  "if32v"
+                              Name 531  "S"
+                              MemberName 531(S) 0  "x"
+                              MemberName 531(S) 1  "y"
+                              MemberName 531(S) 2  "z"
+                              Name 533  "B1"
+                              MemberName 533(B1) 0  "a"
+                              MemberName 533(B1) 1  "b"
+                              MemberName 533(B1) 2  "c"
+                              MemberName 533(B1) 3  "d"
+                              MemberName 533(B1) 4  "e"
+                              MemberName 533(B1) 5  "f"
+                              MemberName 533(B1) 6  "g"
+                              MemberName 533(B1) 7  "h"
+                              Name 535  ""
+                              Name 536  "sf16"
+                              Name 537  "sf"
+                              Name 538  "sd"
+                              Name 539  "f16_to_f"
+                              Name 541  "f16_to_d"
+                              Name 542  "f_to_f16"
+                              Name 543  "d_to_f16"
+                              Decorate 474(if32v) Location 0
+                              Decorate 529 ArrayStride 16
+                              Decorate 530 ArrayStride 32
+                              MemberDecorate 531(S) 0 Offset 0
+                              MemberDecorate 531(S) 1 Offset 8
+                              MemberDecorate 531(S) 2 Offset 16
+                              Decorate 532 ArrayStride 32
+                              Decorate 533(B1) Block
+                              MemberDecorate 533(B1) 0 Offset 0
+                              MemberDecorate 533(B1) 1 Offset 8
+                              MemberDecorate 533(B1) 2 Offset 16
+                              MemberDecorate 533(B1) 3 Offset 32
+                              MemberDecorate 533(B1) 4 ColMajor
+                              MemberDecorate 533(B1) 4 MatrixStride 16
+                              MemberDecorate 533(B1) 4 Offset 64
+                              MemberDecorate 533(B1) 5 ColMajor
+                              MemberDecorate 533(B1) 5 MatrixStride 16
+                              MemberDecorate 533(B1) 5 Offset 96
+                              MemberDecorate 533(B1) 6 Offset 160
+                              MemberDecorate 533(B1) 7 Offset 192
+                              Decorate 535 Binding 0
+                              Decorate 535 DescriptorSet 0
+                              Decorate 536(sf16) SpecId 100
+                              Decorate 537(sf) SpecId 101
+                              Decorate 538(sd) SpecId 102
                2:             TypeVoid
                3:             TypeFunction 2
               26:             TypeFloat 32
@@ -185,37 +186,38 @@
              223:             TypePointer Function 222(i64vec3)
              227:             TypeVector 26(float) 4
              228:             TypePointer Function 227(fvec4)
-    377(ResType):             TypeStruct 153(fvec3) 193(ivec3)
-             412:             TypeMatrix 153(fvec3) 2
-             413:             TypePointer Function 412
-             431:             TypeMatrix 27(fvec2) 3
-             432:             TypePointer Function 431
-             437:             TypeMatrix 153(fvec3) 3
-             438:             TypePointer Function 437
-             442:             TypeMatrix 227(fvec4) 4
-             443:             TypePointer Function 442
-             470:             TypePointer Input 153(fvec3)
-      471(if32v):    470(ptr) Variable Input
-             472:             TypePointer Input 26(float)
-             515:    192(int) Constant 1
-             522:   26(float) Constant 1056964608
-             523:   27(fvec2) ConstantComposite 522 522
-             525:     31(int) Constant 2
-             526:             TypeArray 26(float) 525
-             527:             TypeArray 412 525
-          528(S):             TypeStruct 26(float) 27(fvec2) 153(fvec3)
-             529:             TypeArray 528(S) 525
-         530(B1):             TypeStruct 26(float) 27(fvec2) 153(fvec3) 526 412 527 528(S) 529
-             531:             TypePointer Uniform 530(B1)
-             532:    531(ptr) Variable Uniform
-       533(sf16):172(float16_t) SpecConstant 12288
-         534(sf):   26(float) SpecConstant 1048576000
-         535(sd):149(float64_t) SpecConstant 0 1071644672
-   536(f16_to_f):   26(float) SpecConstantOp 115 533(sf16)
-             537:   26(float) SpecConstantOp 115 533(sf16)
-   538(f16_to_d):149(float64_t) SpecConstantOp 115 537
-   539(f_to_f16):172(float16_t) SpecConstantOp 115 534(sf)
-   540(d_to_f16):172(float16_t) SpecConstantOp 115 535(sd)
+    307(ResType):             TypeStruct 153(fvec3) 153(fvec3)
+    380(ResType):             TypeStruct 153(fvec3) 193(ivec3)
+             415:             TypeMatrix 153(fvec3) 2
+             416:             TypePointer Function 415
+             434:             TypeMatrix 27(fvec2) 3
+             435:             TypePointer Function 434
+             440:             TypeMatrix 153(fvec3) 3
+             441:             TypePointer Function 440
+             445:             TypeMatrix 227(fvec4) 4
+             446:             TypePointer Function 445
+             473:             TypePointer Input 153(fvec3)
+      474(if32v):    473(ptr) Variable Input
+             475:             TypePointer Input 26(float)
+             518:    192(int) Constant 1
+             525:   26(float) Constant 1056964608
+             526:   27(fvec2) ConstantComposite 525 525
+             528:     31(int) Constant 2
+             529:             TypeArray 26(float) 528
+             530:             TypeArray 415 528
+          531(S):             TypeStruct 26(float) 27(fvec2) 153(fvec3)
+             532:             TypeArray 531(S) 528
+         533(B1):             TypeStruct 26(float) 27(fvec2) 153(fvec3) 529 415 530 531(S) 532
+             534:             TypePointer Uniform 533(B1)
+             535:    534(ptr) Variable Uniform
+       536(sf16):172(float16_t) SpecConstant 12288
+         537(sf):   26(float) SpecConstant 1048576000
+         538(sd):149(float64_t) SpecConstant 0 1071644672
+   539(f16_to_f):   26(float) SpecConstantOp 115 536(sf16)
+             540:   26(float) SpecConstantOp 115 536(sf16)
+   541(f16_to_d):149(float64_t) SpecConstantOp 115 540
+   542(f_to_f16):172(float16_t) SpecConstantOp 115 537(sf)
+   543(d_to_f16):172(float16_t) SpecConstantOp 115 538(sd)
          4(main):           2 Function None 3
                5:             Label
                               Return
@@ -509,9 +511,9 @@
       280(f32v1):    154(ptr) Variable Function
         301(f32):     33(ptr) Variable Function
       305(f32v3):    154(ptr) Variable Function
-         345(bv):    159(ptr) Variable Function
-          366(b):    108(ptr) Variable Function
-         376(iv):    194(ptr) Variable Function
+         348(bv):    159(ptr) Variable Function
+          369(b):    108(ptr) Variable Function
+         379(iv):    194(ptr) Variable Function
              281:  153(fvec3) Load 280(f32v1)
              282:  153(fvec3) ExtInst 1(GLSL.std.450) 4(FAbs) 281
                               Store 279(f32v2) 282
@@ -546,276 +548,279 @@
              304:  153(fvec3) FMod 300 303
                               Store 279(f32v2) 304
              306:  153(fvec3) Load 280(f32v1)
-             307:  153(fvec3) ExtInst 1(GLSL.std.450) 35(Modf) 306 279(f32v2)
-                              Store 305(f32v3) 307
-             308:  153(fvec3) Load 280(f32v1)
-             309:  153(fvec3) Load 279(f32v2)
-             310:  153(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 308 309
+             308:307(ResType) ExtInst 1(GLSL.std.450) 36(ModfStruct) 306
+             309:  153(fvec3) CompositeExtract 308 1
+                              Store 279(f32v2) 309
+             310:  153(fvec3) CompositeExtract 308 0
                               Store 305(f32v3) 310
              311:  153(fvec3) Load 280(f32v1)
-             312:   26(float) Load 301(f32)
-             313:  153(fvec3) CompositeConstruct 312 312 312
-             314:  153(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 311 313
-                              Store 305(f32v3) 314
-             315:  153(fvec3) Load 280(f32v1)
-             316:  153(fvec3) Load 279(f32v2)
-             317:  153(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 315 316
+             312:  153(fvec3) Load 279(f32v2)
+             313:  153(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 311 312
+                              Store 305(f32v3) 313
+             314:  153(fvec3) Load 280(f32v1)
+             315:   26(float) Load 301(f32)
+             316:  153(fvec3) CompositeConstruct 315 315 315
+             317:  153(fvec3) ExtInst 1(GLSL.std.450) 37(FMin) 314 316
                               Store 305(f32v3) 317
              318:  153(fvec3) Load 280(f32v1)
-             319:   26(float) Load 301(f32)
-             320:  153(fvec3) CompositeConstruct 319 319 319
-             321:  153(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 318 320
-                              Store 305(f32v3) 321
-             322:  153(fvec3) Load 280(f32v1)
-             323:   26(float) Load 301(f32)
-             324:     33(ptr) AccessChain 279(f32v2) 32
-             325:   26(float) Load 324
-             326:  153(fvec3) CompositeConstruct 323 323 323
-             327:  153(fvec3) CompositeConstruct 325 325 325
-             328:  153(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 322 326 327
-                              Store 305(f32v3) 328
-             329:  153(fvec3) Load 280(f32v1)
-             330:  153(fvec3) Load 279(f32v2)
-             331:   26(float) Load 301(f32)
-             332:  153(fvec3) CompositeConstruct 331 331 331
-             333:  153(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 329 330 332
-                              Store 305(f32v3) 333
-             334:  153(fvec3) Load 280(f32v1)
-             335:  153(fvec3) Load 279(f32v2)
-             336:   26(float) Load 301(f32)
-             337:  153(fvec3) CompositeConstruct 336 336 336
-             338:  153(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 334 335 337
-                              Store 305(f32v3) 338
-             339:  153(fvec3) Load 280(f32v1)
-             340:  153(fvec3) Load 279(f32v2)
-             341:  153(fvec3) Load 305(f32v3)
-             342:  153(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 339 340 341
-                              Store 305(f32v3) 342
-             343:  153(fvec3) Load 280(f32v1)
-             344:  153(fvec3) Load 279(f32v2)
-             346:  158(bvec3) Load 345(bv)
-             347:  153(fvec3) Select 346 344 343
-                              Store 305(f32v3) 347
-             348:  153(fvec3) Load 280(f32v1)
-             349:  153(fvec3) Load 279(f32v2)
-             350:  153(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 348 349
+             319:  153(fvec3) Load 279(f32v2)
+             320:  153(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 318 319
+                              Store 305(f32v3) 320
+             321:  153(fvec3) Load 280(f32v1)
+             322:   26(float) Load 301(f32)
+             323:  153(fvec3) CompositeConstruct 322 322 322
+             324:  153(fvec3) ExtInst 1(GLSL.std.450) 40(FMax) 321 323
+                              Store 305(f32v3) 324
+             325:  153(fvec3) Load 280(f32v1)
+             326:   26(float) Load 301(f32)
+             327:     33(ptr) AccessChain 279(f32v2) 32
+             328:   26(float) Load 327
+             329:  153(fvec3) CompositeConstruct 326 326 326
+             330:  153(fvec3) CompositeConstruct 328 328 328
+             331:  153(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 325 329 330
+                              Store 305(f32v3) 331
+             332:  153(fvec3) Load 280(f32v1)
+             333:  153(fvec3) Load 279(f32v2)
+             334:   26(float) Load 301(f32)
+             335:  153(fvec3) CompositeConstruct 334 334 334
+             336:  153(fvec3) ExtInst 1(GLSL.std.450) 43(FClamp) 332 333 335
+                              Store 305(f32v3) 336
+             337:  153(fvec3) Load 280(f32v1)
+             338:  153(fvec3) Load 279(f32v2)
+             339:   26(float) Load 301(f32)
+             340:  153(fvec3) CompositeConstruct 339 339 339
+             341:  153(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 337 338 340
+                              Store 305(f32v3) 341
+             342:  153(fvec3) Load 280(f32v1)
+             343:  153(fvec3) Load 279(f32v2)
+             344:  153(fvec3) Load 305(f32v3)
+             345:  153(fvec3) ExtInst 1(GLSL.std.450) 46(FMix) 342 343 344
+                              Store 305(f32v3) 345
+             346:  153(fvec3) Load 280(f32v1)
+             347:  153(fvec3) Load 279(f32v2)
+             349:  158(bvec3) Load 348(bv)
+             350:  153(fvec3) Select 349 347 346
                               Store 305(f32v3) 350
-             351:   26(float) Load 301(f32)
-             352:  153(fvec3) Load 305(f32v3)
-             353:  153(fvec3) CompositeConstruct 351 351 351
-             354:  153(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 353 352
-                              Store 305(f32v3) 354
-             355:  153(fvec3) Load 280(f32v1)
-             356:  153(fvec3) Load 279(f32v2)
-             357:  153(fvec3) Load 305(f32v3)
-             358:  153(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 355 356 357
-                              Store 305(f32v3) 358
-             359:   26(float) Load 301(f32)
-             360:     33(ptr) AccessChain 280(f32v1) 32
-             361:   26(float) Load 360
-             362:  153(fvec3) Load 279(f32v2)
-             363:  153(fvec3) CompositeConstruct 359 359 359
-             364:  153(fvec3) CompositeConstruct 361 361 361
-             365:  153(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 363 364 362
-                              Store 305(f32v3) 365
-             367:   26(float) Load 301(f32)
-             368:   107(bool) IsNan 367
-                              Store 366(b) 368
-             369:  153(fvec3) Load 280(f32v1)
-             370:  158(bvec3) IsInf 369
-                              Store 345(bv) 370
-             371:  153(fvec3) Load 280(f32v1)
-             372:  153(fvec3) Load 279(f32v2)
-             373:  153(fvec3) Load 305(f32v3)
-             374:  153(fvec3) ExtInst 1(GLSL.std.450) 50(Fma) 371 372 373
-                              Store 305(f32v3) 374
-             375:  153(fvec3) Load 280(f32v1)
-             378:377(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 375
-             379:  193(ivec3) CompositeExtract 378 1
-                              Store 376(iv) 379
-             380:  153(fvec3) CompositeExtract 378 0
-                              Store 279(f32v2) 380
-             381:  153(fvec3) Load 280(f32v1)
-             382:  193(ivec3) Load 376(iv)
-             383:  153(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 381 382
+             351:  153(fvec3) Load 280(f32v1)
+             352:  153(fvec3) Load 279(f32v2)
+             353:  153(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 351 352
+                              Store 305(f32v3) 353
+             354:   26(float) Load 301(f32)
+             355:  153(fvec3) Load 305(f32v3)
+             356:  153(fvec3) CompositeConstruct 354 354 354
+             357:  153(fvec3) ExtInst 1(GLSL.std.450) 48(Step) 356 355
+                              Store 305(f32v3) 357
+             358:  153(fvec3) Load 280(f32v1)
+             359:  153(fvec3) Load 279(f32v2)
+             360:  153(fvec3) Load 305(f32v3)
+             361:  153(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 358 359 360
+                              Store 305(f32v3) 361
+             362:   26(float) Load 301(f32)
+             363:     33(ptr) AccessChain 280(f32v1) 32
+             364:   26(float) Load 363
+             365:  153(fvec3) Load 279(f32v2)
+             366:  153(fvec3) CompositeConstruct 362 362 362
+             367:  153(fvec3) CompositeConstruct 364 364 364
+             368:  153(fvec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 366 367 365
+                              Store 305(f32v3) 368
+             370:   26(float) Load 301(f32)
+             371:   107(bool) IsNan 370
+                              Store 369(b) 371
+             372:  153(fvec3) Load 280(f32v1)
+             373:  158(bvec3) IsInf 372
+                              Store 348(bv) 373
+             374:  153(fvec3) Load 280(f32v1)
+             375:  153(fvec3) Load 279(f32v2)
+             376:  153(fvec3) Load 305(f32v3)
+             377:  153(fvec3) ExtInst 1(GLSL.std.450) 50(Fma) 374 375 376
+                              Store 305(f32v3) 377
+             378:  153(fvec3) Load 280(f32v1)
+             381:380(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 378
+             382:  193(ivec3) CompositeExtract 381 1
+                              Store 379(iv) 382
+             383:  153(fvec3) CompositeExtract 381 0
                               Store 279(f32v2) 383
+             384:  153(fvec3) Load 280(f32v1)
+             385:  193(ivec3) Load 379(iv)
+             386:  153(fvec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 384 385
+                              Store 279(f32v2) 386
                               Return
                               FunctionEnd
 18(builtinGeometryFuncs():           2 Function None 3
               19:             Label
-        384(f32):     33(ptr) Variable Function
-      385(f32v1):    154(ptr) Variable Function
-      389(f32v2):    154(ptr) Variable Function
-      395(f32v3):    154(ptr) Variable Function
-             386:  153(fvec3) Load 385(f32v1)
-             387:   26(float) ExtInst 1(GLSL.std.450) 66(Length) 386
-                              Store 384(f32) 387
-             388:  153(fvec3) Load 385(f32v1)
-             390:  153(fvec3) Load 389(f32v2)
-             391:   26(float) ExtInst 1(GLSL.std.450) 67(Distance) 388 390
-                              Store 384(f32) 391
-             392:  153(fvec3) Load 385(f32v1)
-             393:  153(fvec3) Load 389(f32v2)
-             394:   26(float) Dot 392 393
-                              Store 384(f32) 394
-             396:  153(fvec3) Load 385(f32v1)
-             397:  153(fvec3) Load 389(f32v2)
-             398:  153(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 396 397
-                              Store 395(f32v3) 398
-             399:  153(fvec3) Load 385(f32v1)
-             400:  153(fvec3) ExtInst 1(GLSL.std.450) 69(Normalize) 399
-                              Store 389(f32v2) 400
-             401:  153(fvec3) Load 385(f32v1)
-             402:  153(fvec3) Load 389(f32v2)
-             403:  153(fvec3) Load 395(f32v3)
-             404:  153(fvec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 401 402 403
-                              Store 395(f32v3) 404
-             405:  153(fvec3) Load 385(f32v1)
-             406:  153(fvec3) Load 389(f32v2)
-             407:  153(fvec3) ExtInst 1(GLSL.std.450) 71(Reflect) 405 406
-                              Store 395(f32v3) 407
-             408:  153(fvec3) Load 385(f32v1)
-             409:  153(fvec3) Load 389(f32v2)
-             410:   26(float) Load 384(f32)
-             411:  153(fvec3) ExtInst 1(GLSL.std.450) 72(Refract) 408 409 410
-                              Store 395(f32v3) 411
+        387(f32):     33(ptr) Variable Function
+      388(f32v1):    154(ptr) Variable Function
+      392(f32v2):    154(ptr) Variable Function
+      398(f32v3):    154(ptr) Variable Function
+             389:  153(fvec3) Load 388(f32v1)
+             390:   26(float) ExtInst 1(GLSL.std.450) 66(Length) 389
+                              Store 387(f32) 390
+             391:  153(fvec3) Load 388(f32v1)
+             393:  153(fvec3) Load 392(f32v2)
+             394:   26(float) ExtInst 1(GLSL.std.450) 67(Distance) 391 393
+                              Store 387(f32) 394
+             395:  153(fvec3) Load 388(f32v1)
+             396:  153(fvec3) Load 392(f32v2)
+             397:   26(float) Dot 395 396
+                              Store 387(f32) 397
+             399:  153(fvec3) Load 388(f32v1)
+             400:  153(fvec3) Load 392(f32v2)
+             401:  153(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 399 400
+                              Store 398(f32v3) 401
+             402:  153(fvec3) Load 388(f32v1)
+             403:  153(fvec3) ExtInst 1(GLSL.std.450) 69(Normalize) 402
+                              Store 392(f32v2) 403
+             404:  153(fvec3) Load 388(f32v1)
+             405:  153(fvec3) Load 392(f32v2)
+             406:  153(fvec3) Load 398(f32v3)
+             407:  153(fvec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 404 405 406
+                              Store 398(f32v3) 407
+             408:  153(fvec3) Load 388(f32v1)
+             409:  153(fvec3) Load 392(f32v2)
+             410:  153(fvec3) ExtInst 1(GLSL.std.450) 71(Reflect) 408 409
+                              Store 398(f32v3) 410
+             411:  153(fvec3) Load 388(f32v1)
+             412:  153(fvec3) Load 392(f32v2)
+             413:   26(float) Load 387(f32)
+             414:  153(fvec3) ExtInst 1(GLSL.std.450) 72(Refract) 411 412 413
+                              Store 398(f32v3) 414
                               Return
                               FunctionEnd
 20(builtinMatrixFuncs():           2 Function None 3
               21:             Label
-      414(f32m3):    413(ptr) Variable Function
-      415(f32m1):    413(ptr) Variable Function
-      417(f32m2):    413(ptr) Variable Function
-      426(f32v1):    154(ptr) Variable Function
-      428(f32v2):     28(ptr) Variable Function
-      433(f32m4):    432(ptr) Variable Function
-        436(f32):     33(ptr) Variable Function
-      439(f32m5):    438(ptr) Variable Function
-      444(f32m6):    443(ptr) Variable Function
-      445(f32m7):    443(ptr) Variable Function
-             416:         412 Load 415(f32m1)
-             418:         412 Load 417(f32m2)
-             419:  153(fvec3) CompositeExtract 416 0
-             420:  153(fvec3) CompositeExtract 418 0
-             421:  153(fvec3) FMul 419 420
-             422:  153(fvec3) CompositeExtract 416 1
-             423:  153(fvec3) CompositeExtract 418 1
+      417(f32m3):    416(ptr) Variable Function
+      418(f32m1):    416(ptr) Variable Function
+      420(f32m2):    416(ptr) Variable Function
+      429(f32v1):    154(ptr) Variable Function
+      431(f32v2):     28(ptr) Variable Function
+      436(f32m4):    435(ptr) Variable Function
+        439(f32):     33(ptr) Variable Function
+      442(f32m5):    441(ptr) Variable Function
+      447(f32m6):    446(ptr) Variable Function
+      448(f32m7):    446(ptr) Variable Function
+             419:         415 Load 418(f32m1)
+             421:         415 Load 420(f32m2)
+             422:  153(fvec3) CompositeExtract 419 0
+             423:  153(fvec3) CompositeExtract 421 0
              424:  153(fvec3) FMul 422 423
-             425:         412 CompositeConstruct 421 424
-                              Store 414(f32m3) 425
-             427:  153(fvec3) Load 426(f32v1)
-             429:   27(fvec2) Load 428(f32v2)
-             430:         412 OuterProduct 427 429
-                              Store 415(f32m1) 430
-             434:         412 Load 415(f32m1)
-             435:         431 Transpose 434
-                              Store 433(f32m4) 435
-             440:         437 Load 439(f32m5)
-             441:   26(float) ExtInst 1(GLSL.std.450) 33(Determinant) 440
-                              Store 436(f32) 441
-             446:         442 Load 445(f32m7)
-             447:         442 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 446
-                              Store 444(f32m6) 447
+             425:  153(fvec3) CompositeExtract 419 1
+             426:  153(fvec3) CompositeExtract 421 1
+             427:  153(fvec3) FMul 425 426
+             428:         415 CompositeConstruct 424 427
+                              Store 417(f32m3) 428
+             430:  153(fvec3) Load 429(f32v1)
+             432:   27(fvec2) Load 431(f32v2)
+             433:         415 OuterProduct 430 432
+                              Store 418(f32m1) 433
+             437:         415 Load 418(f32m1)
+             438:         434 Transpose 437
+                              Store 436(f32m4) 438
+             443:         440 Load 442(f32m5)
+             444:   26(float) ExtInst 1(GLSL.std.450) 33(Determinant) 443
+                              Store 439(f32) 444
+             449:         445 Load 448(f32m7)
+             450:         445 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 449
+                              Store 447(f32m6) 450
                               Return
                               FunctionEnd
 22(builtinVecRelFuncs():           2 Function None 3
               23:             Label
-         448(bv):    159(ptr) Variable Function
-      449(f32v1):    154(ptr) Variable Function
-      451(f32v2):    154(ptr) Variable Function
-             450:  153(fvec3) Load 449(f32v1)
-             452:  153(fvec3) Load 451(f32v2)
-             453:  158(bvec3) FOrdLessThan 450 452
-                              Store 448(bv) 453
-             454:  153(fvec3) Load 449(f32v1)
-             455:  153(fvec3) Load 451(f32v2)
-             456:  158(bvec3) FOrdLessThanEqual 454 455
-                              Store 448(bv) 456
-             457:  153(fvec3) Load 449(f32v1)
-             458:  153(fvec3) Load 451(f32v2)
-             459:  158(bvec3) FOrdGreaterThan 457 458
-                              Store 448(bv) 459
-             460:  153(fvec3) Load 449(f32v1)
-             461:  153(fvec3) Load 451(f32v2)
-             462:  158(bvec3) FOrdGreaterThanEqual 460 461
-                              Store 448(bv) 462
-             463:  153(fvec3) Load 449(f32v1)
-             464:  153(fvec3) Load 451(f32v2)
-             465:  158(bvec3) FOrdEqual 463 464
-                              Store 448(bv) 465
-             466:  153(fvec3) Load 449(f32v1)
-             467:  153(fvec3) Load 451(f32v2)
-             468:  158(bvec3) FUnordNotEqual 466 467
-                              Store 448(bv) 468
+         451(bv):    159(ptr) Variable Function
+      452(f32v1):    154(ptr) Variable Function
+      454(f32v2):    154(ptr) Variable Function
+             453:  153(fvec3) Load 452(f32v1)
+             455:  153(fvec3) Load 454(f32v2)
+             456:  158(bvec3) FOrdLessThan 453 455
+                              Store 451(bv) 456
+             457:  153(fvec3) Load 452(f32v1)
+             458:  153(fvec3) Load 454(f32v2)
+             459:  158(bvec3) FOrdLessThanEqual 457 458
+                              Store 451(bv) 459
+             460:  153(fvec3) Load 452(f32v1)
+             461:  153(fvec3) Load 454(f32v2)
+             462:  158(bvec3) FOrdGreaterThan 460 461
+                              Store 451(bv) 462
+             463:  153(fvec3) Load 452(f32v1)
+             464:  153(fvec3) Load 454(f32v2)
+             465:  158(bvec3) FOrdGreaterThanEqual 463 464
+                              Store 451(bv) 465
+             466:  153(fvec3) Load 452(f32v1)
+             467:  153(fvec3) Load 454(f32v2)
+             468:  158(bvec3) FOrdEqual 466 467
+                              Store 451(bv) 468
+             469:  153(fvec3) Load 452(f32v1)
+             470:  153(fvec3) Load 454(f32v2)
+             471:  158(bvec3) FUnordNotEqual 469 470
+                              Store 451(bv) 471
                               Return
                               FunctionEnd
 24(builtinFragProcFuncs():           2 Function None 3
               25:             Label
-       469(f32v):    154(ptr) Variable Function
-             473:    472(ptr) AccessChain 471(if32v) 32
-             474:   26(float) Load 473
-             475:   26(float) DPdx 474
-             476:     33(ptr) AccessChain 469(f32v) 32
-                              Store 476 475
-             477:    472(ptr) AccessChain 471(if32v) 88
-             478:   26(float) Load 477
-             479:   26(float) DPdy 478
-             480:     33(ptr) AccessChain 469(f32v) 88
-                              Store 480 479
-             481:  153(fvec3) Load 471(if32v)
-             482:   27(fvec2) VectorShuffle 481 481 0 1
-             483:   27(fvec2) DPdxFine 482
-             484:     33(ptr) AccessChain 469(f32v) 32
-             485:   26(float) CompositeExtract 483 0
-                              Store 484 485
-             486:     33(ptr) AccessChain 469(f32v) 88
-             487:   26(float) CompositeExtract 483 1
-                              Store 486 487
-             488:  153(fvec3) Load 471(if32v)
-             489:   27(fvec2) VectorShuffle 488 488 0 1
-             490:   27(fvec2) DPdyFine 489
-             491:     33(ptr) AccessChain 469(f32v) 32
-             492:   26(float) CompositeExtract 490 0
-                              Store 491 492
-             493:     33(ptr) AccessChain 469(f32v) 88
-             494:   26(float) CompositeExtract 490 1
-                              Store 493 494
-             495:  153(fvec3) Load 471(if32v)
-             496:  153(fvec3) DPdxCoarse 495
-                              Store 469(f32v) 496
-             497:  153(fvec3) Load 471(if32v)
-             498:  153(fvec3) DPdxCoarse 497
-                              Store 469(f32v) 498
-             499:    472(ptr) AccessChain 471(if32v) 32
-             500:   26(float) Load 499
-             501:   26(float) Fwidth 500
-             502:     33(ptr) AccessChain 469(f32v) 32
-                              Store 502 501
-             503:  153(fvec3) Load 471(if32v)
-             504:   27(fvec2) VectorShuffle 503 503 0 1
-             505:   27(fvec2) FwidthFine 504
-             506:     33(ptr) AccessChain 469(f32v) 32
-             507:   26(float) CompositeExtract 505 0
-                              Store 506 507
-             508:     33(ptr) AccessChain 469(f32v) 88
-             509:   26(float) CompositeExtract 505 1
-                              Store 508 509
-             510:  153(fvec3) Load 471(if32v)
-             511:  153(fvec3) FwidthCoarse 510
-                              Store 469(f32v) 511
-             512:    472(ptr) AccessChain 471(if32v) 32
-             513:   26(float) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 512
-             514:     33(ptr) AccessChain 469(f32v) 32
-                              Store 514 513
-             516:  153(fvec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 471(if32v) 515
-             517:   27(fvec2) VectorShuffle 516 516 0 1
-             518:     33(ptr) AccessChain 469(f32v) 32
-             519:   26(float) CompositeExtract 517 0
-                              Store 518 519
-             520:     33(ptr) AccessChain 469(f32v) 88
-             521:   26(float) CompositeExtract 517 1
-                              Store 520 521
-             524:  153(fvec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 471(if32v) 523
-                              Store 469(f32v) 524
+       472(f32v):    154(ptr) Variable Function
+             476:    475(ptr) AccessChain 474(if32v) 32
+             477:   26(float) Load 476
+             478:   26(float) DPdx 477
+             479:     33(ptr) AccessChain 472(f32v) 32
+                              Store 479 478
+             480:    475(ptr) AccessChain 474(if32v) 88
+             481:   26(float) Load 480
+             482:   26(float) DPdy 481
+             483:     33(ptr) AccessChain 472(f32v) 88
+                              Store 483 482
+             484:  153(fvec3) Load 474(if32v)
+             485:   27(fvec2) VectorShuffle 484 484 0 1
+             486:   27(fvec2) DPdxFine 485
+             487:     33(ptr) AccessChain 472(f32v) 32
+             488:   26(float) CompositeExtract 486 0
+                              Store 487 488
+             489:     33(ptr) AccessChain 472(f32v) 88
+             490:   26(float) CompositeExtract 486 1
+                              Store 489 490
+             491:  153(fvec3) Load 474(if32v)
+             492:   27(fvec2) VectorShuffle 491 491 0 1
+             493:   27(fvec2) DPdyFine 492
+             494:     33(ptr) AccessChain 472(f32v) 32
+             495:   26(float) CompositeExtract 493 0
+                              Store 494 495
+             496:     33(ptr) AccessChain 472(f32v) 88
+             497:   26(float) CompositeExtract 493 1
+                              Store 496 497
+             498:  153(fvec3) Load 474(if32v)
+             499:  153(fvec3) DPdxCoarse 498
+                              Store 472(f32v) 499
+             500:  153(fvec3) Load 474(if32v)
+             501:  153(fvec3) DPdxCoarse 500
+                              Store 472(f32v) 501
+             502:    475(ptr) AccessChain 474(if32v) 32
+             503:   26(float) Load 502
+             504:   26(float) Fwidth 503
+             505:     33(ptr) AccessChain 472(f32v) 32
+                              Store 505 504
+             506:  153(fvec3) Load 474(if32v)
+             507:   27(fvec2) VectorShuffle 506 506 0 1
+             508:   27(fvec2) FwidthFine 507
+             509:     33(ptr) AccessChain 472(f32v) 32
+             510:   26(float) CompositeExtract 508 0
+                              Store 509 510
+             511:     33(ptr) AccessChain 472(f32v) 88
+             512:   26(float) CompositeExtract 508 1
+                              Store 511 512
+             513:  153(fvec3) Load 474(if32v)
+             514:  153(fvec3) FwidthCoarse 513
+                              Store 472(f32v) 514
+             515:    475(ptr) AccessChain 474(if32v) 32
+             516:   26(float) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 515
+             517:     33(ptr) AccessChain 472(f32v) 32
+                              Store 517 516
+             519:  153(fvec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 474(if32v) 518
+             520:   27(fvec2) VectorShuffle 519 519 0 1
+             521:     33(ptr) AccessChain 472(f32v) 32
+             522:   26(float) CompositeExtract 520 0
+                              Store 521 522
+             523:     33(ptr) AccessChain 472(f32v) 88
+             524:   26(float) CompositeExtract 520 1
+                              Store 523 524
+             527:  153(fvec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 474(if32v) 526
+                              Store 472(f32v) 527
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.float64.frag.out b/Test/baseResults/spv.float64.frag.out
index 68e8f1c..a15fe7d 100644
--- a/Test/baseResults/spv.float64.frag.out
+++ b/Test/baseResults/spv.float64.frag.out
@@ -2,7 +2,7 @@
 Validation failed
 // Module Version 10300
 // Generated by (magic number): 8000b
-// Id's are bound by 485
+// Id's are bound by 488
 
                               Capability Shader
                               Capability Float16
@@ -14,7 +14,7 @@
                               Capability InterpolationFunction
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 414
+                              EntryPoint Fragment 4  "main" 417
                               ExecutionMode 4 OriginUpperLeft
                               Source GLSL 450
                               SourceExtension  "GL_EXT_shader_explicit_arithmetic_types"
@@ -57,76 +57,77 @@
                               Name 222  "f64v1"
                               Name 243  "f64"
                               Name 247  "f64v3"
-                              Name 287  "bv"
-                              Name 308  "b"
-                              Name 318  "iv"
-                              Name 319  "ResType"
-                              Name 326  "f64"
-                              Name 327  "f64v1"
-                              Name 331  "f64v2"
-                              Name 337  "f64v3"
-                              Name 356  "f64m3"
-                              Name 357  "f64m1"
-                              Name 359  "f64m2"
-                              Name 368  "f64v1"
-                              Name 370  "f64v2"
-                              Name 375  "f64m4"
-                              Name 378  "f64"
-                              Name 381  "f64m5"
-                              Name 387  "f64m6"
-                              Name 388  "f64m7"
-                              Name 391  "bv"
-                              Name 392  "f64v1"
-                              Name 394  "f64v2"
-                              Name 412  "f64v"
-                              Name 414  "if64v"
-                              Name 471  "S"
-                              MemberName 471(S) 0  "x"
-                              MemberName 471(S) 1  "y"
-                              MemberName 471(S) 2  "z"
-                              Name 473  "B1"
-                              MemberName 473(B1) 0  "a"
-                              MemberName 473(B1) 1  "b"
-                              MemberName 473(B1) 2  "c"
-                              MemberName 473(B1) 3  "d"
-                              MemberName 473(B1) 4  "e"
-                              MemberName 473(B1) 5  "f"
-                              MemberName 473(B1) 6  "g"
-                              MemberName 473(B1) 7  "h"
-                              Name 475  ""
-                              Name 476  "sf16"
-                              Name 478  "sf"
-                              Name 479  "sd"
-                              Name 480  "f16_to_f"
-                              Name 482  "f16_to_d"
-                              Name 483  "f_to_f16"
-                              Name 484  "d_to_f16"
-                              Decorate 414(if64v) Flat
-                              Decorate 414(if64v) Location 0
-                              Decorate 469 ArrayStride 16
-                              Decorate 470 ArrayStride 64
-                              MemberDecorate 471(S) 0 Offset 0
-                              MemberDecorate 471(S) 1 Offset 16
-                              MemberDecorate 471(S) 2 Offset 32
-                              Decorate 472 ArrayStride 64
-                              MemberDecorate 473(B1) 0 Offset 0
-                              MemberDecorate 473(B1) 1 Offset 16
-                              MemberDecorate 473(B1) 2 Offset 32
-                              MemberDecorate 473(B1) 3 Offset 64
-                              MemberDecorate 473(B1) 4 ColMajor
-                              MemberDecorate 473(B1) 4 Offset 96
-                              MemberDecorate 473(B1) 4 MatrixStride 32
-                              MemberDecorate 473(B1) 5 ColMajor
-                              MemberDecorate 473(B1) 5 Offset 160
-                              MemberDecorate 473(B1) 5 MatrixStride 32
-                              MemberDecorate 473(B1) 6 Offset 288
-                              MemberDecorate 473(B1) 7 Offset 352
-                              Decorate 473(B1) Block
-                              Decorate 475 DescriptorSet 0
-                              Decorate 475 Binding 0
-                              Decorate 476(sf16) SpecId 100
-                              Decorate 478(sf) SpecId 101
-                              Decorate 479(sd) SpecId 102
+                              Name 249  "ResType"
+                              Name 290  "bv"
+                              Name 311  "b"
+                              Name 321  "iv"
+                              Name 322  "ResType"
+                              Name 329  "f64"
+                              Name 330  "f64v1"
+                              Name 334  "f64v2"
+                              Name 340  "f64v3"
+                              Name 359  "f64m3"
+                              Name 360  "f64m1"
+                              Name 362  "f64m2"
+                              Name 371  "f64v1"
+                              Name 373  "f64v2"
+                              Name 378  "f64m4"
+                              Name 381  "f64"
+                              Name 384  "f64m5"
+                              Name 390  "f64m6"
+                              Name 391  "f64m7"
+                              Name 394  "bv"
+                              Name 395  "f64v1"
+                              Name 397  "f64v2"
+                              Name 415  "f64v"
+                              Name 417  "if64v"
+                              Name 474  "S"
+                              MemberName 474(S) 0  "x"
+                              MemberName 474(S) 1  "y"
+                              MemberName 474(S) 2  "z"
+                              Name 476  "B1"
+                              MemberName 476(B1) 0  "a"
+                              MemberName 476(B1) 1  "b"
+                              MemberName 476(B1) 2  "c"
+                              MemberName 476(B1) 3  "d"
+                              MemberName 476(B1) 4  "e"
+                              MemberName 476(B1) 5  "f"
+                              MemberName 476(B1) 6  "g"
+                              MemberName 476(B1) 7  "h"
+                              Name 478  ""
+                              Name 479  "sf16"
+                              Name 481  "sf"
+                              Name 482  "sd"
+                              Name 483  "f16_to_f"
+                              Name 485  "f16_to_d"
+                              Name 486  "f_to_f16"
+                              Name 487  "d_to_f16"
+                              Decorate 417(if64v) Flat
+                              Decorate 417(if64v) Location 0
+                              Decorate 472 ArrayStride 16
+                              Decorate 473 ArrayStride 64
+                              MemberDecorate 474(S) 0 Offset 0
+                              MemberDecorate 474(S) 1 Offset 16
+                              MemberDecorate 474(S) 2 Offset 32
+                              Decorate 475 ArrayStride 64
+                              Decorate 476(B1) Block
+                              MemberDecorate 476(B1) 0 Offset 0
+                              MemberDecorate 476(B1) 1 Offset 16
+                              MemberDecorate 476(B1) 2 Offset 32
+                              MemberDecorate 476(B1) 3 Offset 64
+                              MemberDecorate 476(B1) 4 ColMajor
+                              MemberDecorate 476(B1) 4 MatrixStride 32
+                              MemberDecorate 476(B1) 4 Offset 96
+                              MemberDecorate 476(B1) 5 ColMajor
+                              MemberDecorate 476(B1) 5 MatrixStride 32
+                              MemberDecorate 476(B1) 5 Offset 160
+                              MemberDecorate 476(B1) 6 Offset 288
+                              MemberDecorate 476(B1) 7 Offset 352
+                              Decorate 478 Binding 0
+                              Decorate 478 DescriptorSet 0
+                              Decorate 479(sf16) SpecId 100
+                              Decorate 481(sf) SpecId 101
+                              Decorate 482(sd) SpecId 102
                2:             TypeVoid
                3:             TypeFunction 2
               24:             TypeFloat 64
@@ -178,39 +179,40 @@
              209:             TypeInt 64 0
              210:             TypeVector 209(int64_t) 3
              211:             TypePointer Function 210(i64vec3)
-    319(ResType):             TypeStruct 147(f64vec3) 181(ivec3)
-             354:             TypeMatrix 147(f64vec3) 2
-             355:             TypePointer Function 354
-             373:             TypeMatrix 25(f64vec2) 3
-             374:             TypePointer Function 373
-             379:             TypeMatrix 147(f64vec3) 3
-             380:             TypePointer Function 379
-             384:             TypeVector 24(float64_t) 4
-             385:             TypeMatrix 384(f64vec4) 4
-             386:             TypePointer Function 385
-             413:             TypePointer Input 147(f64vec3)
-      414(if64v):    413(ptr) Variable Input
-             415:             TypePointer Input 24(float64_t)
-             458:    180(int) Constant 1
-             465:24(float64_t) Constant 0 1071644672
-             466: 25(f64vec2) ConstantComposite 465 465
-             468:     29(int) Constant 2
-             469:             TypeArray 24(float64_t) 468
-             470:             TypeArray 354 468
-          471(S):             TypeStruct 24(float64_t) 25(f64vec2) 147(f64vec3)
-             472:             TypeArray 471(S) 468
-         473(B1):             TypeStruct 24(float64_t) 25(f64vec2) 147(f64vec3) 469 354 470 471(S) 472
-             474:             TypePointer Uniform 473(B1)
-             475:    474(ptr) Variable Uniform
-       476(sf16):160(float16_t) SpecConstant 12288
-             477:             TypeFloat 32
-         478(sf):  477(float) SpecConstant 1048576000
-         479(sd):24(float64_t) SpecConstant 0 1071644672
-   480(f16_to_f):  477(float) SpecConstantOp 115 476(sf16)
-             481:  477(float) SpecConstantOp 115 476(sf16)
-   482(f16_to_d):24(float64_t) SpecConstantOp 115 481
-   483(f_to_f16):160(float16_t) SpecConstantOp 115 478(sf)
-   484(d_to_f16):160(float16_t) SpecConstantOp 115 479(sd)
+    249(ResType):             TypeStruct 147(f64vec3) 147(f64vec3)
+    322(ResType):             TypeStruct 147(f64vec3) 181(ivec3)
+             357:             TypeMatrix 147(f64vec3) 2
+             358:             TypePointer Function 357
+             376:             TypeMatrix 25(f64vec2) 3
+             377:             TypePointer Function 376
+             382:             TypeMatrix 147(f64vec3) 3
+             383:             TypePointer Function 382
+             387:             TypeVector 24(float64_t) 4
+             388:             TypeMatrix 387(f64vec4) 4
+             389:             TypePointer Function 388
+             416:             TypePointer Input 147(f64vec3)
+      417(if64v):    416(ptr) Variable Input
+             418:             TypePointer Input 24(float64_t)
+             461:    180(int) Constant 1
+             468:24(float64_t) Constant 0 1071644672
+             469: 25(f64vec2) ConstantComposite 468 468
+             471:     29(int) Constant 2
+             472:             TypeArray 24(float64_t) 471
+             473:             TypeArray 357 471
+          474(S):             TypeStruct 24(float64_t) 25(f64vec2) 147(f64vec3)
+             475:             TypeArray 474(S) 471
+         476(B1):             TypeStruct 24(float64_t) 25(f64vec2) 147(f64vec3) 472 357 473 474(S) 475
+             477:             TypePointer Uniform 476(B1)
+             478:    477(ptr) Variable Uniform
+       479(sf16):160(float16_t) SpecConstant 12288
+             480:             TypeFloat 32
+         481(sf):  480(float) SpecConstant 1048576000
+         482(sd):24(float64_t) SpecConstant 0 1071644672
+   483(f16_to_f):  480(float) SpecConstantOp 115 479(sf16)
+             484:  480(float) SpecConstantOp 115 479(sf16)
+   485(f16_to_d):24(float64_t) SpecConstantOp 115 484
+   486(f_to_f16):160(float16_t) SpecConstantOp 115 481(sf)
+   487(d_to_f16):160(float16_t) SpecConstantOp 115 482(sd)
          4(main):           2 Function None 3
                5:             Label
                               Return
@@ -426,9 +428,9 @@
       222(f64v1):    148(ptr) Variable Function
         243(f64):     31(ptr) Variable Function
       247(f64v3):    148(ptr) Variable Function
-         287(bv):    151(ptr) Variable Function
-          308(b):    106(ptr) Variable Function
-         318(iv):    182(ptr) Variable Function
+         290(bv):    151(ptr) Variable Function
+          311(b):    106(ptr) Variable Function
+         321(iv):    182(ptr) Variable Function
              223:147(f64vec3) Load 222(f64v1)
              224:147(f64vec3) ExtInst 1(GLSL.std.450) 4(FAbs) 223
                               Store 221(f64v2) 224
@@ -463,276 +465,279 @@
              246:147(f64vec3) FMod 242 245
                               Store 221(f64v2) 246
              248:147(f64vec3) Load 222(f64v1)
-             249:147(f64vec3) ExtInst 1(GLSL.std.450) 35(Modf) 248 221(f64v2)
-                              Store 247(f64v3) 249
-             250:147(f64vec3) Load 222(f64v1)
-             251:147(f64vec3) Load 221(f64v2)
-             252:147(f64vec3) ExtInst 1(GLSL.std.450) 37(FMin) 250 251
+             250:249(ResType) ExtInst 1(GLSL.std.450) 36(ModfStruct) 248
+             251:147(f64vec3) CompositeExtract 250 1
+                              Store 221(f64v2) 251
+             252:147(f64vec3) CompositeExtract 250 0
                               Store 247(f64v3) 252
              253:147(f64vec3) Load 222(f64v1)
-             254:24(float64_t) Load 243(f64)
-             255:147(f64vec3) CompositeConstruct 254 254 254
-             256:147(f64vec3) ExtInst 1(GLSL.std.450) 37(FMin) 253 255
-                              Store 247(f64v3) 256
-             257:147(f64vec3) Load 222(f64v1)
-             258:147(f64vec3) Load 221(f64v2)
-             259:147(f64vec3) ExtInst 1(GLSL.std.450) 40(FMax) 257 258
+             254:147(f64vec3) Load 221(f64v2)
+             255:147(f64vec3) ExtInst 1(GLSL.std.450) 37(FMin) 253 254
+                              Store 247(f64v3) 255
+             256:147(f64vec3) Load 222(f64v1)
+             257:24(float64_t) Load 243(f64)
+             258:147(f64vec3) CompositeConstruct 257 257 257
+             259:147(f64vec3) ExtInst 1(GLSL.std.450) 37(FMin) 256 258
                               Store 247(f64v3) 259
              260:147(f64vec3) Load 222(f64v1)
-             261:24(float64_t) Load 243(f64)
-             262:147(f64vec3) CompositeConstruct 261 261 261
-             263:147(f64vec3) ExtInst 1(GLSL.std.450) 40(FMax) 260 262
-                              Store 247(f64v3) 263
-             264:147(f64vec3) Load 222(f64v1)
-             265:24(float64_t) Load 243(f64)
-             266:     31(ptr) AccessChain 221(f64v2) 30
-             267:24(float64_t) Load 266
-             268:147(f64vec3) CompositeConstruct 265 265 265
-             269:147(f64vec3) CompositeConstruct 267 267 267
-             270:147(f64vec3) ExtInst 1(GLSL.std.450) 43(FClamp) 264 268 269
-                              Store 247(f64v3) 270
-             271:147(f64vec3) Load 222(f64v1)
-             272:147(f64vec3) Load 221(f64v2)
-             273:24(float64_t) Load 243(f64)
-             274:147(f64vec3) CompositeConstruct 273 273 273
-             275:147(f64vec3) ExtInst 1(GLSL.std.450) 43(FClamp) 271 272 274
-                              Store 247(f64v3) 275
-             276:147(f64vec3) Load 222(f64v1)
-             277:147(f64vec3) Load 221(f64v2)
-             278:24(float64_t) Load 243(f64)
-             279:147(f64vec3) CompositeConstruct 278 278 278
-             280:147(f64vec3) ExtInst 1(GLSL.std.450) 46(FMix) 276 277 279
-                              Store 247(f64v3) 280
-             281:147(f64vec3) Load 222(f64v1)
-             282:147(f64vec3) Load 221(f64v2)
-             283:147(f64vec3) Load 247(f64v3)
-             284:147(f64vec3) ExtInst 1(GLSL.std.450) 46(FMix) 281 282 283
-                              Store 247(f64v3) 284
-             285:147(f64vec3) Load 222(f64v1)
-             286:147(f64vec3) Load 221(f64v2)
-             288:  150(bvec3) Load 287(bv)
-             289:147(f64vec3) Select 288 286 285
-                              Store 247(f64v3) 289
-             290:147(f64vec3) Load 222(f64v1)
-             291:147(f64vec3) Load 221(f64v2)
-             292:147(f64vec3) ExtInst 1(GLSL.std.450) 48(Step) 290 291
+             261:147(f64vec3) Load 221(f64v2)
+             262:147(f64vec3) ExtInst 1(GLSL.std.450) 40(FMax) 260 261
+                              Store 247(f64v3) 262
+             263:147(f64vec3) Load 222(f64v1)
+             264:24(float64_t) Load 243(f64)
+             265:147(f64vec3) CompositeConstruct 264 264 264
+             266:147(f64vec3) ExtInst 1(GLSL.std.450) 40(FMax) 263 265
+                              Store 247(f64v3) 266
+             267:147(f64vec3) Load 222(f64v1)
+             268:24(float64_t) Load 243(f64)
+             269:     31(ptr) AccessChain 221(f64v2) 30
+             270:24(float64_t) Load 269
+             271:147(f64vec3) CompositeConstruct 268 268 268
+             272:147(f64vec3) CompositeConstruct 270 270 270
+             273:147(f64vec3) ExtInst 1(GLSL.std.450) 43(FClamp) 267 271 272
+                              Store 247(f64v3) 273
+             274:147(f64vec3) Load 222(f64v1)
+             275:147(f64vec3) Load 221(f64v2)
+             276:24(float64_t) Load 243(f64)
+             277:147(f64vec3) CompositeConstruct 276 276 276
+             278:147(f64vec3) ExtInst 1(GLSL.std.450) 43(FClamp) 274 275 277
+                              Store 247(f64v3) 278
+             279:147(f64vec3) Load 222(f64v1)
+             280:147(f64vec3) Load 221(f64v2)
+             281:24(float64_t) Load 243(f64)
+             282:147(f64vec3) CompositeConstruct 281 281 281
+             283:147(f64vec3) ExtInst 1(GLSL.std.450) 46(FMix) 279 280 282
+                              Store 247(f64v3) 283
+             284:147(f64vec3) Load 222(f64v1)
+             285:147(f64vec3) Load 221(f64v2)
+             286:147(f64vec3) Load 247(f64v3)
+             287:147(f64vec3) ExtInst 1(GLSL.std.450) 46(FMix) 284 285 286
+                              Store 247(f64v3) 287
+             288:147(f64vec3) Load 222(f64v1)
+             289:147(f64vec3) Load 221(f64v2)
+             291:  150(bvec3) Load 290(bv)
+             292:147(f64vec3) Select 291 289 288
                               Store 247(f64v3) 292
-             293:24(float64_t) Load 243(f64)
-             294:147(f64vec3) Load 247(f64v3)
-             295:147(f64vec3) CompositeConstruct 293 293 293
-             296:147(f64vec3) ExtInst 1(GLSL.std.450) 48(Step) 295 294
-                              Store 247(f64v3) 296
-             297:147(f64vec3) Load 222(f64v1)
-             298:147(f64vec3) Load 221(f64v2)
-             299:147(f64vec3) Load 247(f64v3)
-             300:147(f64vec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 297 298 299
-                              Store 247(f64v3) 300
-             301:24(float64_t) Load 243(f64)
-             302:     31(ptr) AccessChain 222(f64v1) 30
-             303:24(float64_t) Load 302
-             304:147(f64vec3) Load 221(f64v2)
-             305:147(f64vec3) CompositeConstruct 301 301 301
-             306:147(f64vec3) CompositeConstruct 303 303 303
-             307:147(f64vec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 305 306 304
-                              Store 247(f64v3) 307
-             309:24(float64_t) Load 243(f64)
-             310:   105(bool) IsNan 309
-                              Store 308(b) 310
-             311:147(f64vec3) Load 222(f64v1)
-             312:  150(bvec3) IsInf 311
-                              Store 287(bv) 312
-             313:147(f64vec3) Load 222(f64v1)
-             314:147(f64vec3) Load 221(f64v2)
-             315:147(f64vec3) Load 247(f64v3)
-             316:147(f64vec3) ExtInst 1(GLSL.std.450) 50(Fma) 313 314 315
-                              Store 247(f64v3) 316
-             317:147(f64vec3) Load 222(f64v1)
-             320:319(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 317
-             321:  181(ivec3) CompositeExtract 320 1
-                              Store 318(iv) 321
-             322:147(f64vec3) CompositeExtract 320 0
-                              Store 221(f64v2) 322
-             323:147(f64vec3) Load 222(f64v1)
-             324:  181(ivec3) Load 318(iv)
-             325:147(f64vec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 323 324
+             293:147(f64vec3) Load 222(f64v1)
+             294:147(f64vec3) Load 221(f64v2)
+             295:147(f64vec3) ExtInst 1(GLSL.std.450) 48(Step) 293 294
+                              Store 247(f64v3) 295
+             296:24(float64_t) Load 243(f64)
+             297:147(f64vec3) Load 247(f64v3)
+             298:147(f64vec3) CompositeConstruct 296 296 296
+             299:147(f64vec3) ExtInst 1(GLSL.std.450) 48(Step) 298 297
+                              Store 247(f64v3) 299
+             300:147(f64vec3) Load 222(f64v1)
+             301:147(f64vec3) Load 221(f64v2)
+             302:147(f64vec3) Load 247(f64v3)
+             303:147(f64vec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 300 301 302
+                              Store 247(f64v3) 303
+             304:24(float64_t) Load 243(f64)
+             305:     31(ptr) AccessChain 222(f64v1) 30
+             306:24(float64_t) Load 305
+             307:147(f64vec3) Load 221(f64v2)
+             308:147(f64vec3) CompositeConstruct 304 304 304
+             309:147(f64vec3) CompositeConstruct 306 306 306
+             310:147(f64vec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 308 309 307
+                              Store 247(f64v3) 310
+             312:24(float64_t) Load 243(f64)
+             313:   105(bool) IsNan 312
+                              Store 311(b) 313
+             314:147(f64vec3) Load 222(f64v1)
+             315:  150(bvec3) IsInf 314
+                              Store 290(bv) 315
+             316:147(f64vec3) Load 222(f64v1)
+             317:147(f64vec3) Load 221(f64v2)
+             318:147(f64vec3) Load 247(f64v3)
+             319:147(f64vec3) ExtInst 1(GLSL.std.450) 50(Fma) 316 317 318
+                              Store 247(f64v3) 319
+             320:147(f64vec3) Load 222(f64v1)
+             323:322(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 320
+             324:  181(ivec3) CompositeExtract 323 1
+                              Store 321(iv) 324
+             325:147(f64vec3) CompositeExtract 323 0
                               Store 221(f64v2) 325
+             326:147(f64vec3) Load 222(f64v1)
+             327:  181(ivec3) Load 321(iv)
+             328:147(f64vec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 326 327
+                              Store 221(f64v2) 328
                               Return
                               FunctionEnd
 16(builtinGeometryFuncs():           2 Function None 3
               17:             Label
-        326(f64):     31(ptr) Variable Function
-      327(f64v1):    148(ptr) Variable Function
-      331(f64v2):    148(ptr) Variable Function
-      337(f64v3):    148(ptr) Variable Function
-             328:147(f64vec3) Load 327(f64v1)
-             329:24(float64_t) ExtInst 1(GLSL.std.450) 66(Length) 328
-                              Store 326(f64) 329
-             330:147(f64vec3) Load 327(f64v1)
-             332:147(f64vec3) Load 331(f64v2)
-             333:24(float64_t) ExtInst 1(GLSL.std.450) 67(Distance) 330 332
-                              Store 326(f64) 333
-             334:147(f64vec3) Load 327(f64v1)
-             335:147(f64vec3) Load 331(f64v2)
-             336:24(float64_t) Dot 334 335
-                              Store 326(f64) 336
-             338:147(f64vec3) Load 327(f64v1)
-             339:147(f64vec3) Load 331(f64v2)
-             340:147(f64vec3) ExtInst 1(GLSL.std.450) 68(Cross) 338 339
-                              Store 337(f64v3) 340
-             341:147(f64vec3) Load 327(f64v1)
-             342:147(f64vec3) ExtInst 1(GLSL.std.450) 69(Normalize) 341
-                              Store 331(f64v2) 342
-             343:147(f64vec3) Load 327(f64v1)
-             344:147(f64vec3) Load 331(f64v2)
-             345:147(f64vec3) Load 337(f64v3)
-             346:147(f64vec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 343 344 345
-                              Store 337(f64v3) 346
-             347:147(f64vec3) Load 327(f64v1)
-             348:147(f64vec3) Load 331(f64v2)
-             349:147(f64vec3) ExtInst 1(GLSL.std.450) 71(Reflect) 347 348
-                              Store 337(f64v3) 349
-             350:147(f64vec3) Load 327(f64v1)
-             351:147(f64vec3) Load 331(f64v2)
-             352:24(float64_t) Load 326(f64)
-             353:147(f64vec3) ExtInst 1(GLSL.std.450) 72(Refract) 350 351 352
-                              Store 337(f64v3) 353
+        329(f64):     31(ptr) Variable Function
+      330(f64v1):    148(ptr) Variable Function
+      334(f64v2):    148(ptr) Variable Function
+      340(f64v3):    148(ptr) Variable Function
+             331:147(f64vec3) Load 330(f64v1)
+             332:24(float64_t) ExtInst 1(GLSL.std.450) 66(Length) 331
+                              Store 329(f64) 332
+             333:147(f64vec3) Load 330(f64v1)
+             335:147(f64vec3) Load 334(f64v2)
+             336:24(float64_t) ExtInst 1(GLSL.std.450) 67(Distance) 333 335
+                              Store 329(f64) 336
+             337:147(f64vec3) Load 330(f64v1)
+             338:147(f64vec3) Load 334(f64v2)
+             339:24(float64_t) Dot 337 338
+                              Store 329(f64) 339
+             341:147(f64vec3) Load 330(f64v1)
+             342:147(f64vec3) Load 334(f64v2)
+             343:147(f64vec3) ExtInst 1(GLSL.std.450) 68(Cross) 341 342
+                              Store 340(f64v3) 343
+             344:147(f64vec3) Load 330(f64v1)
+             345:147(f64vec3) ExtInst 1(GLSL.std.450) 69(Normalize) 344
+                              Store 334(f64v2) 345
+             346:147(f64vec3) Load 330(f64v1)
+             347:147(f64vec3) Load 334(f64v2)
+             348:147(f64vec3) Load 340(f64v3)
+             349:147(f64vec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 346 347 348
+                              Store 340(f64v3) 349
+             350:147(f64vec3) Load 330(f64v1)
+             351:147(f64vec3) Load 334(f64v2)
+             352:147(f64vec3) ExtInst 1(GLSL.std.450) 71(Reflect) 350 351
+                              Store 340(f64v3) 352
+             353:147(f64vec3) Load 330(f64v1)
+             354:147(f64vec3) Load 334(f64v2)
+             355:24(float64_t) Load 329(f64)
+             356:147(f64vec3) ExtInst 1(GLSL.std.450) 72(Refract) 353 354 355
+                              Store 340(f64v3) 356
                               Return
                               FunctionEnd
 18(builtinMatrixFuncs():           2 Function None 3
               19:             Label
-      356(f64m3):    355(ptr) Variable Function
-      357(f64m1):    355(ptr) Variable Function
-      359(f64m2):    355(ptr) Variable Function
-      368(f64v1):    148(ptr) Variable Function
-      370(f64v2):     26(ptr) Variable Function
-      375(f64m4):    374(ptr) Variable Function
-        378(f64):     31(ptr) Variable Function
-      381(f64m5):    380(ptr) Variable Function
-      387(f64m6):    386(ptr) Variable Function
-      388(f64m7):    386(ptr) Variable Function
-             358:         354 Load 357(f64m1)
-             360:         354 Load 359(f64m2)
-             361:147(f64vec3) CompositeExtract 358 0
-             362:147(f64vec3) CompositeExtract 360 0
-             363:147(f64vec3) FMul 361 362
-             364:147(f64vec3) CompositeExtract 358 1
-             365:147(f64vec3) CompositeExtract 360 1
+      359(f64m3):    358(ptr) Variable Function
+      360(f64m1):    358(ptr) Variable Function
+      362(f64m2):    358(ptr) Variable Function
+      371(f64v1):    148(ptr) Variable Function
+      373(f64v2):     26(ptr) Variable Function
+      378(f64m4):    377(ptr) Variable Function
+        381(f64):     31(ptr) Variable Function
+      384(f64m5):    383(ptr) Variable Function
+      390(f64m6):    389(ptr) Variable Function
+      391(f64m7):    389(ptr) Variable Function
+             361:         357 Load 360(f64m1)
+             363:         357 Load 362(f64m2)
+             364:147(f64vec3) CompositeExtract 361 0
+             365:147(f64vec3) CompositeExtract 363 0
              366:147(f64vec3) FMul 364 365
-             367:         354 CompositeConstruct 363 366
-                              Store 356(f64m3) 367
-             369:147(f64vec3) Load 368(f64v1)
-             371: 25(f64vec2) Load 370(f64v2)
-             372:         354 OuterProduct 369 371
-                              Store 357(f64m1) 372
-             376:         354 Load 357(f64m1)
-             377:         373 Transpose 376
-                              Store 375(f64m4) 377
-             382:         379 Load 381(f64m5)
-             383:24(float64_t) ExtInst 1(GLSL.std.450) 33(Determinant) 382
-                              Store 378(f64) 383
-             389:         385 Load 388(f64m7)
-             390:         385 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 389
-                              Store 387(f64m6) 390
+             367:147(f64vec3) CompositeExtract 361 1
+             368:147(f64vec3) CompositeExtract 363 1
+             369:147(f64vec3) FMul 367 368
+             370:         357 CompositeConstruct 366 369
+                              Store 359(f64m3) 370
+             372:147(f64vec3) Load 371(f64v1)
+             374: 25(f64vec2) Load 373(f64v2)
+             375:         357 OuterProduct 372 374
+                              Store 360(f64m1) 375
+             379:         357 Load 360(f64m1)
+             380:         376 Transpose 379
+                              Store 378(f64m4) 380
+             385:         382 Load 384(f64m5)
+             386:24(float64_t) ExtInst 1(GLSL.std.450) 33(Determinant) 385
+                              Store 381(f64) 386
+             392:         388 Load 391(f64m7)
+             393:         388 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 392
+                              Store 390(f64m6) 393
                               Return
                               FunctionEnd
 20(builtinVecRelFuncs():           2 Function None 3
               21:             Label
-         391(bv):    151(ptr) Variable Function
-      392(f64v1):    148(ptr) Variable Function
-      394(f64v2):    148(ptr) Variable Function
-             393:147(f64vec3) Load 392(f64v1)
-             395:147(f64vec3) Load 394(f64v2)
-             396:  150(bvec3) FOrdLessThan 393 395
-                              Store 391(bv) 396
-             397:147(f64vec3) Load 392(f64v1)
-             398:147(f64vec3) Load 394(f64v2)
-             399:  150(bvec3) FOrdLessThanEqual 397 398
-                              Store 391(bv) 399
-             400:147(f64vec3) Load 392(f64v1)
-             401:147(f64vec3) Load 394(f64v2)
-             402:  150(bvec3) FOrdGreaterThan 400 401
-                              Store 391(bv) 402
-             403:147(f64vec3) Load 392(f64v1)
-             404:147(f64vec3) Load 394(f64v2)
-             405:  150(bvec3) FOrdGreaterThanEqual 403 404
-                              Store 391(bv) 405
-             406:147(f64vec3) Load 392(f64v1)
-             407:147(f64vec3) Load 394(f64v2)
-             408:  150(bvec3) FOrdEqual 406 407
-                              Store 391(bv) 408
-             409:147(f64vec3) Load 392(f64v1)
-             410:147(f64vec3) Load 394(f64v2)
-             411:  150(bvec3) FUnordNotEqual 409 410
-                              Store 391(bv) 411
+         394(bv):    151(ptr) Variable Function
+      395(f64v1):    148(ptr) Variable Function
+      397(f64v2):    148(ptr) Variable Function
+             396:147(f64vec3) Load 395(f64v1)
+             398:147(f64vec3) Load 397(f64v2)
+             399:  150(bvec3) FOrdLessThan 396 398
+                              Store 394(bv) 399
+             400:147(f64vec3) Load 395(f64v1)
+             401:147(f64vec3) Load 397(f64v2)
+             402:  150(bvec3) FOrdLessThanEqual 400 401
+                              Store 394(bv) 402
+             403:147(f64vec3) Load 395(f64v1)
+             404:147(f64vec3) Load 397(f64v2)
+             405:  150(bvec3) FOrdGreaterThan 403 404
+                              Store 394(bv) 405
+             406:147(f64vec3) Load 395(f64v1)
+             407:147(f64vec3) Load 397(f64v2)
+             408:  150(bvec3) FOrdGreaterThanEqual 406 407
+                              Store 394(bv) 408
+             409:147(f64vec3) Load 395(f64v1)
+             410:147(f64vec3) Load 397(f64v2)
+             411:  150(bvec3) FOrdEqual 409 410
+                              Store 394(bv) 411
+             412:147(f64vec3) Load 395(f64v1)
+             413:147(f64vec3) Load 397(f64v2)
+             414:  150(bvec3) FUnordNotEqual 412 413
+                              Store 394(bv) 414
                               Return
                               FunctionEnd
 22(builtinFragProcFuncs():           2 Function None 3
               23:             Label
-       412(f64v):    148(ptr) Variable Function
-             416:    415(ptr) AccessChain 414(if64v) 30
-             417:24(float64_t) Load 416
-             418:24(float64_t) DPdx 417
-             419:     31(ptr) AccessChain 412(f64v) 30
-                              Store 419 418
-             420:    415(ptr) AccessChain 414(if64v) 86
-             421:24(float64_t) Load 420
-             422:24(float64_t) DPdy 421
-             423:     31(ptr) AccessChain 412(f64v) 86
-                              Store 423 422
-             424:147(f64vec3) Load 414(if64v)
-             425: 25(f64vec2) VectorShuffle 424 424 0 1
-             426: 25(f64vec2) DPdxFine 425
-             427:     31(ptr) AccessChain 412(f64v) 30
-             428:24(float64_t) CompositeExtract 426 0
-                              Store 427 428
-             429:     31(ptr) AccessChain 412(f64v) 86
-             430:24(float64_t) CompositeExtract 426 1
-                              Store 429 430
-             431:147(f64vec3) Load 414(if64v)
-             432: 25(f64vec2) VectorShuffle 431 431 0 1
-             433: 25(f64vec2) DPdyFine 432
-             434:     31(ptr) AccessChain 412(f64v) 30
-             435:24(float64_t) CompositeExtract 433 0
-                              Store 434 435
-             436:     31(ptr) AccessChain 412(f64v) 86
-             437:24(float64_t) CompositeExtract 433 1
-                              Store 436 437
-             438:147(f64vec3) Load 414(if64v)
-             439:147(f64vec3) DPdxCoarse 438
-                              Store 412(f64v) 439
-             440:147(f64vec3) Load 414(if64v)
-             441:147(f64vec3) DPdxCoarse 440
-                              Store 412(f64v) 441
-             442:    415(ptr) AccessChain 414(if64v) 30
-             443:24(float64_t) Load 442
-             444:24(float64_t) Fwidth 443
-             445:     31(ptr) AccessChain 412(f64v) 30
-                              Store 445 444
-             446:147(f64vec3) Load 414(if64v)
-             447: 25(f64vec2) VectorShuffle 446 446 0 1
-             448: 25(f64vec2) FwidthFine 447
-             449:     31(ptr) AccessChain 412(f64v) 30
-             450:24(float64_t) CompositeExtract 448 0
-                              Store 449 450
-             451:     31(ptr) AccessChain 412(f64v) 86
-             452:24(float64_t) CompositeExtract 448 1
-                              Store 451 452
-             453:147(f64vec3) Load 414(if64v)
-             454:147(f64vec3) FwidthCoarse 453
-                              Store 412(f64v) 454
-             455:    415(ptr) AccessChain 414(if64v) 30
-             456:24(float64_t) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 455
-             457:     31(ptr) AccessChain 412(f64v) 30
-                              Store 457 456
-             459:147(f64vec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 414(if64v) 458
-             460: 25(f64vec2) VectorShuffle 459 459 0 1
-             461:     31(ptr) AccessChain 412(f64v) 30
-             462:24(float64_t) CompositeExtract 460 0
-                              Store 461 462
-             463:     31(ptr) AccessChain 412(f64v) 86
-             464:24(float64_t) CompositeExtract 460 1
-                              Store 463 464
-             467:147(f64vec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 414(if64v) 466
-                              Store 412(f64v) 467
+       415(f64v):    148(ptr) Variable Function
+             419:    418(ptr) AccessChain 417(if64v) 30
+             420:24(float64_t) Load 419
+             421:24(float64_t) DPdx 420
+             422:     31(ptr) AccessChain 415(f64v) 30
+                              Store 422 421
+             423:    418(ptr) AccessChain 417(if64v) 86
+             424:24(float64_t) Load 423
+             425:24(float64_t) DPdy 424
+             426:     31(ptr) AccessChain 415(f64v) 86
+                              Store 426 425
+             427:147(f64vec3) Load 417(if64v)
+             428: 25(f64vec2) VectorShuffle 427 427 0 1
+             429: 25(f64vec2) DPdxFine 428
+             430:     31(ptr) AccessChain 415(f64v) 30
+             431:24(float64_t) CompositeExtract 429 0
+                              Store 430 431
+             432:     31(ptr) AccessChain 415(f64v) 86
+             433:24(float64_t) CompositeExtract 429 1
+                              Store 432 433
+             434:147(f64vec3) Load 417(if64v)
+             435: 25(f64vec2) VectorShuffle 434 434 0 1
+             436: 25(f64vec2) DPdyFine 435
+             437:     31(ptr) AccessChain 415(f64v) 30
+             438:24(float64_t) CompositeExtract 436 0
+                              Store 437 438
+             439:     31(ptr) AccessChain 415(f64v) 86
+             440:24(float64_t) CompositeExtract 436 1
+                              Store 439 440
+             441:147(f64vec3) Load 417(if64v)
+             442:147(f64vec3) DPdxCoarse 441
+                              Store 415(f64v) 442
+             443:147(f64vec3) Load 417(if64v)
+             444:147(f64vec3) DPdxCoarse 443
+                              Store 415(f64v) 444
+             445:    418(ptr) AccessChain 417(if64v) 30
+             446:24(float64_t) Load 445
+             447:24(float64_t) Fwidth 446
+             448:     31(ptr) AccessChain 415(f64v) 30
+                              Store 448 447
+             449:147(f64vec3) Load 417(if64v)
+             450: 25(f64vec2) VectorShuffle 449 449 0 1
+             451: 25(f64vec2) FwidthFine 450
+             452:     31(ptr) AccessChain 415(f64v) 30
+             453:24(float64_t) CompositeExtract 451 0
+                              Store 452 453
+             454:     31(ptr) AccessChain 415(f64v) 86
+             455:24(float64_t) CompositeExtract 451 1
+                              Store 454 455
+             456:147(f64vec3) Load 417(if64v)
+             457:147(f64vec3) FwidthCoarse 456
+                              Store 415(f64v) 457
+             458:    418(ptr) AccessChain 417(if64v) 30
+             459:24(float64_t) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 458
+             460:     31(ptr) AccessChain 415(f64v) 30
+                              Store 460 459
+             462:147(f64vec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 417(if64v) 461
+             463: 25(f64vec2) VectorShuffle 462 462 0 1
+             464:     31(ptr) AccessChain 415(f64v) 30
+             465:24(float64_t) CompositeExtract 463 0
+                              Store 464 465
+             466:     31(ptr) AccessChain 415(f64v) 86
+             467:24(float64_t) CompositeExtract 463 1
+                              Store 466 467
+             470:147(f64vec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 417(if64v) 469
+                              Store 415(f64v) 470
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.floatFetch.frag.out b/Test/baseResults/spv.floatFetch.frag.out
index 8b9fc72..0848455 100644
--- a/Test/baseResults/spv.floatFetch.frag.out
+++ b/Test/baseResults/spv.floatFetch.frag.out
@@ -2,7 +2,7 @@
 Validation failed
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 3599
+// Id's are bound by 3500
 
                               Capability Shader
                               Capability ImageGatherExtended
@@ -24,7 +24,7 @@
                               Extension  "SPV_AMD_texture_gather_bias_lod"
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 127 138 150 197 283 371 866 874 882 2665 3590 3598
+                              EntryPoint Fragment 4  "main" 127 138 150 197 283 371 866 873 880 2603 3491 3499
                               ExecutionMode 4 OriginUpperLeft
                               Source GLSL 450
                               SourceExtension  "GL_AMD_texture_gather_bias_lod"
@@ -117,181 +117,181 @@
                               Name 807  "texel"
                               Name 863  "texel"
                               Name 866  "dPdxy1"
-                              Name 874  "dPdxy2"
-                              Name 882  "dPdxy3"
-                              Name 986  "texel"
-                              Name 1082  "texel"
-                              Name 1177  "texel"
-                              Name 1272  "texel"
-                              Name 1332  "texel"
-                              Name 1369  "texel"
-                              Name 1409  "texel"
-                              Name 1437  "texel"
-                              Name 1453  "texel"
-                              Name 1470  "size"
-                              Name 1688  "lod"
-                              Name 1758  "levels"
-                              Name 1827  "samples"
-                              Name 1841  "texel"
-                              Name 1844  "i1D"
-                              Name 1853  "i2D"
-                              Name 1862  "i3D"
-                              Name 1871  "i2DRect"
-                              Name 1880  "iCube"
-                              Name 1889  "iBuffer"
-                              Name 1898  "i1DArray"
-                              Name 1907  "i2DArray"
-                              Name 1916  "iCubeArray"
-                              Name 1925  "i2DMS"
-                              Name 1934  "i2DMSArray"
-                              Name 1988  "texel"
-                              Name 1991  "ResType"
-                              Name 2009  "ResType"
-                              Name 2059  "texel"
+                              Name 873  "dPdxy2"
+                              Name 880  "dPdxy3"
+                              Name 972  "texel"
+                              Name 1057  "texel"
+                              Name 1142  "texel"
+                              Name 1227  "texel"
+                              Name 1287  "texel"
+                              Name 1324  "texel"
+                              Name 1364  "texel"
+                              Name 1392  "texel"
+                              Name 1408  "texel"
+                              Name 1425  "size"
+                              Name 1643  "lod"
+                              Name 1713  "levels"
+                              Name 1782  "samples"
+                              Name 1796  "texel"
+                              Name 1799  "i1D"
+                              Name 1808  "i2D"
+                              Name 1817  "i3D"
+                              Name 1826  "i2DRect"
+                              Name 1835  "iCube"
+                              Name 1844  "iBuffer"
+                              Name 1853  "i1DArray"
+                              Name 1862  "i2DArray"
+                              Name 1871  "iCubeArray"
+                              Name 1880  "i2DMS"
+                              Name 1889  "i2DMSArray"
+                              Name 1943  "texel"
+                              Name 1946  "ResType"
+                              Name 1964  "ResType"
+                              Name 2014  "texel"
+                              Name 2056  "texel"
                               Name 2101  "texel"
-                              Name 2146  "texel"
-                              Name 2176  "texel"
-                              Name 2258  "texel"
-                              Name 2317  "texel"
-                              Name 2369  "texel"
-                              Name 2407  "texel"
-                              Name 2466  "texel"
-                              Name 2503  "texel"
-                              Name 2550  "texel"
-                              Name 2578  "texel"
-                              Name 2594  "texel"
-                              Name 2610  "texel"
-                              Name 2662  "texel"
-                              Name 2665  "lodClamp"
-                              Name 2729  "texel"
-                              Name 2829  "texel"
-                              Name 2867  "texel"
-                              Name 2937  "texel"
-                              Name 3011  "texel"
-                              Name 3126  "texel"
-                              Name 3174  "texel"
-                              Name 3262  "texel"
-                              Name 3264  "t1D"
-                              Name 3268  "s"
-                              Name 3276  "t2D"
-                              Name 3285  "t3D"
-                              Name 3294  "tCube"
-                              Name 3303  "sShadow"
-                              Name 3334  "t1DArray"
-                              Name 3343  "t2DArray"
-                              Name 3352  "tCubeArray"
-                              Name 3381  "t2DRect"
-                              Name 3414  "subpass"
-                              Name 3420  "subpassMS"
-                              Name 3426  "result"
-                              Name 3511  "param"
-                              Name 3590  "fragColor"
-                              Name 3593  "tBuffer"
-                              Name 3595  "t2DMS"
-                              Name 3597  "t2DMSArray"
-                              Name 3598  "bias"
-                              Decorate 124(s1D) DescriptorSet 0
+                              Name 2131  "texel"
+                              Name 2203  "texel"
+                              Name 2255  "texel"
+                              Name 2307  "texel"
+                              Name 2345  "texel"
+                              Name 2404  "texel"
+                              Name 2441  "texel"
+                              Name 2488  "texel"
+                              Name 2516  "texel"
+                              Name 2532  "texel"
+                              Name 2548  "texel"
+                              Name 2600  "texel"
+                              Name 2603  "lodClamp"
+                              Name 2667  "texel"
+                              Name 2767  "texel"
+                              Name 2805  "texel"
+                              Name 2875  "texel"
+                              Name 2941  "texel"
+                              Name 3044  "texel"
+                              Name 3087  "texel"
+                              Name 3166  "texel"
+                              Name 3168  "t1D"
+                              Name 3172  "s"
+                              Name 3180  "t2D"
+                              Name 3189  "t3D"
+                              Name 3198  "tCube"
+                              Name 3207  "sShadow"
+                              Name 3238  "t1DArray"
+                              Name 3247  "t2DArray"
+                              Name 3256  "tCubeArray"
+                              Name 3285  "t2DRect"
+                              Name 3318  "subpass"
+                              Name 3324  "subpassMS"
+                              Name 3330  "result"
+                              Name 3412  "param"
+                              Name 3491  "fragColor"
+                              Name 3494  "tBuffer"
+                              Name 3496  "t2DMS"
+                              Name 3498  "t2DMSArray"
+                              Name 3499  "bias"
                               Decorate 124(s1D) Binding 0
+                              Decorate 124(s1D) DescriptorSet 0
                               Decorate 127(c1) Location 0
-                              Decorate 135(s2D) DescriptorSet 0
                               Decorate 135(s2D) Binding 1
+                              Decorate 135(s2D) DescriptorSet 0
                               Decorate 138(c2) Location 1
-                              Decorate 146(s3D) DescriptorSet 0
                               Decorate 146(s3D) Binding 2
+                              Decorate 146(s3D) DescriptorSet 0
                               Decorate 150(c3) Location 2
-                              Decorate 158(sCube) DescriptorSet 0
                               Decorate 158(sCube) Binding 4
-                              Decorate 167(s1DShadow) DescriptorSet 0
+                              Decorate 158(sCube) DescriptorSet 0
                               Decorate 167(s1DShadow) Binding 11
-                              Decorate 182(s2DShadow) DescriptorSet 0
+                              Decorate 167(s1DShadow) DescriptorSet 0
                               Decorate 182(s2DShadow) Binding 12
-                              Decorate 194(sCubeShadow) DescriptorSet 0
+                              Decorate 182(s2DShadow) DescriptorSet 0
                               Decorate 194(sCubeShadow) Binding 14
+                              Decorate 194(sCubeShadow) DescriptorSet 0
                               Decorate 197(c4) Location 3
-                              Decorate 208(s1DArray) DescriptorSet 0
                               Decorate 208(s1DArray) Binding 7
-                              Decorate 217(s2DArray) DescriptorSet 0
+                              Decorate 208(s1DArray) DescriptorSet 0
                               Decorate 217(s2DArray) Binding 8
-                              Decorate 226(sCubeArray) DescriptorSet 0
+                              Decorate 217(s2DArray) DescriptorSet 0
                               Decorate 226(sCubeArray) Binding 9
-                              Decorate 235(s1DArrayShadow) DescriptorSet 0
+                              Decorate 226(sCubeArray) DescriptorSet 0
                               Decorate 235(s1DArrayShadow) Binding 15
-                              Decorate 247(s2DArrayShadow) DescriptorSet 0
+                              Decorate 235(s1DArrayShadow) DescriptorSet 0
                               Decorate 247(s2DArrayShadow) Binding 16
-                              Decorate 259(s2DRect) DescriptorSet 0
+                              Decorate 247(s2DArrayShadow) DescriptorSet 0
                               Decorate 259(s2DRect) Binding 3
-                              Decorate 268(s2DRectShadow) DescriptorSet 0
+                              Decorate 259(s2DRect) DescriptorSet 0
                               Decorate 268(s2DRectShadow) Binding 13
-                              Decorate 280(sCubeArrayShadow) DescriptorSet 0
+                              Decorate 268(s2DRectShadow) DescriptorSet 0
                               Decorate 280(sCubeArrayShadow) Binding 17
+                              Decorate 280(sCubeArrayShadow) DescriptorSet 0
                               Decorate 283(compare) Location 4
                               Decorate 371(lod) Location 5
-                              Decorate 773(sBuffer) DescriptorSet 0
                               Decorate 773(sBuffer) Binding 5
-                              Decorate 784(s2DMS) DescriptorSet 0
+                              Decorate 773(sBuffer) DescriptorSet 0
                               Decorate 784(s2DMS) Binding 6
-                              Decorate 795(s2DMSArray) DescriptorSet 0
+                              Decorate 784(s2DMS) DescriptorSet 0
                               Decorate 795(s2DMSArray) Binding 10
+                              Decorate 795(s2DMSArray) DescriptorSet 0
                               Decorate 866(dPdxy1) Location 8
-                              Decorate 874(dPdxy2) Location 9
-                              Decorate 882(dPdxy3) Location 10
-                              Decorate 1844(i1D) DescriptorSet 1
-                              Decorate 1844(i1D) Binding 0
-                              Decorate 1853(i2D) DescriptorSet 1
-                              Decorate 1853(i2D) Binding 1
-                              Decorate 1862(i3D) DescriptorSet 1
-                              Decorate 1862(i3D) Binding 2
-                              Decorate 1871(i2DRect) DescriptorSet 1
-                              Decorate 1871(i2DRect) Binding 3
-                              Decorate 1880(iCube) DescriptorSet 1
-                              Decorate 1880(iCube) Binding 4
-                              Decorate 1889(iBuffer) DescriptorSet 1
-                              Decorate 1889(iBuffer) Binding 8
-                              Decorate 1898(i1DArray) DescriptorSet 1
-                              Decorate 1898(i1DArray) Binding 5
-                              Decorate 1907(i2DArray) DescriptorSet 1
-                              Decorate 1907(i2DArray) Binding 6
-                              Decorate 1916(iCubeArray) DescriptorSet 1
-                              Decorate 1916(iCubeArray) Binding 7
-                              Decorate 1925(i2DMS) DescriptorSet 1
-                              Decorate 1925(i2DMS) Binding 9
-                              Decorate 1934(i2DMSArray) DescriptorSet 1
-                              Decorate 1934(i2DMSArray) Binding 10
-                              Decorate 2665(lodClamp) Location 7
-                              Decorate 3264(t1D) DescriptorSet 2
-                              Decorate 3264(t1D) Binding 0
-                              Decorate 3268(s) DescriptorSet 2
-                              Decorate 3268(s) Binding 11
-                              Decorate 3276(t2D) DescriptorSet 2
-                              Decorate 3276(t2D) Binding 1
-                              Decorate 3285(t3D) DescriptorSet 2
-                              Decorate 3285(t3D) Binding 2
-                              Decorate 3294(tCube) DescriptorSet 2
-                              Decorate 3294(tCube) Binding 4
-                              Decorate 3303(sShadow) DescriptorSet 2
-                              Decorate 3303(sShadow) Binding 12
-                              Decorate 3334(t1DArray) DescriptorSet 2
-                              Decorate 3334(t1DArray) Binding 5
-                              Decorate 3343(t2DArray) DescriptorSet 2
-                              Decorate 3343(t2DArray) Binding 6
-                              Decorate 3352(tCubeArray) DescriptorSet 2
-                              Decorate 3352(tCubeArray) Binding 7
-                              Decorate 3381(t2DRect) DescriptorSet 2
-                              Decorate 3381(t2DRect) Binding 3
-                              Decorate 3414(subpass) DescriptorSet 3
-                              Decorate 3414(subpass) Binding 0
-                              Decorate 3414(subpass) InputAttachmentIndex 0
-                              Decorate 3420(subpassMS) DescriptorSet 3
-                              Decorate 3420(subpassMS) Binding 1
-                              Decorate 3420(subpassMS) InputAttachmentIndex 0
-                              Decorate 3590(fragColor) Location 0
-                              Decorate 3593(tBuffer) DescriptorSet 2
-                              Decorate 3593(tBuffer) Binding 8
-                              Decorate 3595(t2DMS) DescriptorSet 2
-                              Decorate 3595(t2DMS) Binding 9
-                              Decorate 3597(t2DMSArray) DescriptorSet 2
-                              Decorate 3597(t2DMSArray) Binding 10
-                              Decorate 3598(bias) Location 6
+                              Decorate 873(dPdxy2) Location 9
+                              Decorate 880(dPdxy3) Location 10
+                              Decorate 1799(i1D) Binding 0
+                              Decorate 1799(i1D) DescriptorSet 1
+                              Decorate 1808(i2D) Binding 1
+                              Decorate 1808(i2D) DescriptorSet 1
+                              Decorate 1817(i3D) Binding 2
+                              Decorate 1817(i3D) DescriptorSet 1
+                              Decorate 1826(i2DRect) Binding 3
+                              Decorate 1826(i2DRect) DescriptorSet 1
+                              Decorate 1835(iCube) Binding 4
+                              Decorate 1835(iCube) DescriptorSet 1
+                              Decorate 1844(iBuffer) Binding 8
+                              Decorate 1844(iBuffer) DescriptorSet 1
+                              Decorate 1853(i1DArray) Binding 5
+                              Decorate 1853(i1DArray) DescriptorSet 1
+                              Decorate 1862(i2DArray) Binding 6
+                              Decorate 1862(i2DArray) DescriptorSet 1
+                              Decorate 1871(iCubeArray) Binding 7
+                              Decorate 1871(iCubeArray) DescriptorSet 1
+                              Decorate 1880(i2DMS) Binding 9
+                              Decorate 1880(i2DMS) DescriptorSet 1
+                              Decorate 1889(i2DMSArray) Binding 10
+                              Decorate 1889(i2DMSArray) DescriptorSet 1
+                              Decorate 2603(lodClamp) Location 7
+                              Decorate 3168(t1D) Binding 0
+                              Decorate 3168(t1D) DescriptorSet 2
+                              Decorate 3172(s) Binding 11
+                              Decorate 3172(s) DescriptorSet 2
+                              Decorate 3180(t2D) Binding 1
+                              Decorate 3180(t2D) DescriptorSet 2
+                              Decorate 3189(t3D) Binding 2
+                              Decorate 3189(t3D) DescriptorSet 2
+                              Decorate 3198(tCube) Binding 4
+                              Decorate 3198(tCube) DescriptorSet 2
+                              Decorate 3207(sShadow) Binding 12
+                              Decorate 3207(sShadow) DescriptorSet 2
+                              Decorate 3238(t1DArray) Binding 5
+                              Decorate 3238(t1DArray) DescriptorSet 2
+                              Decorate 3247(t2DArray) Binding 6
+                              Decorate 3247(t2DArray) DescriptorSet 2
+                              Decorate 3256(tCubeArray) Binding 7
+                              Decorate 3256(tCubeArray) DescriptorSet 2
+                              Decorate 3285(t2DRect) Binding 3
+                              Decorate 3285(t2DRect) DescriptorSet 2
+                              Decorate 3318(subpass) Binding 0
+                              Decorate 3318(subpass) DescriptorSet 3
+                              Decorate 3318(subpass) InputAttachmentIndex 0
+                              Decorate 3324(subpassMS) Binding 1
+                              Decorate 3324(subpassMS) DescriptorSet 3
+                              Decorate 3324(subpassMS) InputAttachmentIndex 0
+                              Decorate 3491(fragColor) Location 0
+                              Decorate 3494(tBuffer) Binding 8
+                              Decorate 3494(tBuffer) DescriptorSet 2
+                              Decorate 3496(t2DMS) Binding 9
+                              Decorate 3496(t2DMS) DescriptorSet 2
+                              Decorate 3498(t2DMSArray) Binding 10
+                              Decorate 3498(t2DMSArray) DescriptorSet 2
+                              Decorate 3499(bias) Location 6
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -400,319 +400,316 @@
  795(s2DMSArray):    794(ptr) Variable UniformConstant
              799:     47(int) Constant 2
      866(dPdxy1):    126(ptr) Variable Input
-     874(dPdxy2):    137(ptr) Variable Input
-     882(dPdxy3):    149(ptr) Variable Input
-            1275:     47(int) Constant 0
-            1372:    172(int) Constant 4
-            1373:             TypeArray 451(ivec2) 1372
-            1374:        1373 ConstantComposite 452 452 452 452
-            1469:             TypePointer Function 48(ivec4)
-            1471:   48(ivec4) ConstantComposite 1275 1275 1275 1275
-            1477:             TypePointer Function 47(int)
-            1492:    172(int) Constant 1
-            1507:    172(int) Constant 2
-            1687:             TypePointer Function 52(fvec2)
-            1689:   52(fvec2) ConstantComposite 119 119
-            1842:             TypeImage 6(float) 1D nonsampled format:Rgba16f
+     873(dPdxy2):    137(ptr) Variable Input
+     880(dPdxy3):    149(ptr) Variable Input
+            1230:     47(int) Constant 0
+            1327:    172(int) Constant 4
+            1328:             TypeArray 451(ivec2) 1327
+            1329:        1328 ConstantComposite 452 452 452 452
+            1424:             TypePointer Function 48(ivec4)
+            1426:   48(ivec4) ConstantComposite 1230 1230 1230 1230
+            1432:             TypePointer Function 47(int)
+            1447:    172(int) Constant 1
+            1462:    172(int) Constant 2
+            1642:             TypePointer Function 52(fvec2)
+            1644:   52(fvec2) ConstantComposite 119 119
+            1797:             TypeImage 6(float) 1D nonsampled format:Rgba16f
+            1798:             TypePointer UniformConstant 1797
+       1799(i1D):   1798(ptr) Variable UniformConstant
+            1806:             TypeImage 6(float) 2D nonsampled format:Rgba16f
+            1807:             TypePointer UniformConstant 1806
+       1808(i2D):   1807(ptr) Variable UniformConstant
+            1815:             TypeImage 6(float) 3D nonsampled format:Rgba16f
+            1816:             TypePointer UniformConstant 1815
+       1817(i3D):   1816(ptr) Variable UniformConstant
+            1824:             TypeImage 6(float) Rect nonsampled format:Rgba16f
+            1825:             TypePointer UniformConstant 1824
+   1826(i2DRect):   1825(ptr) Variable UniformConstant
+            1833:             TypeImage 6(float) Cube nonsampled format:Rgba16f
+            1834:             TypePointer UniformConstant 1833
+     1835(iCube):   1834(ptr) Variable UniformConstant
+            1842:             TypeImage 6(float) Buffer nonsampled format:Rgba16f
             1843:             TypePointer UniformConstant 1842
-       1844(i1D):   1843(ptr) Variable UniformConstant
-            1851:             TypeImage 6(float) 2D nonsampled format:Rgba16f
+   1844(iBuffer):   1843(ptr) Variable UniformConstant
+            1851:             TypeImage 6(float) 1D array nonsampled format:Rgba16f
             1852:             TypePointer UniformConstant 1851
-       1853(i2D):   1852(ptr) Variable UniformConstant
-            1860:             TypeImage 6(float) 3D nonsampled format:Rgba16f
+  1853(i1DArray):   1852(ptr) Variable UniformConstant
+            1860:             TypeImage 6(float) 2D array nonsampled format:Rgba16f
             1861:             TypePointer UniformConstant 1860
-       1862(i3D):   1861(ptr) Variable UniformConstant
-            1869:             TypeImage 6(float) Rect nonsampled format:Rgba16f
+  1862(i2DArray):   1861(ptr) Variable UniformConstant
+            1869:             TypeImage 6(float) Cube array nonsampled format:Rgba16f
             1870:             TypePointer UniformConstant 1869
-   1871(i2DRect):   1870(ptr) Variable UniformConstant
-            1878:             TypeImage 6(float) Cube nonsampled format:Rgba16f
+1871(iCubeArray):   1870(ptr) Variable UniformConstant
+            1878:             TypeImage 6(float) 2D multi-sampled nonsampled format:Rgba16f
             1879:             TypePointer UniformConstant 1878
-     1880(iCube):   1879(ptr) Variable UniformConstant
-            1887:             TypeImage 6(float) Buffer nonsampled format:Rgba16f
+     1880(i2DMS):   1879(ptr) Variable UniformConstant
+            1887:             TypeImage 6(float) 2D array multi-sampled nonsampled format:Rgba16f
             1888:             TypePointer UniformConstant 1887
-   1889(iBuffer):   1888(ptr) Variable UniformConstant
-            1896:             TypeImage 6(float) 1D array nonsampled format:Rgba16f
-            1897:             TypePointer UniformConstant 1896
-  1898(i1DArray):   1897(ptr) Variable UniformConstant
-            1905:             TypeImage 6(float) 2D array nonsampled format:Rgba16f
-            1906:             TypePointer UniformConstant 1905
-  1907(i2DArray):   1906(ptr) Variable UniformConstant
-            1914:             TypeImage 6(float) Cube array nonsampled format:Rgba16f
-            1915:             TypePointer UniformConstant 1914
-1916(iCubeArray):   1915(ptr) Variable UniformConstant
-            1923:             TypeImage 6(float) 2D multi-sampled nonsampled format:Rgba16f
-            1924:             TypePointer UniformConstant 1923
-     1925(i2DMS):   1924(ptr) Variable UniformConstant
-            1932:             TypeImage 6(float) 2D array multi-sampled nonsampled format:Rgba16f
-            1933:             TypePointer UniformConstant 1932
-1934(i2DMSArray):   1933(ptr) Variable UniformConstant
-   1991(ResType):             TypeStruct 47(int) 7(fvec4)
-   2009(ResType):             TypeStruct 47(int) 6(float)
-            2506:  451(ivec2) ConstantComposite 445 799
-            2507:     47(int) Constant 3
-            2508:     47(int) Constant 4
-            2509:  451(ivec2) ConstantComposite 2507 2508
-            2510:     47(int) Constant 15
-            2511:     47(int) Constant 16
-            2512:  451(ivec2) ConstantComposite 2510 2511
-            2513:     47(int) Constant 4294967294
-            2514:  451(ivec2) ConstantComposite 2513 1275
-            2515:        1373 ConstantComposite 2506 2509 2512 2514
-  2665(lodClamp):    126(ptr) Variable Input
-            3263:             TypePointer UniformConstant 121
-       3264(t1D):   3263(ptr) Variable UniformConstant
-            3266:             TypeSampler
-            3267:             TypePointer UniformConstant 3266
-         3268(s):   3267(ptr) Variable UniformConstant
-            3275:             TypePointer UniformConstant 132
-       3276(t2D):   3275(ptr) Variable UniformConstant
-            3284:             TypePointer UniformConstant 143
-       3285(t3D):   3284(ptr) Variable UniformConstant
-            3293:             TypePointer UniformConstant 155
-     3294(tCube):   3293(ptr) Variable UniformConstant
-   3303(sShadow):   3267(ptr) Variable UniformConstant
-            3333:             TypePointer UniformConstant 205
-  3334(t1DArray):   3333(ptr) Variable UniformConstant
-            3342:             TypePointer UniformConstant 214
-  3343(t2DArray):   3342(ptr) Variable UniformConstant
-            3351:             TypePointer UniformConstant 223
-3352(tCubeArray):   3351(ptr) Variable UniformConstant
-            3380:             TypePointer UniformConstant 256
-   3381(t2DRect):   3380(ptr) Variable UniformConstant
-            3412:             TypeImage 6(float) SubpassData nonsampled format:Unknown
-            3413:             TypePointer UniformConstant 3412
-   3414(subpass):   3413(ptr) Variable UniformConstant
-            3416:  451(ivec2) ConstantComposite 1275 1275
-            3418:             TypeImage 6(float) SubpassData multi-sampled nonsampled format:Unknown
-            3419:             TypePointer UniformConstant 3418
- 3420(subpassMS):   3419(ptr) Variable UniformConstant
-            3589:             TypePointer Output 7(fvec4)
- 3590(fragColor):   3589(ptr) Variable Output
-            3592:             TypePointer UniformConstant 770
-   3593(tBuffer):   3592(ptr) Variable UniformConstant
-            3594:             TypePointer UniformConstant 781
-     3595(t2DMS):   3594(ptr) Variable UniformConstant
-            3596:             TypePointer UniformConstant 792
-3597(t2DMSArray):   3596(ptr) Variable UniformConstant
-      3598(bias):    126(ptr) Variable Input
+1889(i2DMSArray):   1888(ptr) Variable UniformConstant
+   1946(ResType):             TypeStruct 47(int) 7(fvec4)
+   1964(ResType):             TypeStruct 47(int) 6(float)
+            2444:  451(ivec2) ConstantComposite 445 799
+            2445:     47(int) Constant 3
+            2446:     47(int) Constant 4
+            2447:  451(ivec2) ConstantComposite 2445 2446
+            2448:     47(int) Constant 15
+            2449:     47(int) Constant 16
+            2450:  451(ivec2) ConstantComposite 2448 2449
+            2451:     47(int) Constant 4294967294
+            2452:  451(ivec2) ConstantComposite 2451 1230
+            2453:        1328 ConstantComposite 2444 2447 2450 2452
+  2603(lodClamp):    126(ptr) Variable Input
+            3167:             TypePointer UniformConstant 121
+       3168(t1D):   3167(ptr) Variable UniformConstant
+            3170:             TypeSampler
+            3171:             TypePointer UniformConstant 3170
+         3172(s):   3171(ptr) Variable UniformConstant
+            3179:             TypePointer UniformConstant 132
+       3180(t2D):   3179(ptr) Variable UniformConstant
+            3188:             TypePointer UniformConstant 143
+       3189(t3D):   3188(ptr) Variable UniformConstant
+            3197:             TypePointer UniformConstant 155
+     3198(tCube):   3197(ptr) Variable UniformConstant
+   3207(sShadow):   3171(ptr) Variable UniformConstant
+            3237:             TypePointer UniformConstant 205
+  3238(t1DArray):   3237(ptr) Variable UniformConstant
+            3246:             TypePointer UniformConstant 214
+  3247(t2DArray):   3246(ptr) Variable UniformConstant
+            3255:             TypePointer UniformConstant 223
+3256(tCubeArray):   3255(ptr) Variable UniformConstant
+            3284:             TypePointer UniformConstant 256
+   3285(t2DRect):   3284(ptr) Variable UniformConstant
+            3316:             TypeImage 6(float) SubpassData nonsampled format:Unknown
+            3317:             TypePointer UniformConstant 3316
+   3318(subpass):   3317(ptr) Variable UniformConstant
+            3320:  451(ivec2) ConstantComposite 1230 1230
+            3322:             TypeImage 6(float) SubpassData multi-sampled nonsampled format:Unknown
+            3323:             TypePointer UniformConstant 3322
+ 3324(subpassMS):   3323(ptr) Variable UniformConstant
+            3490:             TypePointer Output 7(fvec4)
+ 3491(fragColor):   3490(ptr) Variable Output
+            3493:             TypePointer UniformConstant 770
+   3494(tBuffer):   3493(ptr) Variable UniformConstant
+            3495:             TypePointer UniformConstant 781
+     3496(t2DMS):   3495(ptr) Variable UniformConstant
+            3497:             TypePointer UniformConstant 792
+3498(t2DMSArray):   3497(ptr) Variable UniformConstant
+      3499(bias):    126(ptr) Variable Input
          4(main):           2 Function None 3
                5:             Label
-    3426(result):     63(ptr) Variable Function
-     3511(param):     63(ptr) Variable Function
-                              Store 3426(result) 120
-            3427:    7(fvec4) FunctionCall 9(testTexture()
-            3428:    7(fvec4) Load 3426(result)
+    3330(result):     63(ptr) Variable Function
+     3412(param):     63(ptr) Variable Function
+                              Store 3330(result) 120
+            3331:    7(fvec4) FunctionCall 9(testTexture()
+            3332:    7(fvec4) Load 3330(result)
+            3333:    7(fvec4) FAdd 3332 3331
+                              Store 3330(result) 3333
+            3334:    7(fvec4) FunctionCall 11(testTextureProj()
+            3335:    7(fvec4) Load 3330(result)
+            3336:    7(fvec4) FAdd 3335 3334
+                              Store 3330(result) 3336
+            3337:    7(fvec4) FunctionCall 13(testTextureLod()
+            3338:    7(fvec4) Load 3330(result)
+            3339:    7(fvec4) FAdd 3338 3337
+                              Store 3330(result) 3339
+            3340:    7(fvec4) FunctionCall 15(testTextureOffset()
+            3341:    7(fvec4) Load 3330(result)
+            3342:    7(fvec4) FAdd 3341 3340
+                              Store 3330(result) 3342
+            3343:    7(fvec4) FunctionCall 19(testTextureLodOffset()
+            3344:    7(fvec4) Load 3330(result)
+            3345:    7(fvec4) FAdd 3344 3343
+                              Store 3330(result) 3345
+            3346:    7(fvec4) FunctionCall 21(testTextureProjLodOffset()
+            3347:    7(fvec4) Load 3330(result)
+            3348:    7(fvec4) FAdd 3347 3346
+                              Store 3330(result) 3348
+            3349:    7(fvec4) FunctionCall 23(testTexelFetch()
+            3350:    7(fvec4) Load 3330(result)
+            3351:    7(fvec4) FAdd 3350 3349
+                              Store 3330(result) 3351
+            3352:    7(fvec4) FunctionCall 25(testTexelFetchOffset()
+            3353:    7(fvec4) Load 3330(result)
+            3354:    7(fvec4) FAdd 3353 3352
+                              Store 3330(result) 3354
+            3355:    7(fvec4) FunctionCall 27(testTextureGrad()
+            3356:    7(fvec4) Load 3330(result)
+            3357:    7(fvec4) FAdd 3356 3355
+                              Store 3330(result) 3357
+            3358:    7(fvec4) FunctionCall 29(testTextureGradOffset()
+            3359:    7(fvec4) Load 3330(result)
+            3360:    7(fvec4) FAdd 3359 3358
+                              Store 3330(result) 3360
+            3361:    7(fvec4) FunctionCall 31(testTextureProjGrad()
+            3362:    7(fvec4) Load 3330(result)
+            3363:    7(fvec4) FAdd 3362 3361
+                              Store 3330(result) 3363
+            3364:    7(fvec4) FunctionCall 33(testTextureProjGradoffset()
+            3365:    7(fvec4) Load 3330(result)
+            3366:    7(fvec4) FAdd 3365 3364
+                              Store 3330(result) 3366
+            3367:    7(fvec4) FunctionCall 35(testTextureGather()
+            3368:    7(fvec4) Load 3330(result)
+            3369:    7(fvec4) FAdd 3368 3367
+                              Store 3330(result) 3369
+            3370:    7(fvec4) FunctionCall 37(testTextureGatherOffset()
+            3371:    7(fvec4) Load 3330(result)
+            3372:    7(fvec4) FAdd 3371 3370
+                              Store 3330(result) 3372
+            3373:    7(fvec4) FunctionCall 39(testTextureGatherOffsets()
+            3374:    7(fvec4) Load 3330(result)
+            3375:    7(fvec4) FAdd 3374 3373
+                              Store 3330(result) 3375
+            3376:    7(fvec4) FunctionCall 41(testTextureGatherLod()
+            3377:    7(fvec4) Load 3330(result)
+            3378:    7(fvec4) FAdd 3377 3376
+                              Store 3330(result) 3378
+            3379:    7(fvec4) FunctionCall 43(testTextureGatherLodOffset()
+            3380:    7(fvec4) Load 3330(result)
+            3381:    7(fvec4) FAdd 3380 3379
+                              Store 3330(result) 3381
+            3382:    7(fvec4) FunctionCall 45(testTextureGatherLodOffsets()
+            3383:    7(fvec4) Load 3330(result)
+            3384:    7(fvec4) FAdd 3383 3382
+                              Store 3330(result) 3384
+            3385:   48(ivec4) FunctionCall 50(testTextureSize()
+            3386:    7(fvec4) ConvertSToF 3385
+            3387:    7(fvec4) Load 3330(result)
+            3388:    7(fvec4) FAdd 3387 3386
+                              Store 3330(result) 3388
+            3389:   52(fvec2) FunctionCall 54(testTextureQueryLod()
+            3390:    7(fvec4) Load 3330(result)
+            3391:   52(fvec2) VectorShuffle 3390 3390 0 1
+            3392:   52(fvec2) FAdd 3391 3389
+            3393:    174(ptr) AccessChain 3330(result) 173
+            3394:    6(float) CompositeExtract 3392 0
+                              Store 3393 3394
+            3395:    174(ptr) AccessChain 3330(result) 1447
+            3396:    6(float) CompositeExtract 3392 1
+                              Store 3395 3396
+            3397:     47(int) FunctionCall 57(testTextureQueryLevels()
+            3398:    6(float) ConvertSToF 3397
+            3399:    174(ptr) AccessChain 3330(result) 173
+            3400:    6(float) Load 3399
+            3401:    6(float) FAdd 3400 3398
+            3402:    174(ptr) AccessChain 3330(result) 173
+                              Store 3402 3401
+            3403:     47(int) FunctionCall 59(testTextureSamples()
+            3404:    6(float) ConvertSToF 3403
+            3405:    174(ptr) AccessChain 3330(result) 173
+            3406:    6(float) Load 3405
+            3407:    6(float) FAdd 3406 3404
+            3408:    174(ptr) AccessChain 3330(result) 173
+                              Store 3408 3407
+            3409:    7(fvec4) FunctionCall 61(testImageLoad()
+            3410:    7(fvec4) Load 3330(result)
+            3411:    7(fvec4) FAdd 3410 3409
+                              Store 3330(result) 3411
+            3413:    7(fvec4) Load 3330(result)
+                              Store 3412(param) 3413
+            3414:           2 FunctionCall 66(testImageStore(vf4;) 3412(param)
+            3415:    7(fvec4) FunctionCall 68(testSparseTexture()
+            3416:    7(fvec4) Load 3330(result)
+            3417:    7(fvec4) FAdd 3416 3415
+                              Store 3330(result) 3417
+            3418:    7(fvec4) FunctionCall 70(testSparseTextureLod()
+            3419:    7(fvec4) Load 3330(result)
+            3420:    7(fvec4) FAdd 3419 3418
+                              Store 3330(result) 3420
+            3421:    7(fvec4) FunctionCall 72(testSparseTextureOffset()
+            3422:    7(fvec4) Load 3330(result)
+            3423:    7(fvec4) FAdd 3422 3421
+                              Store 3330(result) 3423
+            3424:    7(fvec4) FunctionCall 74(testSparseTextureLodOffset()
+            3425:    7(fvec4) Load 3330(result)
+            3426:    7(fvec4) FAdd 3425 3424
+                              Store 3330(result) 3426
+            3427:    7(fvec4) FunctionCall 76(testSparseTextureGrad()
+            3428:    7(fvec4) Load 3330(result)
             3429:    7(fvec4) FAdd 3428 3427
-                              Store 3426(result) 3429
-            3430:    7(fvec4) FunctionCall 11(testTextureProj()
-            3431:    7(fvec4) Load 3426(result)
+                              Store 3330(result) 3429
+            3430:    7(fvec4) FunctionCall 78(testSparseTextureGradOffset()
+            3431:    7(fvec4) Load 3330(result)
             3432:    7(fvec4) FAdd 3431 3430
-                              Store 3426(result) 3432
-            3433:    7(fvec4) FunctionCall 13(testTextureLod()
-            3434:    7(fvec4) Load 3426(result)
+                              Store 3330(result) 3432
+            3433:    7(fvec4) FunctionCall 80(testSparseTexelFetch()
+            3434:    7(fvec4) Load 3330(result)
             3435:    7(fvec4) FAdd 3434 3433
-                              Store 3426(result) 3435
-            3436:    7(fvec4) FunctionCall 15(testTextureOffset()
-            3437:    7(fvec4) Load 3426(result)
+                              Store 3330(result) 3435
+            3436:    7(fvec4) FunctionCall 82(testSparseTexelFetchOffset()
+            3437:    7(fvec4) Load 3330(result)
             3438:    7(fvec4) FAdd 3437 3436
-                              Store 3426(result) 3438
-            3439:    7(fvec4) FunctionCall 19(testTextureLodOffset()
-            3440:    7(fvec4) Load 3426(result)
+                              Store 3330(result) 3438
+            3439:    7(fvec4) FunctionCall 84(testSparseTextureGather()
+            3440:    7(fvec4) Load 3330(result)
             3441:    7(fvec4) FAdd 3440 3439
-                              Store 3426(result) 3441
-            3442:    7(fvec4) FunctionCall 21(testTextureProjLodOffset()
-            3443:    7(fvec4) Load 3426(result)
+                              Store 3330(result) 3441
+            3442:    7(fvec4) FunctionCall 86(testSparseTextureGatherOffset()
+            3443:    7(fvec4) Load 3330(result)
             3444:    7(fvec4) FAdd 3443 3442
-                              Store 3426(result) 3444
-            3445:    7(fvec4) FunctionCall 23(testTexelFetch()
-            3446:    7(fvec4) Load 3426(result)
+                              Store 3330(result) 3444
+            3445:    7(fvec4) FunctionCall 88(testSparseTextureGatherOffsets()
+            3446:    7(fvec4) Load 3330(result)
             3447:    7(fvec4) FAdd 3446 3445
-                              Store 3426(result) 3447
-            3448:    7(fvec4) FunctionCall 25(testTexelFetchOffset()
-            3449:    7(fvec4) Load 3426(result)
+                              Store 3330(result) 3447
+            3448:    7(fvec4) FunctionCall 90(testSparseTextureGatherLod()
+            3449:    7(fvec4) Load 3330(result)
             3450:    7(fvec4) FAdd 3449 3448
-                              Store 3426(result) 3450
-            3451:    7(fvec4) FunctionCall 27(testTextureGrad()
-            3452:    7(fvec4) Load 3426(result)
+                              Store 3330(result) 3450
+            3451:    7(fvec4) FunctionCall 92(testSparseTextureGatherLodOffset()
+            3452:    7(fvec4) Load 3330(result)
             3453:    7(fvec4) FAdd 3452 3451
-                              Store 3426(result) 3453
-            3454:    7(fvec4) FunctionCall 29(testTextureGradOffset()
-            3455:    7(fvec4) Load 3426(result)
+                              Store 3330(result) 3453
+            3454:    7(fvec4) FunctionCall 94(testSparseTextureGatherLodOffsets()
+            3455:    7(fvec4) Load 3330(result)
             3456:    7(fvec4) FAdd 3455 3454
-                              Store 3426(result) 3456
-            3457:    7(fvec4) FunctionCall 31(testTextureProjGrad()
-            3458:    7(fvec4) Load 3426(result)
+                              Store 3330(result) 3456
+            3457:    7(fvec4) FunctionCall 96(testSparseImageLoad()
+            3458:    7(fvec4) Load 3330(result)
             3459:    7(fvec4) FAdd 3458 3457
-                              Store 3426(result) 3459
-            3460:    7(fvec4) FunctionCall 33(testTextureProjGradoffset()
-            3461:    7(fvec4) Load 3426(result)
+                              Store 3330(result) 3459
+            3460:    7(fvec4) FunctionCall 98(testSparseTextureClamp()
+            3461:    7(fvec4) Load 3330(result)
             3462:    7(fvec4) FAdd 3461 3460
-                              Store 3426(result) 3462
-            3463:    7(fvec4) FunctionCall 35(testTextureGather()
-            3464:    7(fvec4) Load 3426(result)
+                              Store 3330(result) 3462
+            3463:    7(fvec4) FunctionCall 100(testTextureClamp()
+            3464:    7(fvec4) Load 3330(result)
             3465:    7(fvec4) FAdd 3464 3463
-                              Store 3426(result) 3465
-            3466:    7(fvec4) FunctionCall 37(testTextureGatherOffset()
-            3467:    7(fvec4) Load 3426(result)
+                              Store 3330(result) 3465
+            3466:    7(fvec4) FunctionCall 102(testSparseTextureOffsetClamp()
+            3467:    7(fvec4) Load 3330(result)
             3468:    7(fvec4) FAdd 3467 3466
-                              Store 3426(result) 3468
-            3469:    7(fvec4) FunctionCall 39(testTextureGatherOffsets()
-            3470:    7(fvec4) Load 3426(result)
+                              Store 3330(result) 3468
+            3469:    7(fvec4) FunctionCall 104(testTextureOffsetClamp()
+            3470:    7(fvec4) Load 3330(result)
             3471:    7(fvec4) FAdd 3470 3469
-                              Store 3426(result) 3471
-            3472:    7(fvec4) FunctionCall 41(testTextureGatherLod()
-            3473:    7(fvec4) Load 3426(result)
+                              Store 3330(result) 3471
+            3472:    7(fvec4) FunctionCall 76(testSparseTextureGrad()
+            3473:    7(fvec4) Load 3330(result)
             3474:    7(fvec4) FAdd 3473 3472
-                              Store 3426(result) 3474
-            3475:    7(fvec4) FunctionCall 43(testTextureGatherLodOffset()
-            3476:    7(fvec4) Load 3426(result)
+                              Store 3330(result) 3474
+            3475:    7(fvec4) FunctionCall 27(testTextureGrad()
+            3476:    7(fvec4) Load 3330(result)
             3477:    7(fvec4) FAdd 3476 3475
-                              Store 3426(result) 3477
-            3478:    7(fvec4) FunctionCall 45(testTextureGatherLodOffsets()
-            3479:    7(fvec4) Load 3426(result)
+                              Store 3330(result) 3477
+            3478:    7(fvec4) FunctionCall 110(testSparseTextureGradOffsetClamp()
+            3479:    7(fvec4) Load 3330(result)
             3480:    7(fvec4) FAdd 3479 3478
-                              Store 3426(result) 3480
-            3481:   48(ivec4) FunctionCall 50(testTextureSize()
-            3482:    7(fvec4) ConvertSToF 3481
-            3483:    7(fvec4) Load 3426(result)
-            3484:    7(fvec4) FAdd 3483 3482
-                              Store 3426(result) 3484
-            3485:   52(fvec2) FunctionCall 54(testTextureQueryLod()
-            3486:    6(float) CompositeExtract 3485 0
-            3487:    6(float) CompositeExtract 3485 1
-            3488:   52(fvec2) CompositeConstruct 3486 3487
-            3489:    7(fvec4) Load 3426(result)
-            3490:   52(fvec2) VectorShuffle 3489 3489 0 1
-            3491:   52(fvec2) FAdd 3490 3488
-            3492:    174(ptr) AccessChain 3426(result) 173
-            3493:    6(float) CompositeExtract 3491 0
-                              Store 3492 3493
-            3494:    174(ptr) AccessChain 3426(result) 1492
-            3495:    6(float) CompositeExtract 3491 1
-                              Store 3494 3495
-            3496:     47(int) FunctionCall 57(testTextureQueryLevels()
-            3497:    6(float) ConvertSToF 3496
-            3498:    174(ptr) AccessChain 3426(result) 173
-            3499:    6(float) Load 3498
-            3500:    6(float) FAdd 3499 3497
-            3501:    174(ptr) AccessChain 3426(result) 173
-                              Store 3501 3500
-            3502:     47(int) FunctionCall 59(testTextureSamples()
-            3503:    6(float) ConvertSToF 3502
-            3504:    174(ptr) AccessChain 3426(result) 173
-            3505:    6(float) Load 3504
-            3506:    6(float) FAdd 3505 3503
-            3507:    174(ptr) AccessChain 3426(result) 173
-                              Store 3507 3506
-            3508:    7(fvec4) FunctionCall 61(testImageLoad()
-            3509:    7(fvec4) Load 3426(result)
-            3510:    7(fvec4) FAdd 3509 3508
-                              Store 3426(result) 3510
-            3512:    7(fvec4) Load 3426(result)
-                              Store 3511(param) 3512
-            3513:           2 FunctionCall 66(testImageStore(vf4;) 3511(param)
-            3514:    7(fvec4) FunctionCall 68(testSparseTexture()
-            3515:    7(fvec4) Load 3426(result)
-            3516:    7(fvec4) FAdd 3515 3514
-                              Store 3426(result) 3516
-            3517:    7(fvec4) FunctionCall 70(testSparseTextureLod()
-            3518:    7(fvec4) Load 3426(result)
-            3519:    7(fvec4) FAdd 3518 3517
-                              Store 3426(result) 3519
-            3520:    7(fvec4) FunctionCall 72(testSparseTextureOffset()
-            3521:    7(fvec4) Load 3426(result)
-            3522:    7(fvec4) FAdd 3521 3520
-                              Store 3426(result) 3522
-            3523:    7(fvec4) FunctionCall 74(testSparseTextureLodOffset()
-            3524:    7(fvec4) Load 3426(result)
-            3525:    7(fvec4) FAdd 3524 3523
-                              Store 3426(result) 3525
-            3526:    7(fvec4) FunctionCall 76(testSparseTextureGrad()
-            3527:    7(fvec4) Load 3426(result)
-            3528:    7(fvec4) FAdd 3527 3526
-                              Store 3426(result) 3528
-            3529:    7(fvec4) FunctionCall 78(testSparseTextureGradOffset()
-            3530:    7(fvec4) Load 3426(result)
-            3531:    7(fvec4) FAdd 3530 3529
-                              Store 3426(result) 3531
-            3532:    7(fvec4) FunctionCall 80(testSparseTexelFetch()
-            3533:    7(fvec4) Load 3426(result)
-            3534:    7(fvec4) FAdd 3533 3532
-                              Store 3426(result) 3534
-            3535:    7(fvec4) FunctionCall 82(testSparseTexelFetchOffset()
-            3536:    7(fvec4) Load 3426(result)
-            3537:    7(fvec4) FAdd 3536 3535
-                              Store 3426(result) 3537
-            3538:    7(fvec4) FunctionCall 84(testSparseTextureGather()
-            3539:    7(fvec4) Load 3426(result)
-            3540:    7(fvec4) FAdd 3539 3538
-                              Store 3426(result) 3540
-            3541:    7(fvec4) FunctionCall 86(testSparseTextureGatherOffset()
-            3542:    7(fvec4) Load 3426(result)
-            3543:    7(fvec4) FAdd 3542 3541
-                              Store 3426(result) 3543
-            3544:    7(fvec4) FunctionCall 88(testSparseTextureGatherOffsets()
-            3545:    7(fvec4) Load 3426(result)
-            3546:    7(fvec4) FAdd 3545 3544
-                              Store 3426(result) 3546
-            3547:    7(fvec4) FunctionCall 90(testSparseTextureGatherLod()
-            3548:    7(fvec4) Load 3426(result)
-            3549:    7(fvec4) FAdd 3548 3547
-                              Store 3426(result) 3549
-            3550:    7(fvec4) FunctionCall 92(testSparseTextureGatherLodOffset()
-            3551:    7(fvec4) Load 3426(result)
-            3552:    7(fvec4) FAdd 3551 3550
-                              Store 3426(result) 3552
-            3553:    7(fvec4) FunctionCall 94(testSparseTextureGatherLodOffsets()
-            3554:    7(fvec4) Load 3426(result)
-            3555:    7(fvec4) FAdd 3554 3553
-                              Store 3426(result) 3555
-            3556:    7(fvec4) FunctionCall 96(testSparseImageLoad()
-            3557:    7(fvec4) Load 3426(result)
-            3558:    7(fvec4) FAdd 3557 3556
-                              Store 3426(result) 3558
-            3559:    7(fvec4) FunctionCall 98(testSparseTextureClamp()
-            3560:    7(fvec4) Load 3426(result)
-            3561:    7(fvec4) FAdd 3560 3559
-                              Store 3426(result) 3561
-            3562:    7(fvec4) FunctionCall 100(testTextureClamp()
-            3563:    7(fvec4) Load 3426(result)
-            3564:    7(fvec4) FAdd 3563 3562
-                              Store 3426(result) 3564
-            3565:    7(fvec4) FunctionCall 102(testSparseTextureOffsetClamp()
-            3566:    7(fvec4) Load 3426(result)
-            3567:    7(fvec4) FAdd 3566 3565
-                              Store 3426(result) 3567
-            3568:    7(fvec4) FunctionCall 104(testTextureOffsetClamp()
-            3569:    7(fvec4) Load 3426(result)
-            3570:    7(fvec4) FAdd 3569 3568
-                              Store 3426(result) 3570
-            3571:    7(fvec4) FunctionCall 76(testSparseTextureGrad()
-            3572:    7(fvec4) Load 3426(result)
-            3573:    7(fvec4) FAdd 3572 3571
-                              Store 3426(result) 3573
-            3574:    7(fvec4) FunctionCall 27(testTextureGrad()
-            3575:    7(fvec4) Load 3426(result)
-            3576:    7(fvec4) FAdd 3575 3574
-                              Store 3426(result) 3576
-            3577:    7(fvec4) FunctionCall 110(testSparseTextureGradOffsetClamp()
-            3578:    7(fvec4) Load 3426(result)
-            3579:    7(fvec4) FAdd 3578 3577
-                              Store 3426(result) 3579
-            3580:    7(fvec4) FunctionCall 112(testTextureGradOffsetClamp()
-            3581:    7(fvec4) Load 3426(result)
-            3582:    7(fvec4) FAdd 3581 3580
-                              Store 3426(result) 3582
-            3583:    7(fvec4) FunctionCall 114(testCombinedTextureSampler()
-            3584:    7(fvec4) Load 3426(result)
-            3585:    7(fvec4) FAdd 3584 3583
-                              Store 3426(result) 3585
-            3586:    7(fvec4) FunctionCall 116(testSubpassLoad()
-            3587:    7(fvec4) Load 3426(result)
-            3588:    7(fvec4) FAdd 3587 3586
-                              Store 3426(result) 3588
-            3591:    7(fvec4) Load 3426(result)
-                              Store 3590(fragColor) 3591
+                              Store 3330(result) 3480
+            3481:    7(fvec4) FunctionCall 112(testTextureGradOffsetClamp()
+            3482:    7(fvec4) Load 3330(result)
+            3483:    7(fvec4) FAdd 3482 3481
+                              Store 3330(result) 3483
+            3484:    7(fvec4) FunctionCall 114(testCombinedTextureSampler()
+            3485:    7(fvec4) Load 3330(result)
+            3486:    7(fvec4) FAdd 3485 3484
+                              Store 3330(result) 3486
+            3487:    7(fvec4) FunctionCall 116(testSubpassLoad()
+            3488:    7(fvec4) Load 3330(result)
+            3489:    7(fvec4) FAdd 3488 3487
+                              Store 3330(result) 3489
+            3492:    7(fvec4) Load 3330(result)
+                              Store 3491(fragColor) 3492
                               Return
                               FunctionEnd
  9(testTexture():    7(fvec4) Function None 8
@@ -1486,2938 +1483,2842 @@
              864:         122 Load 124(s1D)
              865:    6(float) Load 127(c1)
              867:    6(float) Load 866(dPdxy1)
-             868:    6(float) Load 866(dPdxy1)
-             869:    7(fvec4) ImageSampleExplicitLod 864 865 Grad 867 868
-             870:    7(fvec4) Load 863(texel)
-             871:    7(fvec4) FAdd 870 869
-                              Store 863(texel) 871
-             872:         133 Load 135(s2D)
-             873:   52(fvec2) Load 138(c2)
-             875:   52(fvec2) Load 874(dPdxy2)
-             876:   52(fvec2) Load 874(dPdxy2)
-             877:    7(fvec4) ImageSampleExplicitLod 872 873 Grad 875 876
-             878:    7(fvec4) Load 863(texel)
-             879:    7(fvec4) FAdd 878 877
-                              Store 863(texel) 879
-             880:         144 Load 146(s3D)
-             881:  148(fvec3) Load 150(c3)
-             883:  148(fvec3) Load 882(dPdxy3)
-             884:  148(fvec3) Load 882(dPdxy3)
-             885:    7(fvec4) ImageSampleExplicitLod 880 881 Grad 883 884
-             886:    7(fvec4) Load 863(texel)
-             887:    7(fvec4) FAdd 886 885
-                              Store 863(texel) 887
-             888:         156 Load 158(sCube)
-             889:  148(fvec3) Load 150(c3)
-             890:  148(fvec3) Load 882(dPdxy3)
-             891:  148(fvec3) Load 882(dPdxy3)
-             892:    7(fvec4) ImageSampleExplicitLod 888 889 Grad 890 891
-             893:    7(fvec4) Load 863(texel)
-             894:    7(fvec4) FAdd 893 892
-                              Store 863(texel) 894
-             895:         257 Load 259(s2DRect)
-             896:   52(fvec2) Load 138(c2)
-             897:   52(fvec2) Load 874(dPdxy2)
-             898:   52(fvec2) Load 874(dPdxy2)
-             899:    7(fvec4) ImageSampleExplicitLod 895 896 Grad 897 898
-             900:    7(fvec4) Load 863(texel)
-             901:    7(fvec4) FAdd 900 899
-                              Store 863(texel) 901
-             902:         266 Load 268(s2DRectShadow)
-             903:  148(fvec3) Load 150(c3)
-             904:   52(fvec2) Load 874(dPdxy2)
-             905:   52(fvec2) Load 874(dPdxy2)
-             906:    6(float) CompositeExtract 903 2
-             907:    6(float) ImageSampleDrefExplicitLod 902 903 906 Grad 904 905
-             908:    174(ptr) AccessChain 863(texel) 173
-             909:    6(float) Load 908
-             910:    6(float) FAdd 909 907
+             868:    7(fvec4) ImageSampleExplicitLod 864 865 Grad 867 867
+             869:    7(fvec4) Load 863(texel)
+             870:    7(fvec4) FAdd 869 868
+                              Store 863(texel) 870
+             871:         133 Load 135(s2D)
+             872:   52(fvec2) Load 138(c2)
+             874:   52(fvec2) Load 873(dPdxy2)
+             875:    7(fvec4) ImageSampleExplicitLod 871 872 Grad 874 874
+             876:    7(fvec4) Load 863(texel)
+             877:    7(fvec4) FAdd 876 875
+                              Store 863(texel) 877
+             878:         144 Load 146(s3D)
+             879:  148(fvec3) Load 150(c3)
+             881:  148(fvec3) Load 880(dPdxy3)
+             882:    7(fvec4) ImageSampleExplicitLod 878 879 Grad 881 881
+             883:    7(fvec4) Load 863(texel)
+             884:    7(fvec4) FAdd 883 882
+                              Store 863(texel) 884
+             885:         156 Load 158(sCube)
+             886:  148(fvec3) Load 150(c3)
+             887:  148(fvec3) Load 880(dPdxy3)
+             888:    7(fvec4) ImageSampleExplicitLod 885 886 Grad 887 887
+             889:    7(fvec4) Load 863(texel)
+             890:    7(fvec4) FAdd 889 888
+                              Store 863(texel) 890
+             891:         257 Load 259(s2DRect)
+             892:   52(fvec2) Load 138(c2)
+             893:   52(fvec2) Load 873(dPdxy2)
+             894:    7(fvec4) ImageSampleExplicitLod 891 892 Grad 893 893
+             895:    7(fvec4) Load 863(texel)
+             896:    7(fvec4) FAdd 895 894
+                              Store 863(texel) 896
+             897:         266 Load 268(s2DRectShadow)
+             898:  148(fvec3) Load 150(c3)
+             899:   52(fvec2) Load 873(dPdxy2)
+             900:    6(float) CompositeExtract 898 2
+             901:    6(float) ImageSampleDrefExplicitLod 897 898 900 Grad 899 899
+             902:    174(ptr) AccessChain 863(texel) 173
+             903:    6(float) Load 902
+             904:    6(float) FAdd 903 901
+             905:    174(ptr) AccessChain 863(texel) 173
+                              Store 905 904
+             906:         165 Load 167(s1DShadow)
+             907:  148(fvec3) Load 150(c3)
+             908:    6(float) Load 866(dPdxy1)
+             909:    6(float) CompositeExtract 907 2
+             910:    6(float) ImageSampleDrefExplicitLod 906 907 909 Grad 908 908
              911:    174(ptr) AccessChain 863(texel) 173
-                              Store 911 910
-             912:         165 Load 167(s1DShadow)
-             913:  148(fvec3) Load 150(c3)
-             914:    6(float) Load 866(dPdxy1)
-             915:    6(float) Load 866(dPdxy1)
-             916:    6(float) CompositeExtract 913 2
-             917:    6(float) ImageSampleDrefExplicitLod 912 913 916 Grad 914 915
-             918:    174(ptr) AccessChain 863(texel) 173
-             919:    6(float) Load 918
-             920:    6(float) FAdd 919 917
-             921:    174(ptr) AccessChain 863(texel) 173
-                              Store 921 920
-             922:         180 Load 182(s2DShadow)
-             923:  148(fvec3) Load 150(c3)
-             924:   52(fvec2) Load 874(dPdxy2)
-             925:   52(fvec2) Load 874(dPdxy2)
-             926:    6(float) CompositeExtract 923 2
-             927:    6(float) ImageSampleDrefExplicitLod 922 923 926 Grad 924 925
-             928:    174(ptr) AccessChain 863(texel) 173
-             929:    6(float) Load 928
-             930:    6(float) FAdd 929 927
-             931:    174(ptr) AccessChain 863(texel) 173
-                              Store 931 930
-             932:         192 Load 194(sCubeShadow)
-             933:    7(fvec4) Load 197(c4)
-             934:  148(fvec3) Load 882(dPdxy3)
-             935:  148(fvec3) Load 882(dPdxy3)
-             936:    6(float) CompositeExtract 933 3
-             937:    6(float) ImageSampleDrefExplicitLod 932 933 936 Grad 934 935
-             938:    174(ptr) AccessChain 863(texel) 173
-             939:    6(float) Load 938
-             940:    6(float) FAdd 939 937
-             941:    174(ptr) AccessChain 863(texel) 173
-                              Store 941 940
-             942:         206 Load 208(s1DArray)
-             943:   52(fvec2) Load 138(c2)
-             944:    6(float) Load 866(dPdxy1)
-             945:    6(float) Load 866(dPdxy1)
-             946:    7(fvec4) ImageSampleExplicitLod 942 943 Grad 944 945
-             947:    7(fvec4) Load 863(texel)
-             948:    7(fvec4) FAdd 947 946
-                              Store 863(texel) 948
-             949:         215 Load 217(s2DArray)
-             950:  148(fvec3) Load 150(c3)
-             951:   52(fvec2) Load 874(dPdxy2)
-             952:   52(fvec2) Load 874(dPdxy2)
-             953:    7(fvec4) ImageSampleExplicitLod 949 950 Grad 951 952
-             954:    7(fvec4) Load 863(texel)
-             955:    7(fvec4) FAdd 954 953
-                              Store 863(texel) 955
-             956:         233 Load 235(s1DArrayShadow)
-             957:  148(fvec3) Load 150(c3)
-             958:    6(float) Load 866(dPdxy1)
-             959:    6(float) Load 866(dPdxy1)
-             960:    6(float) CompositeExtract 957 2
-             961:    6(float) ImageSampleDrefExplicitLod 956 957 960 Grad 958 959
+             912:    6(float) Load 911
+             913:    6(float) FAdd 912 910
+             914:    174(ptr) AccessChain 863(texel) 173
+                              Store 914 913
+             915:         180 Load 182(s2DShadow)
+             916:  148(fvec3) Load 150(c3)
+             917:   52(fvec2) Load 873(dPdxy2)
+             918:    6(float) CompositeExtract 916 2
+             919:    6(float) ImageSampleDrefExplicitLod 915 916 918 Grad 917 917
+             920:    174(ptr) AccessChain 863(texel) 173
+             921:    6(float) Load 920
+             922:    6(float) FAdd 921 919
+             923:    174(ptr) AccessChain 863(texel) 173
+                              Store 923 922
+             924:         192 Load 194(sCubeShadow)
+             925:    7(fvec4) Load 197(c4)
+             926:  148(fvec3) Load 880(dPdxy3)
+             927:    6(float) CompositeExtract 925 3
+             928:    6(float) ImageSampleDrefExplicitLod 924 925 927 Grad 926 926
+             929:    174(ptr) AccessChain 863(texel) 173
+             930:    6(float) Load 929
+             931:    6(float) FAdd 930 928
+             932:    174(ptr) AccessChain 863(texel) 173
+                              Store 932 931
+             933:         206 Load 208(s1DArray)
+             934:   52(fvec2) Load 138(c2)
+             935:    6(float) Load 866(dPdxy1)
+             936:    7(fvec4) ImageSampleExplicitLod 933 934 Grad 935 935
+             937:    7(fvec4) Load 863(texel)
+             938:    7(fvec4) FAdd 937 936
+                              Store 863(texel) 938
+             939:         215 Load 217(s2DArray)
+             940:  148(fvec3) Load 150(c3)
+             941:   52(fvec2) Load 873(dPdxy2)
+             942:    7(fvec4) ImageSampleExplicitLod 939 940 Grad 941 941
+             943:    7(fvec4) Load 863(texel)
+             944:    7(fvec4) FAdd 943 942
+                              Store 863(texel) 944
+             945:         233 Load 235(s1DArrayShadow)
+             946:  148(fvec3) Load 150(c3)
+             947:    6(float) Load 866(dPdxy1)
+             948:    6(float) CompositeExtract 946 2
+             949:    6(float) ImageSampleDrefExplicitLod 945 946 948 Grad 947 947
+             950:    174(ptr) AccessChain 863(texel) 173
+             951:    6(float) Load 950
+             952:    6(float) FAdd 951 949
+             953:    174(ptr) AccessChain 863(texel) 173
+                              Store 953 952
+             954:         245 Load 247(s2DArrayShadow)
+             955:    7(fvec4) Load 197(c4)
+             956:   52(fvec2) Load 873(dPdxy2)
+             957:    6(float) CompositeExtract 955 3
+             958:    6(float) ImageSampleDrefExplicitLod 954 955 957 Grad 956 956
+             959:    174(ptr) AccessChain 863(texel) 173
+             960:    6(float) Load 959
+             961:    6(float) FAdd 960 958
              962:    174(ptr) AccessChain 863(texel) 173
-             963:    6(float) Load 962
-             964:    6(float) FAdd 963 961
-             965:    174(ptr) AccessChain 863(texel) 173
-                              Store 965 964
-             966:         245 Load 247(s2DArrayShadow)
-             967:    7(fvec4) Load 197(c4)
-             968:   52(fvec2) Load 874(dPdxy2)
-             969:   52(fvec2) Load 874(dPdxy2)
-             970:    6(float) CompositeExtract 967 3
-             971:    6(float) ImageSampleDrefExplicitLod 966 967 970 Grad 968 969
-             972:    174(ptr) AccessChain 863(texel) 173
-             973:    6(float) Load 972
-             974:    6(float) FAdd 973 971
-             975:    174(ptr) AccessChain 863(texel) 173
-                              Store 975 974
-             976:         224 Load 226(sCubeArray)
-             977:    7(fvec4) Load 197(c4)
-             978:  148(fvec3) Load 882(dPdxy3)
-             979:  148(fvec3) Load 882(dPdxy3)
-             980:    7(fvec4) ImageSampleExplicitLod 976 977 Grad 978 979
-             981:    7(fvec4) Load 863(texel)
-             982:    7(fvec4) FAdd 981 980
-                              Store 863(texel) 982
-             983:    7(fvec4) Load 863(texel)
-                              ReturnValue 983
+                              Store 962 961
+             963:         224 Load 226(sCubeArray)
+             964:    7(fvec4) Load 197(c4)
+             965:  148(fvec3) Load 880(dPdxy3)
+             966:    7(fvec4) ImageSampleExplicitLod 963 964 Grad 965 965
+             967:    7(fvec4) Load 863(texel)
+             968:    7(fvec4) FAdd 967 966
+                              Store 863(texel) 968
+             969:    7(fvec4) Load 863(texel)
+                              ReturnValue 969
                               FunctionEnd
 29(testTextureGradOffset():    7(fvec4) Function None 8
               30:             Label
-      986(texel):     63(ptr) Variable Function
-                              Store 986(texel) 120
-             987:         122 Load 124(s1D)
-             988:    6(float) Load 127(c1)
-             989:    6(float) Load 866(dPdxy1)
-             990:    6(float) Load 866(dPdxy1)
-             991:    7(fvec4) ImageSampleExplicitLod 987 988 Grad ConstOffset 989 990 445
-             992:    7(fvec4) Load 986(texel)
-             993:    7(fvec4) FAdd 992 991
-                              Store 986(texel) 993
-             994:         133 Load 135(s2D)
-             995:   52(fvec2) Load 138(c2)
-             996:   52(fvec2) Load 874(dPdxy2)
-             997:   52(fvec2) Load 874(dPdxy2)
-             998:    7(fvec4) ImageSampleExplicitLod 994 995 Grad ConstOffset 996 997 452
-             999:    7(fvec4) Load 986(texel)
-            1000:    7(fvec4) FAdd 999 998
-                              Store 986(texel) 1000
-            1001:         144 Load 146(s3D)
-            1002:  148(fvec3) Load 150(c3)
-            1003:  148(fvec3) Load 882(dPdxy3)
-            1004:  148(fvec3) Load 882(dPdxy3)
-            1005:    7(fvec4) ImageSampleExplicitLod 1001 1002 Grad ConstOffset 1003 1004 459
-            1006:    7(fvec4) Load 986(texel)
-            1007:    7(fvec4) FAdd 1006 1005
-                              Store 986(texel) 1007
-            1008:         257 Load 259(s2DRect)
-            1009:   52(fvec2) Load 138(c2)
-            1010:   52(fvec2) Load 874(dPdxy2)
-            1011:   52(fvec2) Load 874(dPdxy2)
-            1012:    7(fvec4) ImageSampleExplicitLod 1008 1009 Grad ConstOffset 1010 1011 452
-            1013:    7(fvec4) Load 986(texel)
-            1014:    7(fvec4) FAdd 1013 1012
-                              Store 986(texel) 1014
-            1015:         266 Load 268(s2DRectShadow)
+      972(texel):     63(ptr) Variable Function
+                              Store 972(texel) 120
+             973:         122 Load 124(s1D)
+             974:    6(float) Load 127(c1)
+             975:    6(float) Load 866(dPdxy1)
+             976:    7(fvec4) ImageSampleExplicitLod 973 974 Grad ConstOffset 975 975 445
+             977:    7(fvec4) Load 972(texel)
+             978:    7(fvec4) FAdd 977 976
+                              Store 972(texel) 978
+             979:         133 Load 135(s2D)
+             980:   52(fvec2) Load 138(c2)
+             981:   52(fvec2) Load 873(dPdxy2)
+             982:    7(fvec4) ImageSampleExplicitLod 979 980 Grad ConstOffset 981 981 452
+             983:    7(fvec4) Load 972(texel)
+             984:    7(fvec4) FAdd 983 982
+                              Store 972(texel) 984
+             985:         144 Load 146(s3D)
+             986:  148(fvec3) Load 150(c3)
+             987:  148(fvec3) Load 880(dPdxy3)
+             988:    7(fvec4) ImageSampleExplicitLod 985 986 Grad ConstOffset 987 987 459
+             989:    7(fvec4) Load 972(texel)
+             990:    7(fvec4) FAdd 989 988
+                              Store 972(texel) 990
+             991:         257 Load 259(s2DRect)
+             992:   52(fvec2) Load 138(c2)
+             993:   52(fvec2) Load 873(dPdxy2)
+             994:    7(fvec4) ImageSampleExplicitLod 991 992 Grad ConstOffset 993 993 452
+             995:    7(fvec4) Load 972(texel)
+             996:    7(fvec4) FAdd 995 994
+                              Store 972(texel) 996
+             997:         266 Load 268(s2DRectShadow)
+             998:  148(fvec3) Load 150(c3)
+             999:   52(fvec2) Load 873(dPdxy2)
+            1000:    6(float) CompositeExtract 998 2
+            1001:    6(float) ImageSampleDrefExplicitLod 997 998 1000 Grad ConstOffset 999 999 452
+            1002:    174(ptr) AccessChain 972(texel) 173
+            1003:    6(float) Load 1002
+            1004:    6(float) FAdd 1003 1001
+            1005:    174(ptr) AccessChain 972(texel) 173
+                              Store 1005 1004
+            1006:         165 Load 167(s1DShadow)
+            1007:  148(fvec3) Load 150(c3)
+            1008:    6(float) Load 866(dPdxy1)
+            1009:    6(float) CompositeExtract 1007 2
+            1010:    6(float) ImageSampleDrefExplicitLod 1006 1007 1009 Grad ConstOffset 1008 1008 445
+            1011:    174(ptr) AccessChain 972(texel) 173
+            1012:    6(float) Load 1011
+            1013:    6(float) FAdd 1012 1010
+            1014:    174(ptr) AccessChain 972(texel) 173
+                              Store 1014 1013
+            1015:         180 Load 182(s2DShadow)
             1016:  148(fvec3) Load 150(c3)
-            1017:   52(fvec2) Load 874(dPdxy2)
-            1018:   52(fvec2) Load 874(dPdxy2)
-            1019:    6(float) CompositeExtract 1016 2
-            1020:    6(float) ImageSampleDrefExplicitLod 1015 1016 1019 Grad ConstOffset 1017 1018 452
-            1021:    174(ptr) AccessChain 986(texel) 173
-            1022:    6(float) Load 1021
-            1023:    6(float) FAdd 1022 1020
-            1024:    174(ptr) AccessChain 986(texel) 173
-                              Store 1024 1023
-            1025:         165 Load 167(s1DShadow)
-            1026:  148(fvec3) Load 150(c3)
-            1027:    6(float) Load 866(dPdxy1)
-            1028:    6(float) Load 866(dPdxy1)
-            1029:    6(float) CompositeExtract 1026 2
-            1030:    6(float) ImageSampleDrefExplicitLod 1025 1026 1029 Grad ConstOffset 1027 1028 445
-            1031:    174(ptr) AccessChain 986(texel) 173
-            1032:    6(float) Load 1031
-            1033:    6(float) FAdd 1032 1030
-            1034:    174(ptr) AccessChain 986(texel) 173
-                              Store 1034 1033
-            1035:         180 Load 182(s2DShadow)
-            1036:  148(fvec3) Load 150(c3)
-            1037:   52(fvec2) Load 874(dPdxy2)
-            1038:   52(fvec2) Load 874(dPdxy2)
-            1039:    6(float) CompositeExtract 1036 2
-            1040:    6(float) ImageSampleDrefExplicitLod 1035 1036 1039 Grad ConstOffset 1037 1038 452
-            1041:    174(ptr) AccessChain 986(texel) 173
+            1017:   52(fvec2) Load 873(dPdxy2)
+            1018:    6(float) CompositeExtract 1016 2
+            1019:    6(float) ImageSampleDrefExplicitLod 1015 1016 1018 Grad ConstOffset 1017 1017 452
+            1020:    174(ptr) AccessChain 972(texel) 173
+            1021:    6(float) Load 1020
+            1022:    6(float) FAdd 1021 1019
+            1023:    174(ptr) AccessChain 972(texel) 173
+                              Store 1023 1022
+            1024:         206 Load 208(s1DArray)
+            1025:   52(fvec2) Load 138(c2)
+            1026:    6(float) Load 866(dPdxy1)
+            1027:    7(fvec4) ImageSampleExplicitLod 1024 1025 Grad ConstOffset 1026 1026 445
+            1028:    7(fvec4) Load 972(texel)
+            1029:    7(fvec4) FAdd 1028 1027
+                              Store 972(texel) 1029
+            1030:         215 Load 217(s2DArray)
+            1031:  148(fvec3) Load 150(c3)
+            1032:   52(fvec2) Load 873(dPdxy2)
+            1033:    7(fvec4) ImageSampleExplicitLod 1030 1031 Grad ConstOffset 1032 1032 452
+            1034:    7(fvec4) Load 972(texel)
+            1035:    7(fvec4) FAdd 1034 1033
+                              Store 972(texel) 1035
+            1036:         233 Load 235(s1DArrayShadow)
+            1037:  148(fvec3) Load 150(c3)
+            1038:    6(float) Load 866(dPdxy1)
+            1039:    6(float) CompositeExtract 1037 2
+            1040:    6(float) ImageSampleDrefExplicitLod 1036 1037 1039 Grad ConstOffset 1038 1038 445
+            1041:    174(ptr) AccessChain 972(texel) 173
             1042:    6(float) Load 1041
             1043:    6(float) FAdd 1042 1040
-            1044:    174(ptr) AccessChain 986(texel) 173
+            1044:    174(ptr) AccessChain 972(texel) 173
                               Store 1044 1043
-            1045:         206 Load 208(s1DArray)
-            1046:   52(fvec2) Load 138(c2)
-            1047:    6(float) Load 866(dPdxy1)
-            1048:    6(float) Load 866(dPdxy1)
-            1049:    7(fvec4) ImageSampleExplicitLod 1045 1046 Grad ConstOffset 1047 1048 445
-            1050:    7(fvec4) Load 986(texel)
-            1051:    7(fvec4) FAdd 1050 1049
-                              Store 986(texel) 1051
-            1052:         215 Load 217(s2DArray)
-            1053:  148(fvec3) Load 150(c3)
-            1054:   52(fvec2) Load 874(dPdxy2)
-            1055:   52(fvec2) Load 874(dPdxy2)
-            1056:    7(fvec4) ImageSampleExplicitLod 1052 1053 Grad ConstOffset 1054 1055 452
-            1057:    7(fvec4) Load 986(texel)
-            1058:    7(fvec4) FAdd 1057 1056
-                              Store 986(texel) 1058
-            1059:         233 Load 235(s1DArrayShadow)
-            1060:  148(fvec3) Load 150(c3)
-            1061:    6(float) Load 866(dPdxy1)
-            1062:    6(float) Load 866(dPdxy1)
-            1063:    6(float) CompositeExtract 1060 2
-            1064:    6(float) ImageSampleDrefExplicitLod 1059 1060 1063 Grad ConstOffset 1061 1062 445
-            1065:    174(ptr) AccessChain 986(texel) 173
-            1066:    6(float) Load 1065
-            1067:    6(float) FAdd 1066 1064
-            1068:    174(ptr) AccessChain 986(texel) 173
-                              Store 1068 1067
-            1069:         245 Load 247(s2DArrayShadow)
-            1070:    7(fvec4) Load 197(c4)
-            1071:   52(fvec2) Load 874(dPdxy2)
-            1072:   52(fvec2) Load 874(dPdxy2)
-            1073:    6(float) CompositeExtract 1070 3
-            1074:    6(float) ImageSampleDrefExplicitLod 1069 1070 1073 Grad ConstOffset 1071 1072 452
-            1075:    174(ptr) AccessChain 986(texel) 173
-            1076:    6(float) Load 1075
-            1077:    6(float) FAdd 1076 1074
-            1078:    174(ptr) AccessChain 986(texel) 173
-                              Store 1078 1077
-            1079:    7(fvec4) Load 986(texel)
-                              ReturnValue 1079
+            1045:         245 Load 247(s2DArrayShadow)
+            1046:    7(fvec4) Load 197(c4)
+            1047:   52(fvec2) Load 873(dPdxy2)
+            1048:    6(float) CompositeExtract 1046 3
+            1049:    6(float) ImageSampleDrefExplicitLod 1045 1046 1048 Grad ConstOffset 1047 1047 452
+            1050:    174(ptr) AccessChain 972(texel) 173
+            1051:    6(float) Load 1050
+            1052:    6(float) FAdd 1051 1049
+            1053:    174(ptr) AccessChain 972(texel) 173
+                              Store 1053 1052
+            1054:    7(fvec4) Load 972(texel)
+                              ReturnValue 1054
                               FunctionEnd
 31(testTextureProjGrad():    7(fvec4) Function None 8
               32:             Label
-     1082(texel):     63(ptr) Variable Function
-                              Store 1082(texel) 120
-            1083:         122 Load 124(s1D)
-            1084:   52(fvec2) Load 138(c2)
-            1085:    6(float) Load 866(dPdxy1)
-            1086:    6(float) Load 866(dPdxy1)
-            1087:    7(fvec4) ImageSampleProjExplicitLod 1083 1084 Grad 1085 1086
-            1088:    7(fvec4) Load 1082(texel)
-            1089:    7(fvec4) FAdd 1088 1087
-                              Store 1082(texel) 1089
-            1090:         122 Load 124(s1D)
-            1091:    7(fvec4) Load 197(c4)
-            1092:    6(float) Load 866(dPdxy1)
-            1093:    6(float) Load 866(dPdxy1)
-            1094:    6(float) CompositeExtract 1091 3
-            1095:    7(fvec4) CompositeInsert 1094 1091 1
-            1096:    7(fvec4) ImageSampleProjExplicitLod 1090 1095 Grad 1092 1093
-            1097:    7(fvec4) Load 1082(texel)
-            1098:    7(fvec4) FAdd 1097 1096
-                              Store 1082(texel) 1098
-            1099:         133 Load 135(s2D)
-            1100:  148(fvec3) Load 150(c3)
-            1101:   52(fvec2) Load 874(dPdxy2)
-            1102:   52(fvec2) Load 874(dPdxy2)
-            1103:    7(fvec4) ImageSampleProjExplicitLod 1099 1100 Grad 1101 1102
-            1104:    7(fvec4) Load 1082(texel)
+     1057(texel):     63(ptr) Variable Function
+                              Store 1057(texel) 120
+            1058:         122 Load 124(s1D)
+            1059:   52(fvec2) Load 138(c2)
+            1060:    6(float) Load 866(dPdxy1)
+            1061:    7(fvec4) ImageSampleProjExplicitLod 1058 1059 Grad 1060 1060
+            1062:    7(fvec4) Load 1057(texel)
+            1063:    7(fvec4) FAdd 1062 1061
+                              Store 1057(texel) 1063
+            1064:         122 Load 124(s1D)
+            1065:    7(fvec4) Load 197(c4)
+            1066:    6(float) Load 866(dPdxy1)
+            1067:    6(float) CompositeExtract 1065 3
+            1068:    7(fvec4) CompositeInsert 1067 1065 1
+            1069:    7(fvec4) ImageSampleProjExplicitLod 1064 1068 Grad 1066 1066
+            1070:    7(fvec4) Load 1057(texel)
+            1071:    7(fvec4) FAdd 1070 1069
+                              Store 1057(texel) 1071
+            1072:         133 Load 135(s2D)
+            1073:  148(fvec3) Load 150(c3)
+            1074:   52(fvec2) Load 873(dPdxy2)
+            1075:    7(fvec4) ImageSampleProjExplicitLod 1072 1073 Grad 1074 1074
+            1076:    7(fvec4) Load 1057(texel)
+            1077:    7(fvec4) FAdd 1076 1075
+                              Store 1057(texel) 1077
+            1078:         133 Load 135(s2D)
+            1079:    7(fvec4) Load 197(c4)
+            1080:   52(fvec2) Load 873(dPdxy2)
+            1081:    6(float) CompositeExtract 1079 3
+            1082:    7(fvec4) CompositeInsert 1081 1079 2
+            1083:    7(fvec4) ImageSampleProjExplicitLod 1078 1082 Grad 1080 1080
+            1084:    7(fvec4) Load 1057(texel)
+            1085:    7(fvec4) FAdd 1084 1083
+                              Store 1057(texel) 1085
+            1086:         144 Load 146(s3D)
+            1087:    7(fvec4) Load 197(c4)
+            1088:  148(fvec3) Load 880(dPdxy3)
+            1089:    7(fvec4) ImageSampleProjExplicitLod 1086 1087 Grad 1088 1088
+            1090:    7(fvec4) Load 1057(texel)
+            1091:    7(fvec4) FAdd 1090 1089
+                              Store 1057(texel) 1091
+            1092:         257 Load 259(s2DRect)
+            1093:  148(fvec3) Load 150(c3)
+            1094:   52(fvec2) Load 873(dPdxy2)
+            1095:    7(fvec4) ImageSampleProjExplicitLod 1092 1093 Grad 1094 1094
+            1096:    7(fvec4) Load 1057(texel)
+            1097:    7(fvec4) FAdd 1096 1095
+                              Store 1057(texel) 1097
+            1098:         257 Load 259(s2DRect)
+            1099:    7(fvec4) Load 197(c4)
+            1100:   52(fvec2) Load 873(dPdxy2)
+            1101:    6(float) CompositeExtract 1099 3
+            1102:    7(fvec4) CompositeInsert 1101 1099 2
+            1103:    7(fvec4) ImageSampleProjExplicitLod 1098 1102 Grad 1100 1100
+            1104:    7(fvec4) Load 1057(texel)
             1105:    7(fvec4) FAdd 1104 1103
-                              Store 1082(texel) 1105
-            1106:         133 Load 135(s2D)
+                              Store 1057(texel) 1105
+            1106:         266 Load 268(s2DRectShadow)
             1107:    7(fvec4) Load 197(c4)
-            1108:   52(fvec2) Load 874(dPdxy2)
-            1109:   52(fvec2) Load 874(dPdxy2)
+            1108:   52(fvec2) Load 873(dPdxy2)
+            1109:    6(float) CompositeExtract 1107 2
             1110:    6(float) CompositeExtract 1107 3
             1111:    7(fvec4) CompositeInsert 1110 1107 2
-            1112:    7(fvec4) ImageSampleProjExplicitLod 1106 1111 Grad 1108 1109
-            1113:    7(fvec4) Load 1082(texel)
-            1114:    7(fvec4) FAdd 1113 1112
-                              Store 1082(texel) 1114
-            1115:         144 Load 146(s3D)
-            1116:    7(fvec4) Load 197(c4)
-            1117:  148(fvec3) Load 882(dPdxy3)
-            1118:  148(fvec3) Load 882(dPdxy3)
-            1119:    7(fvec4) ImageSampleProjExplicitLod 1115 1116 Grad 1117 1118
-            1120:    7(fvec4) Load 1082(texel)
-            1121:    7(fvec4) FAdd 1120 1119
-                              Store 1082(texel) 1121
-            1122:         257 Load 259(s2DRect)
-            1123:  148(fvec3) Load 150(c3)
-            1124:   52(fvec2) Load 874(dPdxy2)
-            1125:   52(fvec2) Load 874(dPdxy2)
-            1126:    7(fvec4) ImageSampleProjExplicitLod 1122 1123 Grad 1124 1125
-            1127:    7(fvec4) Load 1082(texel)
-            1128:    7(fvec4) FAdd 1127 1126
-                              Store 1082(texel) 1128
-            1129:         257 Load 259(s2DRect)
-            1130:    7(fvec4) Load 197(c4)
-            1131:   52(fvec2) Load 874(dPdxy2)
-            1132:   52(fvec2) Load 874(dPdxy2)
-            1133:    6(float) CompositeExtract 1130 3
-            1134:    7(fvec4) CompositeInsert 1133 1130 2
-            1135:    7(fvec4) ImageSampleProjExplicitLod 1129 1134 Grad 1131 1132
-            1136:    7(fvec4) Load 1082(texel)
-            1137:    7(fvec4) FAdd 1136 1135
-                              Store 1082(texel) 1137
-            1138:         266 Load 268(s2DRectShadow)
-            1139:    7(fvec4) Load 197(c4)
-            1140:   52(fvec2) Load 874(dPdxy2)
-            1141:   52(fvec2) Load 874(dPdxy2)
-            1142:    6(float) CompositeExtract 1139 2
-            1143:    6(float) CompositeExtract 1139 3
-            1144:    7(fvec4) CompositeInsert 1143 1139 2
-            1145:    6(float) ImageSampleProjDrefExplicitLod 1138 1144 1142 Grad 1140 1141
-            1146:    174(ptr) AccessChain 1082(texel) 173
-            1147:    6(float) Load 1146
-            1148:    6(float) FAdd 1147 1145
-            1149:    174(ptr) AccessChain 1082(texel) 173
-                              Store 1149 1148
-            1150:         165 Load 167(s1DShadow)
-            1151:    7(fvec4) Load 197(c4)
-            1152:    6(float) Load 866(dPdxy1)
-            1153:    6(float) Load 866(dPdxy1)
-            1154:    6(float) CompositeExtract 1151 2
-            1155:    6(float) CompositeExtract 1151 3
-            1156:    7(fvec4) CompositeInsert 1155 1151 1
-            1157:    6(float) ImageSampleProjDrefExplicitLod 1150 1156 1154 Grad 1152 1153
-            1158:    174(ptr) AccessChain 1082(texel) 173
-            1159:    6(float) Load 1158
-            1160:    6(float) FAdd 1159 1157
-            1161:    174(ptr) AccessChain 1082(texel) 173
-                              Store 1161 1160
-            1162:         180 Load 182(s2DShadow)
-            1163:    7(fvec4) Load 197(c4)
-            1164:   52(fvec2) Load 874(dPdxy2)
-            1165:   52(fvec2) Load 874(dPdxy2)
-            1166:    6(float) CompositeExtract 1163 2
-            1167:    6(float) CompositeExtract 1163 3
-            1168:    7(fvec4) CompositeInsert 1167 1163 2
-            1169:    6(float) ImageSampleProjDrefExplicitLod 1162 1168 1166 Grad 1164 1165
-            1170:    174(ptr) AccessChain 1082(texel) 173
-            1171:    6(float) Load 1170
-            1172:    6(float) FAdd 1171 1169
-            1173:    174(ptr) AccessChain 1082(texel) 173
-                              Store 1173 1172
-            1174:    7(fvec4) Load 1082(texel)
-                              ReturnValue 1174
+            1112:    6(float) ImageSampleProjDrefExplicitLod 1106 1111 1109 Grad 1108 1108
+            1113:    174(ptr) AccessChain 1057(texel) 173
+            1114:    6(float) Load 1113
+            1115:    6(float) FAdd 1114 1112
+            1116:    174(ptr) AccessChain 1057(texel) 173
+                              Store 1116 1115
+            1117:         165 Load 167(s1DShadow)
+            1118:    7(fvec4) Load 197(c4)
+            1119:    6(float) Load 866(dPdxy1)
+            1120:    6(float) CompositeExtract 1118 2
+            1121:    6(float) CompositeExtract 1118 3
+            1122:    7(fvec4) CompositeInsert 1121 1118 1
+            1123:    6(float) ImageSampleProjDrefExplicitLod 1117 1122 1120 Grad 1119 1119
+            1124:    174(ptr) AccessChain 1057(texel) 173
+            1125:    6(float) Load 1124
+            1126:    6(float) FAdd 1125 1123
+            1127:    174(ptr) AccessChain 1057(texel) 173
+                              Store 1127 1126
+            1128:         180 Load 182(s2DShadow)
+            1129:    7(fvec4) Load 197(c4)
+            1130:   52(fvec2) Load 873(dPdxy2)
+            1131:    6(float) CompositeExtract 1129 2
+            1132:    6(float) CompositeExtract 1129 3
+            1133:    7(fvec4) CompositeInsert 1132 1129 2
+            1134:    6(float) ImageSampleProjDrefExplicitLod 1128 1133 1131 Grad 1130 1130
+            1135:    174(ptr) AccessChain 1057(texel) 173
+            1136:    6(float) Load 1135
+            1137:    6(float) FAdd 1136 1134
+            1138:    174(ptr) AccessChain 1057(texel) 173
+                              Store 1138 1137
+            1139:    7(fvec4) Load 1057(texel)
+                              ReturnValue 1139
                               FunctionEnd
 33(testTextureProjGradoffset():    7(fvec4) Function None 8
               34:             Label
-     1177(texel):     63(ptr) Variable Function
-                              Store 1177(texel) 120
-            1178:         122 Load 124(s1D)
-            1179:   52(fvec2) Load 138(c2)
-            1180:    6(float) Load 866(dPdxy1)
-            1181:    6(float) Load 866(dPdxy1)
-            1182:    7(fvec4) ImageSampleProjExplicitLod 1178 1179 Grad ConstOffset 1180 1181 445
-            1183:    7(fvec4) Load 1177(texel)
+     1142(texel):     63(ptr) Variable Function
+                              Store 1142(texel) 120
+            1143:         122 Load 124(s1D)
+            1144:   52(fvec2) Load 138(c2)
+            1145:    6(float) Load 866(dPdxy1)
+            1146:    7(fvec4) ImageSampleProjExplicitLod 1143 1144 Grad ConstOffset 1145 1145 445
+            1147:    7(fvec4) Load 1142(texel)
+            1148:    7(fvec4) FAdd 1147 1146
+                              Store 1142(texel) 1148
+            1149:         122 Load 124(s1D)
+            1150:    7(fvec4) Load 197(c4)
+            1151:    6(float) Load 866(dPdxy1)
+            1152:    6(float) CompositeExtract 1150 3
+            1153:    7(fvec4) CompositeInsert 1152 1150 1
+            1154:    7(fvec4) ImageSampleProjExplicitLod 1149 1153 Grad ConstOffset 1151 1151 445
+            1155:    7(fvec4) Load 1142(texel)
+            1156:    7(fvec4) FAdd 1155 1154
+                              Store 1142(texel) 1156
+            1157:         133 Load 135(s2D)
+            1158:  148(fvec3) Load 150(c3)
+            1159:   52(fvec2) Load 873(dPdxy2)
+            1160:    7(fvec4) ImageSampleProjExplicitLod 1157 1158 Grad ConstOffset 1159 1159 452
+            1161:    7(fvec4) Load 1142(texel)
+            1162:    7(fvec4) FAdd 1161 1160
+                              Store 1142(texel) 1162
+            1163:         133 Load 135(s2D)
+            1164:    7(fvec4) Load 197(c4)
+            1165:   52(fvec2) Load 873(dPdxy2)
+            1166:    6(float) CompositeExtract 1164 3
+            1167:    7(fvec4) CompositeInsert 1166 1164 2
+            1168:    7(fvec4) ImageSampleProjExplicitLod 1163 1167 Grad ConstOffset 1165 1165 452
+            1169:    7(fvec4) Load 1142(texel)
+            1170:    7(fvec4) FAdd 1169 1168
+                              Store 1142(texel) 1170
+            1171:         257 Load 259(s2DRect)
+            1172:  148(fvec3) Load 150(c3)
+            1173:   52(fvec2) Load 873(dPdxy2)
+            1174:    7(fvec4) ImageSampleProjExplicitLod 1171 1172 Grad ConstOffset 1173 1173 452
+            1175:    7(fvec4) Load 1142(texel)
+            1176:    7(fvec4) FAdd 1175 1174
+                              Store 1142(texel) 1176
+            1177:         257 Load 259(s2DRect)
+            1178:    7(fvec4) Load 197(c4)
+            1179:   52(fvec2) Load 873(dPdxy2)
+            1180:    6(float) CompositeExtract 1178 3
+            1181:    7(fvec4) CompositeInsert 1180 1178 2
+            1182:    7(fvec4) ImageSampleProjExplicitLod 1177 1181 Grad ConstOffset 1179 1179 452
+            1183:    7(fvec4) Load 1142(texel)
             1184:    7(fvec4) FAdd 1183 1182
-                              Store 1177(texel) 1184
-            1185:         122 Load 124(s1D)
+                              Store 1142(texel) 1184
+            1185:         266 Load 268(s2DRectShadow)
             1186:    7(fvec4) Load 197(c4)
-            1187:    6(float) Load 866(dPdxy1)
-            1188:    6(float) Load 866(dPdxy1)
+            1187:   52(fvec2) Load 873(dPdxy2)
+            1188:    6(float) CompositeExtract 1186 2
             1189:    6(float) CompositeExtract 1186 3
-            1190:    7(fvec4) CompositeInsert 1189 1186 1
-            1191:    7(fvec4) ImageSampleProjExplicitLod 1185 1190 Grad ConstOffset 1187 1188 445
-            1192:    7(fvec4) Load 1177(texel)
-            1193:    7(fvec4) FAdd 1192 1191
-                              Store 1177(texel) 1193
-            1194:         133 Load 135(s2D)
-            1195:  148(fvec3) Load 150(c3)
-            1196:   52(fvec2) Load 874(dPdxy2)
-            1197:   52(fvec2) Load 874(dPdxy2)
-            1198:    7(fvec4) ImageSampleProjExplicitLod 1194 1195 Grad ConstOffset 1196 1197 452
-            1199:    7(fvec4) Load 1177(texel)
-            1200:    7(fvec4) FAdd 1199 1198
-                              Store 1177(texel) 1200
-            1201:         133 Load 135(s2D)
-            1202:    7(fvec4) Load 197(c4)
-            1203:   52(fvec2) Load 874(dPdxy2)
-            1204:   52(fvec2) Load 874(dPdxy2)
-            1205:    6(float) CompositeExtract 1202 3
-            1206:    7(fvec4) CompositeInsert 1205 1202 2
-            1207:    7(fvec4) ImageSampleProjExplicitLod 1201 1206 Grad ConstOffset 1203 1204 452
-            1208:    7(fvec4) Load 1177(texel)
-            1209:    7(fvec4) FAdd 1208 1207
-                              Store 1177(texel) 1209
-            1210:         257 Load 259(s2DRect)
-            1211:  148(fvec3) Load 150(c3)
-            1212:   52(fvec2) Load 874(dPdxy2)
-            1213:   52(fvec2) Load 874(dPdxy2)
-            1214:    7(fvec4) ImageSampleProjExplicitLod 1210 1211 Grad ConstOffset 1212 1213 452
-            1215:    7(fvec4) Load 1177(texel)
-            1216:    7(fvec4) FAdd 1215 1214
-                              Store 1177(texel) 1216
-            1217:         257 Load 259(s2DRect)
-            1218:    7(fvec4) Load 197(c4)
-            1219:   52(fvec2) Load 874(dPdxy2)
-            1220:   52(fvec2) Load 874(dPdxy2)
-            1221:    6(float) CompositeExtract 1218 3
-            1222:    7(fvec4) CompositeInsert 1221 1218 2
-            1223:    7(fvec4) ImageSampleProjExplicitLod 1217 1222 Grad ConstOffset 1219 1220 452
-            1224:    7(fvec4) Load 1177(texel)
-            1225:    7(fvec4) FAdd 1224 1223
-                              Store 1177(texel) 1225
-            1226:         266 Load 268(s2DRectShadow)
-            1227:    7(fvec4) Load 197(c4)
-            1228:   52(fvec2) Load 874(dPdxy2)
-            1229:   52(fvec2) Load 874(dPdxy2)
-            1230:    6(float) CompositeExtract 1227 2
-            1231:    6(float) CompositeExtract 1227 3
-            1232:    7(fvec4) CompositeInsert 1231 1227 2
-            1233:    6(float) ImageSampleProjDrefExplicitLod 1226 1232 1230 Grad ConstOffset 1228 1229 452
-            1234:    174(ptr) AccessChain 1177(texel) 173
-            1235:    6(float) Load 1234
-            1236:    6(float) FAdd 1235 1233
-            1237:    174(ptr) AccessChain 1177(texel) 173
-                              Store 1237 1236
-            1238:         144 Load 146(s3D)
-            1239:    7(fvec4) Load 197(c4)
-            1240:  148(fvec3) Load 882(dPdxy3)
-            1241:  148(fvec3) Load 882(dPdxy3)
-            1242:    7(fvec4) ImageSampleProjExplicitLod 1238 1239 Grad ConstOffset 1240 1241 459
-            1243:    7(fvec4) Load 1177(texel)
-            1244:    7(fvec4) FAdd 1243 1242
-                              Store 1177(texel) 1244
-            1245:         165 Load 167(s1DShadow)
-            1246:    7(fvec4) Load 197(c4)
-            1247:    6(float) Load 866(dPdxy1)
-            1248:    6(float) Load 866(dPdxy1)
-            1249:    6(float) CompositeExtract 1246 2
-            1250:    6(float) CompositeExtract 1246 3
-            1251:    7(fvec4) CompositeInsert 1250 1246 1
-            1252:    6(float) ImageSampleProjDrefExplicitLod 1245 1251 1249 Grad ConstOffset 1247 1248 445
-            1253:    174(ptr) AccessChain 1177(texel) 173
-            1254:    6(float) Load 1253
-            1255:    6(float) FAdd 1254 1252
-            1256:    174(ptr) AccessChain 1177(texel) 173
-                              Store 1256 1255
-            1257:         180 Load 182(s2DShadow)
-            1258:    7(fvec4) Load 197(c4)
-            1259:   52(fvec2) Load 874(dPdxy2)
-            1260:   52(fvec2) Load 874(dPdxy2)
-            1261:    6(float) CompositeExtract 1258 2
-            1262:    6(float) CompositeExtract 1258 3
-            1263:    7(fvec4) CompositeInsert 1262 1258 2
-            1264:    6(float) ImageSampleProjDrefExplicitLod 1257 1263 1261 Grad ConstOffset 1259 1260 452
-            1265:    174(ptr) AccessChain 1177(texel) 173
-            1266:    6(float) Load 1265
-            1267:    6(float) FAdd 1266 1264
-            1268:    174(ptr) AccessChain 1177(texel) 173
-                              Store 1268 1267
-            1269:    7(fvec4) Load 1177(texel)
-                              ReturnValue 1269
+            1190:    7(fvec4) CompositeInsert 1189 1186 2
+            1191:    6(float) ImageSampleProjDrefExplicitLod 1185 1190 1188 Grad ConstOffset 1187 1187 452
+            1192:    174(ptr) AccessChain 1142(texel) 173
+            1193:    6(float) Load 1192
+            1194:    6(float) FAdd 1193 1191
+            1195:    174(ptr) AccessChain 1142(texel) 173
+                              Store 1195 1194
+            1196:         144 Load 146(s3D)
+            1197:    7(fvec4) Load 197(c4)
+            1198:  148(fvec3) Load 880(dPdxy3)
+            1199:    7(fvec4) ImageSampleProjExplicitLod 1196 1197 Grad ConstOffset 1198 1198 459
+            1200:    7(fvec4) Load 1142(texel)
+            1201:    7(fvec4) FAdd 1200 1199
+                              Store 1142(texel) 1201
+            1202:         165 Load 167(s1DShadow)
+            1203:    7(fvec4) Load 197(c4)
+            1204:    6(float) Load 866(dPdxy1)
+            1205:    6(float) CompositeExtract 1203 2
+            1206:    6(float) CompositeExtract 1203 3
+            1207:    7(fvec4) CompositeInsert 1206 1203 1
+            1208:    6(float) ImageSampleProjDrefExplicitLod 1202 1207 1205 Grad ConstOffset 1204 1204 445
+            1209:    174(ptr) AccessChain 1142(texel) 173
+            1210:    6(float) Load 1209
+            1211:    6(float) FAdd 1210 1208
+            1212:    174(ptr) AccessChain 1142(texel) 173
+                              Store 1212 1211
+            1213:         180 Load 182(s2DShadow)
+            1214:    7(fvec4) Load 197(c4)
+            1215:   52(fvec2) Load 873(dPdxy2)
+            1216:    6(float) CompositeExtract 1214 2
+            1217:    6(float) CompositeExtract 1214 3
+            1218:    7(fvec4) CompositeInsert 1217 1214 2
+            1219:    6(float) ImageSampleProjDrefExplicitLod 1213 1218 1216 Grad ConstOffset 1215 1215 452
+            1220:    174(ptr) AccessChain 1142(texel) 173
+            1221:    6(float) Load 1220
+            1222:    6(float) FAdd 1221 1219
+            1223:    174(ptr) AccessChain 1142(texel) 173
+                              Store 1223 1222
+            1224:    7(fvec4) Load 1142(texel)
+                              ReturnValue 1224
                               FunctionEnd
 35(testTextureGather():    7(fvec4) Function None 8
               36:             Label
-     1272(texel):     63(ptr) Variable Function
-                              Store 1272(texel) 120
-            1273:         133 Load 135(s2D)
-            1274:   52(fvec2) Load 138(c2)
-            1276:    7(fvec4) ImageGather 1273 1274 1275
-            1277:    7(fvec4) Load 1272(texel)
-            1278:    7(fvec4) FAdd 1277 1276
-                              Store 1272(texel) 1278
-            1279:         215 Load 217(s2DArray)
-            1280:  148(fvec3) Load 150(c3)
-            1281:    7(fvec4) ImageGather 1279 1280 1275
-            1282:    7(fvec4) Load 1272(texel)
+     1227(texel):     63(ptr) Variable Function
+                              Store 1227(texel) 120
+            1228:         133 Load 135(s2D)
+            1229:   52(fvec2) Load 138(c2)
+            1231:    7(fvec4) ImageGather 1228 1229 1230
+            1232:    7(fvec4) Load 1227(texel)
+            1233:    7(fvec4) FAdd 1232 1231
+                              Store 1227(texel) 1233
+            1234:         215 Load 217(s2DArray)
+            1235:  148(fvec3) Load 150(c3)
+            1236:    7(fvec4) ImageGather 1234 1235 1230
+            1237:    7(fvec4) Load 1227(texel)
+            1238:    7(fvec4) FAdd 1237 1236
+                              Store 1227(texel) 1238
+            1239:         156 Load 158(sCube)
+            1240:  148(fvec3) Load 150(c3)
+            1241:    7(fvec4) ImageGather 1239 1240 1230
+            1242:    7(fvec4) Load 1227(texel)
+            1243:    7(fvec4) FAdd 1242 1241
+                              Store 1227(texel) 1243
+            1244:         224 Load 226(sCubeArray)
+            1245:    7(fvec4) Load 197(c4)
+            1246:    7(fvec4) ImageGather 1244 1245 1230
+            1247:    7(fvec4) Load 1227(texel)
+            1248:    7(fvec4) FAdd 1247 1246
+                              Store 1227(texel) 1248
+            1249:         257 Load 259(s2DRect)
+            1250:   52(fvec2) Load 138(c2)
+            1251:    7(fvec4) ImageGather 1249 1250 1230
+            1252:    7(fvec4) Load 1227(texel)
+            1253:    7(fvec4) FAdd 1252 1251
+                              Store 1227(texel) 1253
+            1254:         180 Load 182(s2DShadow)
+            1255:   52(fvec2) Load 138(c2)
+            1256:    6(float) Load 283(compare)
+            1257:    7(fvec4) ImageDrefGather 1254 1255 1256
+            1258:    7(fvec4) Load 1227(texel)
+            1259:    7(fvec4) FAdd 1258 1257
+                              Store 1227(texel) 1259
+            1260:         245 Load 247(s2DArrayShadow)
+            1261:  148(fvec3) Load 150(c3)
+            1262:    6(float) Load 283(compare)
+            1263:    7(fvec4) ImageDrefGather 1260 1261 1262
+            1264:    7(fvec4) Load 1227(texel)
+            1265:    7(fvec4) FAdd 1264 1263
+                              Store 1227(texel) 1265
+            1266:         192 Load 194(sCubeShadow)
+            1267:  148(fvec3) Load 150(c3)
+            1268:    6(float) Load 283(compare)
+            1269:    7(fvec4) ImageDrefGather 1266 1267 1268
+            1270:    7(fvec4) Load 1227(texel)
+            1271:    7(fvec4) FAdd 1270 1269
+                              Store 1227(texel) 1271
+            1272:         278 Load 280(sCubeArrayShadow)
+            1273:    7(fvec4) Load 197(c4)
+            1274:    6(float) Load 283(compare)
+            1275:    7(fvec4) ImageDrefGather 1272 1273 1274
+            1276:    7(fvec4) Load 1227(texel)
+            1277:    7(fvec4) FAdd 1276 1275
+                              Store 1227(texel) 1277
+            1278:         266 Load 268(s2DRectShadow)
+            1279:   52(fvec2) Load 138(c2)
+            1280:    6(float) Load 283(compare)
+            1281:    7(fvec4) ImageDrefGather 1278 1279 1280
+            1282:    7(fvec4) Load 1227(texel)
             1283:    7(fvec4) FAdd 1282 1281
-                              Store 1272(texel) 1283
-            1284:         156 Load 158(sCube)
-            1285:  148(fvec3) Load 150(c3)
-            1286:    7(fvec4) ImageGather 1284 1285 1275
-            1287:    7(fvec4) Load 1272(texel)
-            1288:    7(fvec4) FAdd 1287 1286
-                              Store 1272(texel) 1288
-            1289:         224 Load 226(sCubeArray)
-            1290:    7(fvec4) Load 197(c4)
-            1291:    7(fvec4) ImageGather 1289 1290 1275
-            1292:    7(fvec4) Load 1272(texel)
-            1293:    7(fvec4) FAdd 1292 1291
-                              Store 1272(texel) 1293
-            1294:         257 Load 259(s2DRect)
-            1295:   52(fvec2) Load 138(c2)
-            1296:    7(fvec4) ImageGather 1294 1295 1275
-            1297:    7(fvec4) Load 1272(texel)
-            1298:    7(fvec4) FAdd 1297 1296
-                              Store 1272(texel) 1298
-            1299:         180 Load 182(s2DShadow)
-            1300:   52(fvec2) Load 138(c2)
-            1301:    6(float) Load 283(compare)
-            1302:    7(fvec4) ImageDrefGather 1299 1300 1301
-            1303:    7(fvec4) Load 1272(texel)
-            1304:    7(fvec4) FAdd 1303 1302
-                              Store 1272(texel) 1304
-            1305:         245 Load 247(s2DArrayShadow)
-            1306:  148(fvec3) Load 150(c3)
-            1307:    6(float) Load 283(compare)
-            1308:    7(fvec4) ImageDrefGather 1305 1306 1307
-            1309:    7(fvec4) Load 1272(texel)
-            1310:    7(fvec4) FAdd 1309 1308
-                              Store 1272(texel) 1310
-            1311:         192 Load 194(sCubeShadow)
-            1312:  148(fvec3) Load 150(c3)
-            1313:    6(float) Load 283(compare)
-            1314:    7(fvec4) ImageDrefGather 1311 1312 1313
-            1315:    7(fvec4) Load 1272(texel)
-            1316:    7(fvec4) FAdd 1315 1314
-                              Store 1272(texel) 1316
-            1317:         278 Load 280(sCubeArrayShadow)
-            1318:    7(fvec4) Load 197(c4)
-            1319:    6(float) Load 283(compare)
-            1320:    7(fvec4) ImageDrefGather 1317 1318 1319
-            1321:    7(fvec4) Load 1272(texel)
-            1322:    7(fvec4) FAdd 1321 1320
-                              Store 1272(texel) 1322
-            1323:         266 Load 268(s2DRectShadow)
-            1324:   52(fvec2) Load 138(c2)
-            1325:    6(float) Load 283(compare)
-            1326:    7(fvec4) ImageDrefGather 1323 1324 1325
-            1327:    7(fvec4) Load 1272(texel)
-            1328:    7(fvec4) FAdd 1327 1326
-                              Store 1272(texel) 1328
-            1329:    7(fvec4) Load 1272(texel)
-                              ReturnValue 1329
+                              Store 1227(texel) 1283
+            1284:    7(fvec4) Load 1227(texel)
+                              ReturnValue 1284
                               FunctionEnd
 37(testTextureGatherOffset():    7(fvec4) Function None 8
               38:             Label
-     1332(texel):     63(ptr) Variable Function
-                              Store 1332(texel) 120
-            1333:         133 Load 135(s2D)
-            1334:   52(fvec2) Load 138(c2)
-            1335:    7(fvec4) ImageGather 1333 1334 1275 ConstOffset 452
-            1336:    7(fvec4) Load 1332(texel)
-            1337:    7(fvec4) FAdd 1336 1335
-                              Store 1332(texel) 1337
-            1338:         215 Load 217(s2DArray)
-            1339:  148(fvec3) Load 150(c3)
-            1340:    7(fvec4) ImageGather 1338 1339 1275 ConstOffset 452
-            1341:    7(fvec4) Load 1332(texel)
-            1342:    7(fvec4) FAdd 1341 1340
-                              Store 1332(texel) 1342
-            1343:         257 Load 259(s2DRect)
-            1344:   52(fvec2) Load 138(c2)
-            1345:    7(fvec4) ImageGather 1343 1344 1275 ConstOffset 452
-            1346:    7(fvec4) Load 1332(texel)
-            1347:    7(fvec4) FAdd 1346 1345
-                              Store 1332(texel) 1347
-            1348:         180 Load 182(s2DShadow)
-            1349:   52(fvec2) Load 138(c2)
-            1350:    6(float) Load 283(compare)
-            1351:    7(fvec4) ImageDrefGather 1348 1349 1350 ConstOffset 452
-            1352:    7(fvec4) Load 1332(texel)
-            1353:    7(fvec4) FAdd 1352 1351
-                              Store 1332(texel) 1353
-            1354:         245 Load 247(s2DArrayShadow)
-            1355:  148(fvec3) Load 150(c3)
-            1356:    6(float) Load 283(compare)
-            1357:    7(fvec4) ImageDrefGather 1354 1355 1356 ConstOffset 452
-            1358:    7(fvec4) Load 1332(texel)
-            1359:    7(fvec4) FAdd 1358 1357
-                              Store 1332(texel) 1359
-            1360:         266 Load 268(s2DRectShadow)
-            1361:   52(fvec2) Load 138(c2)
-            1362:    6(float) Load 283(compare)
-            1363:    7(fvec4) ImageDrefGather 1360 1361 1362 ConstOffset 452
-            1364:    7(fvec4) Load 1332(texel)
-            1365:    7(fvec4) FAdd 1364 1363
-                              Store 1332(texel) 1365
-            1366:    7(fvec4) Load 1332(texel)
-                              ReturnValue 1366
+     1287(texel):     63(ptr) Variable Function
+                              Store 1287(texel) 120
+            1288:         133 Load 135(s2D)
+            1289:   52(fvec2) Load 138(c2)
+            1290:    7(fvec4) ImageGather 1288 1289 1230 ConstOffset 452
+            1291:    7(fvec4) Load 1287(texel)
+            1292:    7(fvec4) FAdd 1291 1290
+                              Store 1287(texel) 1292
+            1293:         215 Load 217(s2DArray)
+            1294:  148(fvec3) Load 150(c3)
+            1295:    7(fvec4) ImageGather 1293 1294 1230 ConstOffset 452
+            1296:    7(fvec4) Load 1287(texel)
+            1297:    7(fvec4) FAdd 1296 1295
+                              Store 1287(texel) 1297
+            1298:         257 Load 259(s2DRect)
+            1299:   52(fvec2) Load 138(c2)
+            1300:    7(fvec4) ImageGather 1298 1299 1230 ConstOffset 452
+            1301:    7(fvec4) Load 1287(texel)
+            1302:    7(fvec4) FAdd 1301 1300
+                              Store 1287(texel) 1302
+            1303:         180 Load 182(s2DShadow)
+            1304:   52(fvec2) Load 138(c2)
+            1305:    6(float) Load 283(compare)
+            1306:    7(fvec4) ImageDrefGather 1303 1304 1305 ConstOffset 452
+            1307:    7(fvec4) Load 1287(texel)
+            1308:    7(fvec4) FAdd 1307 1306
+                              Store 1287(texel) 1308
+            1309:         245 Load 247(s2DArrayShadow)
+            1310:  148(fvec3) Load 150(c3)
+            1311:    6(float) Load 283(compare)
+            1312:    7(fvec4) ImageDrefGather 1309 1310 1311 ConstOffset 452
+            1313:    7(fvec4) Load 1287(texel)
+            1314:    7(fvec4) FAdd 1313 1312
+                              Store 1287(texel) 1314
+            1315:         266 Load 268(s2DRectShadow)
+            1316:   52(fvec2) Load 138(c2)
+            1317:    6(float) Load 283(compare)
+            1318:    7(fvec4) ImageDrefGather 1315 1316 1317 ConstOffset 452
+            1319:    7(fvec4) Load 1287(texel)
+            1320:    7(fvec4) FAdd 1319 1318
+                              Store 1287(texel) 1320
+            1321:    7(fvec4) Load 1287(texel)
+                              ReturnValue 1321
                               FunctionEnd
 39(testTextureGatherOffsets():    7(fvec4) Function None 8
               40:             Label
-     1369(texel):     63(ptr) Variable Function
-                              Store 1369(texel) 120
-            1370:         133 Load 135(s2D)
-            1371:   52(fvec2) Load 138(c2)
-            1375:    7(fvec4) ImageGather 1370 1371 1275 ConstOffsets 1374
-            1376:    7(fvec4) Load 1369(texel)
-            1377:    7(fvec4) FAdd 1376 1375
-                              Store 1369(texel) 1377
-            1378:         215 Load 217(s2DArray)
-            1379:  148(fvec3) Load 150(c3)
-            1380:    7(fvec4) ImageGather 1378 1379 1275 ConstOffsets 1374
-            1381:    7(fvec4) Load 1369(texel)
-            1382:    7(fvec4) FAdd 1381 1380
-                              Store 1369(texel) 1382
-            1383:         257 Load 259(s2DRect)
-            1384:   52(fvec2) Load 138(c2)
-            1385:    7(fvec4) ImageGather 1383 1384 1275 ConstOffsets 1374
-            1386:    7(fvec4) Load 1369(texel)
-            1387:    7(fvec4) FAdd 1386 1385
-                              Store 1369(texel) 1387
-            1388:         180 Load 182(s2DShadow)
-            1389:   52(fvec2) Load 138(c2)
-            1390:    6(float) Load 283(compare)
-            1391:    7(fvec4) ImageDrefGather 1388 1389 1390 ConstOffsets 1374
-            1392:    7(fvec4) Load 1369(texel)
-            1393:    7(fvec4) FAdd 1392 1391
-                              Store 1369(texel) 1393
-            1394:         245 Load 247(s2DArrayShadow)
-            1395:  148(fvec3) Load 150(c3)
-            1396:    6(float) Load 283(compare)
-            1397:    7(fvec4) ImageDrefGather 1394 1395 1396 ConstOffsets 1374
-            1398:    7(fvec4) Load 1369(texel)
-            1399:    7(fvec4) FAdd 1398 1397
-                              Store 1369(texel) 1399
-            1400:         266 Load 268(s2DRectShadow)
-            1401:   52(fvec2) Load 138(c2)
-            1402:    6(float) Load 283(compare)
-            1403:    7(fvec4) ImageDrefGather 1400 1401 1402 ConstOffsets 1374
-            1404:    7(fvec4) Load 1369(texel)
-            1405:    7(fvec4) FAdd 1404 1403
-                              Store 1369(texel) 1405
-            1406:    7(fvec4) Load 1369(texel)
-                              ReturnValue 1406
+     1324(texel):     63(ptr) Variable Function
+                              Store 1324(texel) 120
+            1325:         133 Load 135(s2D)
+            1326:   52(fvec2) Load 138(c2)
+            1330:    7(fvec4) ImageGather 1325 1326 1230 ConstOffsets 1329
+            1331:    7(fvec4) Load 1324(texel)
+            1332:    7(fvec4) FAdd 1331 1330
+                              Store 1324(texel) 1332
+            1333:         215 Load 217(s2DArray)
+            1334:  148(fvec3) Load 150(c3)
+            1335:    7(fvec4) ImageGather 1333 1334 1230 ConstOffsets 1329
+            1336:    7(fvec4) Load 1324(texel)
+            1337:    7(fvec4) FAdd 1336 1335
+                              Store 1324(texel) 1337
+            1338:         257 Load 259(s2DRect)
+            1339:   52(fvec2) Load 138(c2)
+            1340:    7(fvec4) ImageGather 1338 1339 1230 ConstOffsets 1329
+            1341:    7(fvec4) Load 1324(texel)
+            1342:    7(fvec4) FAdd 1341 1340
+                              Store 1324(texel) 1342
+            1343:         180 Load 182(s2DShadow)
+            1344:   52(fvec2) Load 138(c2)
+            1345:    6(float) Load 283(compare)
+            1346:    7(fvec4) ImageDrefGather 1343 1344 1345 ConstOffsets 1329
+            1347:    7(fvec4) Load 1324(texel)
+            1348:    7(fvec4) FAdd 1347 1346
+                              Store 1324(texel) 1348
+            1349:         245 Load 247(s2DArrayShadow)
+            1350:  148(fvec3) Load 150(c3)
+            1351:    6(float) Load 283(compare)
+            1352:    7(fvec4) ImageDrefGather 1349 1350 1351 ConstOffsets 1329
+            1353:    7(fvec4) Load 1324(texel)
+            1354:    7(fvec4) FAdd 1353 1352
+                              Store 1324(texel) 1354
+            1355:         266 Load 268(s2DRectShadow)
+            1356:   52(fvec2) Load 138(c2)
+            1357:    6(float) Load 283(compare)
+            1358:    7(fvec4) ImageDrefGather 1355 1356 1357 ConstOffsets 1329
+            1359:    7(fvec4) Load 1324(texel)
+            1360:    7(fvec4) FAdd 1359 1358
+                              Store 1324(texel) 1360
+            1361:    7(fvec4) Load 1324(texel)
+                              ReturnValue 1361
                               FunctionEnd
 41(testTextureGatherLod():    7(fvec4) Function None 8
               42:             Label
-     1409(texel):     63(ptr) Variable Function
-                              Store 1409(texel) 120
-            1410:         133 Load 135(s2D)
-            1411:   52(fvec2) Load 138(c2)
-            1412:    6(float) Load 371(lod)
-            1413:    7(fvec4) ImageGather 1410 1411 1275 Lod 1412
-            1414:    7(fvec4) Load 1409(texel)
-            1415:    7(fvec4) FAdd 1414 1413
-                              Store 1409(texel) 1415
-            1416:         215 Load 217(s2DArray)
-            1417:  148(fvec3) Load 150(c3)
-            1418:    6(float) Load 371(lod)
-            1419:    7(fvec4) ImageGather 1416 1417 1275 Lod 1418
-            1420:    7(fvec4) Load 1409(texel)
-            1421:    7(fvec4) FAdd 1420 1419
-                              Store 1409(texel) 1421
-            1422:         156 Load 158(sCube)
-            1423:  148(fvec3) Load 150(c3)
-            1424:    6(float) Load 371(lod)
-            1425:    7(fvec4) ImageGather 1422 1423 1275 Lod 1424
-            1426:    7(fvec4) Load 1409(texel)
-            1427:    7(fvec4) FAdd 1426 1425
-                              Store 1409(texel) 1427
-            1428:         224 Load 226(sCubeArray)
-            1429:    7(fvec4) Load 197(c4)
-            1430:    6(float) Load 371(lod)
-            1431:    7(fvec4) ImageGather 1428 1429 1275 Lod 1430
-            1432:    7(fvec4) Load 1409(texel)
-            1433:    7(fvec4) FAdd 1432 1431
-                              Store 1409(texel) 1433
-            1434:    7(fvec4) Load 1409(texel)
-                              ReturnValue 1434
+     1364(texel):     63(ptr) Variable Function
+                              Store 1364(texel) 120
+            1365:         133 Load 135(s2D)
+            1366:   52(fvec2) Load 138(c2)
+            1367:    6(float) Load 371(lod)
+            1368:    7(fvec4) ImageGather 1365 1366 1230 Lod 1367
+            1369:    7(fvec4) Load 1364(texel)
+            1370:    7(fvec4) FAdd 1369 1368
+                              Store 1364(texel) 1370
+            1371:         215 Load 217(s2DArray)
+            1372:  148(fvec3) Load 150(c3)
+            1373:    6(float) Load 371(lod)
+            1374:    7(fvec4) ImageGather 1371 1372 1230 Lod 1373
+            1375:    7(fvec4) Load 1364(texel)
+            1376:    7(fvec4) FAdd 1375 1374
+                              Store 1364(texel) 1376
+            1377:         156 Load 158(sCube)
+            1378:  148(fvec3) Load 150(c3)
+            1379:    6(float) Load 371(lod)
+            1380:    7(fvec4) ImageGather 1377 1378 1230 Lod 1379
+            1381:    7(fvec4) Load 1364(texel)
+            1382:    7(fvec4) FAdd 1381 1380
+                              Store 1364(texel) 1382
+            1383:         224 Load 226(sCubeArray)
+            1384:    7(fvec4) Load 197(c4)
+            1385:    6(float) Load 371(lod)
+            1386:    7(fvec4) ImageGather 1383 1384 1230 Lod 1385
+            1387:    7(fvec4) Load 1364(texel)
+            1388:    7(fvec4) FAdd 1387 1386
+                              Store 1364(texel) 1388
+            1389:    7(fvec4) Load 1364(texel)
+                              ReturnValue 1389
                               FunctionEnd
 43(testTextureGatherLodOffset():    7(fvec4) Function None 8
               44:             Label
-     1437(texel):     63(ptr) Variable Function
-                              Store 1437(texel) 120
-            1438:         133 Load 135(s2D)
-            1439:   52(fvec2) Load 138(c2)
-            1440:    6(float) Load 371(lod)
-            1441:    7(fvec4) ImageGather 1438 1439 1275 Lod ConstOffset 1440 452
-            1442:    7(fvec4) Load 1437(texel)
-            1443:    7(fvec4) FAdd 1442 1441
-                              Store 1437(texel) 1443
-            1444:         215 Load 217(s2DArray)
-            1445:  148(fvec3) Load 150(c3)
-            1446:    6(float) Load 371(lod)
-            1447:    7(fvec4) ImageGather 1444 1445 1275 Lod ConstOffset 1446 452
-            1448:    7(fvec4) Load 1437(texel)
-            1449:    7(fvec4) FAdd 1448 1447
-                              Store 1437(texel) 1449
-            1450:    7(fvec4) Load 1437(texel)
-                              ReturnValue 1450
+     1392(texel):     63(ptr) Variable Function
+                              Store 1392(texel) 120
+            1393:         133 Load 135(s2D)
+            1394:   52(fvec2) Load 138(c2)
+            1395:    6(float) Load 371(lod)
+            1396:    7(fvec4) ImageGather 1393 1394 1230 Lod ConstOffset 1395 452
+            1397:    7(fvec4) Load 1392(texel)
+            1398:    7(fvec4) FAdd 1397 1396
+                              Store 1392(texel) 1398
+            1399:         215 Load 217(s2DArray)
+            1400:  148(fvec3) Load 150(c3)
+            1401:    6(float) Load 371(lod)
+            1402:    7(fvec4) ImageGather 1399 1400 1230 Lod ConstOffset 1401 452
+            1403:    7(fvec4) Load 1392(texel)
+            1404:    7(fvec4) FAdd 1403 1402
+                              Store 1392(texel) 1404
+            1405:    7(fvec4) Load 1392(texel)
+                              ReturnValue 1405
                               FunctionEnd
 45(testTextureGatherLodOffsets():    7(fvec4) Function None 8
               46:             Label
-     1453(texel):     63(ptr) Variable Function
-                              Store 1453(texel) 120
-            1454:         133 Load 135(s2D)
-            1455:   52(fvec2) Load 138(c2)
-            1456:    6(float) Load 371(lod)
-            1457:    7(fvec4) ImageGather 1454 1455 1275 Lod ConstOffsets 1456 1374
-            1458:    7(fvec4) Load 1453(texel)
-            1459:    7(fvec4) FAdd 1458 1457
-                              Store 1453(texel) 1459
-            1460:         215 Load 217(s2DArray)
-            1461:  148(fvec3) Load 150(c3)
-            1462:    6(float) Load 371(lod)
-            1463:    7(fvec4) ImageGather 1460 1461 1275 Lod ConstOffsets 1462 1374
-            1464:    7(fvec4) Load 1453(texel)
-            1465:    7(fvec4) FAdd 1464 1463
-                              Store 1453(texel) 1465
-            1466:    7(fvec4) Load 1453(texel)
-                              ReturnValue 1466
+     1408(texel):     63(ptr) Variable Function
+                              Store 1408(texel) 120
+            1409:         133 Load 135(s2D)
+            1410:   52(fvec2) Load 138(c2)
+            1411:    6(float) Load 371(lod)
+            1412:    7(fvec4) ImageGather 1409 1410 1230 Lod ConstOffsets 1411 1329
+            1413:    7(fvec4) Load 1408(texel)
+            1414:    7(fvec4) FAdd 1413 1412
+                              Store 1408(texel) 1414
+            1415:         215 Load 217(s2DArray)
+            1416:  148(fvec3) Load 150(c3)
+            1417:    6(float) Load 371(lod)
+            1418:    7(fvec4) ImageGather 1415 1416 1230 Lod ConstOffsets 1417 1329
+            1419:    7(fvec4) Load 1408(texel)
+            1420:    7(fvec4) FAdd 1419 1418
+                              Store 1408(texel) 1420
+            1421:    7(fvec4) Load 1408(texel)
+                              ReturnValue 1421
                               FunctionEnd
 50(testTextureSize():   48(ivec4) Function None 49
               51:             Label
-      1470(size):   1469(ptr) Variable Function
-                              Store 1470(size) 1471
-            1472:         122 Load 124(s1D)
-            1473:    6(float) Load 371(lod)
-            1474:     47(int) ConvertFToS 1473
-            1475:         121 Image 1472
-            1476:     47(int) ImageQuerySizeLod 1475 1474
-            1478:   1477(ptr) AccessChain 1470(size) 173
-            1479:     47(int) Load 1478
-            1480:     47(int) IAdd 1479 1476
-            1481:   1477(ptr) AccessChain 1470(size) 173
-                              Store 1481 1480
-            1482:         133 Load 135(s2D)
-            1483:    6(float) Load 371(lod)
-            1484:     47(int) ConvertFToS 1483
-            1485:         132 Image 1482
-            1486:  451(ivec2) ImageQuerySizeLod 1485 1484
-            1487:   48(ivec4) Load 1470(size)
-            1488:  451(ivec2) VectorShuffle 1487 1487 0 1
-            1489:  451(ivec2) IAdd 1488 1486
-            1490:   1477(ptr) AccessChain 1470(size) 173
-            1491:     47(int) CompositeExtract 1489 0
-                              Store 1490 1491
-            1493:   1477(ptr) AccessChain 1470(size) 1492
-            1494:     47(int) CompositeExtract 1489 1
-                              Store 1493 1494
-            1495:         144 Load 146(s3D)
-            1496:    6(float) Load 371(lod)
-            1497:     47(int) ConvertFToS 1496
-            1498:         143 Image 1495
-            1499:  458(ivec3) ImageQuerySizeLod 1498 1497
-            1500:   48(ivec4) Load 1470(size)
-            1501:  458(ivec3) VectorShuffle 1500 1500 0 1 2
-            1502:  458(ivec3) IAdd 1501 1499
-            1503:   1477(ptr) AccessChain 1470(size) 173
-            1504:     47(int) CompositeExtract 1502 0
-                              Store 1503 1504
-            1505:   1477(ptr) AccessChain 1470(size) 1492
-            1506:     47(int) CompositeExtract 1502 1
-                              Store 1505 1506
-            1508:   1477(ptr) AccessChain 1470(size) 1507
-            1509:     47(int) CompositeExtract 1502 2
+      1425(size):   1424(ptr) Variable Function
+                              Store 1425(size) 1426
+            1427:         122 Load 124(s1D)
+            1428:    6(float) Load 371(lod)
+            1429:     47(int) ConvertFToS 1428
+            1430:         121 Image 1427
+            1431:     47(int) ImageQuerySizeLod 1430 1429
+            1433:   1432(ptr) AccessChain 1425(size) 173
+            1434:     47(int) Load 1433
+            1435:     47(int) IAdd 1434 1431
+            1436:   1432(ptr) AccessChain 1425(size) 173
+                              Store 1436 1435
+            1437:         133 Load 135(s2D)
+            1438:    6(float) Load 371(lod)
+            1439:     47(int) ConvertFToS 1438
+            1440:         132 Image 1437
+            1441:  451(ivec2) ImageQuerySizeLod 1440 1439
+            1442:   48(ivec4) Load 1425(size)
+            1443:  451(ivec2) VectorShuffle 1442 1442 0 1
+            1444:  451(ivec2) IAdd 1443 1441
+            1445:   1432(ptr) AccessChain 1425(size) 173
+            1446:     47(int) CompositeExtract 1444 0
+                              Store 1445 1446
+            1448:   1432(ptr) AccessChain 1425(size) 1447
+            1449:     47(int) CompositeExtract 1444 1
+                              Store 1448 1449
+            1450:         144 Load 146(s3D)
+            1451:    6(float) Load 371(lod)
+            1452:     47(int) ConvertFToS 1451
+            1453:         143 Image 1450
+            1454:  458(ivec3) ImageQuerySizeLod 1453 1452
+            1455:   48(ivec4) Load 1425(size)
+            1456:  458(ivec3) VectorShuffle 1455 1455 0 1 2
+            1457:  458(ivec3) IAdd 1456 1454
+            1458:   1432(ptr) AccessChain 1425(size) 173
+            1459:     47(int) CompositeExtract 1457 0
+                              Store 1458 1459
+            1460:   1432(ptr) AccessChain 1425(size) 1447
+            1461:     47(int) CompositeExtract 1457 1
+                              Store 1460 1461
+            1463:   1432(ptr) AccessChain 1425(size) 1462
+            1464:     47(int) CompositeExtract 1457 2
+                              Store 1463 1464
+            1465:         156 Load 158(sCube)
+            1466:    6(float) Load 371(lod)
+            1467:     47(int) ConvertFToS 1466
+            1468:         155 Image 1465
+            1469:  451(ivec2) ImageQuerySizeLod 1468 1467
+            1470:   48(ivec4) Load 1425(size)
+            1471:  451(ivec2) VectorShuffle 1470 1470 0 1
+            1472:  451(ivec2) IAdd 1471 1469
+            1473:   1432(ptr) AccessChain 1425(size) 173
+            1474:     47(int) CompositeExtract 1472 0
+                              Store 1473 1474
+            1475:   1432(ptr) AccessChain 1425(size) 1447
+            1476:     47(int) CompositeExtract 1472 1
+                              Store 1475 1476
+            1477:         165 Load 167(s1DShadow)
+            1478:    6(float) Load 371(lod)
+            1479:     47(int) ConvertFToS 1478
+            1480:         164 Image 1477
+            1481:     47(int) ImageQuerySizeLod 1480 1479
+            1482:   1432(ptr) AccessChain 1425(size) 173
+            1483:     47(int) Load 1482
+            1484:     47(int) IAdd 1483 1481
+            1485:   1432(ptr) AccessChain 1425(size) 173
+                              Store 1485 1484
+            1486:         180 Load 182(s2DShadow)
+            1487:    6(float) Load 371(lod)
+            1488:     47(int) ConvertFToS 1487
+            1489:         179 Image 1486
+            1490:  451(ivec2) ImageQuerySizeLod 1489 1488
+            1491:   48(ivec4) Load 1425(size)
+            1492:  451(ivec2) VectorShuffle 1491 1491 0 1
+            1493:  451(ivec2) IAdd 1492 1490
+            1494:   1432(ptr) AccessChain 1425(size) 173
+            1495:     47(int) CompositeExtract 1493 0
+                              Store 1494 1495
+            1496:   1432(ptr) AccessChain 1425(size) 1447
+            1497:     47(int) CompositeExtract 1493 1
+                              Store 1496 1497
+            1498:         192 Load 194(sCubeShadow)
+            1499:    6(float) Load 371(lod)
+            1500:     47(int) ConvertFToS 1499
+            1501:         191 Image 1498
+            1502:  451(ivec2) ImageQuerySizeLod 1501 1500
+            1503:   48(ivec4) Load 1425(size)
+            1504:  451(ivec2) VectorShuffle 1503 1503 0 1
+            1505:  451(ivec2) IAdd 1504 1502
+            1506:   1432(ptr) AccessChain 1425(size) 173
+            1507:     47(int) CompositeExtract 1505 0
+                              Store 1506 1507
+            1508:   1432(ptr) AccessChain 1425(size) 1447
+            1509:     47(int) CompositeExtract 1505 1
                               Store 1508 1509
-            1510:         156 Load 158(sCube)
+            1510:         224 Load 226(sCubeArray)
             1511:    6(float) Load 371(lod)
             1512:     47(int) ConvertFToS 1511
-            1513:         155 Image 1510
-            1514:  451(ivec2) ImageQuerySizeLod 1513 1512
-            1515:   48(ivec4) Load 1470(size)
-            1516:  451(ivec2) VectorShuffle 1515 1515 0 1
-            1517:  451(ivec2) IAdd 1516 1514
-            1518:   1477(ptr) AccessChain 1470(size) 173
+            1513:         223 Image 1510
+            1514:  458(ivec3) ImageQuerySizeLod 1513 1512
+            1515:   48(ivec4) Load 1425(size)
+            1516:  458(ivec3) VectorShuffle 1515 1515 0 1 2
+            1517:  458(ivec3) IAdd 1516 1514
+            1518:   1432(ptr) AccessChain 1425(size) 173
             1519:     47(int) CompositeExtract 1517 0
                               Store 1518 1519
-            1520:   1477(ptr) AccessChain 1470(size) 1492
+            1520:   1432(ptr) AccessChain 1425(size) 1447
             1521:     47(int) CompositeExtract 1517 1
                               Store 1520 1521
-            1522:         165 Load 167(s1DShadow)
-            1523:    6(float) Load 371(lod)
-            1524:     47(int) ConvertFToS 1523
-            1525:         164 Image 1522
-            1526:     47(int) ImageQuerySizeLod 1525 1524
-            1527:   1477(ptr) AccessChain 1470(size) 173
-            1528:     47(int) Load 1527
-            1529:     47(int) IAdd 1528 1526
-            1530:   1477(ptr) AccessChain 1470(size) 173
-                              Store 1530 1529
-            1531:         180 Load 182(s2DShadow)
-            1532:    6(float) Load 371(lod)
-            1533:     47(int) ConvertFToS 1532
-            1534:         179 Image 1531
-            1535:  451(ivec2) ImageQuerySizeLod 1534 1533
-            1536:   48(ivec4) Load 1470(size)
-            1537:  451(ivec2) VectorShuffle 1536 1536 0 1
-            1538:  451(ivec2) IAdd 1537 1535
-            1539:   1477(ptr) AccessChain 1470(size) 173
-            1540:     47(int) CompositeExtract 1538 0
-                              Store 1539 1540
-            1541:   1477(ptr) AccessChain 1470(size) 1492
-            1542:     47(int) CompositeExtract 1538 1
-                              Store 1541 1542
-            1543:         192 Load 194(sCubeShadow)
-            1544:    6(float) Load 371(lod)
-            1545:     47(int) ConvertFToS 1544
-            1546:         191 Image 1543
-            1547:  451(ivec2) ImageQuerySizeLod 1546 1545
-            1548:   48(ivec4) Load 1470(size)
-            1549:  451(ivec2) VectorShuffle 1548 1548 0 1
-            1550:  451(ivec2) IAdd 1549 1547
-            1551:   1477(ptr) AccessChain 1470(size) 173
-            1552:     47(int) CompositeExtract 1550 0
-                              Store 1551 1552
-            1553:   1477(ptr) AccessChain 1470(size) 1492
-            1554:     47(int) CompositeExtract 1550 1
-                              Store 1553 1554
-            1555:         224 Load 226(sCubeArray)
-            1556:    6(float) Load 371(lod)
-            1557:     47(int) ConvertFToS 1556
-            1558:         223 Image 1555
-            1559:  458(ivec3) ImageQuerySizeLod 1558 1557
-            1560:   48(ivec4) Load 1470(size)
-            1561:  458(ivec3) VectorShuffle 1560 1560 0 1 2
-            1562:  458(ivec3) IAdd 1561 1559
-            1563:   1477(ptr) AccessChain 1470(size) 173
-            1564:     47(int) CompositeExtract 1562 0
-                              Store 1563 1564
-            1565:   1477(ptr) AccessChain 1470(size) 1492
-            1566:     47(int) CompositeExtract 1562 1
-                              Store 1565 1566
-            1567:   1477(ptr) AccessChain 1470(size) 1507
-            1568:     47(int) CompositeExtract 1562 2
-                              Store 1567 1568
-            1569:         278 Load 280(sCubeArrayShadow)
-            1570:    6(float) Load 371(lod)
-            1571:     47(int) ConvertFToS 1570
-            1572:         277 Image 1569
-            1573:  458(ivec3) ImageQuerySizeLod 1572 1571
-            1574:   48(ivec4) Load 1470(size)
-            1575:  458(ivec3) VectorShuffle 1574 1574 0 1 2
-            1576:  458(ivec3) IAdd 1575 1573
-            1577:   1477(ptr) AccessChain 1470(size) 173
-            1578:     47(int) CompositeExtract 1576 0
-                              Store 1577 1578
-            1579:   1477(ptr) AccessChain 1470(size) 1492
-            1580:     47(int) CompositeExtract 1576 1
-                              Store 1579 1580
-            1581:   1477(ptr) AccessChain 1470(size) 1507
-            1582:     47(int) CompositeExtract 1576 2
-                              Store 1581 1582
-            1583:         257 Load 259(s2DRect)
-            1584:         256 Image 1583
-            1585:  451(ivec2) ImageQuerySize 1584
-            1586:   48(ivec4) Load 1470(size)
-            1587:  451(ivec2) VectorShuffle 1586 1586 0 1
-            1588:  451(ivec2) IAdd 1587 1585
-            1589:   1477(ptr) AccessChain 1470(size) 173
-            1590:     47(int) CompositeExtract 1588 0
-                              Store 1589 1590
-            1591:   1477(ptr) AccessChain 1470(size) 1492
-            1592:     47(int) CompositeExtract 1588 1
-                              Store 1591 1592
-            1593:         266 Load 268(s2DRectShadow)
-            1594:         265 Image 1593
-            1595:  451(ivec2) ImageQuerySize 1594
-            1596:   48(ivec4) Load 1470(size)
-            1597:  451(ivec2) VectorShuffle 1596 1596 0 1
-            1598:  451(ivec2) IAdd 1597 1595
-            1599:   1477(ptr) AccessChain 1470(size) 173
-            1600:     47(int) CompositeExtract 1598 0
-                              Store 1599 1600
-            1601:   1477(ptr) AccessChain 1470(size) 1492
-            1602:     47(int) CompositeExtract 1598 1
-                              Store 1601 1602
-            1603:         206 Load 208(s1DArray)
-            1604:    6(float) Load 371(lod)
-            1605:     47(int) ConvertFToS 1604
-            1606:         205 Image 1603
-            1607:  451(ivec2) ImageQuerySizeLod 1606 1605
-            1608:   48(ivec4) Load 1470(size)
-            1609:  451(ivec2) VectorShuffle 1608 1608 0 1
-            1610:  451(ivec2) IAdd 1609 1607
-            1611:   1477(ptr) AccessChain 1470(size) 173
-            1612:     47(int) CompositeExtract 1610 0
-                              Store 1611 1612
-            1613:   1477(ptr) AccessChain 1470(size) 1492
-            1614:     47(int) CompositeExtract 1610 1
-                              Store 1613 1614
-            1615:         215 Load 217(s2DArray)
-            1616:    6(float) Load 371(lod)
-            1617:     47(int) ConvertFToS 1616
-            1618:         214 Image 1615
-            1619:  458(ivec3) ImageQuerySizeLod 1618 1617
-            1620:   48(ivec4) Load 1470(size)
-            1621:  458(ivec3) VectorShuffle 1620 1620 0 1 2
-            1622:  458(ivec3) IAdd 1621 1619
-            1623:   1477(ptr) AccessChain 1470(size) 173
+            1522:   1432(ptr) AccessChain 1425(size) 1462
+            1523:     47(int) CompositeExtract 1517 2
+                              Store 1522 1523
+            1524:         278 Load 280(sCubeArrayShadow)
+            1525:    6(float) Load 371(lod)
+            1526:     47(int) ConvertFToS 1525
+            1527:         277 Image 1524
+            1528:  458(ivec3) ImageQuerySizeLod 1527 1526
+            1529:   48(ivec4) Load 1425(size)
+            1530:  458(ivec3) VectorShuffle 1529 1529 0 1 2
+            1531:  458(ivec3) IAdd 1530 1528
+            1532:   1432(ptr) AccessChain 1425(size) 173
+            1533:     47(int) CompositeExtract 1531 0
+                              Store 1532 1533
+            1534:   1432(ptr) AccessChain 1425(size) 1447
+            1535:     47(int) CompositeExtract 1531 1
+                              Store 1534 1535
+            1536:   1432(ptr) AccessChain 1425(size) 1462
+            1537:     47(int) CompositeExtract 1531 2
+                              Store 1536 1537
+            1538:         257 Load 259(s2DRect)
+            1539:         256 Image 1538
+            1540:  451(ivec2) ImageQuerySize 1539
+            1541:   48(ivec4) Load 1425(size)
+            1542:  451(ivec2) VectorShuffle 1541 1541 0 1
+            1543:  451(ivec2) IAdd 1542 1540
+            1544:   1432(ptr) AccessChain 1425(size) 173
+            1545:     47(int) CompositeExtract 1543 0
+                              Store 1544 1545
+            1546:   1432(ptr) AccessChain 1425(size) 1447
+            1547:     47(int) CompositeExtract 1543 1
+                              Store 1546 1547
+            1548:         266 Load 268(s2DRectShadow)
+            1549:         265 Image 1548
+            1550:  451(ivec2) ImageQuerySize 1549
+            1551:   48(ivec4) Load 1425(size)
+            1552:  451(ivec2) VectorShuffle 1551 1551 0 1
+            1553:  451(ivec2) IAdd 1552 1550
+            1554:   1432(ptr) AccessChain 1425(size) 173
+            1555:     47(int) CompositeExtract 1553 0
+                              Store 1554 1555
+            1556:   1432(ptr) AccessChain 1425(size) 1447
+            1557:     47(int) CompositeExtract 1553 1
+                              Store 1556 1557
+            1558:         206 Load 208(s1DArray)
+            1559:    6(float) Load 371(lod)
+            1560:     47(int) ConvertFToS 1559
+            1561:         205 Image 1558
+            1562:  451(ivec2) ImageQuerySizeLod 1561 1560
+            1563:   48(ivec4) Load 1425(size)
+            1564:  451(ivec2) VectorShuffle 1563 1563 0 1
+            1565:  451(ivec2) IAdd 1564 1562
+            1566:   1432(ptr) AccessChain 1425(size) 173
+            1567:     47(int) CompositeExtract 1565 0
+                              Store 1566 1567
+            1568:   1432(ptr) AccessChain 1425(size) 1447
+            1569:     47(int) CompositeExtract 1565 1
+                              Store 1568 1569
+            1570:         215 Load 217(s2DArray)
+            1571:    6(float) Load 371(lod)
+            1572:     47(int) ConvertFToS 1571
+            1573:         214 Image 1570
+            1574:  458(ivec3) ImageQuerySizeLod 1573 1572
+            1575:   48(ivec4) Load 1425(size)
+            1576:  458(ivec3) VectorShuffle 1575 1575 0 1 2
+            1577:  458(ivec3) IAdd 1576 1574
+            1578:   1432(ptr) AccessChain 1425(size) 173
+            1579:     47(int) CompositeExtract 1577 0
+                              Store 1578 1579
+            1580:   1432(ptr) AccessChain 1425(size) 1447
+            1581:     47(int) CompositeExtract 1577 1
+                              Store 1580 1581
+            1582:   1432(ptr) AccessChain 1425(size) 1462
+            1583:     47(int) CompositeExtract 1577 2
+                              Store 1582 1583
+            1584:         233 Load 235(s1DArrayShadow)
+            1585:    6(float) Load 371(lod)
+            1586:     47(int) ConvertFToS 1585
+            1587:         232 Image 1584
+            1588:  451(ivec2) ImageQuerySizeLod 1587 1586
+            1589:   48(ivec4) Load 1425(size)
+            1590:  451(ivec2) VectorShuffle 1589 1589 0 1
+            1591:  451(ivec2) IAdd 1590 1588
+            1592:   1432(ptr) AccessChain 1425(size) 173
+            1593:     47(int) CompositeExtract 1591 0
+                              Store 1592 1593
+            1594:   1432(ptr) AccessChain 1425(size) 1447
+            1595:     47(int) CompositeExtract 1591 1
+                              Store 1594 1595
+            1596:         245 Load 247(s2DArrayShadow)
+            1597:    6(float) Load 371(lod)
+            1598:     47(int) ConvertFToS 1597
+            1599:         244 Image 1596
+            1600:  458(ivec3) ImageQuerySizeLod 1599 1598
+            1601:   48(ivec4) Load 1425(size)
+            1602:  458(ivec3) VectorShuffle 1601 1601 0 1 2
+            1603:  458(ivec3) IAdd 1602 1600
+            1604:   1432(ptr) AccessChain 1425(size) 173
+            1605:     47(int) CompositeExtract 1603 0
+                              Store 1604 1605
+            1606:   1432(ptr) AccessChain 1425(size) 1447
+            1607:     47(int) CompositeExtract 1603 1
+                              Store 1606 1607
+            1608:   1432(ptr) AccessChain 1425(size) 1462
+            1609:     47(int) CompositeExtract 1603 2
+                              Store 1608 1609
+            1610:         771 Load 773(sBuffer)
+            1611:         770 Image 1610
+            1612:     47(int) ImageQuerySize 1611
+            1613:   1432(ptr) AccessChain 1425(size) 173
+            1614:     47(int) Load 1613
+            1615:     47(int) IAdd 1614 1612
+            1616:   1432(ptr) AccessChain 1425(size) 173
+                              Store 1616 1615
+            1617:         782 Load 784(s2DMS)
+            1618:         781 Image 1617
+            1619:  451(ivec2) ImageQuerySize 1618
+            1620:   48(ivec4) Load 1425(size)
+            1621:  451(ivec2) VectorShuffle 1620 1620 0 1
+            1622:  451(ivec2) IAdd 1621 1619
+            1623:   1432(ptr) AccessChain 1425(size) 173
             1624:     47(int) CompositeExtract 1622 0
                               Store 1623 1624
-            1625:   1477(ptr) AccessChain 1470(size) 1492
+            1625:   1432(ptr) AccessChain 1425(size) 1447
             1626:     47(int) CompositeExtract 1622 1
                               Store 1625 1626
-            1627:   1477(ptr) AccessChain 1470(size) 1507
-            1628:     47(int) CompositeExtract 1622 2
-                              Store 1627 1628
-            1629:         233 Load 235(s1DArrayShadow)
-            1630:    6(float) Load 371(lod)
-            1631:     47(int) ConvertFToS 1630
-            1632:         232 Image 1629
-            1633:  451(ivec2) ImageQuerySizeLod 1632 1631
-            1634:   48(ivec4) Load 1470(size)
-            1635:  451(ivec2) VectorShuffle 1634 1634 0 1
-            1636:  451(ivec2) IAdd 1635 1633
-            1637:   1477(ptr) AccessChain 1470(size) 173
-            1638:     47(int) CompositeExtract 1636 0
+            1627:         793 Load 795(s2DMSArray)
+            1628:         792 Image 1627
+            1629:  458(ivec3) ImageQuerySize 1628
+            1630:   48(ivec4) Load 1425(size)
+            1631:  458(ivec3) VectorShuffle 1630 1630 0 1 2
+            1632:  458(ivec3) IAdd 1631 1629
+            1633:   1432(ptr) AccessChain 1425(size) 173
+            1634:     47(int) CompositeExtract 1632 0
+                              Store 1633 1634
+            1635:   1432(ptr) AccessChain 1425(size) 1447
+            1636:     47(int) CompositeExtract 1632 1
+                              Store 1635 1636
+            1637:   1432(ptr) AccessChain 1425(size) 1462
+            1638:     47(int) CompositeExtract 1632 2
                               Store 1637 1638
-            1639:   1477(ptr) AccessChain 1470(size) 1492
-            1640:     47(int) CompositeExtract 1636 1
-                              Store 1639 1640
-            1641:         245 Load 247(s2DArrayShadow)
-            1642:    6(float) Load 371(lod)
-            1643:     47(int) ConvertFToS 1642
-            1644:         244 Image 1641
-            1645:  458(ivec3) ImageQuerySizeLod 1644 1643
-            1646:   48(ivec4) Load 1470(size)
-            1647:  458(ivec3) VectorShuffle 1646 1646 0 1 2
-            1648:  458(ivec3) IAdd 1647 1645
-            1649:   1477(ptr) AccessChain 1470(size) 173
-            1650:     47(int) CompositeExtract 1648 0
-                              Store 1649 1650
-            1651:   1477(ptr) AccessChain 1470(size) 1492
-            1652:     47(int) CompositeExtract 1648 1
-                              Store 1651 1652
-            1653:   1477(ptr) AccessChain 1470(size) 1507
-            1654:     47(int) CompositeExtract 1648 2
-                              Store 1653 1654
-            1655:         771 Load 773(sBuffer)
-            1656:         770 Image 1655
-            1657:     47(int) ImageQuerySize 1656
-            1658:   1477(ptr) AccessChain 1470(size) 173
-            1659:     47(int) Load 1658
-            1660:     47(int) IAdd 1659 1657
-            1661:   1477(ptr) AccessChain 1470(size) 173
-                              Store 1661 1660
-            1662:         782 Load 784(s2DMS)
-            1663:         781 Image 1662
-            1664:  451(ivec2) ImageQuerySize 1663
-            1665:   48(ivec4) Load 1470(size)
-            1666:  451(ivec2) VectorShuffle 1665 1665 0 1
-            1667:  451(ivec2) IAdd 1666 1664
-            1668:   1477(ptr) AccessChain 1470(size) 173
-            1669:     47(int) CompositeExtract 1667 0
-                              Store 1668 1669
-            1670:   1477(ptr) AccessChain 1470(size) 1492
-            1671:     47(int) CompositeExtract 1667 1
-                              Store 1670 1671
-            1672:         793 Load 795(s2DMSArray)
-            1673:         792 Image 1672
-            1674:  458(ivec3) ImageQuerySize 1673
-            1675:   48(ivec4) Load 1470(size)
-            1676:  458(ivec3) VectorShuffle 1675 1675 0 1 2
-            1677:  458(ivec3) IAdd 1676 1674
-            1678:   1477(ptr) AccessChain 1470(size) 173
-            1679:     47(int) CompositeExtract 1677 0
-                              Store 1678 1679
-            1680:   1477(ptr) AccessChain 1470(size) 1492
-            1681:     47(int) CompositeExtract 1677 1
-                              Store 1680 1681
-            1682:   1477(ptr) AccessChain 1470(size) 1507
-            1683:     47(int) CompositeExtract 1677 2
-                              Store 1682 1683
-            1684:   48(ivec4) Load 1470(size)
-                              ReturnValue 1684
+            1639:   48(ivec4) Load 1425(size)
+                              ReturnValue 1639
                               FunctionEnd
 54(testTextureQueryLod():   52(fvec2) Function None 53
               55:             Label
-       1688(lod):   1687(ptr) Variable Function
-                              Store 1688(lod) 1689
-            1690:         122 Load 124(s1D)
-            1691:    6(float) Load 127(c1)
+       1643(lod):   1642(ptr) Variable Function
+                              Store 1643(lod) 1644
+            1645:         122 Load 124(s1D)
+            1646:    6(float) Load 127(c1)
+            1647:   52(fvec2) ImageQueryLod 1645 1646
+            1648:   52(fvec2) Load 1643(lod)
+            1649:   52(fvec2) FAdd 1648 1647
+                              Store 1643(lod) 1649
+            1650:         133 Load 135(s2D)
+            1651:   52(fvec2) Load 138(c2)
+            1652:   52(fvec2) ImageQueryLod 1650 1651
+            1653:   52(fvec2) Load 1643(lod)
+            1654:   52(fvec2) FAdd 1653 1652
+                              Store 1643(lod) 1654
+            1655:         144 Load 146(s3D)
+            1656:  148(fvec3) Load 150(c3)
+            1657:   52(fvec2) ImageQueryLod 1655 1656
+            1658:   52(fvec2) Load 1643(lod)
+            1659:   52(fvec2) FAdd 1658 1657
+                              Store 1643(lod) 1659
+            1660:         156 Load 158(sCube)
+            1661:  148(fvec3) Load 150(c3)
+            1662:   52(fvec2) ImageQueryLod 1660 1661
+            1663:   52(fvec2) Load 1643(lod)
+            1664:   52(fvec2) FAdd 1663 1662
+                              Store 1643(lod) 1664
+            1665:         206 Load 208(s1DArray)
+            1666:    6(float) Load 127(c1)
+            1667:   52(fvec2) ImageQueryLod 1665 1666
+            1668:   52(fvec2) Load 1643(lod)
+            1669:   52(fvec2) FAdd 1668 1667
+                              Store 1643(lod) 1669
+            1670:         215 Load 217(s2DArray)
+            1671:   52(fvec2) Load 138(c2)
+            1672:   52(fvec2) ImageQueryLod 1670 1671
+            1673:   52(fvec2) Load 1643(lod)
+            1674:   52(fvec2) FAdd 1673 1672
+                              Store 1643(lod) 1674
+            1675:         224 Load 226(sCubeArray)
+            1676:  148(fvec3) Load 150(c3)
+            1677:   52(fvec2) ImageQueryLod 1675 1676
+            1678:   52(fvec2) Load 1643(lod)
+            1679:   52(fvec2) FAdd 1678 1677
+                              Store 1643(lod) 1679
+            1680:         165 Load 167(s1DShadow)
+            1681:    6(float) Load 127(c1)
+            1682:   52(fvec2) ImageQueryLod 1680 1681
+            1683:   52(fvec2) Load 1643(lod)
+            1684:   52(fvec2) FAdd 1683 1682
+                              Store 1643(lod) 1684
+            1685:         180 Load 182(s2DShadow)
+            1686:   52(fvec2) Load 138(c2)
+            1687:   52(fvec2) ImageQueryLod 1685 1686
+            1688:   52(fvec2) Load 1643(lod)
+            1689:   52(fvec2) FAdd 1688 1687
+                              Store 1643(lod) 1689
+            1690:         278 Load 280(sCubeArrayShadow)
+            1691:  148(fvec3) Load 150(c3)
             1692:   52(fvec2) ImageQueryLod 1690 1691
-            1693:   52(fvec2) Load 1688(lod)
+            1693:   52(fvec2) Load 1643(lod)
             1694:   52(fvec2) FAdd 1693 1692
-                              Store 1688(lod) 1694
-            1695:         133 Load 135(s2D)
-            1696:   52(fvec2) Load 138(c2)
+                              Store 1643(lod) 1694
+            1695:         233 Load 235(s1DArrayShadow)
+            1696:    6(float) Load 127(c1)
             1697:   52(fvec2) ImageQueryLod 1695 1696
-            1698:   52(fvec2) Load 1688(lod)
+            1698:   52(fvec2) Load 1643(lod)
             1699:   52(fvec2) FAdd 1698 1697
-                              Store 1688(lod) 1699
-            1700:         144 Load 146(s3D)
-            1701:  148(fvec3) Load 150(c3)
+                              Store 1643(lod) 1699
+            1700:         245 Load 247(s2DArrayShadow)
+            1701:   52(fvec2) Load 138(c2)
             1702:   52(fvec2) ImageQueryLod 1700 1701
-            1703:   52(fvec2) Load 1688(lod)
+            1703:   52(fvec2) Load 1643(lod)
             1704:   52(fvec2) FAdd 1703 1702
-                              Store 1688(lod) 1704
-            1705:         156 Load 158(sCube)
+                              Store 1643(lod) 1704
+            1705:         278 Load 280(sCubeArrayShadow)
             1706:  148(fvec3) Load 150(c3)
             1707:   52(fvec2) ImageQueryLod 1705 1706
-            1708:   52(fvec2) Load 1688(lod)
+            1708:   52(fvec2) Load 1643(lod)
             1709:   52(fvec2) FAdd 1708 1707
-                              Store 1688(lod) 1709
-            1710:         206 Load 208(s1DArray)
-            1711:    6(float) Load 127(c1)
-            1712:   52(fvec2) ImageQueryLod 1710 1711
-            1713:   52(fvec2) Load 1688(lod)
-            1714:   52(fvec2) FAdd 1713 1712
-                              Store 1688(lod) 1714
-            1715:         215 Load 217(s2DArray)
-            1716:   52(fvec2) Load 138(c2)
-            1717:   52(fvec2) ImageQueryLod 1715 1716
-            1718:   52(fvec2) Load 1688(lod)
-            1719:   52(fvec2) FAdd 1718 1717
-                              Store 1688(lod) 1719
-            1720:         224 Load 226(sCubeArray)
-            1721:  148(fvec3) Load 150(c3)
-            1722:   52(fvec2) ImageQueryLod 1720 1721
-            1723:   52(fvec2) Load 1688(lod)
-            1724:   52(fvec2) FAdd 1723 1722
-                              Store 1688(lod) 1724
-            1725:         165 Load 167(s1DShadow)
-            1726:    6(float) Load 127(c1)
-            1727:   52(fvec2) ImageQueryLod 1725 1726
-            1728:   52(fvec2) Load 1688(lod)
-            1729:   52(fvec2) FAdd 1728 1727
-                              Store 1688(lod) 1729
-            1730:         180 Load 182(s2DShadow)
-            1731:   52(fvec2) Load 138(c2)
-            1732:   52(fvec2) ImageQueryLod 1730 1731
-            1733:   52(fvec2) Load 1688(lod)
-            1734:   52(fvec2) FAdd 1733 1732
-                              Store 1688(lod) 1734
-            1735:         278 Load 280(sCubeArrayShadow)
-            1736:  148(fvec3) Load 150(c3)
-            1737:   52(fvec2) ImageQueryLod 1735 1736
-            1738:   52(fvec2) Load 1688(lod)
-            1739:   52(fvec2) FAdd 1738 1737
-                              Store 1688(lod) 1739
-            1740:         233 Load 235(s1DArrayShadow)
-            1741:    6(float) Load 127(c1)
-            1742:   52(fvec2) ImageQueryLod 1740 1741
-            1743:   52(fvec2) Load 1688(lod)
-            1744:   52(fvec2) FAdd 1743 1742
-                              Store 1688(lod) 1744
-            1745:         245 Load 247(s2DArrayShadow)
-            1746:   52(fvec2) Load 138(c2)
-            1747:   52(fvec2) ImageQueryLod 1745 1746
-            1748:   52(fvec2) Load 1688(lod)
-            1749:   52(fvec2) FAdd 1748 1747
-                              Store 1688(lod) 1749
-            1750:         278 Load 280(sCubeArrayShadow)
-            1751:  148(fvec3) Load 150(c3)
-            1752:   52(fvec2) ImageQueryLod 1750 1751
-            1753:   52(fvec2) Load 1688(lod)
-            1754:   52(fvec2) FAdd 1753 1752
-                              Store 1688(lod) 1754
-            1755:   52(fvec2) Load 1688(lod)
-                              ReturnValue 1755
+                              Store 1643(lod) 1709
+            1710:   52(fvec2) Load 1643(lod)
+                              ReturnValue 1710
                               FunctionEnd
 57(testTextureQueryLevels():     47(int) Function None 56
               58:             Label
-    1758(levels):   1477(ptr) Variable Function
-                              Store 1758(levels) 1275
-            1759:         122 Load 124(s1D)
-            1760:         121 Image 1759
+    1713(levels):   1432(ptr) Variable Function
+                              Store 1713(levels) 1230
+            1714:         122 Load 124(s1D)
+            1715:         121 Image 1714
+            1716:     47(int) ImageQueryLevels 1715
+            1717:     47(int) Load 1713(levels)
+            1718:     47(int) IAdd 1717 1716
+                              Store 1713(levels) 1718
+            1719:         133 Load 135(s2D)
+            1720:         132 Image 1719
+            1721:     47(int) ImageQueryLevels 1720
+            1722:     47(int) Load 1713(levels)
+            1723:     47(int) IAdd 1722 1721
+                              Store 1713(levels) 1723
+            1724:         144 Load 146(s3D)
+            1725:         143 Image 1724
+            1726:     47(int) ImageQueryLevels 1725
+            1727:     47(int) Load 1713(levels)
+            1728:     47(int) IAdd 1727 1726
+                              Store 1713(levels) 1728
+            1729:         156 Load 158(sCube)
+            1730:         155 Image 1729
+            1731:     47(int) ImageQueryLevels 1730
+            1732:     47(int) Load 1713(levels)
+            1733:     47(int) IAdd 1732 1731
+                              Store 1713(levels) 1733
+            1734:         165 Load 167(s1DShadow)
+            1735:         164 Image 1734
+            1736:     47(int) ImageQueryLevels 1735
+            1737:     47(int) Load 1713(levels)
+            1738:     47(int) IAdd 1737 1736
+                              Store 1713(levels) 1738
+            1739:         180 Load 182(s2DShadow)
+            1740:         179 Image 1739
+            1741:     47(int) ImageQueryLevels 1740
+            1742:     47(int) Load 1713(levels)
+            1743:     47(int) IAdd 1742 1741
+                              Store 1713(levels) 1743
+            1744:         192 Load 194(sCubeShadow)
+            1745:         191 Image 1744
+            1746:     47(int) ImageQueryLevels 1745
+            1747:     47(int) Load 1713(levels)
+            1748:     47(int) IAdd 1747 1746
+                              Store 1713(levels) 1748
+            1749:         224 Load 226(sCubeArray)
+            1750:         223 Image 1749
+            1751:     47(int) ImageQueryLevels 1750
+            1752:     47(int) Load 1713(levels)
+            1753:     47(int) IAdd 1752 1751
+                              Store 1713(levels) 1753
+            1754:         278 Load 280(sCubeArrayShadow)
+            1755:         277 Image 1754
+            1756:     47(int) ImageQueryLevels 1755
+            1757:     47(int) Load 1713(levels)
+            1758:     47(int) IAdd 1757 1756
+                              Store 1713(levels) 1758
+            1759:         206 Load 208(s1DArray)
+            1760:         205 Image 1759
             1761:     47(int) ImageQueryLevels 1760
-            1762:     47(int) Load 1758(levels)
+            1762:     47(int) Load 1713(levels)
             1763:     47(int) IAdd 1762 1761
-                              Store 1758(levels) 1763
-            1764:         133 Load 135(s2D)
-            1765:         132 Image 1764
+                              Store 1713(levels) 1763
+            1764:         215 Load 217(s2DArray)
+            1765:         214 Image 1764
             1766:     47(int) ImageQueryLevels 1765
-            1767:     47(int) Load 1758(levels)
+            1767:     47(int) Load 1713(levels)
             1768:     47(int) IAdd 1767 1766
-                              Store 1758(levels) 1768
-            1769:         144 Load 146(s3D)
-            1770:         143 Image 1769
+                              Store 1713(levels) 1768
+            1769:         233 Load 235(s1DArrayShadow)
+            1770:         232 Image 1769
             1771:     47(int) ImageQueryLevels 1770
-            1772:     47(int) Load 1758(levels)
+            1772:     47(int) Load 1713(levels)
             1773:     47(int) IAdd 1772 1771
-                              Store 1758(levels) 1773
-            1774:         156 Load 158(sCube)
-            1775:         155 Image 1774
+                              Store 1713(levels) 1773
+            1774:         245 Load 247(s2DArrayShadow)
+            1775:         244 Image 1774
             1776:     47(int) ImageQueryLevels 1775
-            1777:     47(int) Load 1758(levels)
+            1777:     47(int) Load 1713(levels)
             1778:     47(int) IAdd 1777 1776
-                              Store 1758(levels) 1778
-            1779:         165 Load 167(s1DShadow)
-            1780:         164 Image 1779
-            1781:     47(int) ImageQueryLevels 1780
-            1782:     47(int) Load 1758(levels)
-            1783:     47(int) IAdd 1782 1781
-                              Store 1758(levels) 1783
-            1784:         180 Load 182(s2DShadow)
-            1785:         179 Image 1784
-            1786:     47(int) ImageQueryLevels 1785
-            1787:     47(int) Load 1758(levels)
-            1788:     47(int) IAdd 1787 1786
-                              Store 1758(levels) 1788
-            1789:         192 Load 194(sCubeShadow)
-            1790:         191 Image 1789
-            1791:     47(int) ImageQueryLevels 1790
-            1792:     47(int) Load 1758(levels)
-            1793:     47(int) IAdd 1792 1791
-                              Store 1758(levels) 1793
-            1794:         224 Load 226(sCubeArray)
-            1795:         223 Image 1794
-            1796:     47(int) ImageQueryLevels 1795
-            1797:     47(int) Load 1758(levels)
-            1798:     47(int) IAdd 1797 1796
-                              Store 1758(levels) 1798
-            1799:         278 Load 280(sCubeArrayShadow)
-            1800:         277 Image 1799
-            1801:     47(int) ImageQueryLevels 1800
-            1802:     47(int) Load 1758(levels)
-            1803:     47(int) IAdd 1802 1801
-                              Store 1758(levels) 1803
-            1804:         206 Load 208(s1DArray)
-            1805:         205 Image 1804
-            1806:     47(int) ImageQueryLevels 1805
-            1807:     47(int) Load 1758(levels)
-            1808:     47(int) IAdd 1807 1806
-                              Store 1758(levels) 1808
-            1809:         215 Load 217(s2DArray)
-            1810:         214 Image 1809
-            1811:     47(int) ImageQueryLevels 1810
-            1812:     47(int) Load 1758(levels)
-            1813:     47(int) IAdd 1812 1811
-                              Store 1758(levels) 1813
-            1814:         233 Load 235(s1DArrayShadow)
-            1815:         232 Image 1814
-            1816:     47(int) ImageQueryLevels 1815
-            1817:     47(int) Load 1758(levels)
-            1818:     47(int) IAdd 1817 1816
-                              Store 1758(levels) 1818
-            1819:         245 Load 247(s2DArrayShadow)
-            1820:         244 Image 1819
-            1821:     47(int) ImageQueryLevels 1820
-            1822:     47(int) Load 1758(levels)
-            1823:     47(int) IAdd 1822 1821
-                              Store 1758(levels) 1823
-            1824:     47(int) Load 1758(levels)
-                              ReturnValue 1824
+                              Store 1713(levels) 1778
+            1779:     47(int) Load 1713(levels)
+                              ReturnValue 1779
                               FunctionEnd
 59(testTextureSamples():     47(int) Function None 56
               60:             Label
-   1827(samples):   1477(ptr) Variable Function
-                              Store 1827(samples) 1275
-            1828:         782 Load 784(s2DMS)
-            1829:         781 Image 1828
-            1830:     47(int) ImageQuerySamples 1829
-            1831:     47(int) Load 1827(samples)
-            1832:     47(int) IAdd 1831 1830
-                              Store 1827(samples) 1832
-            1833:         793 Load 795(s2DMSArray)
-            1834:         792 Image 1833
-            1835:     47(int) ImageQuerySamples 1834
-            1836:     47(int) Load 1827(samples)
-            1837:     47(int) IAdd 1836 1835
-                              Store 1827(samples) 1837
-            1838:     47(int) Load 1827(samples)
-                              ReturnValue 1838
+   1782(samples):   1432(ptr) Variable Function
+                              Store 1782(samples) 1230
+            1783:         782 Load 784(s2DMS)
+            1784:         781 Image 1783
+            1785:     47(int) ImageQuerySamples 1784
+            1786:     47(int) Load 1782(samples)
+            1787:     47(int) IAdd 1786 1785
+                              Store 1782(samples) 1787
+            1788:         793 Load 795(s2DMSArray)
+            1789:         792 Image 1788
+            1790:     47(int) ImageQuerySamples 1789
+            1791:     47(int) Load 1782(samples)
+            1792:     47(int) IAdd 1791 1790
+                              Store 1782(samples) 1792
+            1793:     47(int) Load 1782(samples)
+                              ReturnValue 1793
                               FunctionEnd
 61(testImageLoad():    7(fvec4) Function None 8
               62:             Label
-     1841(texel):     63(ptr) Variable Function
-                              Store 1841(texel) 120
-            1845:        1842 Load 1844(i1D)
+     1796(texel):     63(ptr) Variable Function
+                              Store 1796(texel) 120
+            1800:        1797 Load 1799(i1D)
+            1801:    6(float) Load 127(c1)
+            1802:     47(int) ConvertFToS 1801
+            1803:    7(fvec4) ImageRead 1800 1802
+            1804:    7(fvec4) Load 1796(texel)
+            1805:    7(fvec4) FAdd 1804 1803
+                              Store 1796(texel) 1805
+            1809:        1806 Load 1808(i2D)
+            1810:   52(fvec2) Load 138(c2)
+            1811:  451(ivec2) ConvertFToS 1810
+            1812:    7(fvec4) ImageRead 1809 1811
+            1813:    7(fvec4) Load 1796(texel)
+            1814:    7(fvec4) FAdd 1813 1812
+                              Store 1796(texel) 1814
+            1818:        1815 Load 1817(i3D)
+            1819:  148(fvec3) Load 150(c3)
+            1820:  458(ivec3) ConvertFToS 1819
+            1821:    7(fvec4) ImageRead 1818 1820
+            1822:    7(fvec4) Load 1796(texel)
+            1823:    7(fvec4) FAdd 1822 1821
+                              Store 1796(texel) 1823
+            1827:        1824 Load 1826(i2DRect)
+            1828:   52(fvec2) Load 138(c2)
+            1829:  451(ivec2) ConvertFToS 1828
+            1830:    7(fvec4) ImageRead 1827 1829
+            1831:    7(fvec4) Load 1796(texel)
+            1832:    7(fvec4) FAdd 1831 1830
+                              Store 1796(texel) 1832
+            1836:        1833 Load 1835(iCube)
+            1837:  148(fvec3) Load 150(c3)
+            1838:  458(ivec3) ConvertFToS 1837
+            1839:    7(fvec4) ImageRead 1836 1838
+            1840:    7(fvec4) Load 1796(texel)
+            1841:    7(fvec4) FAdd 1840 1839
+                              Store 1796(texel) 1841
+            1845:        1842 Load 1844(iBuffer)
             1846:    6(float) Load 127(c1)
             1847:     47(int) ConvertFToS 1846
             1848:    7(fvec4) ImageRead 1845 1847
-            1849:    7(fvec4) Load 1841(texel)
+            1849:    7(fvec4) Load 1796(texel)
             1850:    7(fvec4) FAdd 1849 1848
-                              Store 1841(texel) 1850
-            1854:        1851 Load 1853(i2D)
+                              Store 1796(texel) 1850
+            1854:        1851 Load 1853(i1DArray)
             1855:   52(fvec2) Load 138(c2)
             1856:  451(ivec2) ConvertFToS 1855
             1857:    7(fvec4) ImageRead 1854 1856
-            1858:    7(fvec4) Load 1841(texel)
+            1858:    7(fvec4) Load 1796(texel)
             1859:    7(fvec4) FAdd 1858 1857
-                              Store 1841(texel) 1859
-            1863:        1860 Load 1862(i3D)
+                              Store 1796(texel) 1859
+            1863:        1860 Load 1862(i2DArray)
             1864:  148(fvec3) Load 150(c3)
             1865:  458(ivec3) ConvertFToS 1864
             1866:    7(fvec4) ImageRead 1863 1865
-            1867:    7(fvec4) Load 1841(texel)
+            1867:    7(fvec4) Load 1796(texel)
             1868:    7(fvec4) FAdd 1867 1866
-                              Store 1841(texel) 1868
-            1872:        1869 Load 1871(i2DRect)
-            1873:   52(fvec2) Load 138(c2)
-            1874:  451(ivec2) ConvertFToS 1873
+                              Store 1796(texel) 1868
+            1872:        1869 Load 1871(iCubeArray)
+            1873:  148(fvec3) Load 150(c3)
+            1874:  458(ivec3) ConvertFToS 1873
             1875:    7(fvec4) ImageRead 1872 1874
-            1876:    7(fvec4) Load 1841(texel)
+            1876:    7(fvec4) Load 1796(texel)
             1877:    7(fvec4) FAdd 1876 1875
-                              Store 1841(texel) 1877
-            1881:        1878 Load 1880(iCube)
-            1882:  148(fvec3) Load 150(c3)
-            1883:  458(ivec3) ConvertFToS 1882
-            1884:    7(fvec4) ImageRead 1881 1883
-            1885:    7(fvec4) Load 1841(texel)
+                              Store 1796(texel) 1877
+            1881:        1878 Load 1880(i2DMS)
+            1882:   52(fvec2) Load 138(c2)
+            1883:  451(ivec2) ConvertFToS 1882
+            1884:    7(fvec4) ImageRead 1881 1883 Sample 445
+            1885:    7(fvec4) Load 1796(texel)
             1886:    7(fvec4) FAdd 1885 1884
-                              Store 1841(texel) 1886
-            1890:        1887 Load 1889(iBuffer)
-            1891:    6(float) Load 127(c1)
-            1892:     47(int) ConvertFToS 1891
-            1893:    7(fvec4) ImageRead 1890 1892
-            1894:    7(fvec4) Load 1841(texel)
+                              Store 1796(texel) 1886
+            1890:        1887 Load 1889(i2DMSArray)
+            1891:  148(fvec3) Load 150(c3)
+            1892:  458(ivec3) ConvertFToS 1891
+            1893:    7(fvec4) ImageRead 1890 1892 Sample 445
+            1894:    7(fvec4) Load 1796(texel)
             1895:    7(fvec4) FAdd 1894 1893
-                              Store 1841(texel) 1895
-            1899:        1896 Load 1898(i1DArray)
-            1900:   52(fvec2) Load 138(c2)
-            1901:  451(ivec2) ConvertFToS 1900
-            1902:    7(fvec4) ImageRead 1899 1901
-            1903:    7(fvec4) Load 1841(texel)
-            1904:    7(fvec4) FAdd 1903 1902
-                              Store 1841(texel) 1904
-            1908:        1905 Load 1907(i2DArray)
-            1909:  148(fvec3) Load 150(c3)
-            1910:  458(ivec3) ConvertFToS 1909
-            1911:    7(fvec4) ImageRead 1908 1910
-            1912:    7(fvec4) Load 1841(texel)
-            1913:    7(fvec4) FAdd 1912 1911
-                              Store 1841(texel) 1913
-            1917:        1914 Load 1916(iCubeArray)
-            1918:  148(fvec3) Load 150(c3)
-            1919:  458(ivec3) ConvertFToS 1918
-            1920:    7(fvec4) ImageRead 1917 1919
-            1921:    7(fvec4) Load 1841(texel)
-            1922:    7(fvec4) FAdd 1921 1920
-                              Store 1841(texel) 1922
-            1926:        1923 Load 1925(i2DMS)
-            1927:   52(fvec2) Load 138(c2)
-            1928:  451(ivec2) ConvertFToS 1927
-            1929:    7(fvec4) ImageRead 1926 1928 Sample 445
-            1930:    7(fvec4) Load 1841(texel)
-            1931:    7(fvec4) FAdd 1930 1929
-                              Store 1841(texel) 1931
-            1935:        1932 Load 1934(i2DMSArray)
-            1936:  148(fvec3) Load 150(c3)
-            1937:  458(ivec3) ConvertFToS 1936
-            1938:    7(fvec4) ImageRead 1935 1937 Sample 445
-            1939:    7(fvec4) Load 1841(texel)
-            1940:    7(fvec4) FAdd 1939 1938
-                              Store 1841(texel) 1940
-            1941:    7(fvec4) Load 1841(texel)
-                              ReturnValue 1941
+                              Store 1796(texel) 1895
+            1896:    7(fvec4) Load 1796(texel)
+                              ReturnValue 1896
                               FunctionEnd
 66(testImageStore(vf4;):           2 Function None 64
         65(data):     63(ptr) FunctionParameter
               67:             Label
-            1944:        1842 Load 1844(i1D)
-            1945:    6(float) Load 127(c1)
-            1946:     47(int) ConvertFToS 1945
-            1947:    7(fvec4) Load 65(data)
-                              ImageWrite 1944 1946 1947
-            1948:        1851 Load 1853(i2D)
-            1949:   52(fvec2) Load 138(c2)
-            1950:  451(ivec2) ConvertFToS 1949
-            1951:    7(fvec4) Load 65(data)
-                              ImageWrite 1948 1950 1951
-            1952:        1860 Load 1862(i3D)
-            1953:  148(fvec3) Load 150(c3)
-            1954:  458(ivec3) ConvertFToS 1953
-            1955:    7(fvec4) Load 65(data)
-                              ImageWrite 1952 1954 1955
-            1956:        1869 Load 1871(i2DRect)
-            1957:   52(fvec2) Load 138(c2)
-            1958:  451(ivec2) ConvertFToS 1957
-            1959:    7(fvec4) Load 65(data)
-                              ImageWrite 1956 1958 1959
-            1960:        1878 Load 1880(iCube)
-            1961:  148(fvec3) Load 150(c3)
-            1962:  458(ivec3) ConvertFToS 1961
-            1963:    7(fvec4) Load 65(data)
-                              ImageWrite 1960 1962 1963
-            1964:        1887 Load 1889(iBuffer)
-            1965:    6(float) Load 127(c1)
-            1966:     47(int) ConvertFToS 1965
-            1967:    7(fvec4) Load 65(data)
-                              ImageWrite 1964 1966 1967
-            1968:        1896 Load 1898(i1DArray)
-            1969:   52(fvec2) Load 138(c2)
-            1970:  451(ivec2) ConvertFToS 1969
-            1971:    7(fvec4) Load 65(data)
-                              ImageWrite 1968 1970 1971
-            1972:        1905 Load 1907(i2DArray)
-            1973:  148(fvec3) Load 150(c3)
-            1974:  458(ivec3) ConvertFToS 1973
-            1975:    7(fvec4) Load 65(data)
-                              ImageWrite 1972 1974 1975
-            1976:        1914 Load 1916(iCubeArray)
-            1977:  148(fvec3) Load 150(c3)
-            1978:  458(ivec3) ConvertFToS 1977
-            1979:    7(fvec4) Load 65(data)
-                              ImageWrite 1976 1978 1979
-            1980:        1923 Load 1925(i2DMS)
-            1981:   52(fvec2) Load 138(c2)
-            1982:  451(ivec2) ConvertFToS 1981
-            1983:    7(fvec4) Load 65(data)
-                              ImageWrite 1980 1982 1983 Sample 445
-            1984:        1932 Load 1934(i2DMSArray)
-            1985:  148(fvec3) Load 150(c3)
-            1986:  458(ivec3) ConvertFToS 1985
-            1987:    7(fvec4) Load 65(data)
-                              ImageWrite 1984 1986 1987 Sample 445
+            1899:        1797 Load 1799(i1D)
+            1900:    6(float) Load 127(c1)
+            1901:     47(int) ConvertFToS 1900
+            1902:    7(fvec4) Load 65(data)
+                              ImageWrite 1899 1901 1902
+            1903:        1806 Load 1808(i2D)
+            1904:   52(fvec2) Load 138(c2)
+            1905:  451(ivec2) ConvertFToS 1904
+            1906:    7(fvec4) Load 65(data)
+                              ImageWrite 1903 1905 1906
+            1907:        1815 Load 1817(i3D)
+            1908:  148(fvec3) Load 150(c3)
+            1909:  458(ivec3) ConvertFToS 1908
+            1910:    7(fvec4) Load 65(data)
+                              ImageWrite 1907 1909 1910
+            1911:        1824 Load 1826(i2DRect)
+            1912:   52(fvec2) Load 138(c2)
+            1913:  451(ivec2) ConvertFToS 1912
+            1914:    7(fvec4) Load 65(data)
+                              ImageWrite 1911 1913 1914
+            1915:        1833 Load 1835(iCube)
+            1916:  148(fvec3) Load 150(c3)
+            1917:  458(ivec3) ConvertFToS 1916
+            1918:    7(fvec4) Load 65(data)
+                              ImageWrite 1915 1917 1918
+            1919:        1842 Load 1844(iBuffer)
+            1920:    6(float) Load 127(c1)
+            1921:     47(int) ConvertFToS 1920
+            1922:    7(fvec4) Load 65(data)
+                              ImageWrite 1919 1921 1922
+            1923:        1851 Load 1853(i1DArray)
+            1924:   52(fvec2) Load 138(c2)
+            1925:  451(ivec2) ConvertFToS 1924
+            1926:    7(fvec4) Load 65(data)
+                              ImageWrite 1923 1925 1926
+            1927:        1860 Load 1862(i2DArray)
+            1928:  148(fvec3) Load 150(c3)
+            1929:  458(ivec3) ConvertFToS 1928
+            1930:    7(fvec4) Load 65(data)
+                              ImageWrite 1927 1929 1930
+            1931:        1869 Load 1871(iCubeArray)
+            1932:  148(fvec3) Load 150(c3)
+            1933:  458(ivec3) ConvertFToS 1932
+            1934:    7(fvec4) Load 65(data)
+                              ImageWrite 1931 1933 1934
+            1935:        1878 Load 1880(i2DMS)
+            1936:   52(fvec2) Load 138(c2)
+            1937:  451(ivec2) ConvertFToS 1936
+            1938:    7(fvec4) Load 65(data)
+                              ImageWrite 1935 1937 1938 Sample 445
+            1939:        1887 Load 1889(i2DMSArray)
+            1940:  148(fvec3) Load 150(c3)
+            1941:  458(ivec3) ConvertFToS 1940
+            1942:    7(fvec4) Load 65(data)
+                              ImageWrite 1939 1941 1942 Sample 445
                               Return
                               FunctionEnd
 68(testSparseTexture():    7(fvec4) Function None 8
               69:             Label
-     1988(texel):     63(ptr) Variable Function
-                              Store 1988(texel) 120
-            1989:         133 Load 135(s2D)
-            1990:   52(fvec2) Load 138(c2)
-            1992:1991(ResType) ImageSparseSampleImplicitLod 1989 1990
-            1993:    7(fvec4) CompositeExtract 1992 1
-                              Store 1988(texel) 1993
-            1994:     47(int) CompositeExtract 1992 0
-            1995:         144 Load 146(s3D)
-            1996:  148(fvec3) Load 150(c3)
-            1997:1991(ResType) ImageSparseSampleImplicitLod 1995 1996
-            1998:    7(fvec4) CompositeExtract 1997 1
-                              Store 1988(texel) 1998
-            1999:     47(int) CompositeExtract 1997 0
-            2000:         156 Load 158(sCube)
-            2001:  148(fvec3) Load 150(c3)
-            2002:1991(ResType) ImageSparseSampleImplicitLod 2000 2001
-            2003:    7(fvec4) CompositeExtract 2002 1
-                              Store 1988(texel) 2003
-            2004:     47(int) CompositeExtract 2002 0
-            2005:         180 Load 182(s2DShadow)
-            2006:  148(fvec3) Load 150(c3)
-            2007:    174(ptr) AccessChain 1988(texel) 173
-            2008:    6(float) CompositeExtract 2006 2
-            2010:2009(ResType) ImageSparseSampleDrefImplicitLod 2005 2006 2008
-            2011:    6(float) CompositeExtract 2010 1
-                              Store 2007 2011
-            2012:     47(int) CompositeExtract 2010 0
-            2013:         192 Load 194(sCubeShadow)
-            2014:    7(fvec4) Load 197(c4)
-            2015:    174(ptr) AccessChain 1988(texel) 173
-            2016:    6(float) CompositeExtract 2014 3
-            2017:2009(ResType) ImageSparseSampleDrefImplicitLod 2013 2014 2016
-            2018:    6(float) CompositeExtract 2017 1
-                              Store 2015 2018
-            2019:     47(int) CompositeExtract 2017 0
-            2020:         215 Load 217(s2DArray)
-            2021:  148(fvec3) Load 150(c3)
-            2022:1991(ResType) ImageSparseSampleImplicitLod 2020 2021
-            2023:    7(fvec4) CompositeExtract 2022 1
-                              Store 1988(texel) 2023
-            2024:     47(int) CompositeExtract 2022 0
-            2025:         224 Load 226(sCubeArray)
-            2026:    7(fvec4) Load 197(c4)
-            2027:1991(ResType) ImageSparseSampleImplicitLod 2025 2026
-            2028:    7(fvec4) CompositeExtract 2027 1
-                              Store 1988(texel) 2028
-            2029:     47(int) CompositeExtract 2027 0
-            2030:         245 Load 247(s2DArrayShadow)
-            2031:    7(fvec4) Load 197(c4)
-            2032:    174(ptr) AccessChain 1988(texel) 173
-            2033:    6(float) CompositeExtract 2031 3
-            2034:2009(ResType) ImageSparseSampleDrefImplicitLod 2030 2031 2033
-            2035:    6(float) CompositeExtract 2034 1
-                              Store 2032 2035
-            2036:     47(int) CompositeExtract 2034 0
-            2037:         257 Load 259(s2DRect)
-            2038:   52(fvec2) Load 138(c2)
-            2039:1991(ResType) ImageSparseSampleImplicitLod 2037 2038
-            2040:    7(fvec4) CompositeExtract 2039 1
-                              Store 1988(texel) 2040
-            2041:     47(int) CompositeExtract 2039 0
-            2042:         266 Load 268(s2DRectShadow)
-            2043:  148(fvec3) Load 150(c3)
-            2044:    174(ptr) AccessChain 1988(texel) 173
-            2045:    6(float) CompositeExtract 2043 2
-            2046:2009(ResType) ImageSparseSampleDrefImplicitLod 2042 2043 2045
-            2047:    6(float) CompositeExtract 2046 1
-                              Store 2044 2047
-            2048:     47(int) CompositeExtract 2046 0
-            2049:         278 Load 280(sCubeArrayShadow)
-            2050:    7(fvec4) Load 197(c4)
-            2051:    6(float) Load 283(compare)
-            2052:    174(ptr) AccessChain 1988(texel) 173
-            2053:2009(ResType) ImageSparseSampleDrefImplicitLod 2049 2050 2051
-            2054:    6(float) CompositeExtract 2053 1
-                              Store 2052 2054
-            2055:     47(int) CompositeExtract 2053 0
-            2056:    7(fvec4) Load 1988(texel)
-                              ReturnValue 2056
+     1943(texel):     63(ptr) Variable Function
+                              Store 1943(texel) 120
+            1944:         133 Load 135(s2D)
+            1945:   52(fvec2) Load 138(c2)
+            1947:1946(ResType) ImageSparseSampleImplicitLod 1944 1945
+            1948:    7(fvec4) CompositeExtract 1947 1
+                              Store 1943(texel) 1948
+            1949:     47(int) CompositeExtract 1947 0
+            1950:         144 Load 146(s3D)
+            1951:  148(fvec3) Load 150(c3)
+            1952:1946(ResType) ImageSparseSampleImplicitLod 1950 1951
+            1953:    7(fvec4) CompositeExtract 1952 1
+                              Store 1943(texel) 1953
+            1954:     47(int) CompositeExtract 1952 0
+            1955:         156 Load 158(sCube)
+            1956:  148(fvec3) Load 150(c3)
+            1957:1946(ResType) ImageSparseSampleImplicitLod 1955 1956
+            1958:    7(fvec4) CompositeExtract 1957 1
+                              Store 1943(texel) 1958
+            1959:     47(int) CompositeExtract 1957 0
+            1960:         180 Load 182(s2DShadow)
+            1961:  148(fvec3) Load 150(c3)
+            1962:    174(ptr) AccessChain 1943(texel) 173
+            1963:    6(float) CompositeExtract 1961 2
+            1965:1964(ResType) ImageSparseSampleDrefImplicitLod 1960 1961 1963
+            1966:    6(float) CompositeExtract 1965 1
+                              Store 1962 1966
+            1967:     47(int) CompositeExtract 1965 0
+            1968:         192 Load 194(sCubeShadow)
+            1969:    7(fvec4) Load 197(c4)
+            1970:    174(ptr) AccessChain 1943(texel) 173
+            1971:    6(float) CompositeExtract 1969 3
+            1972:1964(ResType) ImageSparseSampleDrefImplicitLod 1968 1969 1971
+            1973:    6(float) CompositeExtract 1972 1
+                              Store 1970 1973
+            1974:     47(int) CompositeExtract 1972 0
+            1975:         215 Load 217(s2DArray)
+            1976:  148(fvec3) Load 150(c3)
+            1977:1946(ResType) ImageSparseSampleImplicitLod 1975 1976
+            1978:    7(fvec4) CompositeExtract 1977 1
+                              Store 1943(texel) 1978
+            1979:     47(int) CompositeExtract 1977 0
+            1980:         224 Load 226(sCubeArray)
+            1981:    7(fvec4) Load 197(c4)
+            1982:1946(ResType) ImageSparseSampleImplicitLod 1980 1981
+            1983:    7(fvec4) CompositeExtract 1982 1
+                              Store 1943(texel) 1983
+            1984:     47(int) CompositeExtract 1982 0
+            1985:         245 Load 247(s2DArrayShadow)
+            1986:    7(fvec4) Load 197(c4)
+            1987:    174(ptr) AccessChain 1943(texel) 173
+            1988:    6(float) CompositeExtract 1986 3
+            1989:1964(ResType) ImageSparseSampleDrefImplicitLod 1985 1986 1988
+            1990:    6(float) CompositeExtract 1989 1
+                              Store 1987 1990
+            1991:     47(int) CompositeExtract 1989 0
+            1992:         257 Load 259(s2DRect)
+            1993:   52(fvec2) Load 138(c2)
+            1994:1946(ResType) ImageSparseSampleImplicitLod 1992 1993
+            1995:    7(fvec4) CompositeExtract 1994 1
+                              Store 1943(texel) 1995
+            1996:     47(int) CompositeExtract 1994 0
+            1997:         266 Load 268(s2DRectShadow)
+            1998:  148(fvec3) Load 150(c3)
+            1999:    174(ptr) AccessChain 1943(texel) 173
+            2000:    6(float) CompositeExtract 1998 2
+            2001:1964(ResType) ImageSparseSampleDrefImplicitLod 1997 1998 2000
+            2002:    6(float) CompositeExtract 2001 1
+                              Store 1999 2002
+            2003:     47(int) CompositeExtract 2001 0
+            2004:         278 Load 280(sCubeArrayShadow)
+            2005:    7(fvec4) Load 197(c4)
+            2006:    6(float) Load 283(compare)
+            2007:    174(ptr) AccessChain 1943(texel) 173
+            2008:1964(ResType) ImageSparseSampleDrefImplicitLod 2004 2005 2006
+            2009:    6(float) CompositeExtract 2008 1
+                              Store 2007 2009
+            2010:     47(int) CompositeExtract 2008 0
+            2011:    7(fvec4) Load 1943(texel)
+                              ReturnValue 2011
                               FunctionEnd
 70(testSparseTextureLod():    7(fvec4) Function None 8
               71:             Label
-     2059(texel):     63(ptr) Variable Function
-                              Store 2059(texel) 120
-            2060:         133 Load 135(s2D)
-            2061:   52(fvec2) Load 138(c2)
-            2062:    6(float) Load 371(lod)
-            2063:1991(ResType) ImageSparseSampleExplicitLod 2060 2061 Lod 2062
-            2064:    7(fvec4) CompositeExtract 2063 1
-                              Store 2059(texel) 2064
-            2065:     47(int) CompositeExtract 2063 0
-            2066:         144 Load 146(s3D)
-            2067:  148(fvec3) Load 150(c3)
-            2068:    6(float) Load 371(lod)
-            2069:1991(ResType) ImageSparseSampleExplicitLod 2066 2067 Lod 2068
+     2014(texel):     63(ptr) Variable Function
+                              Store 2014(texel) 120
+            2015:         133 Load 135(s2D)
+            2016:   52(fvec2) Load 138(c2)
+            2017:    6(float) Load 371(lod)
+            2018:1946(ResType) ImageSparseSampleExplicitLod 2015 2016 Lod 2017
+            2019:    7(fvec4) CompositeExtract 2018 1
+                              Store 2014(texel) 2019
+            2020:     47(int) CompositeExtract 2018 0
+            2021:         144 Load 146(s3D)
+            2022:  148(fvec3) Load 150(c3)
+            2023:    6(float) Load 371(lod)
+            2024:1946(ResType) ImageSparseSampleExplicitLod 2021 2022 Lod 2023
+            2025:    7(fvec4) CompositeExtract 2024 1
+                              Store 2014(texel) 2025
+            2026:     47(int) CompositeExtract 2024 0
+            2027:         156 Load 158(sCube)
+            2028:  148(fvec3) Load 150(c3)
+            2029:    6(float) Load 371(lod)
+            2030:1946(ResType) ImageSparseSampleExplicitLod 2027 2028 Lod 2029
+            2031:    7(fvec4) CompositeExtract 2030 1
+                              Store 2014(texel) 2031
+            2032:     47(int) CompositeExtract 2030 0
+            2033:         180 Load 182(s2DShadow)
+            2034:  148(fvec3) Load 150(c3)
+            2035:    6(float) Load 371(lod)
+            2036:    174(ptr) AccessChain 2014(texel) 173
+            2037:    6(float) CompositeExtract 2034 2
+            2038:1964(ResType) ImageSparseSampleDrefExplicitLod 2033 2034 2037 Lod 2035
+            2039:    6(float) CompositeExtract 2038 1
+                              Store 2036 2039
+            2040:     47(int) CompositeExtract 2038 0
+            2041:         215 Load 217(s2DArray)
+            2042:  148(fvec3) Load 150(c3)
+            2043:    6(float) Load 371(lod)
+            2044:1946(ResType) ImageSparseSampleExplicitLod 2041 2042 Lod 2043
+            2045:    7(fvec4) CompositeExtract 2044 1
+                              Store 2014(texel) 2045
+            2046:     47(int) CompositeExtract 2044 0
+            2047:         224 Load 226(sCubeArray)
+            2048:    7(fvec4) Load 197(c4)
+            2049:    6(float) Load 371(lod)
+            2050:1946(ResType) ImageSparseSampleExplicitLod 2047 2048 Lod 2049
+            2051:    7(fvec4) CompositeExtract 2050 1
+                              Store 2014(texel) 2051
+            2052:     47(int) CompositeExtract 2050 0
+            2053:    7(fvec4) Load 2014(texel)
+                              ReturnValue 2053
+                              FunctionEnd
+72(testSparseTextureOffset():    7(fvec4) Function None 8
+              73:             Label
+     2056(texel):     63(ptr) Variable Function
+                              Store 2056(texel) 120
+            2057:         133 Load 135(s2D)
+            2058:   52(fvec2) Load 138(c2)
+            2059:1946(ResType) ImageSparseSampleImplicitLod 2057 2058 ConstOffset 452
+            2060:    7(fvec4) CompositeExtract 2059 1
+                              Store 2056(texel) 2060
+            2061:     47(int) CompositeExtract 2059 0
+            2062:         144 Load 146(s3D)
+            2063:  148(fvec3) Load 150(c3)
+            2064:1946(ResType) ImageSparseSampleImplicitLod 2062 2063 ConstOffset 459
+            2065:    7(fvec4) CompositeExtract 2064 1
+                              Store 2056(texel) 2065
+            2066:     47(int) CompositeExtract 2064 0
+            2067:         257 Load 259(s2DRect)
+            2068:   52(fvec2) Load 138(c2)
+            2069:1946(ResType) ImageSparseSampleImplicitLod 2067 2068 ConstOffset 452
             2070:    7(fvec4) CompositeExtract 2069 1
-                              Store 2059(texel) 2070
+                              Store 2056(texel) 2070
             2071:     47(int) CompositeExtract 2069 0
-            2072:         156 Load 158(sCube)
+            2072:         266 Load 268(s2DRectShadow)
             2073:  148(fvec3) Load 150(c3)
-            2074:    6(float) Load 371(lod)
-            2075:1991(ResType) ImageSparseSampleExplicitLod 2072 2073 Lod 2074
-            2076:    7(fvec4) CompositeExtract 2075 1
-                              Store 2059(texel) 2076
-            2077:     47(int) CompositeExtract 2075 0
-            2078:         180 Load 182(s2DShadow)
-            2079:  148(fvec3) Load 150(c3)
-            2080:    6(float) Load 371(lod)
-            2081:    174(ptr) AccessChain 2059(texel) 173
-            2082:    6(float) CompositeExtract 2079 2
-            2083:2009(ResType) ImageSparseSampleDrefExplicitLod 2078 2079 2082 Lod 2080
+            2074:    174(ptr) AccessChain 2056(texel) 173
+            2075:    6(float) CompositeExtract 2073 2
+            2076:1964(ResType) ImageSparseSampleDrefImplicitLod 2072 2073 2075 ConstOffset 452
+            2077:    6(float) CompositeExtract 2076 1
+                              Store 2074 2077
+            2078:     47(int) CompositeExtract 2076 0
+            2079:         180 Load 182(s2DShadow)
+            2080:  148(fvec3) Load 150(c3)
+            2081:    174(ptr) AccessChain 2056(texel) 173
+            2082:    6(float) CompositeExtract 2080 2
+            2083:1964(ResType) ImageSparseSampleDrefImplicitLod 2079 2080 2082 ConstOffset 452
             2084:    6(float) CompositeExtract 2083 1
                               Store 2081 2084
             2085:     47(int) CompositeExtract 2083 0
             2086:         215 Load 217(s2DArray)
             2087:  148(fvec3) Load 150(c3)
-            2088:    6(float) Load 371(lod)
-            2089:1991(ResType) ImageSparseSampleExplicitLod 2086 2087 Lod 2088
-            2090:    7(fvec4) CompositeExtract 2089 1
-                              Store 2059(texel) 2090
-            2091:     47(int) CompositeExtract 2089 0
-            2092:         224 Load 226(sCubeArray)
-            2093:    7(fvec4) Load 197(c4)
-            2094:    6(float) Load 371(lod)
-            2095:1991(ResType) ImageSparseSampleExplicitLod 2092 2093 Lod 2094
-            2096:    7(fvec4) CompositeExtract 2095 1
-                              Store 2059(texel) 2096
+            2088:1946(ResType) ImageSparseSampleImplicitLod 2086 2087 ConstOffset 452
+            2089:    7(fvec4) CompositeExtract 2088 1
+                              Store 2056(texel) 2089
+            2090:     47(int) CompositeExtract 2088 0
+            2091:         245 Load 247(s2DArrayShadow)
+            2092:    7(fvec4) Load 197(c4)
+            2093:    174(ptr) AccessChain 2056(texel) 173
+            2094:    6(float) CompositeExtract 2092 3
+            2095:1964(ResType) ImageSparseSampleDrefImplicitLod 2091 2092 2094 ConstOffset 452
+            2096:    6(float) CompositeExtract 2095 1
+                              Store 2093 2096
             2097:     47(int) CompositeExtract 2095 0
-            2098:    7(fvec4) Load 2059(texel)
+            2098:    7(fvec4) Load 2056(texel)
                               ReturnValue 2098
                               FunctionEnd
-72(testSparseTextureOffset():    7(fvec4) Function None 8
-              73:             Label
+74(testSparseTextureLodOffset():    7(fvec4) Function None 8
+              75:             Label
      2101(texel):     63(ptr) Variable Function
                               Store 2101(texel) 120
             2102:         133 Load 135(s2D)
             2103:   52(fvec2) Load 138(c2)
-            2104:1991(ResType) ImageSparseSampleImplicitLod 2102 2103 ConstOffset 452
-            2105:    7(fvec4) CompositeExtract 2104 1
-                              Store 2101(texel) 2105
-            2106:     47(int) CompositeExtract 2104 0
-            2107:         144 Load 146(s3D)
-            2108:  148(fvec3) Load 150(c3)
-            2109:1991(ResType) ImageSparseSampleImplicitLod 2107 2108 ConstOffset 459
-            2110:    7(fvec4) CompositeExtract 2109 1
-                              Store 2101(texel) 2110
-            2111:     47(int) CompositeExtract 2109 0
-            2112:         257 Load 259(s2DRect)
-            2113:   52(fvec2) Load 138(c2)
-            2114:1991(ResType) ImageSparseSampleImplicitLod 2112 2113 ConstOffset 452
-            2115:    7(fvec4) CompositeExtract 2114 1
-                              Store 2101(texel) 2115
-            2116:     47(int) CompositeExtract 2114 0
-            2117:         266 Load 268(s2DRectShadow)
-            2118:  148(fvec3) Load 150(c3)
-            2119:    174(ptr) AccessChain 2101(texel) 173
-            2120:    6(float) CompositeExtract 2118 2
-            2121:2009(ResType) ImageSparseSampleDrefImplicitLod 2117 2118 2120 ConstOffset 452
-            2122:    6(float) CompositeExtract 2121 1
-                              Store 2119 2122
-            2123:     47(int) CompositeExtract 2121 0
-            2124:         180 Load 182(s2DShadow)
-            2125:  148(fvec3) Load 150(c3)
-            2126:    174(ptr) AccessChain 2101(texel) 173
-            2127:    6(float) CompositeExtract 2125 2
-            2128:2009(ResType) ImageSparseSampleDrefImplicitLod 2124 2125 2127 ConstOffset 452
-            2129:    6(float) CompositeExtract 2128 1
-                              Store 2126 2129
-            2130:     47(int) CompositeExtract 2128 0
-            2131:         215 Load 217(s2DArray)
-            2132:  148(fvec3) Load 150(c3)
-            2133:1991(ResType) ImageSparseSampleImplicitLod 2131 2132 ConstOffset 452
-            2134:    7(fvec4) CompositeExtract 2133 1
-                              Store 2101(texel) 2134
-            2135:     47(int) CompositeExtract 2133 0
-            2136:         245 Load 247(s2DArrayShadow)
-            2137:    7(fvec4) Load 197(c4)
-            2138:    174(ptr) AccessChain 2101(texel) 173
-            2139:    6(float) CompositeExtract 2137 3
-            2140:2009(ResType) ImageSparseSampleDrefImplicitLod 2136 2137 2139 ConstOffset 452
-            2141:    6(float) CompositeExtract 2140 1
-                              Store 2138 2141
-            2142:     47(int) CompositeExtract 2140 0
-            2143:    7(fvec4) Load 2101(texel)
-                              ReturnValue 2143
-                              FunctionEnd
-74(testSparseTextureLodOffset():    7(fvec4) Function None 8
-              75:             Label
-     2146(texel):     63(ptr) Variable Function
-                              Store 2146(texel) 120
-            2147:         133 Load 135(s2D)
-            2148:   52(fvec2) Load 138(c2)
-            2149:    6(float) Load 371(lod)
-            2150:1991(ResType) ImageSparseSampleExplicitLod 2147 2148 Lod ConstOffset 2149 452
-            2151:    7(fvec4) CompositeExtract 2150 1
-                              Store 2146(texel) 2151
-            2152:     47(int) CompositeExtract 2150 0
-            2153:         144 Load 146(s3D)
-            2154:  148(fvec3) Load 150(c3)
-            2155:    6(float) Load 371(lod)
-            2156:1991(ResType) ImageSparseSampleExplicitLod 2153 2154 Lod ConstOffset 2155 459
-            2157:    7(fvec4) CompositeExtract 2156 1
-                              Store 2146(texel) 2157
-            2158:     47(int) CompositeExtract 2156 0
-            2159:         180 Load 182(s2DShadow)
-            2160:  148(fvec3) Load 150(c3)
-            2161:    6(float) Load 371(lod)
-            2162:    174(ptr) AccessChain 2146(texel) 173
-            2163:    6(float) CompositeExtract 2160 2
-            2164:2009(ResType) ImageSparseSampleDrefExplicitLod 2159 2160 2163 Lod ConstOffset 2161 452
-            2165:    6(float) CompositeExtract 2164 1
-                              Store 2162 2165
-            2166:     47(int) CompositeExtract 2164 0
-            2167:         215 Load 217(s2DArray)
-            2168:  148(fvec3) Load 150(c3)
-            2169:    6(float) Load 371(lod)
-            2170:1991(ResType) ImageSparseSampleExplicitLod 2167 2168 Lod ConstOffset 2169 452
-            2171:    7(fvec4) CompositeExtract 2170 1
-                              Store 2146(texel) 2171
-            2172:     47(int) CompositeExtract 2170 0
-            2173:    7(fvec4) Load 2146(texel)
-                              ReturnValue 2173
+            2104:    6(float) Load 371(lod)
+            2105:1946(ResType) ImageSparseSampleExplicitLod 2102 2103 Lod ConstOffset 2104 452
+            2106:    7(fvec4) CompositeExtract 2105 1
+                              Store 2101(texel) 2106
+            2107:     47(int) CompositeExtract 2105 0
+            2108:         144 Load 146(s3D)
+            2109:  148(fvec3) Load 150(c3)
+            2110:    6(float) Load 371(lod)
+            2111:1946(ResType) ImageSparseSampleExplicitLod 2108 2109 Lod ConstOffset 2110 459
+            2112:    7(fvec4) CompositeExtract 2111 1
+                              Store 2101(texel) 2112
+            2113:     47(int) CompositeExtract 2111 0
+            2114:         180 Load 182(s2DShadow)
+            2115:  148(fvec3) Load 150(c3)
+            2116:    6(float) Load 371(lod)
+            2117:    174(ptr) AccessChain 2101(texel) 173
+            2118:    6(float) CompositeExtract 2115 2
+            2119:1964(ResType) ImageSparseSampleDrefExplicitLod 2114 2115 2118 Lod ConstOffset 2116 452
+            2120:    6(float) CompositeExtract 2119 1
+                              Store 2117 2120
+            2121:     47(int) CompositeExtract 2119 0
+            2122:         215 Load 217(s2DArray)
+            2123:  148(fvec3) Load 150(c3)
+            2124:    6(float) Load 371(lod)
+            2125:1946(ResType) ImageSparseSampleExplicitLod 2122 2123 Lod ConstOffset 2124 452
+            2126:    7(fvec4) CompositeExtract 2125 1
+                              Store 2101(texel) 2126
+            2127:     47(int) CompositeExtract 2125 0
+            2128:    7(fvec4) Load 2101(texel)
+                              ReturnValue 2128
                               FunctionEnd
 76(testSparseTextureGrad():    7(fvec4) Function None 8
               77:             Label
-     2176(texel):     63(ptr) Variable Function
-                              Store 2176(texel) 120
-            2177:         133 Load 135(s2D)
-            2178:   52(fvec2) Load 138(c2)
-            2179:   52(fvec2) Load 874(dPdxy2)
-            2180:   52(fvec2) Load 874(dPdxy2)
-            2181:1991(ResType) ImageSparseSampleExplicitLod 2177 2178 Grad 2179 2180
-            2182:    7(fvec4) CompositeExtract 2181 1
-                              Store 2176(texel) 2182
-            2183:     47(int) CompositeExtract 2181 0
-            2184:         144 Load 146(s3D)
-            2185:  148(fvec3) Load 150(c3)
-            2186:  148(fvec3) Load 882(dPdxy3)
-            2187:  148(fvec3) Load 882(dPdxy3)
-            2188:1991(ResType) ImageSparseSampleExplicitLod 2184 2185 Grad 2186 2187
-            2189:    7(fvec4) CompositeExtract 2188 1
-                              Store 2176(texel) 2189
-            2190:     47(int) CompositeExtract 2188 0
-            2191:         156 Load 158(sCube)
-            2192:  148(fvec3) Load 150(c3)
-            2193:  148(fvec3) Load 882(dPdxy3)
-            2194:  148(fvec3) Load 882(dPdxy3)
-            2195:1991(ResType) ImageSparseSampleExplicitLod 2191 2192 Grad 2193 2194
-            2196:    7(fvec4) CompositeExtract 2195 1
-                              Store 2176(texel) 2196
-            2197:     47(int) CompositeExtract 2195 0
-            2198:         257 Load 259(s2DRect)
-            2199:   52(fvec2) Load 138(c2)
-            2200:   52(fvec2) Load 874(dPdxy2)
-            2201:   52(fvec2) Load 874(dPdxy2)
-            2202:1991(ResType) ImageSparseSampleExplicitLod 2198 2199 Grad 2200 2201
-            2203:    7(fvec4) CompositeExtract 2202 1
-                              Store 2176(texel) 2203
-            2204:     47(int) CompositeExtract 2202 0
-            2205:         266 Load 268(s2DRectShadow)
-            2206:  148(fvec3) Load 150(c3)
-            2207:   52(fvec2) Load 874(dPdxy2)
-            2208:   52(fvec2) Load 874(dPdxy2)
-            2209:    174(ptr) AccessChain 2176(texel) 173
-            2210:    6(float) CompositeExtract 2206 2
-            2211:2009(ResType) ImageSparseSampleDrefExplicitLod 2205 2206 2210 Grad 2207 2208
-            2212:    6(float) CompositeExtract 2211 1
-                              Store 2209 2212
-            2213:     47(int) CompositeExtract 2211 0
-            2214:         180 Load 182(s2DShadow)
-            2215:  148(fvec3) Load 150(c3)
-            2216:   52(fvec2) Load 874(dPdxy2)
-            2217:   52(fvec2) Load 874(dPdxy2)
-            2218:    174(ptr) AccessChain 2176(texel) 173
-            2219:    6(float) CompositeExtract 2215 2
-            2220:2009(ResType) ImageSparseSampleDrefExplicitLod 2214 2215 2219 Grad 2216 2217
-            2221:    6(float) CompositeExtract 2220 1
-                              Store 2218 2221
-            2222:     47(int) CompositeExtract 2220 0
-            2223:         192 Load 194(sCubeShadow)
-            2224:    7(fvec4) Load 197(c4)
-            2225:  148(fvec3) Load 882(dPdxy3)
-            2226:  148(fvec3) Load 882(dPdxy3)
-            2227:    174(ptr) AccessChain 2176(texel) 173
-            2228:    6(float) CompositeExtract 2224 3
-            2229:2009(ResType) ImageSparseSampleDrefExplicitLod 2223 2224 2228 Grad 2225 2226
-            2230:    6(float) CompositeExtract 2229 1
-                              Store 2227 2230
-            2231:     47(int) CompositeExtract 2229 0
-            2232:         215 Load 217(s2DArray)
-            2233:  148(fvec3) Load 150(c3)
-            2234:   52(fvec2) Load 874(dPdxy2)
-            2235:   52(fvec2) Load 874(dPdxy2)
-            2236:1991(ResType) ImageSparseSampleExplicitLod 2232 2233 Grad 2234 2235
-            2237:    7(fvec4) CompositeExtract 2236 1
-                              Store 2176(texel) 2237
-            2238:     47(int) CompositeExtract 2236 0
-            2239:         245 Load 247(s2DArrayShadow)
-            2240:    7(fvec4) Load 197(c4)
-            2241:   52(fvec2) Load 874(dPdxy2)
-            2242:   52(fvec2) Load 874(dPdxy2)
-            2243:    174(ptr) AccessChain 2176(texel) 173
-            2244:    6(float) CompositeExtract 2240 3
-            2245:2009(ResType) ImageSparseSampleDrefExplicitLod 2239 2240 2244 Grad 2241 2242
-            2246:    6(float) CompositeExtract 2245 1
-                              Store 2243 2246
-            2247:     47(int) CompositeExtract 2245 0
-            2248:         224 Load 226(sCubeArray)
-            2249:    7(fvec4) Load 197(c4)
-            2250:  148(fvec3) Load 882(dPdxy3)
-            2251:  148(fvec3) Load 882(dPdxy3)
-            2252:1991(ResType) ImageSparseSampleExplicitLod 2248 2249 Grad 2250 2251
-            2253:    7(fvec4) CompositeExtract 2252 1
-                              Store 2176(texel) 2253
-            2254:     47(int) CompositeExtract 2252 0
-            2255:    7(fvec4) Load 2176(texel)
-                              ReturnValue 2255
+     2131(texel):     63(ptr) Variable Function
+                              Store 2131(texel) 120
+            2132:         133 Load 135(s2D)
+            2133:   52(fvec2) Load 138(c2)
+            2134:   52(fvec2) Load 873(dPdxy2)
+            2135:1946(ResType) ImageSparseSampleExplicitLod 2132 2133 Grad 2134 2134
+            2136:    7(fvec4) CompositeExtract 2135 1
+                              Store 2131(texel) 2136
+            2137:     47(int) CompositeExtract 2135 0
+            2138:         144 Load 146(s3D)
+            2139:  148(fvec3) Load 150(c3)
+            2140:  148(fvec3) Load 880(dPdxy3)
+            2141:1946(ResType) ImageSparseSampleExplicitLod 2138 2139 Grad 2140 2140
+            2142:    7(fvec4) CompositeExtract 2141 1
+                              Store 2131(texel) 2142
+            2143:     47(int) CompositeExtract 2141 0
+            2144:         156 Load 158(sCube)
+            2145:  148(fvec3) Load 150(c3)
+            2146:  148(fvec3) Load 880(dPdxy3)
+            2147:1946(ResType) ImageSparseSampleExplicitLod 2144 2145 Grad 2146 2146
+            2148:    7(fvec4) CompositeExtract 2147 1
+                              Store 2131(texel) 2148
+            2149:     47(int) CompositeExtract 2147 0
+            2150:         257 Load 259(s2DRect)
+            2151:   52(fvec2) Load 138(c2)
+            2152:   52(fvec2) Load 873(dPdxy2)
+            2153:1946(ResType) ImageSparseSampleExplicitLod 2150 2151 Grad 2152 2152
+            2154:    7(fvec4) CompositeExtract 2153 1
+                              Store 2131(texel) 2154
+            2155:     47(int) CompositeExtract 2153 0
+            2156:         266 Load 268(s2DRectShadow)
+            2157:  148(fvec3) Load 150(c3)
+            2158:   52(fvec2) Load 873(dPdxy2)
+            2159:    174(ptr) AccessChain 2131(texel) 173
+            2160:    6(float) CompositeExtract 2157 2
+            2161:1964(ResType) ImageSparseSampleDrefExplicitLod 2156 2157 2160 Grad 2158 2158
+            2162:    6(float) CompositeExtract 2161 1
+                              Store 2159 2162
+            2163:     47(int) CompositeExtract 2161 0
+            2164:         180 Load 182(s2DShadow)
+            2165:  148(fvec3) Load 150(c3)
+            2166:   52(fvec2) Load 873(dPdxy2)
+            2167:    174(ptr) AccessChain 2131(texel) 173
+            2168:    6(float) CompositeExtract 2165 2
+            2169:1964(ResType) ImageSparseSampleDrefExplicitLod 2164 2165 2168 Grad 2166 2166
+            2170:    6(float) CompositeExtract 2169 1
+                              Store 2167 2170
+            2171:     47(int) CompositeExtract 2169 0
+            2172:         192 Load 194(sCubeShadow)
+            2173:    7(fvec4) Load 197(c4)
+            2174:  148(fvec3) Load 880(dPdxy3)
+            2175:    174(ptr) AccessChain 2131(texel) 173
+            2176:    6(float) CompositeExtract 2173 3
+            2177:1964(ResType) ImageSparseSampleDrefExplicitLod 2172 2173 2176 Grad 2174 2174
+            2178:    6(float) CompositeExtract 2177 1
+                              Store 2175 2178
+            2179:     47(int) CompositeExtract 2177 0
+            2180:         215 Load 217(s2DArray)
+            2181:  148(fvec3) Load 150(c3)
+            2182:   52(fvec2) Load 873(dPdxy2)
+            2183:1946(ResType) ImageSparseSampleExplicitLod 2180 2181 Grad 2182 2182
+            2184:    7(fvec4) CompositeExtract 2183 1
+                              Store 2131(texel) 2184
+            2185:     47(int) CompositeExtract 2183 0
+            2186:         245 Load 247(s2DArrayShadow)
+            2187:    7(fvec4) Load 197(c4)
+            2188:   52(fvec2) Load 873(dPdxy2)
+            2189:    174(ptr) AccessChain 2131(texel) 173
+            2190:    6(float) CompositeExtract 2187 3
+            2191:1964(ResType) ImageSparseSampleDrefExplicitLod 2186 2187 2190 Grad 2188 2188
+            2192:    6(float) CompositeExtract 2191 1
+                              Store 2189 2192
+            2193:     47(int) CompositeExtract 2191 0
+            2194:         224 Load 226(sCubeArray)
+            2195:    7(fvec4) Load 197(c4)
+            2196:  148(fvec3) Load 880(dPdxy3)
+            2197:1946(ResType) ImageSparseSampleExplicitLod 2194 2195 Grad 2196 2196
+            2198:    7(fvec4) CompositeExtract 2197 1
+                              Store 2131(texel) 2198
+            2199:     47(int) CompositeExtract 2197 0
+            2200:    7(fvec4) Load 2131(texel)
+                              ReturnValue 2200
                               FunctionEnd
 78(testSparseTextureGradOffset():    7(fvec4) Function None 8
               79:             Label
-     2258(texel):     63(ptr) Variable Function
-                              Store 2258(texel) 120
-            2259:         133 Load 135(s2D)
-            2260:   52(fvec2) Load 138(c2)
-            2261:   52(fvec2) Load 874(dPdxy2)
-            2262:   52(fvec2) Load 874(dPdxy2)
-            2263:1991(ResType) ImageSparseSampleExplicitLod 2259 2260 Grad ConstOffset 2261 2262 452
-            2264:    7(fvec4) CompositeExtract 2263 1
-                              Store 2258(texel) 2264
-            2265:     47(int) CompositeExtract 2263 0
-            2266:         144 Load 146(s3D)
-            2267:  148(fvec3) Load 150(c3)
-            2268:  148(fvec3) Load 882(dPdxy3)
-            2269:  148(fvec3) Load 882(dPdxy3)
-            2270:1991(ResType) ImageSparseSampleExplicitLod 2266 2267 Grad ConstOffset 2268 2269 459
-            2271:    7(fvec4) CompositeExtract 2270 1
-                              Store 2258(texel) 2271
-            2272:     47(int) CompositeExtract 2270 0
-            2273:         257 Load 259(s2DRect)
-            2274:   52(fvec2) Load 138(c2)
-            2275:   52(fvec2) Load 874(dPdxy2)
-            2276:   52(fvec2) Load 874(dPdxy2)
-            2277:1991(ResType) ImageSparseSampleExplicitLod 2273 2274 Grad ConstOffset 2275 2276 452
-            2278:    7(fvec4) CompositeExtract 2277 1
-                              Store 2258(texel) 2278
-            2279:     47(int) CompositeExtract 2277 0
-            2280:         266 Load 268(s2DRectShadow)
-            2281:  148(fvec3) Load 150(c3)
-            2282:   52(fvec2) Load 874(dPdxy2)
-            2283:   52(fvec2) Load 874(dPdxy2)
-            2284:    174(ptr) AccessChain 2258(texel) 173
-            2285:    6(float) CompositeExtract 2281 2
-            2286:2009(ResType) ImageSparseSampleDrefExplicitLod 2280 2281 2285 Grad ConstOffset 2282 2283 452
-            2287:    6(float) CompositeExtract 2286 1
-                              Store 2284 2287
-            2288:     47(int) CompositeExtract 2286 0
-            2289:         180 Load 182(s2DShadow)
-            2290:  148(fvec3) Load 150(c3)
-            2291:   52(fvec2) Load 874(dPdxy2)
-            2292:   52(fvec2) Load 874(dPdxy2)
-            2293:    174(ptr) AccessChain 2258(texel) 173
-            2294:    6(float) CompositeExtract 2290 2
-            2295:2009(ResType) ImageSparseSampleDrefExplicitLod 2289 2290 2294 Grad ConstOffset 2291 2292 452
-            2296:    6(float) CompositeExtract 2295 1
-                              Store 2293 2296
-            2297:     47(int) CompositeExtract 2295 0
-            2298:         215 Load 217(s2DArray)
-            2299:  148(fvec3) Load 150(c3)
-            2300:   52(fvec2) Load 874(dPdxy2)
-            2301:   52(fvec2) Load 874(dPdxy2)
-            2302:1991(ResType) ImageSparseSampleExplicitLod 2298 2299 Grad ConstOffset 2300 2301 452
-            2303:    7(fvec4) CompositeExtract 2302 1
-                              Store 2258(texel) 2303
-            2304:     47(int) CompositeExtract 2302 0
-            2305:         245 Load 247(s2DArrayShadow)
-            2306:    7(fvec4) Load 197(c4)
-            2307:   52(fvec2) Load 874(dPdxy2)
-            2308:   52(fvec2) Load 874(dPdxy2)
-            2309:    174(ptr) AccessChain 2258(texel) 173
-            2310:    6(float) CompositeExtract 2306 3
-            2311:2009(ResType) ImageSparseSampleDrefExplicitLod 2305 2306 2310 Grad ConstOffset 2307 2308 452
-            2312:    6(float) CompositeExtract 2311 1
-                              Store 2309 2312
-            2313:     47(int) CompositeExtract 2311 0
-            2314:    7(fvec4) Load 2258(texel)
-                              ReturnValue 2314
+     2203(texel):     63(ptr) Variable Function
+                              Store 2203(texel) 120
+            2204:         133 Load 135(s2D)
+            2205:   52(fvec2) Load 138(c2)
+            2206:   52(fvec2) Load 873(dPdxy2)
+            2207:1946(ResType) ImageSparseSampleExplicitLod 2204 2205 Grad ConstOffset 2206 2206 452
+            2208:    7(fvec4) CompositeExtract 2207 1
+                              Store 2203(texel) 2208
+            2209:     47(int) CompositeExtract 2207 0
+            2210:         144 Load 146(s3D)
+            2211:  148(fvec3) Load 150(c3)
+            2212:  148(fvec3) Load 880(dPdxy3)
+            2213:1946(ResType) ImageSparseSampleExplicitLod 2210 2211 Grad ConstOffset 2212 2212 459
+            2214:    7(fvec4) CompositeExtract 2213 1
+                              Store 2203(texel) 2214
+            2215:     47(int) CompositeExtract 2213 0
+            2216:         257 Load 259(s2DRect)
+            2217:   52(fvec2) Load 138(c2)
+            2218:   52(fvec2) Load 873(dPdxy2)
+            2219:1946(ResType) ImageSparseSampleExplicitLod 2216 2217 Grad ConstOffset 2218 2218 452
+            2220:    7(fvec4) CompositeExtract 2219 1
+                              Store 2203(texel) 2220
+            2221:     47(int) CompositeExtract 2219 0
+            2222:         266 Load 268(s2DRectShadow)
+            2223:  148(fvec3) Load 150(c3)
+            2224:   52(fvec2) Load 873(dPdxy2)
+            2225:    174(ptr) AccessChain 2203(texel) 173
+            2226:    6(float) CompositeExtract 2223 2
+            2227:1964(ResType) ImageSparseSampleDrefExplicitLod 2222 2223 2226 Grad ConstOffset 2224 2224 452
+            2228:    6(float) CompositeExtract 2227 1
+                              Store 2225 2228
+            2229:     47(int) CompositeExtract 2227 0
+            2230:         180 Load 182(s2DShadow)
+            2231:  148(fvec3) Load 150(c3)
+            2232:   52(fvec2) Load 873(dPdxy2)
+            2233:    174(ptr) AccessChain 2203(texel) 173
+            2234:    6(float) CompositeExtract 2231 2
+            2235:1964(ResType) ImageSparseSampleDrefExplicitLod 2230 2231 2234 Grad ConstOffset 2232 2232 452
+            2236:    6(float) CompositeExtract 2235 1
+                              Store 2233 2236
+            2237:     47(int) CompositeExtract 2235 0
+            2238:         215 Load 217(s2DArray)
+            2239:  148(fvec3) Load 150(c3)
+            2240:   52(fvec2) Load 873(dPdxy2)
+            2241:1946(ResType) ImageSparseSampleExplicitLod 2238 2239 Grad ConstOffset 2240 2240 452
+            2242:    7(fvec4) CompositeExtract 2241 1
+                              Store 2203(texel) 2242
+            2243:     47(int) CompositeExtract 2241 0
+            2244:         245 Load 247(s2DArrayShadow)
+            2245:    7(fvec4) Load 197(c4)
+            2246:   52(fvec2) Load 873(dPdxy2)
+            2247:    174(ptr) AccessChain 2203(texel) 173
+            2248:    6(float) CompositeExtract 2245 3
+            2249:1964(ResType) ImageSparseSampleDrefExplicitLod 2244 2245 2248 Grad ConstOffset 2246 2246 452
+            2250:    6(float) CompositeExtract 2249 1
+                              Store 2247 2250
+            2251:     47(int) CompositeExtract 2249 0
+            2252:    7(fvec4) Load 2203(texel)
+                              ReturnValue 2252
                               FunctionEnd
 80(testSparseTexelFetch():    7(fvec4) Function None 8
               81:             Label
-     2317(texel):     63(ptr) Variable Function
-                              Store 2317(texel) 120
-            2318:         133 Load 135(s2D)
-            2319:   52(fvec2) Load 138(c2)
-            2320:  451(ivec2) ConvertFToS 2319
-            2321:    6(float) Load 371(lod)
-            2322:     47(int) ConvertFToS 2321
-            2323:         132 Image 2318
-            2324:1991(ResType) ImageSparseFetch 2323 2320 Lod 2322
-            2325:    7(fvec4) CompositeExtract 2324 1
-                              Store 2317(texel) 2325
-            2326:     47(int) CompositeExtract 2324 0
-            2327:         144 Load 146(s3D)
-            2328:  148(fvec3) Load 150(c3)
-            2329:  458(ivec3) ConvertFToS 2328
-            2330:    6(float) Load 371(lod)
-            2331:     47(int) ConvertFToS 2330
-            2332:         143 Image 2327
-            2333:1991(ResType) ImageSparseFetch 2332 2329 Lod 2331
-            2334:    7(fvec4) CompositeExtract 2333 1
-                              Store 2317(texel) 2334
-            2335:     47(int) CompositeExtract 2333 0
-            2336:         257 Load 259(s2DRect)
-            2337:   52(fvec2) Load 138(c2)
-            2338:  451(ivec2) ConvertFToS 2337
-            2339:         256 Image 2336
-            2340:1991(ResType) ImageSparseFetch 2339 2338
-            2341:    7(fvec4) CompositeExtract 2340 1
-                              Store 2317(texel) 2341
-            2342:     47(int) CompositeExtract 2340 0
-            2343:         215 Load 217(s2DArray)
-            2344:  148(fvec3) Load 150(c3)
-            2345:  458(ivec3) ConvertFToS 2344
-            2346:    6(float) Load 371(lod)
-            2347:     47(int) ConvertFToS 2346
-            2348:         214 Image 2343
-            2349:1991(ResType) ImageSparseFetch 2348 2345 Lod 2347
-            2350:    7(fvec4) CompositeExtract 2349 1
-                              Store 2317(texel) 2350
-            2351:     47(int) CompositeExtract 2349 0
-            2352:         782 Load 784(s2DMS)
-            2353:   52(fvec2) Load 138(c2)
-            2354:  451(ivec2) ConvertFToS 2353
-            2355:         781 Image 2352
-            2356:1991(ResType) ImageSparseFetch 2355 2354 Sample 445
-            2357:    7(fvec4) CompositeExtract 2356 1
-                              Store 2317(texel) 2357
-            2358:     47(int) CompositeExtract 2356 0
-            2359:         793 Load 795(s2DMSArray)
-            2360:  148(fvec3) Load 150(c3)
-            2361:  458(ivec3) ConvertFToS 2360
-            2362:         792 Image 2359
-            2363:1991(ResType) ImageSparseFetch 2362 2361 Sample 799
-            2364:    7(fvec4) CompositeExtract 2363 1
-                              Store 2317(texel) 2364
-            2365:     47(int) CompositeExtract 2363 0
-            2366:    7(fvec4) Load 2317(texel)
-                              ReturnValue 2366
+     2255(texel):     63(ptr) Variable Function
+                              Store 2255(texel) 120
+            2256:         133 Load 135(s2D)
+            2257:   52(fvec2) Load 138(c2)
+            2258:  451(ivec2) ConvertFToS 2257
+            2259:    6(float) Load 371(lod)
+            2260:     47(int) ConvertFToS 2259
+            2261:         132 Image 2256
+            2262:1946(ResType) ImageSparseFetch 2261 2258 Lod 2260
+            2263:    7(fvec4) CompositeExtract 2262 1
+                              Store 2255(texel) 2263
+            2264:     47(int) CompositeExtract 2262 0
+            2265:         144 Load 146(s3D)
+            2266:  148(fvec3) Load 150(c3)
+            2267:  458(ivec3) ConvertFToS 2266
+            2268:    6(float) Load 371(lod)
+            2269:     47(int) ConvertFToS 2268
+            2270:         143 Image 2265
+            2271:1946(ResType) ImageSparseFetch 2270 2267 Lod 2269
+            2272:    7(fvec4) CompositeExtract 2271 1
+                              Store 2255(texel) 2272
+            2273:     47(int) CompositeExtract 2271 0
+            2274:         257 Load 259(s2DRect)
+            2275:   52(fvec2) Load 138(c2)
+            2276:  451(ivec2) ConvertFToS 2275
+            2277:         256 Image 2274
+            2278:1946(ResType) ImageSparseFetch 2277 2276
+            2279:    7(fvec4) CompositeExtract 2278 1
+                              Store 2255(texel) 2279
+            2280:     47(int) CompositeExtract 2278 0
+            2281:         215 Load 217(s2DArray)
+            2282:  148(fvec3) Load 150(c3)
+            2283:  458(ivec3) ConvertFToS 2282
+            2284:    6(float) Load 371(lod)
+            2285:     47(int) ConvertFToS 2284
+            2286:         214 Image 2281
+            2287:1946(ResType) ImageSparseFetch 2286 2283 Lod 2285
+            2288:    7(fvec4) CompositeExtract 2287 1
+                              Store 2255(texel) 2288
+            2289:     47(int) CompositeExtract 2287 0
+            2290:         782 Load 784(s2DMS)
+            2291:   52(fvec2) Load 138(c2)
+            2292:  451(ivec2) ConvertFToS 2291
+            2293:         781 Image 2290
+            2294:1946(ResType) ImageSparseFetch 2293 2292 Sample 445
+            2295:    7(fvec4) CompositeExtract 2294 1
+                              Store 2255(texel) 2295
+            2296:     47(int) CompositeExtract 2294 0
+            2297:         793 Load 795(s2DMSArray)
+            2298:  148(fvec3) Load 150(c3)
+            2299:  458(ivec3) ConvertFToS 2298
+            2300:         792 Image 2297
+            2301:1946(ResType) ImageSparseFetch 2300 2299 Sample 799
+            2302:    7(fvec4) CompositeExtract 2301 1
+                              Store 2255(texel) 2302
+            2303:     47(int) CompositeExtract 2301 0
+            2304:    7(fvec4) Load 2255(texel)
+                              ReturnValue 2304
                               FunctionEnd
 82(testSparseTexelFetchOffset():    7(fvec4) Function None 8
               83:             Label
-     2369(texel):     63(ptr) Variable Function
-                              Store 2369(texel) 120
-            2370:         133 Load 135(s2D)
-            2371:   52(fvec2) Load 138(c2)
-            2372:  451(ivec2) ConvertFToS 2371
-            2373:    6(float) Load 371(lod)
-            2374:     47(int) ConvertFToS 2373
-            2375:         132 Image 2370
-            2376:1991(ResType) ImageSparseFetch 2375 2372 Lod ConstOffset 2374 452
-            2377:    7(fvec4) CompositeExtract 2376 1
-                              Store 2369(texel) 2377
-            2378:     47(int) CompositeExtract 2376 0
-            2379:         144 Load 146(s3D)
-            2380:  148(fvec3) Load 150(c3)
-            2381:  458(ivec3) ConvertFToS 2380
-            2382:    6(float) Load 371(lod)
-            2383:     47(int) ConvertFToS 2382
-            2384:         143 Image 2379
-            2385:1991(ResType) ImageSparseFetch 2384 2381 Lod ConstOffset 2383 459
-            2386:    7(fvec4) CompositeExtract 2385 1
-                              Store 2369(texel) 2386
-            2387:     47(int) CompositeExtract 2385 0
-            2388:         257 Load 259(s2DRect)
-            2389:   52(fvec2) Load 138(c2)
-            2390:  451(ivec2) ConvertFToS 2389
-            2391:         256 Image 2388
-            2392:1991(ResType) ImageSparseFetch 2391 2390 ConstOffset 452
-            2393:    7(fvec4) CompositeExtract 2392 1
-                              Store 2369(texel) 2393
-            2394:     47(int) CompositeExtract 2392 0
-            2395:         215 Load 217(s2DArray)
-            2396:  148(fvec3) Load 150(c3)
-            2397:  458(ivec3) ConvertFToS 2396
-            2398:    6(float) Load 371(lod)
-            2399:     47(int) ConvertFToS 2398
-            2400:         214 Image 2395
-            2401:1991(ResType) ImageSparseFetch 2400 2397 Lod ConstOffset 2399 452
-            2402:    7(fvec4) CompositeExtract 2401 1
-                              Store 2369(texel) 2402
-            2403:     47(int) CompositeExtract 2401 0
-            2404:    7(fvec4) Load 2369(texel)
-                              ReturnValue 2404
+     2307(texel):     63(ptr) Variable Function
+                              Store 2307(texel) 120
+            2308:         133 Load 135(s2D)
+            2309:   52(fvec2) Load 138(c2)
+            2310:  451(ivec2) ConvertFToS 2309
+            2311:    6(float) Load 371(lod)
+            2312:     47(int) ConvertFToS 2311
+            2313:         132 Image 2308
+            2314:1946(ResType) ImageSparseFetch 2313 2310 Lod ConstOffset 2312 452
+            2315:    7(fvec4) CompositeExtract 2314 1
+                              Store 2307(texel) 2315
+            2316:     47(int) CompositeExtract 2314 0
+            2317:         144 Load 146(s3D)
+            2318:  148(fvec3) Load 150(c3)
+            2319:  458(ivec3) ConvertFToS 2318
+            2320:    6(float) Load 371(lod)
+            2321:     47(int) ConvertFToS 2320
+            2322:         143 Image 2317
+            2323:1946(ResType) ImageSparseFetch 2322 2319 Lod ConstOffset 2321 459
+            2324:    7(fvec4) CompositeExtract 2323 1
+                              Store 2307(texel) 2324
+            2325:     47(int) CompositeExtract 2323 0
+            2326:         257 Load 259(s2DRect)
+            2327:   52(fvec2) Load 138(c2)
+            2328:  451(ivec2) ConvertFToS 2327
+            2329:         256 Image 2326
+            2330:1946(ResType) ImageSparseFetch 2329 2328 ConstOffset 452
+            2331:    7(fvec4) CompositeExtract 2330 1
+                              Store 2307(texel) 2331
+            2332:     47(int) CompositeExtract 2330 0
+            2333:         215 Load 217(s2DArray)
+            2334:  148(fvec3) Load 150(c3)
+            2335:  458(ivec3) ConvertFToS 2334
+            2336:    6(float) Load 371(lod)
+            2337:     47(int) ConvertFToS 2336
+            2338:         214 Image 2333
+            2339:1946(ResType) ImageSparseFetch 2338 2335 Lod ConstOffset 2337 452
+            2340:    7(fvec4) CompositeExtract 2339 1
+                              Store 2307(texel) 2340
+            2341:     47(int) CompositeExtract 2339 0
+            2342:    7(fvec4) Load 2307(texel)
+                              ReturnValue 2342
                               FunctionEnd
 84(testSparseTextureGather():    7(fvec4) Function None 8
               85:             Label
-     2407(texel):     63(ptr) Variable Function
-                              Store 2407(texel) 120
-            2408:         133 Load 135(s2D)
-            2409:   52(fvec2) Load 138(c2)
-            2410:1991(ResType) ImageSparseGather 2408 2409 1275
-            2411:    7(fvec4) CompositeExtract 2410 1
-                              Store 2407(texel) 2411
-            2412:     47(int) CompositeExtract 2410 0
-            2413:         215 Load 217(s2DArray)
-            2414:  148(fvec3) Load 150(c3)
-            2415:1991(ResType) ImageSparseGather 2413 2414 1275
-            2416:    7(fvec4) CompositeExtract 2415 1
-                              Store 2407(texel) 2416
-            2417:     47(int) CompositeExtract 2415 0
-            2418:         156 Load 158(sCube)
-            2419:  148(fvec3) Load 150(c3)
-            2420:1991(ResType) ImageSparseGather 2418 2419 1275
-            2421:    7(fvec4) CompositeExtract 2420 1
-                              Store 2407(texel) 2421
-            2422:     47(int) CompositeExtract 2420 0
-            2423:         224 Load 226(sCubeArray)
-            2424:    7(fvec4) Load 197(c4)
-            2425:1991(ResType) ImageSparseGather 2423 2424 1275
-            2426:    7(fvec4) CompositeExtract 2425 1
-                              Store 2407(texel) 2426
-            2427:     47(int) CompositeExtract 2425 0
-            2428:         257 Load 259(s2DRect)
-            2429:   52(fvec2) Load 138(c2)
-            2430:1991(ResType) ImageSparseGather 2428 2429 1275
-            2431:    7(fvec4) CompositeExtract 2430 1
-                              Store 2407(texel) 2431
-            2432:     47(int) CompositeExtract 2430 0
-            2433:         180 Load 182(s2DShadow)
-            2434:   52(fvec2) Load 138(c2)
-            2435:    6(float) Load 283(compare)
-            2436:1991(ResType) ImageSparseDrefGather 2433 2434 2435
-            2437:    7(fvec4) CompositeExtract 2436 1
-                              Store 2407(texel) 2437
-            2438:     47(int) CompositeExtract 2436 0
-            2439:         245 Load 247(s2DArrayShadow)
-            2440:  148(fvec3) Load 150(c3)
-            2441:    6(float) Load 283(compare)
-            2442:1991(ResType) ImageSparseDrefGather 2439 2440 2441
-            2443:    7(fvec4) CompositeExtract 2442 1
-                              Store 2407(texel) 2443
-            2444:     47(int) CompositeExtract 2442 0
-            2445:         192 Load 194(sCubeShadow)
-            2446:  148(fvec3) Load 150(c3)
-            2447:    6(float) Load 283(compare)
-            2448:1991(ResType) ImageSparseDrefGather 2445 2446 2447
-            2449:    7(fvec4) CompositeExtract 2448 1
-                              Store 2407(texel) 2449
-            2450:     47(int) CompositeExtract 2448 0
-            2451:         278 Load 280(sCubeArrayShadow)
-            2452:    7(fvec4) Load 197(c4)
-            2453:    6(float) Load 283(compare)
-            2454:1991(ResType) ImageSparseDrefGather 2451 2452 2453
-            2455:    7(fvec4) CompositeExtract 2454 1
-                              Store 2407(texel) 2455
-            2456:     47(int) CompositeExtract 2454 0
-            2457:         266 Load 268(s2DRectShadow)
-            2458:   52(fvec2) Load 138(c2)
-            2459:    6(float) Load 283(compare)
-            2460:1991(ResType) ImageSparseDrefGather 2457 2458 2459
-            2461:    7(fvec4) CompositeExtract 2460 1
-                              Store 2407(texel) 2461
-            2462:     47(int) CompositeExtract 2460 0
-            2463:    7(fvec4) Load 2407(texel)
-                              ReturnValue 2463
+     2345(texel):     63(ptr) Variable Function
+                              Store 2345(texel) 120
+            2346:         133 Load 135(s2D)
+            2347:   52(fvec2) Load 138(c2)
+            2348:1946(ResType) ImageSparseGather 2346 2347 1230
+            2349:    7(fvec4) CompositeExtract 2348 1
+                              Store 2345(texel) 2349
+            2350:     47(int) CompositeExtract 2348 0
+            2351:         215 Load 217(s2DArray)
+            2352:  148(fvec3) Load 150(c3)
+            2353:1946(ResType) ImageSparseGather 2351 2352 1230
+            2354:    7(fvec4) CompositeExtract 2353 1
+                              Store 2345(texel) 2354
+            2355:     47(int) CompositeExtract 2353 0
+            2356:         156 Load 158(sCube)
+            2357:  148(fvec3) Load 150(c3)
+            2358:1946(ResType) ImageSparseGather 2356 2357 1230
+            2359:    7(fvec4) CompositeExtract 2358 1
+                              Store 2345(texel) 2359
+            2360:     47(int) CompositeExtract 2358 0
+            2361:         224 Load 226(sCubeArray)
+            2362:    7(fvec4) Load 197(c4)
+            2363:1946(ResType) ImageSparseGather 2361 2362 1230
+            2364:    7(fvec4) CompositeExtract 2363 1
+                              Store 2345(texel) 2364
+            2365:     47(int) CompositeExtract 2363 0
+            2366:         257 Load 259(s2DRect)
+            2367:   52(fvec2) Load 138(c2)
+            2368:1946(ResType) ImageSparseGather 2366 2367 1230
+            2369:    7(fvec4) CompositeExtract 2368 1
+                              Store 2345(texel) 2369
+            2370:     47(int) CompositeExtract 2368 0
+            2371:         180 Load 182(s2DShadow)
+            2372:   52(fvec2) Load 138(c2)
+            2373:    6(float) Load 283(compare)
+            2374:1946(ResType) ImageSparseDrefGather 2371 2372 2373
+            2375:    7(fvec4) CompositeExtract 2374 1
+                              Store 2345(texel) 2375
+            2376:     47(int) CompositeExtract 2374 0
+            2377:         245 Load 247(s2DArrayShadow)
+            2378:  148(fvec3) Load 150(c3)
+            2379:    6(float) Load 283(compare)
+            2380:1946(ResType) ImageSparseDrefGather 2377 2378 2379
+            2381:    7(fvec4) CompositeExtract 2380 1
+                              Store 2345(texel) 2381
+            2382:     47(int) CompositeExtract 2380 0
+            2383:         192 Load 194(sCubeShadow)
+            2384:  148(fvec3) Load 150(c3)
+            2385:    6(float) Load 283(compare)
+            2386:1946(ResType) ImageSparseDrefGather 2383 2384 2385
+            2387:    7(fvec4) CompositeExtract 2386 1
+                              Store 2345(texel) 2387
+            2388:     47(int) CompositeExtract 2386 0
+            2389:         278 Load 280(sCubeArrayShadow)
+            2390:    7(fvec4) Load 197(c4)
+            2391:    6(float) Load 283(compare)
+            2392:1946(ResType) ImageSparseDrefGather 2389 2390 2391
+            2393:    7(fvec4) CompositeExtract 2392 1
+                              Store 2345(texel) 2393
+            2394:     47(int) CompositeExtract 2392 0
+            2395:         266 Load 268(s2DRectShadow)
+            2396:   52(fvec2) Load 138(c2)
+            2397:    6(float) Load 283(compare)
+            2398:1946(ResType) ImageSparseDrefGather 2395 2396 2397
+            2399:    7(fvec4) CompositeExtract 2398 1
+                              Store 2345(texel) 2399
+            2400:     47(int) CompositeExtract 2398 0
+            2401:    7(fvec4) Load 2345(texel)
+                              ReturnValue 2401
                               FunctionEnd
 86(testSparseTextureGatherOffset():    7(fvec4) Function None 8
               87:             Label
-     2466(texel):     63(ptr) Variable Function
-                              Store 2466(texel) 120
-            2467:         133 Load 135(s2D)
-            2468:   52(fvec2) Load 138(c2)
-            2469:1991(ResType) ImageSparseGather 2467 2468 1275 ConstOffset 452
-            2470:    7(fvec4) CompositeExtract 2469 1
-                              Store 2466(texel) 2470
-            2471:     47(int) CompositeExtract 2469 0
-            2472:         215 Load 217(s2DArray)
-            2473:  148(fvec3) Load 150(c3)
-            2474:1991(ResType) ImageSparseGather 2472 2473 1275 ConstOffset 452
-            2475:    7(fvec4) CompositeExtract 2474 1
-                              Store 2466(texel) 2475
-            2476:     47(int) CompositeExtract 2474 0
-            2477:         257 Load 259(s2DRect)
-            2478:   52(fvec2) Load 138(c2)
-            2479:1991(ResType) ImageSparseGather 2477 2478 1275 ConstOffset 452
-            2480:    7(fvec4) CompositeExtract 2479 1
-                              Store 2466(texel) 2480
-            2481:     47(int) CompositeExtract 2479 0
-            2482:         180 Load 182(s2DShadow)
-            2483:   52(fvec2) Load 138(c2)
-            2484:    6(float) Load 283(compare)
-            2485:1991(ResType) ImageSparseDrefGather 2482 2483 2484 ConstOffset 452
-            2486:    7(fvec4) CompositeExtract 2485 1
-                              Store 2466(texel) 2486
-            2487:     47(int) CompositeExtract 2485 0
-            2488:         245 Load 247(s2DArrayShadow)
-            2489:  148(fvec3) Load 150(c3)
-            2490:    6(float) Load 283(compare)
-            2491:1991(ResType) ImageSparseDrefGather 2488 2489 2490 ConstOffset 452
-            2492:    7(fvec4) CompositeExtract 2491 1
-                              Store 2466(texel) 2492
-            2493:     47(int) CompositeExtract 2491 0
-            2494:         266 Load 268(s2DRectShadow)
-            2495:   52(fvec2) Load 138(c2)
-            2496:    6(float) Load 283(compare)
-            2497:1991(ResType) ImageSparseDrefGather 2494 2495 2496 ConstOffset 452
-            2498:    7(fvec4) CompositeExtract 2497 1
-                              Store 2466(texel) 2498
-            2499:     47(int) CompositeExtract 2497 0
-            2500:    7(fvec4) Load 2466(texel)
-                              ReturnValue 2500
+     2404(texel):     63(ptr) Variable Function
+                              Store 2404(texel) 120
+            2405:         133 Load 135(s2D)
+            2406:   52(fvec2) Load 138(c2)
+            2407:1946(ResType) ImageSparseGather 2405 2406 1230 ConstOffset 452
+            2408:    7(fvec4) CompositeExtract 2407 1
+                              Store 2404(texel) 2408
+            2409:     47(int) CompositeExtract 2407 0
+            2410:         215 Load 217(s2DArray)
+            2411:  148(fvec3) Load 150(c3)
+            2412:1946(ResType) ImageSparseGather 2410 2411 1230 ConstOffset 452
+            2413:    7(fvec4) CompositeExtract 2412 1
+                              Store 2404(texel) 2413
+            2414:     47(int) CompositeExtract 2412 0
+            2415:         257 Load 259(s2DRect)
+            2416:   52(fvec2) Load 138(c2)
+            2417:1946(ResType) ImageSparseGather 2415 2416 1230 ConstOffset 452
+            2418:    7(fvec4) CompositeExtract 2417 1
+                              Store 2404(texel) 2418
+            2419:     47(int) CompositeExtract 2417 0
+            2420:         180 Load 182(s2DShadow)
+            2421:   52(fvec2) Load 138(c2)
+            2422:    6(float) Load 283(compare)
+            2423:1946(ResType) ImageSparseDrefGather 2420 2421 2422 ConstOffset 452
+            2424:    7(fvec4) CompositeExtract 2423 1
+                              Store 2404(texel) 2424
+            2425:     47(int) CompositeExtract 2423 0
+            2426:         245 Load 247(s2DArrayShadow)
+            2427:  148(fvec3) Load 150(c3)
+            2428:    6(float) Load 283(compare)
+            2429:1946(ResType) ImageSparseDrefGather 2426 2427 2428 ConstOffset 452
+            2430:    7(fvec4) CompositeExtract 2429 1
+                              Store 2404(texel) 2430
+            2431:     47(int) CompositeExtract 2429 0
+            2432:         266 Load 268(s2DRectShadow)
+            2433:   52(fvec2) Load 138(c2)
+            2434:    6(float) Load 283(compare)
+            2435:1946(ResType) ImageSparseDrefGather 2432 2433 2434 ConstOffset 452
+            2436:    7(fvec4) CompositeExtract 2435 1
+                              Store 2404(texel) 2436
+            2437:     47(int) CompositeExtract 2435 0
+            2438:    7(fvec4) Load 2404(texel)
+                              ReturnValue 2438
                               FunctionEnd
 88(testSparseTextureGatherOffsets():    7(fvec4) Function None 8
               89:             Label
-     2503(texel):     63(ptr) Variable Function
-                              Store 2503(texel) 120
-            2504:         133 Load 135(s2D)
-            2505:   52(fvec2) Load 138(c2)
-            2516:1991(ResType) ImageSparseGather 2504 2505 1275 ConstOffsets 2515
-            2517:    7(fvec4) CompositeExtract 2516 1
-                              Store 2503(texel) 2517
-            2518:     47(int) CompositeExtract 2516 0
-            2519:         215 Load 217(s2DArray)
-            2520:  148(fvec3) Load 150(c3)
-            2521:1991(ResType) ImageSparseGather 2519 2520 1275 ConstOffsets 2515
-            2522:    7(fvec4) CompositeExtract 2521 1
-                              Store 2503(texel) 2522
-            2523:     47(int) CompositeExtract 2521 0
-            2524:         257 Load 259(s2DRect)
-            2525:   52(fvec2) Load 138(c2)
-            2526:1991(ResType) ImageSparseGather 2524 2525 1275 ConstOffsets 2515
-            2527:    7(fvec4) CompositeExtract 2526 1
-                              Store 2503(texel) 2527
-            2528:     47(int) CompositeExtract 2526 0
-            2529:         180 Load 182(s2DShadow)
-            2530:   52(fvec2) Load 138(c2)
-            2531:    6(float) Load 283(compare)
-            2532:1991(ResType) ImageSparseDrefGather 2529 2530 2531 ConstOffsets 2515
-            2533:    7(fvec4) CompositeExtract 2532 1
-                              Store 2503(texel) 2533
-            2534:     47(int) CompositeExtract 2532 0
-            2535:         245 Load 247(s2DArrayShadow)
-            2536:  148(fvec3) Load 150(c3)
-            2537:    6(float) Load 283(compare)
-            2538:1991(ResType) ImageSparseDrefGather 2535 2536 2537 ConstOffsets 2515
-            2539:    7(fvec4) CompositeExtract 2538 1
-                              Store 2503(texel) 2539
-            2540:     47(int) CompositeExtract 2538 0
-            2541:         266 Load 268(s2DRectShadow)
-            2542:   52(fvec2) Load 138(c2)
-            2543:    6(float) Load 283(compare)
-            2544:1991(ResType) ImageSparseDrefGather 2541 2542 2543 ConstOffsets 2515
-            2545:    7(fvec4) CompositeExtract 2544 1
-                              Store 2503(texel) 2545
-            2546:     47(int) CompositeExtract 2544 0
-            2547:    7(fvec4) Load 2503(texel)
-                              ReturnValue 2547
+     2441(texel):     63(ptr) Variable Function
+                              Store 2441(texel) 120
+            2442:         133 Load 135(s2D)
+            2443:   52(fvec2) Load 138(c2)
+            2454:1946(ResType) ImageSparseGather 2442 2443 1230 ConstOffsets 2453
+            2455:    7(fvec4) CompositeExtract 2454 1
+                              Store 2441(texel) 2455
+            2456:     47(int) CompositeExtract 2454 0
+            2457:         215 Load 217(s2DArray)
+            2458:  148(fvec3) Load 150(c3)
+            2459:1946(ResType) ImageSparseGather 2457 2458 1230 ConstOffsets 2453
+            2460:    7(fvec4) CompositeExtract 2459 1
+                              Store 2441(texel) 2460
+            2461:     47(int) CompositeExtract 2459 0
+            2462:         257 Load 259(s2DRect)
+            2463:   52(fvec2) Load 138(c2)
+            2464:1946(ResType) ImageSparseGather 2462 2463 1230 ConstOffsets 2453
+            2465:    7(fvec4) CompositeExtract 2464 1
+                              Store 2441(texel) 2465
+            2466:     47(int) CompositeExtract 2464 0
+            2467:         180 Load 182(s2DShadow)
+            2468:   52(fvec2) Load 138(c2)
+            2469:    6(float) Load 283(compare)
+            2470:1946(ResType) ImageSparseDrefGather 2467 2468 2469 ConstOffsets 2453
+            2471:    7(fvec4) CompositeExtract 2470 1
+                              Store 2441(texel) 2471
+            2472:     47(int) CompositeExtract 2470 0
+            2473:         245 Load 247(s2DArrayShadow)
+            2474:  148(fvec3) Load 150(c3)
+            2475:    6(float) Load 283(compare)
+            2476:1946(ResType) ImageSparseDrefGather 2473 2474 2475 ConstOffsets 2453
+            2477:    7(fvec4) CompositeExtract 2476 1
+                              Store 2441(texel) 2477
+            2478:     47(int) CompositeExtract 2476 0
+            2479:         266 Load 268(s2DRectShadow)
+            2480:   52(fvec2) Load 138(c2)
+            2481:    6(float) Load 283(compare)
+            2482:1946(ResType) ImageSparseDrefGather 2479 2480 2481 ConstOffsets 2453
+            2483:    7(fvec4) CompositeExtract 2482 1
+                              Store 2441(texel) 2483
+            2484:     47(int) CompositeExtract 2482 0
+            2485:    7(fvec4) Load 2441(texel)
+                              ReturnValue 2485
                               FunctionEnd
 90(testSparseTextureGatherLod():    7(fvec4) Function None 8
               91:             Label
-     2550(texel):     63(ptr) Variable Function
-                              Store 2550(texel) 120
-            2551:         133 Load 135(s2D)
-            2552:   52(fvec2) Load 138(c2)
-            2553:    6(float) Load 371(lod)
-            2554:1991(ResType) ImageSparseGather 2551 2552 1275 Lod 2553
-            2555:    7(fvec4) CompositeExtract 2554 1
-                              Store 2550(texel) 2555
-            2556:     47(int) CompositeExtract 2554 0
-            2557:         215 Load 217(s2DArray)
-            2558:  148(fvec3) Load 150(c3)
-            2559:    6(float) Load 371(lod)
-            2560:1991(ResType) ImageSparseGather 2557 2558 1275 Lod 2559
-            2561:    7(fvec4) CompositeExtract 2560 1
-                              Store 2550(texel) 2561
-            2562:     47(int) CompositeExtract 2560 0
-            2563:         156 Load 158(sCube)
-            2564:  148(fvec3) Load 150(c3)
-            2565:    6(float) Load 371(lod)
-            2566:1991(ResType) ImageSparseGather 2563 2564 1275 Lod 2565
-            2567:    7(fvec4) CompositeExtract 2566 1
-                              Store 2550(texel) 2567
-            2568:     47(int) CompositeExtract 2566 0
-            2569:         224 Load 226(sCubeArray)
-            2570:    7(fvec4) Load 197(c4)
-            2571:    6(float) Load 371(lod)
-            2572:1991(ResType) ImageSparseGather 2569 2570 1275 Lod 2571
-            2573:    7(fvec4) CompositeExtract 2572 1
-                              Store 2550(texel) 2573
-            2574:     47(int) CompositeExtract 2572 0
-            2575:    7(fvec4) Load 2550(texel)
-                              ReturnValue 2575
+     2488(texel):     63(ptr) Variable Function
+                              Store 2488(texel) 120
+            2489:         133 Load 135(s2D)
+            2490:   52(fvec2) Load 138(c2)
+            2491:    6(float) Load 371(lod)
+            2492:1946(ResType) ImageSparseGather 2489 2490 1230 Lod 2491
+            2493:    7(fvec4) CompositeExtract 2492 1
+                              Store 2488(texel) 2493
+            2494:     47(int) CompositeExtract 2492 0
+            2495:         215 Load 217(s2DArray)
+            2496:  148(fvec3) Load 150(c3)
+            2497:    6(float) Load 371(lod)
+            2498:1946(ResType) ImageSparseGather 2495 2496 1230 Lod 2497
+            2499:    7(fvec4) CompositeExtract 2498 1
+                              Store 2488(texel) 2499
+            2500:     47(int) CompositeExtract 2498 0
+            2501:         156 Load 158(sCube)
+            2502:  148(fvec3) Load 150(c3)
+            2503:    6(float) Load 371(lod)
+            2504:1946(ResType) ImageSparseGather 2501 2502 1230 Lod 2503
+            2505:    7(fvec4) CompositeExtract 2504 1
+                              Store 2488(texel) 2505
+            2506:     47(int) CompositeExtract 2504 0
+            2507:         224 Load 226(sCubeArray)
+            2508:    7(fvec4) Load 197(c4)
+            2509:    6(float) Load 371(lod)
+            2510:1946(ResType) ImageSparseGather 2507 2508 1230 Lod 2509
+            2511:    7(fvec4) CompositeExtract 2510 1
+                              Store 2488(texel) 2511
+            2512:     47(int) CompositeExtract 2510 0
+            2513:    7(fvec4) Load 2488(texel)
+                              ReturnValue 2513
                               FunctionEnd
 92(testSparseTextureGatherLodOffset():    7(fvec4) Function None 8
               93:             Label
-     2578(texel):     63(ptr) Variable Function
-                              Store 2578(texel) 120
-            2579:         133 Load 135(s2D)
-            2580:   52(fvec2) Load 138(c2)
-            2581:    6(float) Load 371(lod)
-            2582:1991(ResType) ImageSparseGather 2579 2580 1275 Lod ConstOffset 2581 452
-            2583:    7(fvec4) CompositeExtract 2582 1
-                              Store 2578(texel) 2583
-            2584:     47(int) CompositeExtract 2582 0
-            2585:         215 Load 217(s2DArray)
-            2586:  148(fvec3) Load 150(c3)
-            2587:    6(float) Load 371(lod)
-            2588:1991(ResType) ImageSparseGather 2585 2586 1275 Lod ConstOffset 2587 452
-            2589:    7(fvec4) CompositeExtract 2588 1
-                              Store 2578(texel) 2589
-            2590:     47(int) CompositeExtract 2588 0
-            2591:    7(fvec4) Load 2578(texel)
-                              ReturnValue 2591
+     2516(texel):     63(ptr) Variable Function
+                              Store 2516(texel) 120
+            2517:         133 Load 135(s2D)
+            2518:   52(fvec2) Load 138(c2)
+            2519:    6(float) Load 371(lod)
+            2520:1946(ResType) ImageSparseGather 2517 2518 1230 Lod ConstOffset 2519 452
+            2521:    7(fvec4) CompositeExtract 2520 1
+                              Store 2516(texel) 2521
+            2522:     47(int) CompositeExtract 2520 0
+            2523:         215 Load 217(s2DArray)
+            2524:  148(fvec3) Load 150(c3)
+            2525:    6(float) Load 371(lod)
+            2526:1946(ResType) ImageSparseGather 2523 2524 1230 Lod ConstOffset 2525 452
+            2527:    7(fvec4) CompositeExtract 2526 1
+                              Store 2516(texel) 2527
+            2528:     47(int) CompositeExtract 2526 0
+            2529:    7(fvec4) Load 2516(texel)
+                              ReturnValue 2529
                               FunctionEnd
 94(testSparseTextureGatherLodOffsets():    7(fvec4) Function None 8
               95:             Label
-     2594(texel):     63(ptr) Variable Function
-                              Store 2594(texel) 120
-            2595:         133 Load 135(s2D)
-            2596:   52(fvec2) Load 138(c2)
-            2597:    6(float) Load 371(lod)
-            2598:1991(ResType) ImageSparseGather 2595 2596 1275 Lod ConstOffsets 2597 1374
-            2599:    7(fvec4) CompositeExtract 2598 1
-                              Store 2594(texel) 2599
-            2600:     47(int) CompositeExtract 2598 0
-            2601:         215 Load 217(s2DArray)
-            2602:  148(fvec3) Load 150(c3)
-            2603:    6(float) Load 371(lod)
-            2604:1991(ResType) ImageSparseGather 2601 2602 1275 Lod ConstOffsets 2603 1374
-            2605:    7(fvec4) CompositeExtract 2604 1
-                              Store 2594(texel) 2605
-            2606:     47(int) CompositeExtract 2604 0
-            2607:    7(fvec4) Load 2594(texel)
-                              ReturnValue 2607
+     2532(texel):     63(ptr) Variable Function
+                              Store 2532(texel) 120
+            2533:         133 Load 135(s2D)
+            2534:   52(fvec2) Load 138(c2)
+            2535:    6(float) Load 371(lod)
+            2536:1946(ResType) ImageSparseGather 2533 2534 1230 Lod ConstOffsets 2535 1329
+            2537:    7(fvec4) CompositeExtract 2536 1
+                              Store 2532(texel) 2537
+            2538:     47(int) CompositeExtract 2536 0
+            2539:         215 Load 217(s2DArray)
+            2540:  148(fvec3) Load 150(c3)
+            2541:    6(float) Load 371(lod)
+            2542:1946(ResType) ImageSparseGather 2539 2540 1230 Lod ConstOffsets 2541 1329
+            2543:    7(fvec4) CompositeExtract 2542 1
+                              Store 2532(texel) 2543
+            2544:     47(int) CompositeExtract 2542 0
+            2545:    7(fvec4) Load 2532(texel)
+                              ReturnValue 2545
                               FunctionEnd
 96(testSparseImageLoad():    7(fvec4) Function None 8
               97:             Label
-     2610(texel):     63(ptr) Variable Function
-                              Store 2610(texel) 120
-            2611:        1851 Load 1853(i2D)
-            2612:   52(fvec2) Load 138(c2)
-            2613:  451(ivec2) ConvertFToS 2612
-            2614:1991(ResType) ImageSparseRead 2611 2613
-            2615:    7(fvec4) CompositeExtract 2614 1
-                              Store 2610(texel) 2615
-            2616:     47(int) CompositeExtract 2614 0
-            2617:        1860 Load 1862(i3D)
-            2618:  148(fvec3) Load 150(c3)
-            2619:  458(ivec3) ConvertFToS 2618
-            2620:1991(ResType) ImageSparseRead 2617 2619
-            2621:    7(fvec4) CompositeExtract 2620 1
-                              Store 2610(texel) 2621
-            2622:     47(int) CompositeExtract 2620 0
-            2623:        1869 Load 1871(i2DRect)
-            2624:   52(fvec2) Load 138(c2)
-            2625:  451(ivec2) ConvertFToS 2624
-            2626:1991(ResType) ImageSparseRead 2623 2625
-            2627:    7(fvec4) CompositeExtract 2626 1
-                              Store 2610(texel) 2627
-            2628:     47(int) CompositeExtract 2626 0
-            2629:        1878 Load 1880(iCube)
-            2630:  148(fvec3) Load 150(c3)
-            2631:  458(ivec3) ConvertFToS 2630
-            2632:1991(ResType) ImageSparseRead 2629 2631
-            2633:    7(fvec4) CompositeExtract 2632 1
-                              Store 2610(texel) 2633
-            2634:     47(int) CompositeExtract 2632 0
-            2635:        1905 Load 1907(i2DArray)
-            2636:  148(fvec3) Load 150(c3)
-            2637:  458(ivec3) ConvertFToS 2636
-            2638:1991(ResType) ImageSparseRead 2635 2637
-            2639:    7(fvec4) CompositeExtract 2638 1
-                              Store 2610(texel) 2639
-            2640:     47(int) CompositeExtract 2638 0
-            2641:        1914 Load 1916(iCubeArray)
-            2642:  148(fvec3) Load 150(c3)
-            2643:  458(ivec3) ConvertFToS 2642
-            2644:1991(ResType) ImageSparseRead 2641 2643
-            2645:    7(fvec4) CompositeExtract 2644 1
-                              Store 2610(texel) 2645
-            2646:     47(int) CompositeExtract 2644 0
-            2647:        1923 Load 1925(i2DMS)
-            2648:   52(fvec2) Load 138(c2)
-            2649:  451(ivec2) ConvertFToS 2648
-            2650:1991(ResType) ImageSparseRead 2647 2649 Sample 445
-            2651:    7(fvec4) CompositeExtract 2650 1
-                              Store 2610(texel) 2651
-            2652:     47(int) CompositeExtract 2650 0
-            2653:        1932 Load 1934(i2DMSArray)
-            2654:  148(fvec3) Load 150(c3)
-            2655:  458(ivec3) ConvertFToS 2654
-            2656:1991(ResType) ImageSparseRead 2653 2655 Sample 799
-            2657:    7(fvec4) CompositeExtract 2656 1
-                              Store 2610(texel) 2657
-            2658:     47(int) CompositeExtract 2656 0
-            2659:    7(fvec4) Load 2610(texel)
-                              ReturnValue 2659
+     2548(texel):     63(ptr) Variable Function
+                              Store 2548(texel) 120
+            2549:        1806 Load 1808(i2D)
+            2550:   52(fvec2) Load 138(c2)
+            2551:  451(ivec2) ConvertFToS 2550
+            2552:1946(ResType) ImageSparseRead 2549 2551
+            2553:    7(fvec4) CompositeExtract 2552 1
+                              Store 2548(texel) 2553
+            2554:     47(int) CompositeExtract 2552 0
+            2555:        1815 Load 1817(i3D)
+            2556:  148(fvec3) Load 150(c3)
+            2557:  458(ivec3) ConvertFToS 2556
+            2558:1946(ResType) ImageSparseRead 2555 2557
+            2559:    7(fvec4) CompositeExtract 2558 1
+                              Store 2548(texel) 2559
+            2560:     47(int) CompositeExtract 2558 0
+            2561:        1824 Load 1826(i2DRect)
+            2562:   52(fvec2) Load 138(c2)
+            2563:  451(ivec2) ConvertFToS 2562
+            2564:1946(ResType) ImageSparseRead 2561 2563
+            2565:    7(fvec4) CompositeExtract 2564 1
+                              Store 2548(texel) 2565
+            2566:     47(int) CompositeExtract 2564 0
+            2567:        1833 Load 1835(iCube)
+            2568:  148(fvec3) Load 150(c3)
+            2569:  458(ivec3) ConvertFToS 2568
+            2570:1946(ResType) ImageSparseRead 2567 2569
+            2571:    7(fvec4) CompositeExtract 2570 1
+                              Store 2548(texel) 2571
+            2572:     47(int) CompositeExtract 2570 0
+            2573:        1860 Load 1862(i2DArray)
+            2574:  148(fvec3) Load 150(c3)
+            2575:  458(ivec3) ConvertFToS 2574
+            2576:1946(ResType) ImageSparseRead 2573 2575
+            2577:    7(fvec4) CompositeExtract 2576 1
+                              Store 2548(texel) 2577
+            2578:     47(int) CompositeExtract 2576 0
+            2579:        1869 Load 1871(iCubeArray)
+            2580:  148(fvec3) Load 150(c3)
+            2581:  458(ivec3) ConvertFToS 2580
+            2582:1946(ResType) ImageSparseRead 2579 2581
+            2583:    7(fvec4) CompositeExtract 2582 1
+                              Store 2548(texel) 2583
+            2584:     47(int) CompositeExtract 2582 0
+            2585:        1878 Load 1880(i2DMS)
+            2586:   52(fvec2) Load 138(c2)
+            2587:  451(ivec2) ConvertFToS 2586
+            2588:1946(ResType) ImageSparseRead 2585 2587 Sample 445
+            2589:    7(fvec4) CompositeExtract 2588 1
+                              Store 2548(texel) 2589
+            2590:     47(int) CompositeExtract 2588 0
+            2591:        1887 Load 1889(i2DMSArray)
+            2592:  148(fvec3) Load 150(c3)
+            2593:  458(ivec3) ConvertFToS 2592
+            2594:1946(ResType) ImageSparseRead 2591 2593 Sample 799
+            2595:    7(fvec4) CompositeExtract 2594 1
+                              Store 2548(texel) 2595
+            2596:     47(int) CompositeExtract 2594 0
+            2597:    7(fvec4) Load 2548(texel)
+                              ReturnValue 2597
                               FunctionEnd
 98(testSparseTextureClamp():    7(fvec4) Function None 8
               99:             Label
-     2662(texel):     63(ptr) Variable Function
-                              Store 2662(texel) 120
-            2663:         133 Load 135(s2D)
-            2664:   52(fvec2) Load 138(c2)
-            2666:    6(float) Load 2665(lodClamp)
-            2667:1991(ResType) ImageSparseSampleImplicitLod 2663 2664 MinLod 2666
-            2668:    7(fvec4) CompositeExtract 2667 1
-                              Store 2662(texel) 2668
-            2669:     47(int) CompositeExtract 2667 0
-            2670:         144 Load 146(s3D)
-            2671:  148(fvec3) Load 150(c3)
-            2672:    6(float) Load 2665(lodClamp)
-            2673:1991(ResType) ImageSparseSampleImplicitLod 2670 2671 MinLod 2672
-            2674:    7(fvec4) CompositeExtract 2673 1
-                              Store 2662(texel) 2674
-            2675:     47(int) CompositeExtract 2673 0
-            2676:         156 Load 158(sCube)
-            2677:  148(fvec3) Load 150(c3)
-            2678:    6(float) Load 2665(lodClamp)
-            2679:1991(ResType) ImageSparseSampleImplicitLod 2676 2677 MinLod 2678
-            2680:    7(fvec4) CompositeExtract 2679 1
-                              Store 2662(texel) 2680
-            2681:     47(int) CompositeExtract 2679 0
-            2682:         180 Load 182(s2DShadow)
-            2683:  148(fvec3) Load 150(c3)
-            2684:    6(float) Load 2665(lodClamp)
-            2685:    174(ptr) AccessChain 2662(texel) 173
-            2686:    6(float) CompositeExtract 2683 2
-            2687:2009(ResType) ImageSparseSampleDrefImplicitLod 2682 2683 2686 MinLod 2684
-            2688:    6(float) CompositeExtract 2687 1
-                              Store 2685 2688
-            2689:     47(int) CompositeExtract 2687 0
-            2690:         192 Load 194(sCubeShadow)
-            2691:    7(fvec4) Load 197(c4)
-            2692:    6(float) Load 2665(lodClamp)
-            2693:    174(ptr) AccessChain 2662(texel) 173
-            2694:    6(float) CompositeExtract 2691 3
-            2695:2009(ResType) ImageSparseSampleDrefImplicitLod 2690 2691 2694 MinLod 2692
-            2696:    6(float) CompositeExtract 2695 1
-                              Store 2693 2696
-            2697:     47(int) CompositeExtract 2695 0
-            2698:         215 Load 217(s2DArray)
-            2699:  148(fvec3) Load 150(c3)
-            2700:    6(float) Load 2665(lodClamp)
-            2701:1991(ResType) ImageSparseSampleImplicitLod 2698 2699 MinLod 2700
-            2702:    7(fvec4) CompositeExtract 2701 1
-                              Store 2662(texel) 2702
-            2703:     47(int) CompositeExtract 2701 0
-            2704:         224 Load 226(sCubeArray)
-            2705:    7(fvec4) Load 197(c4)
-            2706:    6(float) Load 2665(lodClamp)
-            2707:1991(ResType) ImageSparseSampleImplicitLod 2704 2705 MinLod 2706
-            2708:    7(fvec4) CompositeExtract 2707 1
-                              Store 2662(texel) 2708
-            2709:     47(int) CompositeExtract 2707 0
-            2710:         245 Load 247(s2DArrayShadow)
-            2711:    7(fvec4) Load 197(c4)
-            2712:    6(float) Load 2665(lodClamp)
-            2713:    174(ptr) AccessChain 2662(texel) 173
-            2714:    6(float) CompositeExtract 2711 3
-            2715:2009(ResType) ImageSparseSampleDrefImplicitLod 2710 2711 2714 MinLod 2712
-            2716:    6(float) CompositeExtract 2715 1
-                              Store 2713 2716
-            2717:     47(int) CompositeExtract 2715 0
-            2718:         278 Load 280(sCubeArrayShadow)
-            2719:    7(fvec4) Load 197(c4)
-            2720:    6(float) Load 283(compare)
-            2721:    6(float) Load 2665(lodClamp)
-            2722:    174(ptr) AccessChain 2662(texel) 173
-            2723:2009(ResType) ImageSparseSampleDrefImplicitLod 2718 2719 2720 MinLod 2721
-            2724:    6(float) CompositeExtract 2723 1
-                              Store 2722 2724
-            2725:     47(int) CompositeExtract 2723 0
-            2726:    7(fvec4) Load 2662(texel)
-                              ReturnValue 2726
+     2600(texel):     63(ptr) Variable Function
+                              Store 2600(texel) 120
+            2601:         133 Load 135(s2D)
+            2602:   52(fvec2) Load 138(c2)
+            2604:    6(float) Load 2603(lodClamp)
+            2605:1946(ResType) ImageSparseSampleImplicitLod 2601 2602 MinLod 2604
+            2606:    7(fvec4) CompositeExtract 2605 1
+                              Store 2600(texel) 2606
+            2607:     47(int) CompositeExtract 2605 0
+            2608:         144 Load 146(s3D)
+            2609:  148(fvec3) Load 150(c3)
+            2610:    6(float) Load 2603(lodClamp)
+            2611:1946(ResType) ImageSparseSampleImplicitLod 2608 2609 MinLod 2610
+            2612:    7(fvec4) CompositeExtract 2611 1
+                              Store 2600(texel) 2612
+            2613:     47(int) CompositeExtract 2611 0
+            2614:         156 Load 158(sCube)
+            2615:  148(fvec3) Load 150(c3)
+            2616:    6(float) Load 2603(lodClamp)
+            2617:1946(ResType) ImageSparseSampleImplicitLod 2614 2615 MinLod 2616
+            2618:    7(fvec4) CompositeExtract 2617 1
+                              Store 2600(texel) 2618
+            2619:     47(int) CompositeExtract 2617 0
+            2620:         180 Load 182(s2DShadow)
+            2621:  148(fvec3) Load 150(c3)
+            2622:    6(float) Load 2603(lodClamp)
+            2623:    174(ptr) AccessChain 2600(texel) 173
+            2624:    6(float) CompositeExtract 2621 2
+            2625:1964(ResType) ImageSparseSampleDrefImplicitLod 2620 2621 2624 MinLod 2622
+            2626:    6(float) CompositeExtract 2625 1
+                              Store 2623 2626
+            2627:     47(int) CompositeExtract 2625 0
+            2628:         192 Load 194(sCubeShadow)
+            2629:    7(fvec4) Load 197(c4)
+            2630:    6(float) Load 2603(lodClamp)
+            2631:    174(ptr) AccessChain 2600(texel) 173
+            2632:    6(float) CompositeExtract 2629 3
+            2633:1964(ResType) ImageSparseSampleDrefImplicitLod 2628 2629 2632 MinLod 2630
+            2634:    6(float) CompositeExtract 2633 1
+                              Store 2631 2634
+            2635:     47(int) CompositeExtract 2633 0
+            2636:         215 Load 217(s2DArray)
+            2637:  148(fvec3) Load 150(c3)
+            2638:    6(float) Load 2603(lodClamp)
+            2639:1946(ResType) ImageSparseSampleImplicitLod 2636 2637 MinLod 2638
+            2640:    7(fvec4) CompositeExtract 2639 1
+                              Store 2600(texel) 2640
+            2641:     47(int) CompositeExtract 2639 0
+            2642:         224 Load 226(sCubeArray)
+            2643:    7(fvec4) Load 197(c4)
+            2644:    6(float) Load 2603(lodClamp)
+            2645:1946(ResType) ImageSparseSampleImplicitLod 2642 2643 MinLod 2644
+            2646:    7(fvec4) CompositeExtract 2645 1
+                              Store 2600(texel) 2646
+            2647:     47(int) CompositeExtract 2645 0
+            2648:         245 Load 247(s2DArrayShadow)
+            2649:    7(fvec4) Load 197(c4)
+            2650:    6(float) Load 2603(lodClamp)
+            2651:    174(ptr) AccessChain 2600(texel) 173
+            2652:    6(float) CompositeExtract 2649 3
+            2653:1964(ResType) ImageSparseSampleDrefImplicitLod 2648 2649 2652 MinLod 2650
+            2654:    6(float) CompositeExtract 2653 1
+                              Store 2651 2654
+            2655:     47(int) CompositeExtract 2653 0
+            2656:         278 Load 280(sCubeArrayShadow)
+            2657:    7(fvec4) Load 197(c4)
+            2658:    6(float) Load 283(compare)
+            2659:    6(float) Load 2603(lodClamp)
+            2660:    174(ptr) AccessChain 2600(texel) 173
+            2661:1964(ResType) ImageSparseSampleDrefImplicitLod 2656 2657 2658 MinLod 2659
+            2662:    6(float) CompositeExtract 2661 1
+                              Store 2660 2662
+            2663:     47(int) CompositeExtract 2661 0
+            2664:    7(fvec4) Load 2600(texel)
+                              ReturnValue 2664
                               FunctionEnd
 100(testTextureClamp():    7(fvec4) Function None 8
              101:             Label
-     2729(texel):     63(ptr) Variable Function
-                              Store 2729(texel) 120
-            2730:         122 Load 124(s1D)
-            2731:    6(float) Load 127(c1)
-            2732:    6(float) Load 2665(lodClamp)
-            2733:    7(fvec4) ImageSampleImplicitLod 2730 2731 MinLod 2732
-            2734:    7(fvec4) Load 2729(texel)
-            2735:    7(fvec4) FAdd 2734 2733
-                              Store 2729(texel) 2735
-            2736:         133 Load 135(s2D)
-            2737:   52(fvec2) Load 138(c2)
-            2738:    6(float) Load 2665(lodClamp)
-            2739:    7(fvec4) ImageSampleImplicitLod 2736 2737 MinLod 2738
-            2740:    7(fvec4) Load 2729(texel)
-            2741:    7(fvec4) FAdd 2740 2739
-                              Store 2729(texel) 2741
-            2742:         144 Load 146(s3D)
-            2743:  148(fvec3) Load 150(c3)
-            2744:    6(float) Load 2665(lodClamp)
-            2745:    7(fvec4) ImageSampleImplicitLod 2742 2743 MinLod 2744
-            2746:    7(fvec4) Load 2729(texel)
-            2747:    7(fvec4) FAdd 2746 2745
-                              Store 2729(texel) 2747
-            2748:         156 Load 158(sCube)
-            2749:  148(fvec3) Load 150(c3)
-            2750:    6(float) Load 2665(lodClamp)
-            2751:    7(fvec4) ImageSampleImplicitLod 2748 2749 MinLod 2750
-            2752:    7(fvec4) Load 2729(texel)
-            2753:    7(fvec4) FAdd 2752 2751
-                              Store 2729(texel) 2753
-            2754:         165 Load 167(s1DShadow)
-            2755:  148(fvec3) Load 150(c3)
-            2756:    6(float) Load 2665(lodClamp)
-            2757:    6(float) CompositeExtract 2755 2
-            2758:    6(float) ImageSampleDrefImplicitLod 2754 2755 2757 MinLod 2756
-            2759:    174(ptr) AccessChain 2729(texel) 173
-            2760:    6(float) Load 2759
-            2761:    6(float) FAdd 2760 2758
-            2762:    174(ptr) AccessChain 2729(texel) 173
-                              Store 2762 2761
-            2763:         180 Load 182(s2DShadow)
-            2764:  148(fvec3) Load 150(c3)
-            2765:    6(float) Load 2665(lodClamp)
-            2766:    6(float) CompositeExtract 2764 2
-            2767:    6(float) ImageSampleDrefImplicitLod 2763 2764 2766 MinLod 2765
-            2768:    174(ptr) AccessChain 2729(texel) 173
-            2769:    6(float) Load 2768
-            2770:    6(float) FAdd 2769 2767
-            2771:    174(ptr) AccessChain 2729(texel) 173
-                              Store 2771 2770
-            2772:         192 Load 194(sCubeShadow)
-            2773:    7(fvec4) Load 197(c4)
-            2774:    6(float) Load 2665(lodClamp)
-            2775:    6(float) CompositeExtract 2773 3
-            2776:    6(float) ImageSampleDrefImplicitLod 2772 2773 2775 MinLod 2774
-            2777:    174(ptr) AccessChain 2729(texel) 173
-            2778:    6(float) Load 2777
-            2779:    6(float) FAdd 2778 2776
-            2780:    174(ptr) AccessChain 2729(texel) 173
-                              Store 2780 2779
-            2781:         206 Load 208(s1DArray)
-            2782:   52(fvec2) Load 138(c2)
-            2783:    6(float) Load 2665(lodClamp)
-            2784:    7(fvec4) ImageSampleImplicitLod 2781 2782 MinLod 2783
-            2785:    7(fvec4) Load 2729(texel)
-            2786:    7(fvec4) FAdd 2785 2784
-                              Store 2729(texel) 2786
-            2787:         215 Load 217(s2DArray)
-            2788:  148(fvec3) Load 150(c3)
-            2789:    6(float) Load 2665(lodClamp)
-            2790:    7(fvec4) ImageSampleImplicitLod 2787 2788 MinLod 2789
-            2791:    7(fvec4) Load 2729(texel)
-            2792:    7(fvec4) FAdd 2791 2790
-                              Store 2729(texel) 2792
-            2793:         224 Load 226(sCubeArray)
-            2794:    7(fvec4) Load 197(c4)
-            2795:    6(float) Load 2665(lodClamp)
-            2796:    7(fvec4) ImageSampleImplicitLod 2793 2794 MinLod 2795
-            2797:    7(fvec4) Load 2729(texel)
-            2798:    7(fvec4) FAdd 2797 2796
-                              Store 2729(texel) 2798
-            2799:         233 Load 235(s1DArrayShadow)
-            2800:  148(fvec3) Load 150(c3)
-            2801:    6(float) Load 2665(lodClamp)
-            2802:    6(float) CompositeExtract 2800 2
-            2803:    6(float) ImageSampleDrefImplicitLod 2799 2800 2802 MinLod 2801
-            2804:    174(ptr) AccessChain 2729(texel) 173
-            2805:    6(float) Load 2804
-            2806:    6(float) FAdd 2805 2803
-            2807:    174(ptr) AccessChain 2729(texel) 173
-                              Store 2807 2806
-            2808:         245 Load 247(s2DArrayShadow)
-            2809:    7(fvec4) Load 197(c4)
-            2810:    6(float) Load 2665(lodClamp)
-            2811:    6(float) CompositeExtract 2809 3
-            2812:    6(float) ImageSampleDrefImplicitLod 2808 2809 2811 MinLod 2810
-            2813:    174(ptr) AccessChain 2729(texel) 173
-            2814:    6(float) Load 2813
-            2815:    6(float) FAdd 2814 2812
-            2816:    174(ptr) AccessChain 2729(texel) 173
-                              Store 2816 2815
-            2817:         278 Load 280(sCubeArrayShadow)
-            2818:    7(fvec4) Load 197(c4)
-            2819:    6(float) Load 283(compare)
-            2820:    6(float) Load 2665(lodClamp)
-            2821:    6(float) ImageSampleDrefImplicitLod 2817 2818 2819 MinLod 2820
-            2822:    174(ptr) AccessChain 2729(texel) 173
-            2823:    6(float) Load 2822
-            2824:    6(float) FAdd 2823 2821
-            2825:    174(ptr) AccessChain 2729(texel) 173
-                              Store 2825 2824
-            2826:    7(fvec4) Load 2729(texel)
-                              ReturnValue 2826
+     2667(texel):     63(ptr) Variable Function
+                              Store 2667(texel) 120
+            2668:         122 Load 124(s1D)
+            2669:    6(float) Load 127(c1)
+            2670:    6(float) Load 2603(lodClamp)
+            2671:    7(fvec4) ImageSampleImplicitLod 2668 2669 MinLod 2670
+            2672:    7(fvec4) Load 2667(texel)
+            2673:    7(fvec4) FAdd 2672 2671
+                              Store 2667(texel) 2673
+            2674:         133 Load 135(s2D)
+            2675:   52(fvec2) Load 138(c2)
+            2676:    6(float) Load 2603(lodClamp)
+            2677:    7(fvec4) ImageSampleImplicitLod 2674 2675 MinLod 2676
+            2678:    7(fvec4) Load 2667(texel)
+            2679:    7(fvec4) FAdd 2678 2677
+                              Store 2667(texel) 2679
+            2680:         144 Load 146(s3D)
+            2681:  148(fvec3) Load 150(c3)
+            2682:    6(float) Load 2603(lodClamp)
+            2683:    7(fvec4) ImageSampleImplicitLod 2680 2681 MinLod 2682
+            2684:    7(fvec4) Load 2667(texel)
+            2685:    7(fvec4) FAdd 2684 2683
+                              Store 2667(texel) 2685
+            2686:         156 Load 158(sCube)
+            2687:  148(fvec3) Load 150(c3)
+            2688:    6(float) Load 2603(lodClamp)
+            2689:    7(fvec4) ImageSampleImplicitLod 2686 2687 MinLod 2688
+            2690:    7(fvec4) Load 2667(texel)
+            2691:    7(fvec4) FAdd 2690 2689
+                              Store 2667(texel) 2691
+            2692:         165 Load 167(s1DShadow)
+            2693:  148(fvec3) Load 150(c3)
+            2694:    6(float) Load 2603(lodClamp)
+            2695:    6(float) CompositeExtract 2693 2
+            2696:    6(float) ImageSampleDrefImplicitLod 2692 2693 2695 MinLod 2694
+            2697:    174(ptr) AccessChain 2667(texel) 173
+            2698:    6(float) Load 2697
+            2699:    6(float) FAdd 2698 2696
+            2700:    174(ptr) AccessChain 2667(texel) 173
+                              Store 2700 2699
+            2701:         180 Load 182(s2DShadow)
+            2702:  148(fvec3) Load 150(c3)
+            2703:    6(float) Load 2603(lodClamp)
+            2704:    6(float) CompositeExtract 2702 2
+            2705:    6(float) ImageSampleDrefImplicitLod 2701 2702 2704 MinLod 2703
+            2706:    174(ptr) AccessChain 2667(texel) 173
+            2707:    6(float) Load 2706
+            2708:    6(float) FAdd 2707 2705
+            2709:    174(ptr) AccessChain 2667(texel) 173
+                              Store 2709 2708
+            2710:         192 Load 194(sCubeShadow)
+            2711:    7(fvec4) Load 197(c4)
+            2712:    6(float) Load 2603(lodClamp)
+            2713:    6(float) CompositeExtract 2711 3
+            2714:    6(float) ImageSampleDrefImplicitLod 2710 2711 2713 MinLod 2712
+            2715:    174(ptr) AccessChain 2667(texel) 173
+            2716:    6(float) Load 2715
+            2717:    6(float) FAdd 2716 2714
+            2718:    174(ptr) AccessChain 2667(texel) 173
+                              Store 2718 2717
+            2719:         206 Load 208(s1DArray)
+            2720:   52(fvec2) Load 138(c2)
+            2721:    6(float) Load 2603(lodClamp)
+            2722:    7(fvec4) ImageSampleImplicitLod 2719 2720 MinLod 2721
+            2723:    7(fvec4) Load 2667(texel)
+            2724:    7(fvec4) FAdd 2723 2722
+                              Store 2667(texel) 2724
+            2725:         215 Load 217(s2DArray)
+            2726:  148(fvec3) Load 150(c3)
+            2727:    6(float) Load 2603(lodClamp)
+            2728:    7(fvec4) ImageSampleImplicitLod 2725 2726 MinLod 2727
+            2729:    7(fvec4) Load 2667(texel)
+            2730:    7(fvec4) FAdd 2729 2728
+                              Store 2667(texel) 2730
+            2731:         224 Load 226(sCubeArray)
+            2732:    7(fvec4) Load 197(c4)
+            2733:    6(float) Load 2603(lodClamp)
+            2734:    7(fvec4) ImageSampleImplicitLod 2731 2732 MinLod 2733
+            2735:    7(fvec4) Load 2667(texel)
+            2736:    7(fvec4) FAdd 2735 2734
+                              Store 2667(texel) 2736
+            2737:         233 Load 235(s1DArrayShadow)
+            2738:  148(fvec3) Load 150(c3)
+            2739:    6(float) Load 2603(lodClamp)
+            2740:    6(float) CompositeExtract 2738 2
+            2741:    6(float) ImageSampleDrefImplicitLod 2737 2738 2740 MinLod 2739
+            2742:    174(ptr) AccessChain 2667(texel) 173
+            2743:    6(float) Load 2742
+            2744:    6(float) FAdd 2743 2741
+            2745:    174(ptr) AccessChain 2667(texel) 173
+                              Store 2745 2744
+            2746:         245 Load 247(s2DArrayShadow)
+            2747:    7(fvec4) Load 197(c4)
+            2748:    6(float) Load 2603(lodClamp)
+            2749:    6(float) CompositeExtract 2747 3
+            2750:    6(float) ImageSampleDrefImplicitLod 2746 2747 2749 MinLod 2748
+            2751:    174(ptr) AccessChain 2667(texel) 173
+            2752:    6(float) Load 2751
+            2753:    6(float) FAdd 2752 2750
+            2754:    174(ptr) AccessChain 2667(texel) 173
+                              Store 2754 2753
+            2755:         278 Load 280(sCubeArrayShadow)
+            2756:    7(fvec4) Load 197(c4)
+            2757:    6(float) Load 283(compare)
+            2758:    6(float) Load 2603(lodClamp)
+            2759:    6(float) ImageSampleDrefImplicitLod 2755 2756 2757 MinLod 2758
+            2760:    174(ptr) AccessChain 2667(texel) 173
+            2761:    6(float) Load 2760
+            2762:    6(float) FAdd 2761 2759
+            2763:    174(ptr) AccessChain 2667(texel) 173
+                              Store 2763 2762
+            2764:    7(fvec4) Load 2667(texel)
+                              ReturnValue 2764
                               FunctionEnd
 102(testSparseTextureOffsetClamp():    7(fvec4) Function None 8
              103:             Label
-     2829(texel):     63(ptr) Variable Function
-                              Store 2829(texel) 120
-            2830:         133 Load 135(s2D)
-            2831:   52(fvec2) Load 138(c2)
-            2832:    6(float) Load 2665(lodClamp)
-            2833:1991(ResType) ImageSparseSampleImplicitLod 2830 2831 ConstOffset MinLod 452 2832
-            2834:    7(fvec4) CompositeExtract 2833 1
-                              Store 2829(texel) 2834
-            2835:     47(int) CompositeExtract 2833 0
-            2836:         144 Load 146(s3D)
-            2837:  148(fvec3) Load 150(c3)
-            2838:    6(float) Load 2665(lodClamp)
-            2839:1991(ResType) ImageSparseSampleImplicitLod 2836 2837 ConstOffset MinLod 459 2838
-            2840:    7(fvec4) CompositeExtract 2839 1
-                              Store 2829(texel) 2840
-            2841:     47(int) CompositeExtract 2839 0
-            2842:         180 Load 182(s2DShadow)
-            2843:  148(fvec3) Load 150(c3)
-            2844:    6(float) Load 2665(lodClamp)
-            2845:    174(ptr) AccessChain 2829(texel) 173
-            2846:    6(float) CompositeExtract 2843 2
-            2847:2009(ResType) ImageSparseSampleDrefImplicitLod 2842 2843 2846 ConstOffset MinLod 452 2844
-            2848:    6(float) CompositeExtract 2847 1
-                              Store 2845 2848
-            2849:     47(int) CompositeExtract 2847 0
-            2850:         215 Load 217(s2DArray)
-            2851:  148(fvec3) Load 150(c3)
-            2852:    6(float) Load 2665(lodClamp)
-            2853:1991(ResType) ImageSparseSampleImplicitLod 2850 2851 ConstOffset MinLod 452 2852
-            2854:    7(fvec4) CompositeExtract 2853 1
-                              Store 2829(texel) 2854
-            2855:     47(int) CompositeExtract 2853 0
-            2856:         245 Load 247(s2DArrayShadow)
-            2857:    7(fvec4) Load 197(c4)
-            2858:    6(float) Load 2665(lodClamp)
-            2859:    174(ptr) AccessChain 2829(texel) 173
-            2860:    6(float) CompositeExtract 2857 3
-            2861:2009(ResType) ImageSparseSampleDrefImplicitLod 2856 2857 2860 ConstOffset MinLod 452 2858
-            2862:    6(float) CompositeExtract 2861 1
-                              Store 2859 2862
-            2863:     47(int) CompositeExtract 2861 0
-            2864:    7(fvec4) Load 2829(texel)
-                              ReturnValue 2864
+     2767(texel):     63(ptr) Variable Function
+                              Store 2767(texel) 120
+            2768:         133 Load 135(s2D)
+            2769:   52(fvec2) Load 138(c2)
+            2770:    6(float) Load 2603(lodClamp)
+            2771:1946(ResType) ImageSparseSampleImplicitLod 2768 2769 ConstOffset MinLod 452 2770
+            2772:    7(fvec4) CompositeExtract 2771 1
+                              Store 2767(texel) 2772
+            2773:     47(int) CompositeExtract 2771 0
+            2774:         144 Load 146(s3D)
+            2775:  148(fvec3) Load 150(c3)
+            2776:    6(float) Load 2603(lodClamp)
+            2777:1946(ResType) ImageSparseSampleImplicitLod 2774 2775 ConstOffset MinLod 459 2776
+            2778:    7(fvec4) CompositeExtract 2777 1
+                              Store 2767(texel) 2778
+            2779:     47(int) CompositeExtract 2777 0
+            2780:         180 Load 182(s2DShadow)
+            2781:  148(fvec3) Load 150(c3)
+            2782:    6(float) Load 2603(lodClamp)
+            2783:    174(ptr) AccessChain 2767(texel) 173
+            2784:    6(float) CompositeExtract 2781 2
+            2785:1964(ResType) ImageSparseSampleDrefImplicitLod 2780 2781 2784 ConstOffset MinLod 452 2782
+            2786:    6(float) CompositeExtract 2785 1
+                              Store 2783 2786
+            2787:     47(int) CompositeExtract 2785 0
+            2788:         215 Load 217(s2DArray)
+            2789:  148(fvec3) Load 150(c3)
+            2790:    6(float) Load 2603(lodClamp)
+            2791:1946(ResType) ImageSparseSampleImplicitLod 2788 2789 ConstOffset MinLod 452 2790
+            2792:    7(fvec4) CompositeExtract 2791 1
+                              Store 2767(texel) 2792
+            2793:     47(int) CompositeExtract 2791 0
+            2794:         245 Load 247(s2DArrayShadow)
+            2795:    7(fvec4) Load 197(c4)
+            2796:    6(float) Load 2603(lodClamp)
+            2797:    174(ptr) AccessChain 2767(texel) 173
+            2798:    6(float) CompositeExtract 2795 3
+            2799:1964(ResType) ImageSparseSampleDrefImplicitLod 2794 2795 2798 ConstOffset MinLod 452 2796
+            2800:    6(float) CompositeExtract 2799 1
+                              Store 2797 2800
+            2801:     47(int) CompositeExtract 2799 0
+            2802:    7(fvec4) Load 2767(texel)
+                              ReturnValue 2802
                               FunctionEnd
 104(testTextureOffsetClamp():    7(fvec4) Function None 8
              105:             Label
-     2867(texel):     63(ptr) Variable Function
-                              Store 2867(texel) 120
-            2868:         122 Load 124(s1D)
-            2869:    6(float) Load 127(c1)
-            2870:    6(float) Load 2665(lodClamp)
-            2871:    7(fvec4) ImageSampleImplicitLod 2868 2869 ConstOffset MinLod 445 2870
-            2872:    7(fvec4) Load 2867(texel)
-            2873:    7(fvec4) FAdd 2872 2871
-                              Store 2867(texel) 2873
-            2874:         133 Load 135(s2D)
-            2875:   52(fvec2) Load 138(c2)
-            2876:    6(float) Load 2665(lodClamp)
-            2877:    7(fvec4) ImageSampleImplicitLod 2874 2875 ConstOffset MinLod 452 2876
-            2878:    7(fvec4) Load 2867(texel)
-            2879:    7(fvec4) FAdd 2878 2877
-                              Store 2867(texel) 2879
-            2880:         144 Load 146(s3D)
-            2881:  148(fvec3) Load 150(c3)
-            2882:    6(float) Load 2665(lodClamp)
-            2883:    7(fvec4) ImageSampleImplicitLod 2880 2881 ConstOffset MinLod 459 2882
-            2884:    7(fvec4) Load 2867(texel)
-            2885:    7(fvec4) FAdd 2884 2883
-                              Store 2867(texel) 2885
-            2886:         165 Load 167(s1DShadow)
-            2887:  148(fvec3) Load 150(c3)
-            2888:    6(float) Load 2665(lodClamp)
-            2889:    6(float) CompositeExtract 2887 2
-            2890:    6(float) ImageSampleDrefImplicitLod 2886 2887 2889 ConstOffset MinLod 445 2888
-            2891:    174(ptr) AccessChain 2867(texel) 173
-            2892:    6(float) Load 2891
-            2893:    6(float) FAdd 2892 2890
-            2894:    174(ptr) AccessChain 2867(texel) 173
-                              Store 2894 2893
-            2895:         180 Load 182(s2DShadow)
-            2896:  148(fvec3) Load 150(c3)
-            2897:    6(float) Load 2665(lodClamp)
-            2898:    6(float) CompositeExtract 2896 2
-            2899:    6(float) ImageSampleDrefImplicitLod 2895 2896 2898 ConstOffset MinLod 452 2897
-            2900:    174(ptr) AccessChain 2867(texel) 173
-            2901:    6(float) Load 2900
-            2902:    6(float) FAdd 2901 2899
-            2903:    174(ptr) AccessChain 2867(texel) 173
-                              Store 2903 2902
-            2904:         206 Load 208(s1DArray)
-            2905:   52(fvec2) Load 138(c2)
-            2906:    6(float) Load 2665(lodClamp)
-            2907:    7(fvec4) ImageSampleImplicitLod 2904 2905 ConstOffset MinLod 445 2906
-            2908:    7(fvec4) Load 2867(texel)
-            2909:    7(fvec4) FAdd 2908 2907
-                              Store 2867(texel) 2909
-            2910:         215 Load 217(s2DArray)
-            2911:  148(fvec3) Load 150(c3)
-            2912:    6(float) Load 2665(lodClamp)
-            2913:    7(fvec4) ImageSampleImplicitLod 2910 2911 ConstOffset MinLod 452 2912
-            2914:    7(fvec4) Load 2867(texel)
-            2915:    7(fvec4) FAdd 2914 2913
-                              Store 2867(texel) 2915
-            2916:         233 Load 235(s1DArrayShadow)
-            2917:  148(fvec3) Load 150(c3)
-            2918:    6(float) Load 2665(lodClamp)
-            2919:    6(float) CompositeExtract 2917 2
-            2920:    6(float) ImageSampleDrefImplicitLod 2916 2917 2919 ConstOffset MinLod 445 2918
-            2921:    174(ptr) AccessChain 2867(texel) 173
-            2922:    6(float) Load 2921
-            2923:    6(float) FAdd 2922 2920
-            2924:    174(ptr) AccessChain 2867(texel) 173
-                              Store 2924 2923
-            2925:         245 Load 247(s2DArrayShadow)
-            2926:    7(fvec4) Load 197(c4)
-            2927:    6(float) Load 2665(lodClamp)
-            2928:    6(float) CompositeExtract 2926 3
-            2929:    6(float) ImageSampleDrefImplicitLod 2925 2926 2928 ConstOffset MinLod 452 2927
-            2930:    174(ptr) AccessChain 2867(texel) 173
-            2931:    6(float) Load 2930
-            2932:    6(float) FAdd 2931 2929
-            2933:    174(ptr) AccessChain 2867(texel) 173
-                              Store 2933 2932
-            2934:    7(fvec4) Load 2867(texel)
-                              ReturnValue 2934
+     2805(texel):     63(ptr) Variable Function
+                              Store 2805(texel) 120
+            2806:         122 Load 124(s1D)
+            2807:    6(float) Load 127(c1)
+            2808:    6(float) Load 2603(lodClamp)
+            2809:    7(fvec4) ImageSampleImplicitLod 2806 2807 ConstOffset MinLod 445 2808
+            2810:    7(fvec4) Load 2805(texel)
+            2811:    7(fvec4) FAdd 2810 2809
+                              Store 2805(texel) 2811
+            2812:         133 Load 135(s2D)
+            2813:   52(fvec2) Load 138(c2)
+            2814:    6(float) Load 2603(lodClamp)
+            2815:    7(fvec4) ImageSampleImplicitLod 2812 2813 ConstOffset MinLod 452 2814
+            2816:    7(fvec4) Load 2805(texel)
+            2817:    7(fvec4) FAdd 2816 2815
+                              Store 2805(texel) 2817
+            2818:         144 Load 146(s3D)
+            2819:  148(fvec3) Load 150(c3)
+            2820:    6(float) Load 2603(lodClamp)
+            2821:    7(fvec4) ImageSampleImplicitLod 2818 2819 ConstOffset MinLod 459 2820
+            2822:    7(fvec4) Load 2805(texel)
+            2823:    7(fvec4) FAdd 2822 2821
+                              Store 2805(texel) 2823
+            2824:         165 Load 167(s1DShadow)
+            2825:  148(fvec3) Load 150(c3)
+            2826:    6(float) Load 2603(lodClamp)
+            2827:    6(float) CompositeExtract 2825 2
+            2828:    6(float) ImageSampleDrefImplicitLod 2824 2825 2827 ConstOffset MinLod 445 2826
+            2829:    174(ptr) AccessChain 2805(texel) 173
+            2830:    6(float) Load 2829
+            2831:    6(float) FAdd 2830 2828
+            2832:    174(ptr) AccessChain 2805(texel) 173
+                              Store 2832 2831
+            2833:         180 Load 182(s2DShadow)
+            2834:  148(fvec3) Load 150(c3)
+            2835:    6(float) Load 2603(lodClamp)
+            2836:    6(float) CompositeExtract 2834 2
+            2837:    6(float) ImageSampleDrefImplicitLod 2833 2834 2836 ConstOffset MinLod 452 2835
+            2838:    174(ptr) AccessChain 2805(texel) 173
+            2839:    6(float) Load 2838
+            2840:    6(float) FAdd 2839 2837
+            2841:    174(ptr) AccessChain 2805(texel) 173
+                              Store 2841 2840
+            2842:         206 Load 208(s1DArray)
+            2843:   52(fvec2) Load 138(c2)
+            2844:    6(float) Load 2603(lodClamp)
+            2845:    7(fvec4) ImageSampleImplicitLod 2842 2843 ConstOffset MinLod 445 2844
+            2846:    7(fvec4) Load 2805(texel)
+            2847:    7(fvec4) FAdd 2846 2845
+                              Store 2805(texel) 2847
+            2848:         215 Load 217(s2DArray)
+            2849:  148(fvec3) Load 150(c3)
+            2850:    6(float) Load 2603(lodClamp)
+            2851:    7(fvec4) ImageSampleImplicitLod 2848 2849 ConstOffset MinLod 452 2850
+            2852:    7(fvec4) Load 2805(texel)
+            2853:    7(fvec4) FAdd 2852 2851
+                              Store 2805(texel) 2853
+            2854:         233 Load 235(s1DArrayShadow)
+            2855:  148(fvec3) Load 150(c3)
+            2856:    6(float) Load 2603(lodClamp)
+            2857:    6(float) CompositeExtract 2855 2
+            2858:    6(float) ImageSampleDrefImplicitLod 2854 2855 2857 ConstOffset MinLod 445 2856
+            2859:    174(ptr) AccessChain 2805(texel) 173
+            2860:    6(float) Load 2859
+            2861:    6(float) FAdd 2860 2858
+            2862:    174(ptr) AccessChain 2805(texel) 173
+                              Store 2862 2861
+            2863:         245 Load 247(s2DArrayShadow)
+            2864:    7(fvec4) Load 197(c4)
+            2865:    6(float) Load 2603(lodClamp)
+            2866:    6(float) CompositeExtract 2864 3
+            2867:    6(float) ImageSampleDrefImplicitLod 2863 2864 2866 ConstOffset MinLod 452 2865
+            2868:    174(ptr) AccessChain 2805(texel) 173
+            2869:    6(float) Load 2868
+            2870:    6(float) FAdd 2869 2867
+            2871:    174(ptr) AccessChain 2805(texel) 173
+                              Store 2871 2870
+            2872:    7(fvec4) Load 2805(texel)
+                              ReturnValue 2872
                               FunctionEnd
 106(testSparseTextureGradClamp():    7(fvec4) Function None 8
              107:             Label
-     2937(texel):     63(ptr) Variable Function
-                              Store 2937(texel) 120
-            2938:         133 Load 135(s2D)
-            2939:   52(fvec2) Load 138(c2)
-            2940:   52(fvec2) Load 874(dPdxy2)
-            2941:   52(fvec2) Load 874(dPdxy2)
-            2942:    6(float) Load 2665(lodClamp)
-            2943:1991(ResType) ImageSparseSampleExplicitLod 2938 2939 Grad MinLod 2940 2941 2942
-            2944:    7(fvec4) CompositeExtract 2943 1
-                              Store 2937(texel) 2944
-            2945:     47(int) CompositeExtract 2943 0
-            2946:         144 Load 146(s3D)
-            2947:  148(fvec3) Load 150(c3)
-            2948:  148(fvec3) Load 882(dPdxy3)
-            2949:  148(fvec3) Load 882(dPdxy3)
-            2950:    6(float) Load 2665(lodClamp)
-            2951:1991(ResType) ImageSparseSampleExplicitLod 2946 2947 Grad MinLod 2948 2949 2950
-            2952:    7(fvec4) CompositeExtract 2951 1
-                              Store 2937(texel) 2952
-            2953:     47(int) CompositeExtract 2951 0
-            2954:         156 Load 158(sCube)
-            2955:  148(fvec3) Load 150(c3)
-            2956:  148(fvec3) Load 882(dPdxy3)
-            2957:  148(fvec3) Load 882(dPdxy3)
-            2958:    6(float) Load 2665(lodClamp)
-            2959:1991(ResType) ImageSparseSampleExplicitLod 2954 2955 Grad MinLod 2956 2957 2958
-            2960:    7(fvec4) CompositeExtract 2959 1
-                              Store 2937(texel) 2960
-            2961:     47(int) CompositeExtract 2959 0
-            2962:         180 Load 182(s2DShadow)
-            2963:  148(fvec3) Load 150(c3)
-            2964:   52(fvec2) Load 874(dPdxy2)
-            2965:   52(fvec2) Load 874(dPdxy2)
-            2966:    6(float) Load 2665(lodClamp)
-            2967:    174(ptr) AccessChain 2937(texel) 173
-            2968:    6(float) CompositeExtract 2963 2
-            2969:2009(ResType) ImageSparseSampleDrefExplicitLod 2962 2963 2968 Grad MinLod 2964 2965 2966
-            2970:    6(float) CompositeExtract 2969 1
-                              Store 2967 2970
-            2971:     47(int) CompositeExtract 2969 0
-            2972:         192 Load 194(sCubeShadow)
-            2973:    7(fvec4) Load 197(c4)
-            2974:  148(fvec3) Load 882(dPdxy3)
-            2975:  148(fvec3) Load 882(dPdxy3)
-            2976:    6(float) Load 2665(lodClamp)
-            2977:    174(ptr) AccessChain 2937(texel) 173
-            2978:    6(float) CompositeExtract 2973 3
-            2979:2009(ResType) ImageSparseSampleDrefExplicitLod 2972 2973 2978 Grad MinLod 2974 2975 2976
-            2980:    6(float) CompositeExtract 2979 1
-                              Store 2977 2980
-            2981:     47(int) CompositeExtract 2979 0
-            2982:         215 Load 217(s2DArray)
-            2983:  148(fvec3) Load 150(c3)
-            2984:   52(fvec2) Load 874(dPdxy2)
-            2985:   52(fvec2) Load 874(dPdxy2)
-            2986:    6(float) Load 2665(lodClamp)
-            2987:1991(ResType) ImageSparseSampleExplicitLod 2982 2983 Grad MinLod 2984 2985 2986
-            2988:    7(fvec4) CompositeExtract 2987 1
-                              Store 2937(texel) 2988
-            2989:     47(int) CompositeExtract 2987 0
-            2990:         245 Load 247(s2DArrayShadow)
-            2991:    7(fvec4) Load 197(c4)
-            2992:   52(fvec2) Load 874(dPdxy2)
-            2993:   52(fvec2) Load 874(dPdxy2)
-            2994:    6(float) Load 2665(lodClamp)
-            2995:    174(ptr) AccessChain 2937(texel) 173
-            2996:    6(float) CompositeExtract 2991 3
-            2997:2009(ResType) ImageSparseSampleDrefExplicitLod 2990 2991 2996 Grad MinLod 2992 2993 2994
-            2998:    6(float) CompositeExtract 2997 1
-                              Store 2995 2998
-            2999:     47(int) CompositeExtract 2997 0
-            3000:         224 Load 226(sCubeArray)
-            3001:    7(fvec4) Load 197(c4)
-            3002:  148(fvec3) Load 882(dPdxy3)
-            3003:  148(fvec3) Load 882(dPdxy3)
-            3004:    6(float) Load 2665(lodClamp)
-            3005:1991(ResType) ImageSparseSampleExplicitLod 3000 3001 Grad MinLod 3002 3003 3004
-            3006:    7(fvec4) CompositeExtract 3005 1
-                              Store 2937(texel) 3006
-            3007:     47(int) CompositeExtract 3005 0
-            3008:    7(fvec4) Load 2937(texel)
-                              ReturnValue 3008
+     2875(texel):     63(ptr) Variable Function
+                              Store 2875(texel) 120
+            2876:         133 Load 135(s2D)
+            2877:   52(fvec2) Load 138(c2)
+            2878:   52(fvec2) Load 873(dPdxy2)
+            2879:    6(float) Load 2603(lodClamp)
+            2880:1946(ResType) ImageSparseSampleExplicitLod 2876 2877 Grad MinLod 2878 2878 2879
+            2881:    7(fvec4) CompositeExtract 2880 1
+                              Store 2875(texel) 2881
+            2882:     47(int) CompositeExtract 2880 0
+            2883:         144 Load 146(s3D)
+            2884:  148(fvec3) Load 150(c3)
+            2885:  148(fvec3) Load 880(dPdxy3)
+            2886:    6(float) Load 2603(lodClamp)
+            2887:1946(ResType) ImageSparseSampleExplicitLod 2883 2884 Grad MinLod 2885 2885 2886
+            2888:    7(fvec4) CompositeExtract 2887 1
+                              Store 2875(texel) 2888
+            2889:     47(int) CompositeExtract 2887 0
+            2890:         156 Load 158(sCube)
+            2891:  148(fvec3) Load 150(c3)
+            2892:  148(fvec3) Load 880(dPdxy3)
+            2893:    6(float) Load 2603(lodClamp)
+            2894:1946(ResType) ImageSparseSampleExplicitLod 2890 2891 Grad MinLod 2892 2892 2893
+            2895:    7(fvec4) CompositeExtract 2894 1
+                              Store 2875(texel) 2895
+            2896:     47(int) CompositeExtract 2894 0
+            2897:         180 Load 182(s2DShadow)
+            2898:  148(fvec3) Load 150(c3)
+            2899:   52(fvec2) Load 873(dPdxy2)
+            2900:    6(float) Load 2603(lodClamp)
+            2901:    174(ptr) AccessChain 2875(texel) 173
+            2902:    6(float) CompositeExtract 2898 2
+            2903:1964(ResType) ImageSparseSampleDrefExplicitLod 2897 2898 2902 Grad MinLod 2899 2899 2900
+            2904:    6(float) CompositeExtract 2903 1
+                              Store 2901 2904
+            2905:     47(int) CompositeExtract 2903 0
+            2906:         192 Load 194(sCubeShadow)
+            2907:    7(fvec4) Load 197(c4)
+            2908:  148(fvec3) Load 880(dPdxy3)
+            2909:    6(float) Load 2603(lodClamp)
+            2910:    174(ptr) AccessChain 2875(texel) 173
+            2911:    6(float) CompositeExtract 2907 3
+            2912:1964(ResType) ImageSparseSampleDrefExplicitLod 2906 2907 2911 Grad MinLod 2908 2908 2909
+            2913:    6(float) CompositeExtract 2912 1
+                              Store 2910 2913
+            2914:     47(int) CompositeExtract 2912 0
+            2915:         215 Load 217(s2DArray)
+            2916:  148(fvec3) Load 150(c3)
+            2917:   52(fvec2) Load 873(dPdxy2)
+            2918:    6(float) Load 2603(lodClamp)
+            2919:1946(ResType) ImageSparseSampleExplicitLod 2915 2916 Grad MinLod 2917 2917 2918
+            2920:    7(fvec4) CompositeExtract 2919 1
+                              Store 2875(texel) 2920
+            2921:     47(int) CompositeExtract 2919 0
+            2922:         245 Load 247(s2DArrayShadow)
+            2923:    7(fvec4) Load 197(c4)
+            2924:   52(fvec2) Load 873(dPdxy2)
+            2925:    6(float) Load 2603(lodClamp)
+            2926:    174(ptr) AccessChain 2875(texel) 173
+            2927:    6(float) CompositeExtract 2923 3
+            2928:1964(ResType) ImageSparseSampleDrefExplicitLod 2922 2923 2927 Grad MinLod 2924 2924 2925
+            2929:    6(float) CompositeExtract 2928 1
+                              Store 2926 2929
+            2930:     47(int) CompositeExtract 2928 0
+            2931:         224 Load 226(sCubeArray)
+            2932:    7(fvec4) Load 197(c4)
+            2933:  148(fvec3) Load 880(dPdxy3)
+            2934:    6(float) Load 2603(lodClamp)
+            2935:1946(ResType) ImageSparseSampleExplicitLod 2931 2932 Grad MinLod 2933 2933 2934
+            2936:    7(fvec4) CompositeExtract 2935 1
+                              Store 2875(texel) 2936
+            2937:     47(int) CompositeExtract 2935 0
+            2938:    7(fvec4) Load 2875(texel)
+                              ReturnValue 2938
                               FunctionEnd
 108(testTextureGradClamp():    7(fvec4) Function None 8
              109:             Label
-     3011(texel):     63(ptr) Variable Function
-                              Store 3011(texel) 120
-            3012:         122 Load 124(s1D)
-            3013:    6(float) Load 127(c1)
-            3014:    6(float) Load 866(dPdxy1)
-            3015:    6(float) Load 866(dPdxy1)
-            3016:    6(float) Load 2665(lodClamp)
-            3017:    7(fvec4) ImageSampleExplicitLod 3012 3013 Grad MinLod 3014 3015 3016
-            3018:    7(fvec4) Load 3011(texel)
-            3019:    7(fvec4) FAdd 3018 3017
-                              Store 3011(texel) 3019
-            3020:         133 Load 135(s2D)
-            3021:   52(fvec2) Load 138(c2)
-            3022:   52(fvec2) Load 874(dPdxy2)
-            3023:   52(fvec2) Load 874(dPdxy2)
-            3024:    6(float) Load 2665(lodClamp)
-            3025:    7(fvec4) ImageSampleExplicitLod 3020 3021 Grad MinLod 3022 3023 3024
-            3026:    7(fvec4) Load 3011(texel)
-            3027:    7(fvec4) FAdd 3026 3025
-                              Store 3011(texel) 3027
-            3028:         144 Load 146(s3D)
-            3029:  148(fvec3) Load 150(c3)
-            3030:  148(fvec3) Load 882(dPdxy3)
-            3031:  148(fvec3) Load 882(dPdxy3)
-            3032:    6(float) Load 2665(lodClamp)
-            3033:    7(fvec4) ImageSampleExplicitLod 3028 3029 Grad MinLod 3030 3031 3032
-            3034:    7(fvec4) Load 3011(texel)
-            3035:    7(fvec4) FAdd 3034 3033
-                              Store 3011(texel) 3035
-            3036:         156 Load 158(sCube)
-            3037:  148(fvec3) Load 150(c3)
-            3038:  148(fvec3) Load 882(dPdxy3)
-            3039:  148(fvec3) Load 882(dPdxy3)
-            3040:    6(float) Load 2665(lodClamp)
-            3041:    7(fvec4) ImageSampleExplicitLod 3036 3037 Grad MinLod 3038 3039 3040
-            3042:    7(fvec4) Load 3011(texel)
-            3043:    7(fvec4) FAdd 3042 3041
-                              Store 3011(texel) 3043
-            3044:         165 Load 167(s1DShadow)
-            3045:  148(fvec3) Load 150(c3)
-            3046:    6(float) Load 866(dPdxy1)
-            3047:    6(float) Load 866(dPdxy1)
-            3048:    6(float) Load 2665(lodClamp)
-            3049:    6(float) CompositeExtract 3045 2
-            3050:    6(float) ImageSampleDrefExplicitLod 3044 3045 3049 Grad MinLod 3046 3047 3048
-            3051:    174(ptr) AccessChain 3011(texel) 173
-            3052:    6(float) Load 3051
-            3053:    6(float) FAdd 3052 3050
-            3054:    174(ptr) AccessChain 3011(texel) 173
-                              Store 3054 3053
-            3055:         180 Load 182(s2DShadow)
-            3056:  148(fvec3) Load 150(c3)
-            3057:   52(fvec2) Load 874(dPdxy2)
-            3058:   52(fvec2) Load 874(dPdxy2)
-            3059:    6(float) Load 2665(lodClamp)
-            3060:    6(float) CompositeExtract 3056 2
-            3061:    6(float) ImageSampleDrefExplicitLod 3055 3056 3060 Grad MinLod 3057 3058 3059
-            3062:    174(ptr) AccessChain 3011(texel) 173
-            3063:    6(float) Load 3062
-            3064:    6(float) FAdd 3063 3061
-            3065:    174(ptr) AccessChain 3011(texel) 173
-                              Store 3065 3064
-            3066:         192 Load 194(sCubeShadow)
-            3067:    7(fvec4) Load 197(c4)
-            3068:  148(fvec3) Load 882(dPdxy3)
-            3069:  148(fvec3) Load 882(dPdxy3)
-            3070:    6(float) Load 2665(lodClamp)
-            3071:    6(float) CompositeExtract 3067 3
-            3072:    6(float) ImageSampleDrefExplicitLod 3066 3067 3071 Grad MinLod 3068 3069 3070
-            3073:    174(ptr) AccessChain 3011(texel) 173
-            3074:    6(float) Load 3073
-            3075:    6(float) FAdd 3074 3072
-            3076:    174(ptr) AccessChain 3011(texel) 173
-                              Store 3076 3075
-            3077:         206 Load 208(s1DArray)
-            3078:   52(fvec2) Load 138(c2)
-            3079:    6(float) Load 866(dPdxy1)
-            3080:    6(float) Load 866(dPdxy1)
-            3081:    6(float) Load 2665(lodClamp)
-            3082:    7(fvec4) ImageSampleExplicitLod 3077 3078 Grad MinLod 3079 3080 3081
-            3083:    7(fvec4) Load 3011(texel)
-            3084:    7(fvec4) FAdd 3083 3082
-                              Store 3011(texel) 3084
-            3085:         215 Load 217(s2DArray)
-            3086:  148(fvec3) Load 150(c3)
-            3087:   52(fvec2) Load 874(dPdxy2)
-            3088:   52(fvec2) Load 874(dPdxy2)
-            3089:    6(float) Load 2665(lodClamp)
-            3090:    7(fvec4) ImageSampleExplicitLod 3085 3086 Grad MinLod 3087 3088 3089
-            3091:    7(fvec4) Load 3011(texel)
-            3092:    7(fvec4) FAdd 3091 3090
-                              Store 3011(texel) 3092
-            3093:         233 Load 235(s1DArrayShadow)
-            3094:  148(fvec3) Load 150(c3)
-            3095:    6(float) Load 866(dPdxy1)
-            3096:    6(float) Load 866(dPdxy1)
-            3097:    6(float) Load 2665(lodClamp)
-            3098:    6(float) CompositeExtract 3094 2
-            3099:    6(float) ImageSampleDrefExplicitLod 3093 3094 3098 Grad MinLod 3095 3096 3097
-            3100:    174(ptr) AccessChain 3011(texel) 173
-            3101:    6(float) Load 3100
-            3102:    6(float) FAdd 3101 3099
-            3103:    174(ptr) AccessChain 3011(texel) 173
-                              Store 3103 3102
-            3104:         245 Load 247(s2DArrayShadow)
-            3105:    7(fvec4) Load 197(c4)
-            3106:   52(fvec2) Load 874(dPdxy2)
-            3107:   52(fvec2) Load 874(dPdxy2)
-            3108:    6(float) Load 2665(lodClamp)
-            3109:    6(float) CompositeExtract 3105 3
-            3110:    6(float) ImageSampleDrefExplicitLod 3104 3105 3109 Grad MinLod 3106 3107 3108
-            3111:    174(ptr) AccessChain 3011(texel) 173
-            3112:    6(float) Load 3111
-            3113:    6(float) FAdd 3112 3110
-            3114:    174(ptr) AccessChain 3011(texel) 173
-                              Store 3114 3113
-            3115:         224 Load 226(sCubeArray)
-            3116:    7(fvec4) Load 197(c4)
-            3117:  148(fvec3) Load 882(dPdxy3)
-            3118:  148(fvec3) Load 882(dPdxy3)
-            3119:    6(float) Load 2665(lodClamp)
-            3120:    7(fvec4) ImageSampleExplicitLod 3115 3116 Grad MinLod 3117 3118 3119
-            3121:    7(fvec4) Load 3011(texel)
-            3122:    7(fvec4) FAdd 3121 3120
-                              Store 3011(texel) 3122
-            3123:    7(fvec4) Load 3011(texel)
-                              ReturnValue 3123
+     2941(texel):     63(ptr) Variable Function
+                              Store 2941(texel) 120
+            2942:         122 Load 124(s1D)
+            2943:    6(float) Load 127(c1)
+            2944:    6(float) Load 866(dPdxy1)
+            2945:    6(float) Load 2603(lodClamp)
+            2946:    7(fvec4) ImageSampleExplicitLod 2942 2943 Grad MinLod 2944 2944 2945
+            2947:    7(fvec4) Load 2941(texel)
+            2948:    7(fvec4) FAdd 2947 2946
+                              Store 2941(texel) 2948
+            2949:         133 Load 135(s2D)
+            2950:   52(fvec2) Load 138(c2)
+            2951:   52(fvec2) Load 873(dPdxy2)
+            2952:    6(float) Load 2603(lodClamp)
+            2953:    7(fvec4) ImageSampleExplicitLod 2949 2950 Grad MinLod 2951 2951 2952
+            2954:    7(fvec4) Load 2941(texel)
+            2955:    7(fvec4) FAdd 2954 2953
+                              Store 2941(texel) 2955
+            2956:         144 Load 146(s3D)
+            2957:  148(fvec3) Load 150(c3)
+            2958:  148(fvec3) Load 880(dPdxy3)
+            2959:    6(float) Load 2603(lodClamp)
+            2960:    7(fvec4) ImageSampleExplicitLod 2956 2957 Grad MinLod 2958 2958 2959
+            2961:    7(fvec4) Load 2941(texel)
+            2962:    7(fvec4) FAdd 2961 2960
+                              Store 2941(texel) 2962
+            2963:         156 Load 158(sCube)
+            2964:  148(fvec3) Load 150(c3)
+            2965:  148(fvec3) Load 880(dPdxy3)
+            2966:    6(float) Load 2603(lodClamp)
+            2967:    7(fvec4) ImageSampleExplicitLod 2963 2964 Grad MinLod 2965 2965 2966
+            2968:    7(fvec4) Load 2941(texel)
+            2969:    7(fvec4) FAdd 2968 2967
+                              Store 2941(texel) 2969
+            2970:         165 Load 167(s1DShadow)
+            2971:  148(fvec3) Load 150(c3)
+            2972:    6(float) Load 866(dPdxy1)
+            2973:    6(float) Load 2603(lodClamp)
+            2974:    6(float) CompositeExtract 2971 2
+            2975:    6(float) ImageSampleDrefExplicitLod 2970 2971 2974 Grad MinLod 2972 2972 2973
+            2976:    174(ptr) AccessChain 2941(texel) 173
+            2977:    6(float) Load 2976
+            2978:    6(float) FAdd 2977 2975
+            2979:    174(ptr) AccessChain 2941(texel) 173
+                              Store 2979 2978
+            2980:         180 Load 182(s2DShadow)
+            2981:  148(fvec3) Load 150(c3)
+            2982:   52(fvec2) Load 873(dPdxy2)
+            2983:    6(float) Load 2603(lodClamp)
+            2984:    6(float) CompositeExtract 2981 2
+            2985:    6(float) ImageSampleDrefExplicitLod 2980 2981 2984 Grad MinLod 2982 2982 2983
+            2986:    174(ptr) AccessChain 2941(texel) 173
+            2987:    6(float) Load 2986
+            2988:    6(float) FAdd 2987 2985
+            2989:    174(ptr) AccessChain 2941(texel) 173
+                              Store 2989 2988
+            2990:         192 Load 194(sCubeShadow)
+            2991:    7(fvec4) Load 197(c4)
+            2992:  148(fvec3) Load 880(dPdxy3)
+            2993:    6(float) Load 2603(lodClamp)
+            2994:    6(float) CompositeExtract 2991 3
+            2995:    6(float) ImageSampleDrefExplicitLod 2990 2991 2994 Grad MinLod 2992 2992 2993
+            2996:    174(ptr) AccessChain 2941(texel) 173
+            2997:    6(float) Load 2996
+            2998:    6(float) FAdd 2997 2995
+            2999:    174(ptr) AccessChain 2941(texel) 173
+                              Store 2999 2998
+            3000:         206 Load 208(s1DArray)
+            3001:   52(fvec2) Load 138(c2)
+            3002:    6(float) Load 866(dPdxy1)
+            3003:    6(float) Load 2603(lodClamp)
+            3004:    7(fvec4) ImageSampleExplicitLod 3000 3001 Grad MinLod 3002 3002 3003
+            3005:    7(fvec4) Load 2941(texel)
+            3006:    7(fvec4) FAdd 3005 3004
+                              Store 2941(texel) 3006
+            3007:         215 Load 217(s2DArray)
+            3008:  148(fvec3) Load 150(c3)
+            3009:   52(fvec2) Load 873(dPdxy2)
+            3010:    6(float) Load 2603(lodClamp)
+            3011:    7(fvec4) ImageSampleExplicitLod 3007 3008 Grad MinLod 3009 3009 3010
+            3012:    7(fvec4) Load 2941(texel)
+            3013:    7(fvec4) FAdd 3012 3011
+                              Store 2941(texel) 3013
+            3014:         233 Load 235(s1DArrayShadow)
+            3015:  148(fvec3) Load 150(c3)
+            3016:    6(float) Load 866(dPdxy1)
+            3017:    6(float) Load 2603(lodClamp)
+            3018:    6(float) CompositeExtract 3015 2
+            3019:    6(float) ImageSampleDrefExplicitLod 3014 3015 3018 Grad MinLod 3016 3016 3017
+            3020:    174(ptr) AccessChain 2941(texel) 173
+            3021:    6(float) Load 3020
+            3022:    6(float) FAdd 3021 3019
+            3023:    174(ptr) AccessChain 2941(texel) 173
+                              Store 3023 3022
+            3024:         245 Load 247(s2DArrayShadow)
+            3025:    7(fvec4) Load 197(c4)
+            3026:   52(fvec2) Load 873(dPdxy2)
+            3027:    6(float) Load 2603(lodClamp)
+            3028:    6(float) CompositeExtract 3025 3
+            3029:    6(float) ImageSampleDrefExplicitLod 3024 3025 3028 Grad MinLod 3026 3026 3027
+            3030:    174(ptr) AccessChain 2941(texel) 173
+            3031:    6(float) Load 3030
+            3032:    6(float) FAdd 3031 3029
+            3033:    174(ptr) AccessChain 2941(texel) 173
+                              Store 3033 3032
+            3034:         224 Load 226(sCubeArray)
+            3035:    7(fvec4) Load 197(c4)
+            3036:  148(fvec3) Load 880(dPdxy3)
+            3037:    6(float) Load 2603(lodClamp)
+            3038:    7(fvec4) ImageSampleExplicitLod 3034 3035 Grad MinLod 3036 3036 3037
+            3039:    7(fvec4) Load 2941(texel)
+            3040:    7(fvec4) FAdd 3039 3038
+                              Store 2941(texel) 3040
+            3041:    7(fvec4) Load 2941(texel)
+                              ReturnValue 3041
                               FunctionEnd
 110(testSparseTextureGradOffsetClamp():    7(fvec4) Function None 8
              111:             Label
-     3126(texel):     63(ptr) Variable Function
-                              Store 3126(texel) 120
-            3127:         133 Load 135(s2D)
-            3128:   52(fvec2) Load 138(c2)
-            3129:   52(fvec2) Load 874(dPdxy2)
-            3130:   52(fvec2) Load 874(dPdxy2)
-            3131:    6(float) Load 2665(lodClamp)
-            3132:1991(ResType) ImageSparseSampleExplicitLod 3127 3128 Grad ConstOffset MinLod 3129 3130 452 3131
-            3133:    7(fvec4) CompositeExtract 3132 1
-                              Store 3126(texel) 3133
-            3134:     47(int) CompositeExtract 3132 0
-            3135:         144 Load 146(s3D)
-            3136:  148(fvec3) Load 150(c3)
-            3137:  148(fvec3) Load 882(dPdxy3)
-            3138:  148(fvec3) Load 882(dPdxy3)
-            3139:    6(float) Load 2665(lodClamp)
-            3140:1991(ResType) ImageSparseSampleExplicitLod 3135 3136 Grad ConstOffset MinLod 3137 3138 459 3139
-            3141:    7(fvec4) CompositeExtract 3140 1
-                              Store 3126(texel) 3141
-            3142:     47(int) CompositeExtract 3140 0
-            3143:         180 Load 182(s2DShadow)
-            3144:  148(fvec3) Load 150(c3)
-            3145:   52(fvec2) Load 874(dPdxy2)
-            3146:   52(fvec2) Load 874(dPdxy2)
-            3147:    6(float) Load 2665(lodClamp)
-            3148:    174(ptr) AccessChain 3126(texel) 173
-            3149:    6(float) CompositeExtract 3144 2
-            3150:2009(ResType) ImageSparseSampleDrefExplicitLod 3143 3144 3149 Grad ConstOffset MinLod 3145 3146 452 3147
-            3151:    6(float) CompositeExtract 3150 1
-                              Store 3148 3151
-            3152:     47(int) CompositeExtract 3150 0
-            3153:         215 Load 217(s2DArray)
-            3154:  148(fvec3) Load 150(c3)
-            3155:   52(fvec2) Load 874(dPdxy2)
-            3156:   52(fvec2) Load 874(dPdxy2)
-            3157:    6(float) Load 2665(lodClamp)
-            3158:1991(ResType) ImageSparseSampleExplicitLod 3153 3154 Grad ConstOffset MinLod 3155 3156 452 3157
-            3159:    7(fvec4) CompositeExtract 3158 1
-                              Store 3126(texel) 3159
-            3160:     47(int) CompositeExtract 3158 0
-            3161:         245 Load 247(s2DArrayShadow)
-            3162:    7(fvec4) Load 197(c4)
-            3163:   52(fvec2) Load 874(dPdxy2)
-            3164:   52(fvec2) Load 874(dPdxy2)
-            3165:    6(float) Load 2665(lodClamp)
-            3166:    174(ptr) AccessChain 3126(texel) 173
-            3167:    6(float) CompositeExtract 3162 3
-            3168:2009(ResType) ImageSparseSampleDrefExplicitLod 3161 3162 3167 Grad ConstOffset MinLod 3163 3164 452 3165
-            3169:    6(float) CompositeExtract 3168 1
-                              Store 3166 3169
-            3170:     47(int) CompositeExtract 3168 0
-            3171:    7(fvec4) Load 3126(texel)
-                              ReturnValue 3171
+     3044(texel):     63(ptr) Variable Function
+                              Store 3044(texel) 120
+            3045:         133 Load 135(s2D)
+            3046:   52(fvec2) Load 138(c2)
+            3047:   52(fvec2) Load 873(dPdxy2)
+            3048:    6(float) Load 2603(lodClamp)
+            3049:1946(ResType) ImageSparseSampleExplicitLod 3045 3046 Grad ConstOffset MinLod 3047 3047 452 3048
+            3050:    7(fvec4) CompositeExtract 3049 1
+                              Store 3044(texel) 3050
+            3051:     47(int) CompositeExtract 3049 0
+            3052:         144 Load 146(s3D)
+            3053:  148(fvec3) Load 150(c3)
+            3054:  148(fvec3) Load 880(dPdxy3)
+            3055:    6(float) Load 2603(lodClamp)
+            3056:1946(ResType) ImageSparseSampleExplicitLod 3052 3053 Grad ConstOffset MinLod 3054 3054 459 3055
+            3057:    7(fvec4) CompositeExtract 3056 1
+                              Store 3044(texel) 3057
+            3058:     47(int) CompositeExtract 3056 0
+            3059:         180 Load 182(s2DShadow)
+            3060:  148(fvec3) Load 150(c3)
+            3061:   52(fvec2) Load 873(dPdxy2)
+            3062:    6(float) Load 2603(lodClamp)
+            3063:    174(ptr) AccessChain 3044(texel) 173
+            3064:    6(float) CompositeExtract 3060 2
+            3065:1964(ResType) ImageSparseSampleDrefExplicitLod 3059 3060 3064 Grad ConstOffset MinLod 3061 3061 452 3062
+            3066:    6(float) CompositeExtract 3065 1
+                              Store 3063 3066
+            3067:     47(int) CompositeExtract 3065 0
+            3068:         215 Load 217(s2DArray)
+            3069:  148(fvec3) Load 150(c3)
+            3070:   52(fvec2) Load 873(dPdxy2)
+            3071:    6(float) Load 2603(lodClamp)
+            3072:1946(ResType) ImageSparseSampleExplicitLod 3068 3069 Grad ConstOffset MinLod 3070 3070 452 3071
+            3073:    7(fvec4) CompositeExtract 3072 1
+                              Store 3044(texel) 3073
+            3074:     47(int) CompositeExtract 3072 0
+            3075:         245 Load 247(s2DArrayShadow)
+            3076:    7(fvec4) Load 197(c4)
+            3077:   52(fvec2) Load 873(dPdxy2)
+            3078:    6(float) Load 2603(lodClamp)
+            3079:    174(ptr) AccessChain 3044(texel) 173
+            3080:    6(float) CompositeExtract 3076 3
+            3081:1964(ResType) ImageSparseSampleDrefExplicitLod 3075 3076 3080 Grad ConstOffset MinLod 3077 3077 452 3078
+            3082:    6(float) CompositeExtract 3081 1
+                              Store 3079 3082
+            3083:     47(int) CompositeExtract 3081 0
+            3084:    7(fvec4) Load 3044(texel)
+                              ReturnValue 3084
                               FunctionEnd
 112(testTextureGradOffsetClamp():    7(fvec4) Function None 8
              113:             Label
-     3174(texel):     63(ptr) Variable Function
-                              Store 3174(texel) 120
-            3175:         122 Load 124(s1D)
-            3176:    6(float) Load 127(c1)
-            3177:    6(float) Load 866(dPdxy1)
-            3178:    6(float) Load 866(dPdxy1)
-            3179:    6(float) Load 2665(lodClamp)
-            3180:    7(fvec4) ImageSampleExplicitLod 3175 3176 Grad ConstOffset MinLod 3177 3178 445 3179
-            3181:    7(fvec4) Load 3174(texel)
-            3182:    7(fvec4) FAdd 3181 3180
-                              Store 3174(texel) 3182
-            3183:         133 Load 135(s2D)
-            3184:   52(fvec2) Load 138(c2)
-            3185:   52(fvec2) Load 874(dPdxy2)
-            3186:   52(fvec2) Load 874(dPdxy2)
-            3187:    6(float) Load 2665(lodClamp)
-            3188:    7(fvec4) ImageSampleExplicitLod 3183 3184 Grad ConstOffset MinLod 3185 3186 452 3187
-            3189:    7(fvec4) Load 3174(texel)
-            3190:    7(fvec4) FAdd 3189 3188
-                              Store 3174(texel) 3190
-            3191:         144 Load 146(s3D)
-            3192:  148(fvec3) Load 150(c3)
-            3193:  148(fvec3) Load 882(dPdxy3)
-            3194:  148(fvec3) Load 882(dPdxy3)
-            3195:    6(float) Load 2665(lodClamp)
-            3196:    7(fvec4) ImageSampleExplicitLod 3191 3192 Grad ConstOffset MinLod 3193 3194 459 3195
-            3197:    7(fvec4) Load 3174(texel)
-            3198:    7(fvec4) FAdd 3197 3196
-                              Store 3174(texel) 3198
-            3199:         165 Load 167(s1DShadow)
-            3200:  148(fvec3) Load 150(c3)
-            3201:    6(float) Load 866(dPdxy1)
-            3202:    6(float) Load 866(dPdxy1)
-            3203:    6(float) Load 2665(lodClamp)
-            3204:    6(float) CompositeExtract 3200 2
-            3205:    6(float) ImageSampleDrefExplicitLod 3199 3200 3204 Grad ConstOffset MinLod 3201 3202 445 3203
-            3206:    174(ptr) AccessChain 3174(texel) 173
-            3207:    6(float) Load 3206
-            3208:    6(float) FAdd 3207 3205
-            3209:    174(ptr) AccessChain 3174(texel) 173
-                              Store 3209 3208
-            3210:         180 Load 182(s2DShadow)
-            3211:  148(fvec3) Load 150(c3)
-            3212:   52(fvec2) Load 874(dPdxy2)
-            3213:   52(fvec2) Load 874(dPdxy2)
-            3214:    6(float) Load 2665(lodClamp)
-            3215:    6(float) CompositeExtract 3211 2
-            3216:    6(float) ImageSampleDrefExplicitLod 3210 3211 3215 Grad ConstOffset MinLod 3212 3213 452 3214
-            3217:    174(ptr) AccessChain 3174(texel) 173
-            3218:    6(float) Load 3217
-            3219:    6(float) FAdd 3218 3216
-            3220:    174(ptr) AccessChain 3174(texel) 173
-                              Store 3220 3219
-            3221:         206 Load 208(s1DArray)
-            3222:   52(fvec2) Load 138(c2)
-            3223:    6(float) Load 866(dPdxy1)
-            3224:    6(float) Load 866(dPdxy1)
-            3225:    6(float) Load 2665(lodClamp)
-            3226:    7(fvec4) ImageSampleExplicitLod 3221 3222 Grad ConstOffset MinLod 3223 3224 445 3225
-            3227:    7(fvec4) Load 3174(texel)
-            3228:    7(fvec4) FAdd 3227 3226
-                              Store 3174(texel) 3228
-            3229:         215 Load 217(s2DArray)
-            3230:  148(fvec3) Load 150(c3)
-            3231:   52(fvec2) Load 874(dPdxy2)
-            3232:   52(fvec2) Load 874(dPdxy2)
-            3233:    6(float) Load 2665(lodClamp)
-            3234:    7(fvec4) ImageSampleExplicitLod 3229 3230 Grad ConstOffset MinLod 3231 3232 452 3233
-            3235:    7(fvec4) Load 3174(texel)
-            3236:    7(fvec4) FAdd 3235 3234
-                              Store 3174(texel) 3236
-            3237:         233 Load 235(s1DArrayShadow)
-            3238:  148(fvec3) Load 150(c3)
-            3239:    6(float) Load 866(dPdxy1)
-            3240:    6(float) Load 866(dPdxy1)
-            3241:    6(float) Load 2665(lodClamp)
-            3242:    6(float) CompositeExtract 3238 2
-            3243:    6(float) ImageSampleDrefExplicitLod 3237 3238 3242 Grad ConstOffset MinLod 3239 3240 445 3241
-            3244:    174(ptr) AccessChain 3174(texel) 173
-            3245:    6(float) Load 3244
-            3246:    6(float) FAdd 3245 3243
-            3247:    174(ptr) AccessChain 3174(texel) 173
-                              Store 3247 3246
-            3248:         245 Load 247(s2DArrayShadow)
-            3249:    7(fvec4) Load 197(c4)
-            3250:   52(fvec2) Load 874(dPdxy2)
-            3251:   52(fvec2) Load 874(dPdxy2)
-            3252:    6(float) Load 2665(lodClamp)
-            3253:    6(float) CompositeExtract 3249 3
-            3254:    6(float) ImageSampleDrefExplicitLod 3248 3249 3253 Grad ConstOffset MinLod 3250 3251 452 3252
-            3255:    174(ptr) AccessChain 3174(texel) 173
-            3256:    6(float) Load 3255
-            3257:    6(float) FAdd 3256 3254
-            3258:    174(ptr) AccessChain 3174(texel) 173
-                              Store 3258 3257
-            3259:    7(fvec4) Load 3174(texel)
-                              ReturnValue 3259
+     3087(texel):     63(ptr) Variable Function
+                              Store 3087(texel) 120
+            3088:         122 Load 124(s1D)
+            3089:    6(float) Load 127(c1)
+            3090:    6(float) Load 866(dPdxy1)
+            3091:    6(float) Load 2603(lodClamp)
+            3092:    7(fvec4) ImageSampleExplicitLod 3088 3089 Grad ConstOffset MinLod 3090 3090 445 3091
+            3093:    7(fvec4) Load 3087(texel)
+            3094:    7(fvec4) FAdd 3093 3092
+                              Store 3087(texel) 3094
+            3095:         133 Load 135(s2D)
+            3096:   52(fvec2) Load 138(c2)
+            3097:   52(fvec2) Load 873(dPdxy2)
+            3098:    6(float) Load 2603(lodClamp)
+            3099:    7(fvec4) ImageSampleExplicitLod 3095 3096 Grad ConstOffset MinLod 3097 3097 452 3098
+            3100:    7(fvec4) Load 3087(texel)
+            3101:    7(fvec4) FAdd 3100 3099
+                              Store 3087(texel) 3101
+            3102:         144 Load 146(s3D)
+            3103:  148(fvec3) Load 150(c3)
+            3104:  148(fvec3) Load 880(dPdxy3)
+            3105:    6(float) Load 2603(lodClamp)
+            3106:    7(fvec4) ImageSampleExplicitLod 3102 3103 Grad ConstOffset MinLod 3104 3104 459 3105
+            3107:    7(fvec4) Load 3087(texel)
+            3108:    7(fvec4) FAdd 3107 3106
+                              Store 3087(texel) 3108
+            3109:         165 Load 167(s1DShadow)
+            3110:  148(fvec3) Load 150(c3)
+            3111:    6(float) Load 866(dPdxy1)
+            3112:    6(float) Load 2603(lodClamp)
+            3113:    6(float) CompositeExtract 3110 2
+            3114:    6(float) ImageSampleDrefExplicitLod 3109 3110 3113 Grad ConstOffset MinLod 3111 3111 445 3112
+            3115:    174(ptr) AccessChain 3087(texel) 173
+            3116:    6(float) Load 3115
+            3117:    6(float) FAdd 3116 3114
+            3118:    174(ptr) AccessChain 3087(texel) 173
+                              Store 3118 3117
+            3119:         180 Load 182(s2DShadow)
+            3120:  148(fvec3) Load 150(c3)
+            3121:   52(fvec2) Load 873(dPdxy2)
+            3122:    6(float) Load 2603(lodClamp)
+            3123:    6(float) CompositeExtract 3120 2
+            3124:    6(float) ImageSampleDrefExplicitLod 3119 3120 3123 Grad ConstOffset MinLod 3121 3121 452 3122
+            3125:    174(ptr) AccessChain 3087(texel) 173
+            3126:    6(float) Load 3125
+            3127:    6(float) FAdd 3126 3124
+            3128:    174(ptr) AccessChain 3087(texel) 173
+                              Store 3128 3127
+            3129:         206 Load 208(s1DArray)
+            3130:   52(fvec2) Load 138(c2)
+            3131:    6(float) Load 866(dPdxy1)
+            3132:    6(float) Load 2603(lodClamp)
+            3133:    7(fvec4) ImageSampleExplicitLod 3129 3130 Grad ConstOffset MinLod 3131 3131 445 3132
+            3134:    7(fvec4) Load 3087(texel)
+            3135:    7(fvec4) FAdd 3134 3133
+                              Store 3087(texel) 3135
+            3136:         215 Load 217(s2DArray)
+            3137:  148(fvec3) Load 150(c3)
+            3138:   52(fvec2) Load 873(dPdxy2)
+            3139:    6(float) Load 2603(lodClamp)
+            3140:    7(fvec4) ImageSampleExplicitLod 3136 3137 Grad ConstOffset MinLod 3138 3138 452 3139
+            3141:    7(fvec4) Load 3087(texel)
+            3142:    7(fvec4) FAdd 3141 3140
+                              Store 3087(texel) 3142
+            3143:         233 Load 235(s1DArrayShadow)
+            3144:  148(fvec3) Load 150(c3)
+            3145:    6(float) Load 866(dPdxy1)
+            3146:    6(float) Load 2603(lodClamp)
+            3147:    6(float) CompositeExtract 3144 2
+            3148:    6(float) ImageSampleDrefExplicitLod 3143 3144 3147 Grad ConstOffset MinLod 3145 3145 445 3146
+            3149:    174(ptr) AccessChain 3087(texel) 173
+            3150:    6(float) Load 3149
+            3151:    6(float) FAdd 3150 3148
+            3152:    174(ptr) AccessChain 3087(texel) 173
+                              Store 3152 3151
+            3153:         245 Load 247(s2DArrayShadow)
+            3154:    7(fvec4) Load 197(c4)
+            3155:   52(fvec2) Load 873(dPdxy2)
+            3156:    6(float) Load 2603(lodClamp)
+            3157:    6(float) CompositeExtract 3154 3
+            3158:    6(float) ImageSampleDrefExplicitLod 3153 3154 3157 Grad ConstOffset MinLod 3155 3155 452 3156
+            3159:    174(ptr) AccessChain 3087(texel) 173
+            3160:    6(float) Load 3159
+            3161:    6(float) FAdd 3160 3158
+            3162:    174(ptr) AccessChain 3087(texel) 173
+                              Store 3162 3161
+            3163:    7(fvec4) Load 3087(texel)
+                              ReturnValue 3163
                               FunctionEnd
 114(testCombinedTextureSampler():    7(fvec4) Function None 8
              115:             Label
-     3262(texel):     63(ptr) Variable Function
-                              Store 3262(texel) 120
-            3265:         121 Load 3264(t1D)
-            3269:        3266 Load 3268(s)
-            3270:         122 SampledImage 3265 3269
-            3271:    6(float) Load 127(c1)
-            3272:    7(fvec4) ImageSampleImplicitLod 3270 3271
-            3273:    7(fvec4) Load 3262(texel)
-            3274:    7(fvec4) FAdd 3273 3272
-                              Store 3262(texel) 3274
-            3277:         132 Load 3276(t2D)
-            3278:        3266 Load 3268(s)
-            3279:         133 SampledImage 3277 3278
-            3280:   52(fvec2) Load 138(c2)
-            3281:    7(fvec4) ImageSampleImplicitLod 3279 3280
-            3282:    7(fvec4) Load 3262(texel)
-            3283:    7(fvec4) FAdd 3282 3281
-                              Store 3262(texel) 3283
-            3286:         143 Load 3285(t3D)
-            3287:        3266 Load 3268(s)
-            3288:         144 SampledImage 3286 3287
-            3289:  148(fvec3) Load 150(c3)
+     3166(texel):     63(ptr) Variable Function
+                              Store 3166(texel) 120
+            3169:         121 Load 3168(t1D)
+            3173:        3170 Load 3172(s)
+            3174:         122 SampledImage 3169 3173
+            3175:    6(float) Load 127(c1)
+            3176:    7(fvec4) ImageSampleImplicitLod 3174 3175
+            3177:    7(fvec4) Load 3166(texel)
+            3178:    7(fvec4) FAdd 3177 3176
+                              Store 3166(texel) 3178
+            3181:         132 Load 3180(t2D)
+            3182:        3170 Load 3172(s)
+            3183:         133 SampledImage 3181 3182
+            3184:   52(fvec2) Load 138(c2)
+            3185:    7(fvec4) ImageSampleImplicitLod 3183 3184
+            3186:    7(fvec4) Load 3166(texel)
+            3187:    7(fvec4) FAdd 3186 3185
+                              Store 3166(texel) 3187
+            3190:         143 Load 3189(t3D)
+            3191:        3170 Load 3172(s)
+            3192:         144 SampledImage 3190 3191
+            3193:  148(fvec3) Load 150(c3)
+            3194:    7(fvec4) ImageSampleImplicitLod 3192 3193
+            3195:    7(fvec4) Load 3166(texel)
+            3196:    7(fvec4) FAdd 3195 3194
+                              Store 3166(texel) 3196
+            3199:         155 Load 3198(tCube)
+            3200:        3170 Load 3172(s)
+            3201:         156 SampledImage 3199 3200
+            3202:  148(fvec3) Load 150(c3)
+            3203:    7(fvec4) ImageSampleImplicitLod 3201 3202
+            3204:    7(fvec4) Load 3166(texel)
+            3205:    7(fvec4) FAdd 3204 3203
+                              Store 3166(texel) 3205
+            3206:         121 Load 3168(t1D)
+            3208:        3170 Load 3207(sShadow)
+            3209:         165 SampledImage 3206 3208
+            3210:  148(fvec3) Load 150(c3)
+            3211:    6(float) CompositeExtract 3210 2
+            3212:    6(float) ImageSampleDrefImplicitLod 3209 3210 3211
+            3213:    174(ptr) AccessChain 3166(texel) 173
+            3214:    6(float) Load 3213
+            3215:    6(float) FAdd 3214 3212
+            3216:    174(ptr) AccessChain 3166(texel) 173
+                              Store 3216 3215
+            3217:         132 Load 3180(t2D)
+            3218:        3170 Load 3207(sShadow)
+            3219:         180 SampledImage 3217 3218
+            3220:  148(fvec3) Load 150(c3)
+            3221:    6(float) CompositeExtract 3220 2
+            3222:    6(float) ImageSampleDrefImplicitLod 3219 3220 3221
+            3223:    174(ptr) AccessChain 3166(texel) 173
+            3224:    6(float) Load 3223
+            3225:    6(float) FAdd 3224 3222
+            3226:    174(ptr) AccessChain 3166(texel) 173
+                              Store 3226 3225
+            3227:         155 Load 3198(tCube)
+            3228:        3170 Load 3207(sShadow)
+            3229:         192 SampledImage 3227 3228
+            3230:    7(fvec4) Load 197(c4)
+            3231:    6(float) CompositeExtract 3230 3
+            3232:    6(float) ImageSampleDrefImplicitLod 3229 3230 3231
+            3233:    174(ptr) AccessChain 3166(texel) 173
+            3234:    6(float) Load 3233
+            3235:    6(float) FAdd 3234 3232
+            3236:    174(ptr) AccessChain 3166(texel) 173
+                              Store 3236 3235
+            3239:         205 Load 3238(t1DArray)
+            3240:        3170 Load 3172(s)
+            3241:         206 SampledImage 3239 3240
+            3242:   52(fvec2) Load 138(c2)
+            3243:    7(fvec4) ImageSampleImplicitLod 3241 3242
+            3244:    7(fvec4) Load 3166(texel)
+            3245:    7(fvec4) FAdd 3244 3243
+                              Store 3166(texel) 3245
+            3248:         214 Load 3247(t2DArray)
+            3249:        3170 Load 3172(s)
+            3250:         215 SampledImage 3248 3249
+            3251:  148(fvec3) Load 150(c3)
+            3252:    7(fvec4) ImageSampleImplicitLod 3250 3251
+            3253:    7(fvec4) Load 3166(texel)
+            3254:    7(fvec4) FAdd 3253 3252
+                              Store 3166(texel) 3254
+            3257:         223 Load 3256(tCubeArray)
+            3258:        3170 Load 3172(s)
+            3259:         224 SampledImage 3257 3258
+            3260:    7(fvec4) Load 197(c4)
+            3261:    7(fvec4) ImageSampleImplicitLod 3259 3260
+            3262:    7(fvec4) Load 3166(texel)
+            3263:    7(fvec4) FAdd 3262 3261
+                              Store 3166(texel) 3263
+            3264:         205 Load 3238(t1DArray)
+            3265:        3170 Load 3207(sShadow)
+            3266:         233 SampledImage 3264 3265
+            3267:  148(fvec3) Load 150(c3)
+            3268:    6(float) CompositeExtract 3267 2
+            3269:    6(float) ImageSampleDrefImplicitLod 3266 3267 3268
+            3270:    174(ptr) AccessChain 3166(texel) 173
+            3271:    6(float) Load 3270
+            3272:    6(float) FAdd 3271 3269
+            3273:    174(ptr) AccessChain 3166(texel) 173
+                              Store 3273 3272
+            3274:         214 Load 3247(t2DArray)
+            3275:        3170 Load 3207(sShadow)
+            3276:         245 SampledImage 3274 3275
+            3277:    7(fvec4) Load 197(c4)
+            3278:    6(float) CompositeExtract 3277 3
+            3279:    6(float) ImageSampleDrefImplicitLod 3276 3277 3278
+            3280:    174(ptr) AccessChain 3166(texel) 173
+            3281:    6(float) Load 3280
+            3282:    6(float) FAdd 3281 3279
+            3283:    174(ptr) AccessChain 3166(texel) 173
+                              Store 3283 3282
+            3286:         256 Load 3285(t2DRect)
+            3287:        3170 Load 3172(s)
+            3288:         257 SampledImage 3286 3287
+            3289:   52(fvec2) Load 138(c2)
             3290:    7(fvec4) ImageSampleImplicitLod 3288 3289
-            3291:    7(fvec4) Load 3262(texel)
+            3291:    7(fvec4) Load 3166(texel)
             3292:    7(fvec4) FAdd 3291 3290
-                              Store 3262(texel) 3292
-            3295:         155 Load 3294(tCube)
-            3296:        3266 Load 3268(s)
-            3297:         156 SampledImage 3295 3296
-            3298:  148(fvec3) Load 150(c3)
-            3299:    7(fvec4) ImageSampleImplicitLod 3297 3298
-            3300:    7(fvec4) Load 3262(texel)
-            3301:    7(fvec4) FAdd 3300 3299
-                              Store 3262(texel) 3301
-            3302:         121 Load 3264(t1D)
-            3304:        3266 Load 3303(sShadow)
-            3305:         165 SampledImage 3302 3304
-            3306:  148(fvec3) Load 150(c3)
-            3307:    6(float) CompositeExtract 3306 2
+                              Store 3166(texel) 3292
+            3293:         256 Load 3285(t2DRect)
+            3294:        3170 Load 3207(sShadow)
+            3295:         266 SampledImage 3293 3294
+            3296:  148(fvec3) Load 150(c3)
+            3297:    6(float) CompositeExtract 3296 2
+            3298:    6(float) ImageSampleDrefImplicitLod 3295 3296 3297
+            3299:    174(ptr) AccessChain 3166(texel) 173
+            3300:    6(float) Load 3299
+            3301:    6(float) FAdd 3300 3298
+            3302:    174(ptr) AccessChain 3166(texel) 173
+                              Store 3302 3301
+            3303:         223 Load 3256(tCubeArray)
+            3304:        3170 Load 3207(sShadow)
+            3305:         278 SampledImage 3303 3304
+            3306:    7(fvec4) Load 197(c4)
+            3307:    6(float) Load 283(compare)
             3308:    6(float) ImageSampleDrefImplicitLod 3305 3306 3307
-            3309:    174(ptr) AccessChain 3262(texel) 173
+            3309:    174(ptr) AccessChain 3166(texel) 173
             3310:    6(float) Load 3309
             3311:    6(float) FAdd 3310 3308
-            3312:    174(ptr) AccessChain 3262(texel) 173
+            3312:    174(ptr) AccessChain 3166(texel) 173
                               Store 3312 3311
-            3313:         132 Load 3276(t2D)
-            3314:        3266 Load 3303(sShadow)
-            3315:         180 SampledImage 3313 3314
-            3316:  148(fvec3) Load 150(c3)
-            3317:    6(float) CompositeExtract 3316 2
-            3318:    6(float) ImageSampleDrefImplicitLod 3315 3316 3317
-            3319:    174(ptr) AccessChain 3262(texel) 173
-            3320:    6(float) Load 3319
-            3321:    6(float) FAdd 3320 3318
-            3322:    174(ptr) AccessChain 3262(texel) 173
-                              Store 3322 3321
-            3323:         155 Load 3294(tCube)
-            3324:        3266 Load 3303(sShadow)
-            3325:         192 SampledImage 3323 3324
-            3326:    7(fvec4) Load 197(c4)
-            3327:    6(float) CompositeExtract 3326 3
-            3328:    6(float) ImageSampleDrefImplicitLod 3325 3326 3327
-            3329:    174(ptr) AccessChain 3262(texel) 173
-            3330:    6(float) Load 3329
-            3331:    6(float) FAdd 3330 3328
-            3332:    174(ptr) AccessChain 3262(texel) 173
-                              Store 3332 3331
-            3335:         205 Load 3334(t1DArray)
-            3336:        3266 Load 3268(s)
-            3337:         206 SampledImage 3335 3336
-            3338:   52(fvec2) Load 138(c2)
-            3339:    7(fvec4) ImageSampleImplicitLod 3337 3338
-            3340:    7(fvec4) Load 3262(texel)
-            3341:    7(fvec4) FAdd 3340 3339
-                              Store 3262(texel) 3341
-            3344:         214 Load 3343(t2DArray)
-            3345:        3266 Load 3268(s)
-            3346:         215 SampledImage 3344 3345
-            3347:  148(fvec3) Load 150(c3)
-            3348:    7(fvec4) ImageSampleImplicitLod 3346 3347
-            3349:    7(fvec4) Load 3262(texel)
-            3350:    7(fvec4) FAdd 3349 3348
-                              Store 3262(texel) 3350
-            3353:         223 Load 3352(tCubeArray)
-            3354:        3266 Load 3268(s)
-            3355:         224 SampledImage 3353 3354
-            3356:    7(fvec4) Load 197(c4)
-            3357:    7(fvec4) ImageSampleImplicitLod 3355 3356
-            3358:    7(fvec4) Load 3262(texel)
-            3359:    7(fvec4) FAdd 3358 3357
-                              Store 3262(texel) 3359
-            3360:         205 Load 3334(t1DArray)
-            3361:        3266 Load 3303(sShadow)
-            3362:         233 SampledImage 3360 3361
-            3363:  148(fvec3) Load 150(c3)
-            3364:    6(float) CompositeExtract 3363 2
-            3365:    6(float) ImageSampleDrefImplicitLod 3362 3363 3364
-            3366:    174(ptr) AccessChain 3262(texel) 173
-            3367:    6(float) Load 3366
-            3368:    6(float) FAdd 3367 3365
-            3369:    174(ptr) AccessChain 3262(texel) 173
-                              Store 3369 3368
-            3370:         214 Load 3343(t2DArray)
-            3371:        3266 Load 3303(sShadow)
-            3372:         245 SampledImage 3370 3371
-            3373:    7(fvec4) Load 197(c4)
-            3374:    6(float) CompositeExtract 3373 3
-            3375:    6(float) ImageSampleDrefImplicitLod 3372 3373 3374
-            3376:    174(ptr) AccessChain 3262(texel) 173
-            3377:    6(float) Load 3376
-            3378:    6(float) FAdd 3377 3375
-            3379:    174(ptr) AccessChain 3262(texel) 173
-                              Store 3379 3378
-            3382:         256 Load 3381(t2DRect)
-            3383:        3266 Load 3268(s)
-            3384:         257 SampledImage 3382 3383
-            3385:   52(fvec2) Load 138(c2)
-            3386:    7(fvec4) ImageSampleImplicitLod 3384 3385
-            3387:    7(fvec4) Load 3262(texel)
-            3388:    7(fvec4) FAdd 3387 3386
-                              Store 3262(texel) 3388
-            3389:         256 Load 3381(t2DRect)
-            3390:        3266 Load 3303(sShadow)
-            3391:         266 SampledImage 3389 3390
-            3392:  148(fvec3) Load 150(c3)
-            3393:    6(float) CompositeExtract 3392 2
-            3394:    6(float) ImageSampleDrefImplicitLod 3391 3392 3393
-            3395:    174(ptr) AccessChain 3262(texel) 173
-            3396:    6(float) Load 3395
-            3397:    6(float) FAdd 3396 3394
-            3398:    174(ptr) AccessChain 3262(texel) 173
-                              Store 3398 3397
-            3399:         223 Load 3352(tCubeArray)
-            3400:        3266 Load 3303(sShadow)
-            3401:         278 SampledImage 3399 3400
-            3402:    7(fvec4) Load 197(c4)
-            3403:    6(float) Load 283(compare)
-            3404:    6(float) ImageSampleDrefImplicitLod 3401 3402 3403
-            3405:    174(ptr) AccessChain 3262(texel) 173
-            3406:    6(float) Load 3405
-            3407:    6(float) FAdd 3406 3404
-            3408:    174(ptr) AccessChain 3262(texel) 173
-                              Store 3408 3407
-            3409:    7(fvec4) Load 3262(texel)
-                              ReturnValue 3409
+            3313:    7(fvec4) Load 3166(texel)
+                              ReturnValue 3313
                               FunctionEnd
 116(testSubpassLoad():    7(fvec4) Function None 8
              117:             Label
-            3415:        3412 Load 3414(subpass)
-            3417:    7(fvec4) ImageRead 3415 3416
-            3421:        3418 Load 3420(subpassMS)
-            3422:    7(fvec4) ImageRead 3421 3416 Sample 799
-            3423:    7(fvec4) FAdd 3417 3422
-                              ReturnValue 3423
+            3319:        3316 Load 3318(subpass)
+            3321:    7(fvec4) ImageRead 3319 3320
+            3325:        3322 Load 3324(subpassMS)
+            3326:    7(fvec4) ImageRead 3325 3320 Sample 799
+            3327:    7(fvec4) FAdd 3321 3326
+                              ReturnValue 3327
                               FunctionEnd
diff --git a/Test/baseResults/spv.forwardFun.frag.out b/Test/baseResults/spv.forwardFun.frag.out
index 77f3941..d410c4d 100644
--- a/Test/baseResults/spv.forwardFun.frag.out
+++ b/Test/baseResults/spv.forwardFun.frag.out
@@ -22,8 +22,8 @@
                               Name 36  "d"
                               Name 59  "bigColor"
                               Decorate 10(unreachableReturn() RelaxedPrecision
-                              Decorate 16(foo(vf4;) RelaxedPrecision
                               Decorate 15(bar) RelaxedPrecision
+                              Decorate 16(foo(vf4;) RelaxedPrecision
                               Decorate 18(color) RelaxedPrecision
                               Decorate 20(BaseColor) RelaxedPrecision
                               Decorate 20(BaseColor) Location 1
diff --git a/Test/baseResults/spv.fragmentDensity-es.frag.out b/Test/baseResults/spv.fragmentDensity-es.frag.out
index fb1407e..f46a28b 100644
--- a/Test/baseResults/spv.fragmentDensity-es.frag.out
+++ b/Test/baseResults/spv.fragmentDensity-es.frag.out
@@ -18,11 +18,11 @@
                               Name 14  "FragInvocationCount"
                               Name 16  "gl_FragInvocationCountEXT"
                               Decorate 9(FragSize) Location 0
-                              Decorate 11(gl_FragSizeEXT) Flat
                               Decorate 11(gl_FragSizeEXT) BuiltIn FragSizeEXT
+                              Decorate 11(gl_FragSizeEXT) Flat
                               Decorate 14(FragInvocationCount) Location 2
-                              Decorate 16(gl_FragInvocationCountEXT) Flat
                               Decorate 16(gl_FragInvocationCountEXT) BuiltIn FragInvocationCountEXT
+                              Decorate 16(gl_FragInvocationCountEXT) Flat
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
diff --git a/Test/baseResults/spv.fragmentDensity.frag.out b/Test/baseResults/spv.fragmentDensity.frag.out
index 43261cd..5ce7a9a 100644
--- a/Test/baseResults/spv.fragmentDensity.frag.out
+++ b/Test/baseResults/spv.fragmentDensity.frag.out
@@ -18,11 +18,11 @@
                               Name 17  "FragInvocationCount"
                               Name 19  "gl_FragInvocationCountEXT"
                               Decorate 9(FragSize) Location 0
-                              Decorate 13(gl_FragSizeEXT) Flat
                               Decorate 13(gl_FragSizeEXT) BuiltIn FragSizeEXT
+                              Decorate 13(gl_FragSizeEXT) Flat
                               Decorate 17(FragInvocationCount) Location 2
-                              Decorate 19(gl_FragInvocationCountEXT) Flat
                               Decorate 19(gl_FragInvocationCountEXT) BuiltIn FragInvocationCountEXT
+                              Decorate 19(gl_FragInvocationCountEXT) Flat
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.fsi.frag.out b/Test/baseResults/spv.fsi.frag.out
index 1b5fbf4..df9fc7c 100644
--- a/Test/baseResults/spv.fsi.frag.out
+++ b/Test/baseResults/spv.fsi.frag.out
@@ -18,14 +18,15 @@
                               MemberName 7(B1) 0  "x"
                               Name 9  "b1"
                               Name 17  "im"
+                              Decorate 7(B1) BufferBlock
                               MemberDecorate 7(B1) 0 Coherent
                               MemberDecorate 7(B1) 0 Offset 0
-                              Decorate 7(B1) BufferBlock
-                              Decorate 9(b1) DescriptorSet 0
+                              Decorate 9(b1) Coherent
                               Decorate 9(b1) Binding 0
-                              Decorate 17(im) DescriptorSet 0
-                              Decorate 17(im) Binding 1
+                              Decorate 9(b1) DescriptorSet 0
                               Decorate 17(im) Coherent
+                              Decorate 17(im) Binding 1
+                              Decorate 17(im) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
diff --git a/Test/baseResults/spv.funcall.array.frag.out b/Test/baseResults/spv.funcall.array.frag.out
index b4e2bfb..1a003be 100644
--- a/Test/baseResults/spv.funcall.array.frag.out
+++ b/Test/baseResults/spv.funcall.array.frag.out
@@ -22,10 +22,10 @@
                               Name 64  "param"
                               Decorate 27(color) Location 0
                               Decorate 28 ArrayStride 16
-                              MemberDecorate 29(ub) 0 Offset 0
                               Decorate 29(ub) Block
-                              Decorate 31 DescriptorSet 0
+                              MemberDecorate 29(ub) 0 Offset 0
                               Decorate 31 Binding 0
+                              Decorate 31 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.functionNestedOpaque.vert.out b/Test/baseResults/spv.functionNestedOpaque.vert.out
index 5878760..0666c09 100644
--- a/Test/baseResults/spv.functionNestedOpaque.vert.out
+++ b/Test/baseResults/spv.functionNestedOpaque.vert.out
@@ -19,8 +19,8 @@
                               Name 21  "bar(struct-S-s211;"
                               Name 20  "p"
                               Name 36  "si"
-                              Decorate 36(si) DescriptorSet 0
                               Decorate 36(si) Binding 0
+                              Decorate 36(si) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.glsl.register.autoassign.frag.out b/Test/baseResults/spv.glsl.register.autoassign.frag.out
index 041edb9..6ee2cdd 100644
--- a/Test/baseResults/spv.glsl.register.autoassign.frag.out
+++ b/Test/baseResults/spv.glsl.register.autoassign.frag.out
@@ -40,47 +40,47 @@
                               Name 128  "g_sSamp_unused2"
                               Name 137  "FragColor"
                               Name 141  "g_tTex_unused3"
-                              Decorate 17(g_tTex1) DescriptorSet 0
                               Decorate 17(g_tTex1) Binding 11
-                              Decorate 21(g_sSamp1) DescriptorSet 0
+                              Decorate 17(g_tTex1) DescriptorSet 0
                               Decorate 21(g_sSamp1) Binding 5
-                              Decorate 27(g_tTex2) DescriptorSet 0
+                              Decorate 21(g_sSamp1) DescriptorSet 0
                               Decorate 27(g_tTex2) Binding 14
-                              Decorate 29(g_sSamp2) DescriptorSet 0
+                              Decorate 27(g_tTex2) DescriptorSet 0
                               Decorate 29(g_sSamp2) Binding 6
-                              Decorate 39(g_tTex3) DescriptorSet 0
+                              Decorate 29(g_sSamp2) DescriptorSet 0
                               Decorate 39(g_tTex3) Binding 13
-                              Decorate 46(g_sSamp3) DescriptorSet 0
+                              Decorate 39(g_tTex3) DescriptorSet 0
                               Decorate 46(g_sSamp3) Binding 7
-                              Decorate 64(g_tTex4) DescriptorSet 0
+                              Decorate 46(g_sSamp3) DescriptorSet 0
                               Decorate 64(g_tTex4) Binding 15
-                              Decorate 69(g_sSamp4) DescriptorSet 0
+                              Decorate 64(g_tTex4) DescriptorSet 0
                               Decorate 69(g_sSamp4) Binding 8
-                              Decorate 84(g_tTex5) DescriptorSet 0
+                              Decorate 69(g_sSamp4) DescriptorSet 0
                               Decorate 84(g_tTex5) Binding 16
-                              Decorate 86(g_sSamp5) DescriptorSet 0
+                              Decorate 84(g_tTex5) DescriptorSet 0
                               Decorate 86(g_sSamp5) Binding 9
+                              Decorate 86(g_sSamp5) DescriptorSet 0
                               MemberDecorate 93(MyStruct_t) 0 Offset 0
                               MemberDecorate 93(MyStruct_t) 1 Offset 4
                               MemberDecorate 93(MyStruct_t) 2 Offset 16
+                              Decorate 95(myblock) Block
                               MemberDecorate 95(myblock) 0 Offset 0
                               MemberDecorate 95(myblock) 1 Offset 32
                               MemberDecorate 95(myblock) 2 Offset 48
                               MemberDecorate 95(myblock) 3 Offset 64
-                              Decorate 95(myblock) Block
-                              Decorate 97 DescriptorSet 0
                               Decorate 97 Binding 24
-                              Decorate 119(g_tTex_unused1) DescriptorSet 0
+                              Decorate 97 DescriptorSet 0
                               Decorate 119(g_tTex_unused1) Binding 10
-                              Decorate 121(g_sSamp_unused1) DescriptorSet 0
+                              Decorate 119(g_tTex_unused1) DescriptorSet 0
                               Decorate 121(g_sSamp_unused1) Binding 0
-                              Decorate 126(g_tTex_unused2) DescriptorSet 0
+                              Decorate 121(g_sSamp_unused1) DescriptorSet 0
                               Decorate 126(g_tTex_unused2) Binding 12
-                              Decorate 128(g_sSamp_unused2) DescriptorSet 0
+                              Decorate 126(g_tTex_unused2) DescriptorSet 0
                               Decorate 128(g_sSamp_unused2) Binding 0
+                              Decorate 128(g_sSamp_unused2) DescriptorSet 0
                               Decorate 137(FragColor) Location 0
-                              Decorate 141(g_tTex_unused3) DescriptorSet 0
                               Decorate 141(g_tTex_unused3) Binding 0
+                              Decorate 141(g_tTex_unused3) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.glsl.register.noautoassign.frag.out b/Test/baseResults/spv.glsl.register.noautoassign.frag.out
index ccf6880..b5e6a6e 100644
--- a/Test/baseResults/spv.glsl.register.noautoassign.frag.out
+++ b/Test/baseResults/spv.glsl.register.noautoassign.frag.out
@@ -40,47 +40,47 @@
                               Name 128  "g_sSamp_unused2"
                               Name 137  "FragColor"
                               Name 141  "g_tTex_unused3"
-                              Decorate 17(g_tTex1) DescriptorSet 0
                               Decorate 17(g_tTex1) Binding 17
-                              Decorate 21(g_sSamp1) DescriptorSet 0
+                              Decorate 17(g_tTex1) DescriptorSet 0
                               Decorate 21(g_sSamp1) Binding 5
-                              Decorate 27(g_tTex2) DescriptorSet 0
+                              Decorate 21(g_sSamp1) DescriptorSet 0
                               Decorate 27(g_tTex2) Binding 18
-                              Decorate 29(g_sSamp2) DescriptorSet 0
+                              Decorate 27(g_tTex2) DescriptorSet 0
                               Decorate 29(g_sSamp2) Binding 6
-                              Decorate 39(g_tTex3) DescriptorSet 0
+                              Decorate 29(g_sSamp2) DescriptorSet 0
                               Decorate 39(g_tTex3) Binding 19
-                              Decorate 46(g_sSamp3) DescriptorSet 0
+                              Decorate 39(g_tTex3) DescriptorSet 0
                               Decorate 46(g_sSamp3) Binding 7
-                              Decorate 64(g_tTex4) DescriptorSet 0
+                              Decorate 46(g_sSamp3) DescriptorSet 0
                               Decorate 64(g_tTex4) Binding 20
-                              Decorate 69(g_sSamp4) DescriptorSet 0
+                              Decorate 64(g_tTex4) DescriptorSet 0
                               Decorate 69(g_sSamp4) Binding 8
-                              Decorate 84(g_tTex5) DescriptorSet 0
+                              Decorate 69(g_sSamp4) DescriptorSet 0
                               Decorate 84(g_tTex5) Binding 21
-                              Decorate 86(g_sSamp5) DescriptorSet 0
+                              Decorate 84(g_tTex5) DescriptorSet 0
                               Decorate 86(g_sSamp5) Binding 9
+                              Decorate 86(g_sSamp5) DescriptorSet 0
                               MemberDecorate 93(MyStruct_t) 0 Offset 0
                               MemberDecorate 93(MyStruct_t) 1 Offset 4
                               MemberDecorate 93(MyStruct_t) 2 Offset 16
+                              Decorate 95(myblock) Block
                               MemberDecorate 95(myblock) 0 Offset 0
                               MemberDecorate 95(myblock) 1 Offset 32
                               MemberDecorate 95(myblock) 2 Offset 48
                               MemberDecorate 95(myblock) 3 Offset 64
-                              Decorate 95(myblock) Block
-                              Decorate 97 DescriptorSet 0
                               Decorate 97 Binding 19
-                              Decorate 119(g_tTex_unused1) DescriptorSet 0
+                              Decorate 97 DescriptorSet 0
                               Decorate 119(g_tTex_unused1) Binding 22
-                              Decorate 121(g_sSamp_unused1) DescriptorSet 0
+                              Decorate 119(g_tTex_unused1) DescriptorSet 0
                               Decorate 121(g_sSamp_unused1) Binding 10
-                              Decorate 126(g_tTex_unused2) DescriptorSet 0
+                              Decorate 121(g_sSamp_unused1) DescriptorSet 0
                               Decorate 126(g_tTex_unused2) Binding 23
-                              Decorate 128(g_sSamp_unused2) DescriptorSet 0
+                              Decorate 126(g_tTex_unused2) DescriptorSet 0
                               Decorate 128(g_sSamp_unused2) Binding 11
+                              Decorate 128(g_sSamp_unused2) DescriptorSet 0
                               Decorate 137(FragColor) Location 0
-                              Decorate 141(g_tTex_unused3) DescriptorSet 0
                               Decorate 141(g_tTex_unused3) Binding 24
+                              Decorate 141(g_tTex_unused3) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.hlslOffsets.vert.out b/Test/baseResults/spv.hlslOffsets.vert.out
index d2d6443..72a996d 100644
--- a/Test/baseResults/spv.hlslOffsets.vert.out
+++ b/Test/baseResults/spv.hlslOffsets.vert.out
@@ -44,6 +44,7 @@
                               MemberName 11(block) 12  "m96"
                               MemberName 11(block) 13  "m112"
                               Name 13  ""
+                              Decorate 11(block) BufferBlock
                               MemberDecorate 11(block) 0 Offset 0
                               MemberDecorate 11(block) 1 Offset 4
                               MemberDecorate 11(block) 2 Offset 16
@@ -58,9 +59,8 @@
                               MemberDecorate 11(block) 11 Offset 88
                               MemberDecorate 11(block) 12 Offset 96
                               MemberDecorate 11(block) 13 Offset 112
-                              Decorate 11(block) BufferBlock
-                              Decorate 13 DescriptorSet 0
                               Decorate 13 Binding 0
+                              Decorate 13 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.image.frag.out b/Test/baseResults/spv.image.frag.out
index f71a1cc..a6141e2 100644
--- a/Test/baseResults/spv.image.frag.out
+++ b/Test/baseResults/spv.image.frag.out
@@ -45,47 +45,47 @@
                               Name 386  "wo2D"
                               Name 391  "fragData"
                               Name 404  "ic4D"
-                              Decorate 15(i1D) DescriptorSet 0
                               Decorate 15(i1D) Binding 0
-                              Decorate 27(i2D) DescriptorSet 0
+                              Decorate 15(i1D) DescriptorSet 0
                               Decorate 27(i2D) Binding 1
-                              Decorate 41(i3D) DescriptorSet 0
+                              Decorate 27(i2D) DescriptorSet 0
                               Decorate 41(i3D) Binding 2
-                              Decorate 48(iCube) DescriptorSet 0
+                              Decorate 41(i3D) DescriptorSet 0
                               Decorate 48(iCube) Binding 3
-                              Decorate 60(iCubeArray) DescriptorSet 0
+                              Decorate 48(iCube) DescriptorSet 0
                               Decorate 60(iCubeArray) Binding 4
-                              Decorate 67(i2DRect) DescriptorSet 0
+                              Decorate 60(iCubeArray) DescriptorSet 0
                               Decorate 67(i2DRect) Binding 5
-                              Decorate 79(i1DArray) DescriptorSet 0
+                              Decorate 67(i2DRect) DescriptorSet 0
                               Decorate 79(i1DArray) Binding 6
-                              Decorate 91(i2DArray) DescriptorSet 0
+                              Decorate 79(i1DArray) DescriptorSet 0
                               Decorate 91(i2DArray) Binding 7
-                              Decorate 98(iBuffer) DescriptorSet 0
+                              Decorate 91(i2DArray) DescriptorSet 0
                               Decorate 98(iBuffer) Binding 8
-                              Decorate 107(i2DMS) DescriptorSet 0
+                              Decorate 98(iBuffer) DescriptorSet 0
                               Decorate 107(i2DMS) Binding 9
-                              Decorate 119(i2DMSArray) DescriptorSet 0
+                              Decorate 107(i2DMS) DescriptorSet 0
                               Decorate 119(i2DMSArray) Binding 10
+                              Decorate 119(i2DMSArray) DescriptorSet 0
                               Decorate 143(ic1D) Flat
                               Decorate 143(ic1D) Location 0
                               Decorate 153(ic2D) Flat
                               Decorate 153(ic2D) Location 1
                               Decorate 163(ic3D) Flat
                               Decorate 163(ic3D) Location 2
-                              Decorate 243(ii1D) DescriptorSet 0
                               Decorate 243(ii1D) Binding 11
-                              Decorate 255(ui2D) DescriptorSet 0
+                              Decorate 243(ii1D) DescriptorSet 0
                               Decorate 255(ui2D) Binding 12
+                              Decorate 255(ui2D) DescriptorSet 0
                               Decorate 258(value) Flat
                               Decorate 258(value) Location 4
-                              Decorate 367(ii2DMS) DescriptorSet 0
                               Decorate 367(ii2DMS) Binding 13
-                              Decorate 377(ui2DMSArray) DescriptorSet 0
+                              Decorate 367(ii2DMS) DescriptorSet 0
                               Decorate 377(ui2DMSArray) Binding 14
-                              Decorate 386(wo2D) DescriptorSet 0
-                              Decorate 386(wo2D) Binding 1
+                              Decorate 377(ui2DMSArray) DescriptorSet 0
                               Decorate 386(wo2D) NonReadable
+                              Decorate 386(wo2D) Binding 1
+                              Decorate 386(wo2D) DescriptorSet 0
                               Decorate 391(fragData) Location 0
                               Decorate 404(ic4D) Flat
                               Decorate 404(ic4D) Location 3
diff --git a/Test/baseResults/spv.imageAtomic64.comp.out b/Test/baseResults/spv.imageAtomic64.comp.out
index 4317ae0..1d0ffd8 100644
--- a/Test/baseResults/spv.imageAtomic64.comp.out
+++ b/Test/baseResults/spv.imageAtomic64.comp.out
@@ -21,12 +21,12 @@
                               Name 14  "ssbo"
                               MemberName 14(ssbo) 0  "y"
                               Name 16  ""
-                              Decorate 9(z) DescriptorSet 0
                               Decorate 9(z) Binding 1
-                              MemberDecorate 14(ssbo) 0 Offset 0
+                              Decorate 9(z) DescriptorSet 0
                               Decorate 14(ssbo) BufferBlock
-                              Decorate 16 DescriptorSet 0
+                              MemberDecorate 14(ssbo) 0 Offset 0
                               Decorate 16 Binding 0
+                              Decorate 16 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 64 0
diff --git a/Test/baseResults/spv.imageAtomic64.frag.out b/Test/baseResults/spv.imageAtomic64.frag.out
index 1c002ab..35b6c51 100644
--- a/Test/baseResults/spv.imageAtomic64.frag.out
+++ b/Test/baseResults/spv.imageAtomic64.frag.out
@@ -46,36 +46,36 @@
                               Name 240  "u2DMS"
                               Name 458  "ResType"
                               Name 483  "ResType"
+                              Decorate 12(Buf) BufferBlock
                               MemberDecorate 12(Buf) 0 Offset 0
                               MemberDecorate 12(Buf) 1 Offset 8
                               MemberDecorate 12(Buf) 2 Offset 32
                               MemberDecorate 12(Buf) 3 Offset 64
                               MemberDecorate 12(Buf) 4 Offset 96
-                              Decorate 12(Buf) BufferBlock
-                              Decorate 14 DescriptorSet 0
                               Decorate 14 Binding 11
-                              Decorate 18(i1D) DescriptorSet 0
+                              Decorate 14 DescriptorSet 0
                               Decorate 18(i1D) Binding 0
-                              Decorate 35(i3D) DescriptorSet 0
+                              Decorate 18(i1D) DescriptorSet 0
                               Decorate 35(i3D) Binding 2
-                              Decorate 48(iBuf) DescriptorSet 0
+                              Decorate 35(i3D) DescriptorSet 0
                               Decorate 48(iBuf) Binding 4
-                              Decorate 58(i2DArray) DescriptorSet 0
+                              Decorate 48(iBuf) DescriptorSet 0
                               Decorate 58(i2DArray) Binding 6
-                              Decorate 69(i2DRect) DescriptorSet 0
+                              Decorate 58(i2DArray) DescriptorSet 0
                               Decorate 69(i2DRect) Binding 8
-                              Decorate 81(i2DMSArray) DescriptorSet 0
+                              Decorate 69(i2DRect) DescriptorSet 0
                               Decorate 81(i2DMSArray) Binding 10
-                              Decorate 194(u2D) DescriptorSet 0
+                              Decorate 81(i2DMSArray) DescriptorSet 0
                               Decorate 194(u2D) Binding 1
-                              Decorate 207(uCube) DescriptorSet 0
+                              Decorate 194(u2D) DescriptorSet 0
                               Decorate 207(uCube) Binding 3
-                              Decorate 218(u1DArray) DescriptorSet 0
+                              Decorate 207(uCube) DescriptorSet 0
                               Decorate 218(u1DArray) Binding 5
-                              Decorate 229(uCubeArray) DescriptorSet 0
+                              Decorate 218(u1DArray) DescriptorSet 0
                               Decorate 229(uCubeArray) Binding 7
-                              Decorate 240(u2DMS) DescriptorSet 0
+                              Decorate 229(uCubeArray) DescriptorSet 0
                               Decorate 240(u2DMS) Binding 9
+                              Decorate 240(u2DMS) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 64 1
diff --git a/Test/baseResults/spv.imageLoadStoreLod.frag.out b/Test/baseResults/spv.imageLoadStoreLod.frag.out
index 4a16d75..f38391b 100644
--- a/Test/baseResults/spv.imageLoadStoreLod.frag.out
+++ b/Test/baseResults/spv.imageLoadStoreLod.frag.out
@@ -44,40 +44,40 @@
                               Name 133  "u64i2DArray"
                               Name 136  "ResType"
                               Name 142  "u64iCubeArray"
-                              Decorate 14(i1D) DescriptorSet 0
                               Decorate 14(i1D) Binding 0
-                              Decorate 24(i2D) DescriptorSet 0
+                              Decorate 14(i1D) DescriptorSet 0
                               Decorate 24(i2D) Binding 1
-                              Decorate 34(i3D) DescriptorSet 0
+                              Decorate 24(i2D) DescriptorSet 0
                               Decorate 34(i3D) Binding 2
-                              Decorate 46(iiCube) DescriptorSet 0
+                              Decorate 34(i3D) DescriptorSet 0
                               Decorate 46(iiCube) Binding 3
-                              Decorate 53(ii1DArray) DescriptorSet 0
+                              Decorate 46(iiCube) DescriptorSet 0
                               Decorate 53(ii1DArray) Binding 4
-                              Decorate 60(ui2DArray) DescriptorSet 0
+                              Decorate 53(ii1DArray) DescriptorSet 0
                               Decorate 60(ui2DArray) Binding 5
-                              Decorate 71(uiCubeArray) DescriptorSet 0
+                              Decorate 60(ui2DArray) DescriptorSet 0
                               Decorate 71(uiCubeArray) Binding 6
+                              Decorate 71(uiCubeArray) DescriptorSet 0
                               Decorate 77(fragColor) Location 0
+                              Decorate 86(Buf) BufferBlock
                               MemberDecorate 86(Buf) 0 Offset 0
                               MemberDecorate 86(Buf) 1 Offset 32
-                              Decorate 86(Buf) BufferBlock
-                              Decorate 88 DescriptorSet 0
                               Decorate 88 Binding 14
-                              Decorate 92(i64i1D) DescriptorSet 0
+                              Decorate 88 DescriptorSet 0
                               Decorate 92(i64i1D) Binding 7
-                              Decorate 102(i64i2D) DescriptorSet 0
+                              Decorate 92(i64i1D) DescriptorSet 0
                               Decorate 102(i64i2D) Binding 8
-                              Decorate 111(i64i3D) DescriptorSet 0
+                              Decorate 102(i64i2D) DescriptorSet 0
                               Decorate 111(i64i3D) Binding 9
-                              Decorate 120(u64iCube) DescriptorSet 0
+                              Decorate 111(i64i3D) DescriptorSet 0
                               Decorate 120(u64iCube) Binding 10
-                              Decorate 127(u64i1DArray) DescriptorSet 0
+                              Decorate 120(u64iCube) DescriptorSet 0
                               Decorate 127(u64i1DArray) Binding 11
-                              Decorate 133(u64i2DArray) DescriptorSet 0
+                              Decorate 127(u64i1DArray) DescriptorSet 0
                               Decorate 133(u64i2DArray) Binding 12
-                              Decorate 142(u64iCubeArray) DescriptorSet 0
+                              Decorate 133(u64i2DArray) DescriptorSet 0
                               Decorate 142(u64iCubeArray) Binding 13
+                              Decorate 142(u64iCubeArray) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.int16.amd.frag.out b/Test/baseResults/spv.int16.amd.frag.out
index 53f5537..54b09f0 100644
--- a/Test/baseResults/spv.int16.amd.frag.out
+++ b/Test/baseResults/spv.int16.amd.frag.out
@@ -94,15 +94,15 @@
                               Name 573  "u64_to_u16"
                               Name 574  "i16_to_u16"
                               Name 575  "u16_to_i16"
-                              MemberDecorate 25(Uniforms) 0 Offset 0
                               Decorate 25(Uniforms) Block
-                              Decorate 27 DescriptorSet 0
+                              MemberDecorate 25(Uniforms) 0 Offset 0
                               Decorate 27 Binding 0
+                              Decorate 27 DescriptorSet 0
+                              Decorate 531(Block) Block
                               MemberDecorate 531(Block) 0 Offset 0
                               MemberDecorate 531(Block) 1 Offset 6
-                              Decorate 531(Block) Block
-                              Decorate 533(block) DescriptorSet 0
                               Decorate 533(block) Binding 1
+                              Decorate 533(block) DescriptorSet 0
                               Decorate 535(iu16v) Flat
                               Decorate 535(iu16v) Location 0
                               Decorate 537(ii16) Flat
diff --git a/Test/baseResults/spv.int16.frag.out b/Test/baseResults/spv.int16.frag.out
index ed788f8..c7944ef 100644
--- a/Test/baseResults/spv.int16.frag.out
+++ b/Test/baseResults/spv.int16.frag.out
@@ -80,10 +80,11 @@
                               Name 546  "block"
                               Name 547  "si16"
                               Name 548  "su16"
-                              MemberDecorate 24(Uniforms) 0 Offset 0
                               Decorate 24(Uniforms) Block
-                              Decorate 26 DescriptorSet 0
+                              MemberDecorate 24(Uniforms) 0 Offset 0
                               Decorate 26 Binding 0
+                              Decorate 26 DescriptorSet 0
+                              Decorate 544(Block) Block
                               MemberDecorate 544(Block) 0 Offset 0
                               MemberDecorate 544(Block) 1 Offset 4
                               MemberDecorate 544(Block) 2 Offset 8
@@ -92,9 +93,8 @@
                               MemberDecorate 544(Block) 5 Offset 28
                               MemberDecorate 544(Block) 6 Offset 32
                               MemberDecorate 544(Block) 7 Offset 40
-                              Decorate 544(Block) Block
-                              Decorate 546(block) DescriptorSet 0
                               Decorate 546(block) Binding 1
+                              Decorate 546(block) DescriptorSet 0
                               Decorate 547(si16) SpecId 100
                               Decorate 548(su16) SpecId 101
                2:             TypeVoid
diff --git a/Test/baseResults/spv.int32.frag.out b/Test/baseResults/spv.int32.frag.out
index 2c260dd..254622d 100644
--- a/Test/baseResults/spv.int32.frag.out
+++ b/Test/baseResults/spv.int32.frag.out
@@ -1,7 +1,7 @@
 spv.int32.frag
 // Module Version 10300
 // Generated by (magic number): 8000b
-// Id's are bound by 505
+// Id's are bound by 499
 
                               Capability Shader
                               Capability Float16
@@ -43,63 +43,63 @@
                               Name 84  "f64v"
                               Name 94  "i8v"
                               Name 105  "i16v"
-                              Name 125  "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 497  "Block"
-                              MemberName 497(Block) 0  "i32"
-                              MemberName 497(Block) 1  "i32v2"
-                              MemberName 497(Block) 2  "i32v3"
-                              MemberName 497(Block) 3  "i32v4"
-                              MemberName 497(Block) 4  "u32"
-                              MemberName 497(Block) 5  "u32v2"
-                              MemberName 497(Block) 6  "u32v3"
-                              MemberName 497(Block) 7  "u32v4"
-                              Name 499  "block"
-                              Name 500  "si32"
-                              Name 501  "su32"
-                              Name 502  "si"
-                              Name 503  "su"
-                              Name 504  "sb"
-                              MemberDecorate 27(Uniforms) 0 Offset 0
+                              Name 122  "u8v"
+                              Name 129  "u16v"
+                              Name 146  "f16v"
+                              Name 162  "bv"
+                              Name 180  "u32v"
+                              Name 185  "i32"
+                              Name 204  "i"
+                              Name 208  "uv"
+                              Name 221  "i64"
+                              Name 254  "b"
+                              Name 306  "i32v"
+                              Name 309  "i32"
+                              Name 319  "u32v"
+                              Name 321  "u32"
+                              Name 393  "i8v4"
+                              Name 396  "i16v2"
+                              Name 401  "u8v4"
+                              Name 404  "u16v2"
+                              Name 407  "i64"
+                              Name 410  "u32v2"
+                              Name 412  "u64"
+                              Name 416  "bv"
+                              Name 491  "Block"
+                              MemberName 491(Block) 0  "i32"
+                              MemberName 491(Block) 1  "i32v2"
+                              MemberName 491(Block) 2  "i32v3"
+                              MemberName 491(Block) 3  "i32v4"
+                              MemberName 491(Block) 4  "u32"
+                              MemberName 491(Block) 5  "u32v2"
+                              MemberName 491(Block) 6  "u32v3"
+                              MemberName 491(Block) 7  "u32v4"
+                              Name 493  "block"
+                              Name 494  "si32"
+                              Name 495  "su32"
+                              Name 496  "si"
+                              Name 497  "su"
+                              Name 498  "sb"
                               Decorate 27(Uniforms) Block
-                              Decorate 29 DescriptorSet 0
+                              MemberDecorate 27(Uniforms) 0 Offset 0
                               Decorate 29 Binding 0
-                              MemberDecorate 497(Block) 0 Offset 0
-                              MemberDecorate 497(Block) 1 Offset 8
-                              MemberDecorate 497(Block) 2 Offset 16
-                              MemberDecorate 497(Block) 3 Offset 32
-                              MemberDecorate 497(Block) 4 Offset 48
-                              MemberDecorate 497(Block) 5 Offset 56
-                              MemberDecorate 497(Block) 6 Offset 64
-                              MemberDecorate 497(Block) 7 Offset 80
-                              Decorate 497(Block) Block
-                              Decorate 499(block) DescriptorSet 0
-                              Decorate 499(block) Binding 1
-                              Decorate 500(si32) SpecId 100
-                              Decorate 501(su32) SpecId 101
-                              Decorate 502(si) SpecId 102
-                              Decorate 503(su) SpecId 103
-                              Decorate 504(sb) SpecId 104
+                              Decorate 29 DescriptorSet 0
+                              Decorate 491(Block) Block
+                              MemberDecorate 491(Block) 0 Offset 0
+                              MemberDecorate 491(Block) 1 Offset 8
+                              MemberDecorate 491(Block) 2 Offset 16
+                              MemberDecorate 491(Block) 3 Offset 32
+                              MemberDecorate 491(Block) 4 Offset 48
+                              MemberDecorate 491(Block) 5 Offset 56
+                              MemberDecorate 491(Block) 6 Offset 64
+                              MemberDecorate 491(Block) 7 Offset 80
+                              Decorate 493(block) Binding 1
+                              Decorate 493(block) DescriptorSet 0
+                              Decorate 494(si32) SpecId 100
+                              Decorate 495(su32) SpecId 101
+                              Decorate 496(si) SpecId 102
+                              Decorate 497(su) SpecId 103
+                              Decorate 498(sb) SpecId 104
                2:             TypeVoid
                3:             TypeFunction 2
               14:             TypeInt 32 0
@@ -151,50 +151,50 @@
              104:             TypePointer Function 103(i16vec2)
              109:             TypeInt 16 0
              110:             TypeVector 109(int16_t) 2
-             124:             TypePointer Function 99(i8vec2)
-             131:             TypePointer Function 110(i16vec2)
-             149:             TypeFloat 16
-             150:             TypeVector 149(float16_t) 2
-             151:             TypePointer Function 150(f16vec2)
-             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(int64_t)
-             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(int8_t) 4
-             398:             TypePointer Function 397(i8vec4)
-             405:             TypeVector 98(int8_t) 4
-             406:             TypePointer Function 405(i8vec4)
-             417:             TypePointer Function 63(int64_t)
-             421:             TypePointer Function 394(bvec3)
-             495:             TypeVector 18(int) 4
-             496:             TypeVector 14(int) 4
-      497(Block):             TypeStruct 18(int) 52(ivec2) 188(ivec3) 495(ivec4) 14(int) 49(ivec2) 184(ivec3) 496(ivec4)
-             498:             TypePointer Uniform 497(Block)
-      499(block):    498(ptr) Variable Uniform
-       500(si32):     18(int) SpecConstant 4294967286
-       501(su32):     14(int) SpecConstant 20
-         502(si):     18(int) SpecConstant 4294967291
-         503(su):     14(int) SpecConstant 4
-         504(sb):   165(bool) SpecConstantTrue
+             121:             TypePointer Function 99(i8vec2)
+             128:             TypePointer Function 110(i16vec2)
+             143:             TypeFloat 16
+             144:             TypeVector 143(float16_t) 2
+             145:             TypePointer Function 144(f16vec2)
+             159:             TypeBool
+             160:             TypeVector 159(bool) 2
+             161:             TypePointer Function 160(bvec2)
+             164:     18(int) Constant 1
+             165:   52(ivec2) ConstantComposite 30 30
+             166:   52(ivec2) ConstantComposite 164 164
+             169:     14(int) Constant 0
+             170:     14(int) Constant 1
+             171:   49(ivec2) ConstantComposite 169 169
+             172:   49(ivec2) ConstantComposite 170 170
+             178:             TypeVector 14(int) 3
+             179:             TypePointer Function 178(ivec3)
+             182:             TypeVector 18(int) 3
+             220:             TypePointer Function 57(int64_t)
+             245:     14(int) Constant 2
+             253:             TypePointer Function 159(bool)
+             317:   52(ivec2) ConstantComposite 24 24
+             326:  178(ivec3) ConstantComposite 169 169 169
+             368:   159(bool) ConstantTrue
+             375:   159(bool) ConstantFalse
+             376:  160(bvec2) ConstantComposite 375 375
+             388:             TypeVector 159(bool) 3
+             389:  388(bvec3) ConstantComposite 375 375 375
+             391:             TypeVector 91(int8_t) 4
+             392:             TypePointer Function 391(i8vec4)
+             399:             TypeVector 98(int8_t) 4
+             400:             TypePointer Function 399(i8vec4)
+             411:             TypePointer Function 63(int64_t)
+             415:             TypePointer Function 388(bvec3)
+             489:             TypeVector 18(int) 4
+             490:             TypeVector 14(int) 4
+      491(Block):             TypeStruct 18(int) 52(ivec2) 182(ivec3) 489(ivec4) 14(int) 49(ivec2) 178(ivec3) 490(ivec4)
+             492:             TypePointer Uniform 491(Block)
+      493(block):    492(ptr) Variable Uniform
+       494(si32):     18(int) SpecConstant 4294967286
+       495(su32):     14(int) SpecConstant 20
+         496(si):     18(int) SpecConstant 4294967291
+         497(su):     14(int) SpecConstant 4
+         498(sb):   159(bool) SpecConstantTrue
          4(main):           2 Function None 3
                5:             Label
                               Store 16(u32Max) 17
@@ -230,10 +230,10 @@
         84(f64v):     83(ptr) Variable Function
          94(i8v):     93(ptr) Variable Function
        105(i16v):    104(ptr) Variable Function
-        125(u8v):    124(ptr) Variable Function
-       132(u16v):    131(ptr) Variable Function
-       152(f16v):    151(ptr) Variable Function
-         168(bv):    167(ptr) Variable Function
+        122(u8v):    121(ptr) Variable Function
+       129(u16v):    128(ptr) Variable Function
+       146(f16v):    145(ptr) Variable Function
+         162(bv):    161(ptr) Variable Function
               55:   52(ivec2) Load 54(i32v)
               56:   49(ivec2) Bitcast 55
                               Store 51(u32v) 56
@@ -278,453 +278,447 @@
              112:103(i16vec2) Bitcast 111
                               Store 105(i16v) 112
              113:   52(ivec2) Load 54(i32v)
-             114:     18(int) CompositeExtract 113 0
-             115:     18(int) CompositeExtract 113 1
-             116:   52(ivec2) CompositeConstruct 114 115
-                              Store 54(i32v) 116
-             117:   49(ivec2) Load 51(u32v)
-             118:   52(ivec2) Bitcast 117
-                              Store 54(i32v) 118
-             119:   52(ivec2) Load 54(i32v)
-             120: 58(i64vec2) SConvert 119
+                              Store 54(i32v) 113
+             114:   49(ivec2) Load 51(u32v)
+             115:   52(ivec2) Bitcast 114
+                              Store 54(i32v) 115
+             116:   52(ivec2) Load 54(i32v)
+             117: 58(i64vec2) SConvert 116
+                              Store 60(i64v) 117
+             118:   49(ivec2) Load 51(u32v)
+             119: 64(i64vec2) UConvert 118
+             120: 58(i64vec2) Bitcast 119
                               Store 60(i64v) 120
-             121:   49(ivec2) Load 51(u32v)
-             122: 64(i64vec2) UConvert 121
-             123: 58(i64vec2) Bitcast 122
-                              Store 60(i64v) 123
-             126:   52(ivec2) Load 54(i32v)
-             127:  92(i8vec2) SConvert 126
-             128:  99(i8vec2) Bitcast 127
-                              Store 125(u8v) 128
-             129:   49(ivec2) Load 51(u32v)
-             130:  99(i8vec2) UConvert 129
-                              Store 125(u8v) 130
-             133:   52(ivec2) Load 54(i32v)
-             134:103(i16vec2) SConvert 133
-             135:110(i16vec2) Bitcast 134
-                              Store 132(u16v) 135
-             136:   49(ivec2) Load 51(u32v)
-             137:110(i16vec2) UConvert 136
-                              Store 132(u16v) 137
+             123:   52(ivec2) Load 54(i32v)
+             124:  92(i8vec2) SConvert 123
+             125:  99(i8vec2) Bitcast 124
+                              Store 122(u8v) 125
+             126:   49(ivec2) Load 51(u32v)
+             127:  99(i8vec2) UConvert 126
+                              Store 122(u8v) 127
+             130:   52(ivec2) Load 54(i32v)
+             131:103(i16vec2) SConvert 130
+             132:110(i16vec2) Bitcast 131
+                              Store 129(u16v) 132
+             133:   49(ivec2) Load 51(u32v)
+             134:110(i16vec2) UConvert 133
+                              Store 129(u16v) 134
+             135:   52(ivec2) Load 54(i32v)
+             136:   49(ivec2) Bitcast 135
+                              Store 51(u32v) 136
+             137:   49(ivec2) Load 51(u32v)
+                              Store 51(u32v) 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(i64vec2) SConvert 144
-             146: 64(i64vec2) Bitcast 145
-                              Store 66(u64v) 146
-             147:   49(ivec2) Load 51(u32v)
-             148: 64(i64vec2) UConvert 147
-                              Store 66(u64v) 148
-             153:   52(ivec2) Load 54(i32v)
-             154:150(f16vec2) ConvertSToF 153
-                              Store 152(f16v) 154
-             155:   52(ivec2) Load 54(i32v)
-             156:   76(fvec2) ConvertSToF 155
+             139: 58(i64vec2) SConvert 138
+             140: 64(i64vec2) Bitcast 139
+                              Store 66(u64v) 140
+             141:   49(ivec2) Load 51(u32v)
+             142: 64(i64vec2) UConvert 141
+                              Store 66(u64v) 142
+             147:   52(ivec2) Load 54(i32v)
+             148:144(f16vec2) ConvertSToF 147
+                              Store 146(f16v) 148
+             149:   52(ivec2) Load 54(i32v)
+             150:   76(fvec2) ConvertSToF 149
+                              Store 78(f32v) 150
+             151:   52(ivec2) Load 54(i32v)
+             152: 82(f64vec2) ConvertSToF 151
+                              Store 84(f64v) 152
+             153:   49(ivec2) Load 51(u32v)
+             154:144(f16vec2) ConvertUToF 153
+                              Store 146(f16v) 154
+             155:   49(ivec2) Load 51(u32v)
+             156:   76(fvec2) ConvertUToF 155
                               Store 78(f32v) 156
-             157:   52(ivec2) Load 54(i32v)
-             158: 82(f64vec2) ConvertSToF 157
+             157:   49(ivec2) Load 51(u32v)
+             158: 82(f64vec2) ConvertUToF 157
                               Store 84(f64v) 158
-             159:   49(ivec2) Load 51(u32v)
-             160:150(f16vec2) 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(f64vec2) 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
+             163:  160(bvec2) Load 162(bv)
+             167:   52(ivec2) Select 163 166 165
+                              Store 54(i32v) 167
+             168:  160(bvec2) Load 162(bv)
+             173:   49(ivec2) Select 168 172 171
+                              Store 51(u32v) 173
+             174:   52(ivec2) Load 54(i32v)
+             175:  160(bvec2) INotEqual 174 171
+                              Store 162(bv) 175
+             176:   49(ivec2) Load 51(u32v)
+             177:  160(bvec2) INotEqual 176 171
+                              Store 162(bv) 177
                               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(int64_t) SConvert 228
-             230: 57(int64_t) Load 227(i64)
-             231: 57(int64_t) 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(int64_t) SConvert 235
-             237: 57(int64_t) Load 227(i64)
-             238: 57(int64_t) 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
+       180(u32v):    179(ptr) Variable Function
+        185(i32):     19(ptr) Variable Function
+          204(i):     19(ptr) Variable Function
+         208(uv):    179(ptr) Variable Function
+        221(i64):    220(ptr) Variable Function
+          254(b):    253(ptr) Variable Function
+             181:  178(ivec3) Load 180(u32v)
+             183:  182(ivec3) CompositeConstruct 164 164 164
+             184:  178(ivec3) IAdd 181 183
+                              Store 180(u32v) 184
+             186:     18(int) Load 185(i32)
+             187:     18(int) ISub 186 164
+                              Store 185(i32) 187
+             188:     18(int) Load 185(i32)
+             189:     18(int) IAdd 188 164
+                              Store 185(i32) 189
+             190:  178(ivec3) Load 180(u32v)
+             191:  182(ivec3) CompositeConstruct 164 164 164
+             192:  178(ivec3) ISub 190 191
+                              Store 180(u32v) 192
+             193:  178(ivec3) Load 180(u32v)
+             194:  178(ivec3) Not 193
+                              Store 180(u32v) 194
+             195:     18(int) Load 185(i32)
+                              Store 185(i32) 195
+             196:  178(ivec3) Load 180(u32v)
+             197:  178(ivec3) SNegate 196
+                              Store 180(u32v) 197
+             198:     18(int) Load 185(i32)
+             199:     18(int) Load 185(i32)
+             200:     18(int) IAdd 199 198
+                              Store 185(i32) 200
+             201:  178(ivec3) Load 180(u32v)
+             202:  178(ivec3) Load 180(u32v)
+             203:  178(ivec3) ISub 202 201
+                              Store 180(u32v) 203
+             205:     18(int) Load 185(i32)
+             206:     18(int) Load 204(i)
+             207:     18(int) IMul 206 205
+                              Store 204(i) 207
+             209:  178(ivec3) Load 180(u32v)
+             210:  178(ivec3) Load 208(uv)
+             211:  178(ivec3) UDiv 210 209
+                              Store 208(uv) 211
+             212:     18(int) Load 185(i32)
+             213:     14(int) Bitcast 212
+             214:  178(ivec3) Load 208(uv)
+             215:  178(ivec3) CompositeConstruct 213 213 213
+             216:  178(ivec3) UMod 214 215
+                              Store 208(uv) 216
+             217:  178(ivec3) Load 180(u32v)
+             218:  178(ivec3) Load 208(uv)
+             219:  178(ivec3) IAdd 217 218
+                              Store 208(uv) 219
+             222:     18(int) Load 185(i32)
+             223: 57(int64_t) SConvert 222
+             224: 57(int64_t) Load 221(i64)
+             225: 57(int64_t) ISub 223 224
+                              Store 221(i64) 225
+             226:  178(ivec3) Load 180(u32v)
+             227:  178(ivec3) Load 208(uv)
+             228:  178(ivec3) IMul 226 227
+                              Store 208(uv) 228
+             229:     18(int) Load 185(i32)
+             230: 57(int64_t) SConvert 229
+             231: 57(int64_t) Load 221(i64)
+             232: 57(int64_t) IMul 230 231
+                              Store 221(i64) 232
+             233:     18(int) Load 185(i32)
+             234:     18(int) Load 204(i)
+             235:     18(int) SMod 233 234
+                              Store 204(i) 235
+             236:     18(int) Load 185(i32)
+             237:  178(ivec3) Load 180(u32v)
+             238:  182(ivec3) CompositeConstruct 236 236 236
+             239:  178(ivec3) ShiftLeftLogical 237 238
+                              Store 180(u32v) 239
+             240:     38(ptr) AccessChain 180(u32v) 170
+             241:     14(int) Load 240
+             242:     18(int) Load 185(i32)
+             243:     18(int) ShiftRightArithmetic 242 241
+                              Store 185(i32) 243
+             244: 57(int64_t) Load 221(i64)
+             246:     38(ptr) AccessChain 180(u32v) 245
              247:     14(int) Load 246
-             248:     18(int) Load 191(i32)
-             249:     18(int) ShiftRightArithmetic 248 247
-                              Store 191(i32) 249
-             250: 57(int64_t) Load 227(i64)
-             252:     38(ptr) AccessChain 186(u32v) 251
-             253:     14(int) Load 252
-             254: 57(int64_t) 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
+             248: 57(int64_t) ShiftLeftLogical 244 247
+                              Store 221(i64) 248
+             249:  178(ivec3) Load 180(u32v)
+             250:     18(int) Load 204(i)
+             251:  182(ivec3) CompositeConstruct 250 250 250
+             252:  178(ivec3) ShiftLeftLogical 249 251
+                              Store 208(uv) 252
+             255:     38(ptr) AccessChain 180(u32v) 169
+             256:     14(int) Load 255
+             257:     18(int) Load 185(i32)
+             258:     14(int) Bitcast 257
+             259:   159(bool) INotEqual 256 258
+                              Store 254(b) 259
+             260:     18(int) Load 185(i32)
+             261:     14(int) Bitcast 260
+             262:     38(ptr) AccessChain 180(u32v) 169
+             263:     14(int) Load 262
+             264:   159(bool) IEqual 261 263
+                              Store 254(b) 264
+             265:     38(ptr) AccessChain 180(u32v) 169
+             266:     14(int) Load 265
+             267:     38(ptr) AccessChain 208(uv) 170
+             268:     14(int) Load 267
+             269:   159(bool) UGreaterThan 266 268
+                              Store 254(b) 269
+             270:     18(int) Load 185(i32)
+             271:     18(int) Load 204(i)
+             272:   159(bool) SLessThan 270 271
+                              Store 254(b) 272
+             273:     38(ptr) AccessChain 180(u32v) 170
              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(int64_t) SConvert 295
-             297: 57(int64_t) Load 227(i64)
-             298: 57(int64_t) 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)
+             275:     38(ptr) AccessChain 208(uv) 169
+             276:     14(int) Load 275
+             277:   159(bool) UGreaterThanEqual 274 276
+                              Store 254(b) 277
+             278:     18(int) Load 185(i32)
+             279:     18(int) Load 204(i)
+             280:   159(bool) SLessThanEqual 278 279
+                              Store 254(b) 280
+             281:     18(int) Load 185(i32)
+             282:     14(int) Bitcast 281
+             283:  178(ivec3) Load 208(uv)
+             284:  178(ivec3) CompositeConstruct 282 282 282
+             285:  178(ivec3) BitwiseOr 283 284
+                              Store 208(uv) 285
+             286:     18(int) Load 185(i32)
+             287:     18(int) Load 204(i)
+             288:     18(int) BitwiseOr 286 287
+                              Store 204(i) 288
+             289:     18(int) Load 185(i32)
+             290: 57(int64_t) SConvert 289
+             291: 57(int64_t) Load 221(i64)
+             292: 57(int64_t) BitwiseAnd 291 290
+                              Store 221(i64) 292
+             293:  178(ivec3) Load 180(u32v)
+             294:  178(ivec3) Load 208(uv)
+             295:  178(ivec3) BitwiseAnd 293 294
+                              Store 208(uv) 295
+             296:     18(int) Load 185(i32)
+             297:     14(int) Bitcast 296
+             298:  178(ivec3) Load 208(uv)
+             299:  178(ivec3) CompositeConstruct 297 297 297
+             300:  178(ivec3) BitwiseXor 298 299
+                              Store 208(uv) 300
+             301:  178(ivec3) Load 180(u32v)
+             302:     18(int) Load 185(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
+             304:  178(ivec3) CompositeConstruct 303 303 303
+             305:  178(ivec3) BitwiseXor 301 304
+                              Store 180(u32v) 305
                               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):    104(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(i8vec4) Load 399(i8v4)
-             401:     18(int) Bitcast 400
-                              Store 315(i32) 401
-             403:103(i16vec2) Load 402(i16v2)
-             404:     18(int) Bitcast 403
-                              Store 315(i32) 404
-             408: 405(i8vec4) Load 407(u8v4)
-             409:     14(int) Bitcast 408
-                              Store 327(u32) 409
-             411:110(i16vec2) Load 410(u16v2)
-             412:     14(int) Bitcast 411
-                              Store 327(u32) 412
-             414: 57(int64_t) Load 413(i64)
-             415:   52(ivec2) Bitcast 414
-                              Store 312(i32v) 415
-             419: 63(int64_t) 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:    259(ptr) AccessChain 422(bv) 175
-             432:   165(bool) CompositeExtract 430 0
-                              Store 431 432
-             433:    259(ptr) AccessChain 422(bv) 176
-             434:   165(bool) CompositeExtract 430 1
-                              Store 433 434
-             435:  184(ivec3) Load 325(u32v)
-             436:     14(int) Load 327(u32)
-             437:  184(ivec3) CompositeConstruct 436 436 436
-             438:  394(bvec3) ULessThanEqual 435 437
-                              Store 422(bv) 438
-             439:   52(ivec2) Load 312(i32v)
-             440:     18(int) Load 315(i32)
-             441:   52(ivec2) CompositeConstruct 440 440
-             442:  166(bvec2) SLessThanEqual 439 441
-             443:    259(ptr) AccessChain 422(bv) 175
-             444:   165(bool) CompositeExtract 442 0
-                              Store 443 444
-             445:    259(ptr) AccessChain 422(bv) 176
-             446:   165(bool) CompositeExtract 442 1
-                              Store 445 446
-             447:  184(ivec3) Load 325(u32v)
-             448:     14(int) Load 327(u32)
-             449:  184(ivec3) CompositeConstruct 448 448 448
-             450:  394(bvec3) UGreaterThan 447 449
-                              Store 422(bv) 450
-             451:   52(ivec2) Load 312(i32v)
-             452:     18(int) Load 315(i32)
-             453:   52(ivec2) CompositeConstruct 452 452
-             454:  166(bvec2) SGreaterThan 451 453
-             455:    259(ptr) AccessChain 422(bv) 175
-             456:   165(bool) CompositeExtract 454 0
-                              Store 455 456
-             457:    259(ptr) AccessChain 422(bv) 176
-             458:   165(bool) CompositeExtract 454 1
-                              Store 457 458
-             459:  184(ivec3) Load 325(u32v)
-             460:     14(int) Load 327(u32)
-             461:  184(ivec3) CompositeConstruct 460 460 460
-             462:  394(bvec3) UGreaterThanEqual 459 461
-                              Store 422(bv) 462
-             463:   52(ivec2) Load 312(i32v)
-             464:     18(int) Load 315(i32)
-             465:   52(ivec2) CompositeConstruct 464 464
-             466:  166(bvec2) SGreaterThanEqual 463 465
-             467:    259(ptr) AccessChain 422(bv) 175
-             468:   165(bool) CompositeExtract 466 0
-                              Store 467 468
-             469:    259(ptr) AccessChain 422(bv) 176
-             470:   165(bool) CompositeExtract 466 1
-                              Store 469 470
-             471:  184(ivec3) Load 325(u32v)
-             472:     14(int) Load 327(u32)
-             473:  184(ivec3) CompositeConstruct 472 472 472
-             474:  394(bvec3) IEqual 471 473
-                              Store 422(bv) 474
-             475:   52(ivec2) Load 312(i32v)
-             476:     18(int) Load 315(i32)
-             477:   52(ivec2) CompositeConstruct 476 476
-             478:  166(bvec2) IEqual 475 477
-             479:    259(ptr) AccessChain 422(bv) 175
-             480:   165(bool) CompositeExtract 478 0
-                              Store 479 480
-             481:    259(ptr) AccessChain 422(bv) 176
-             482:   165(bool) CompositeExtract 478 1
-                              Store 481 482
-             483:  184(ivec3) Load 325(u32v)
-             484:     14(int) Load 327(u32)
-             485:  184(ivec3) CompositeConstruct 484 484 484
-             486:  394(bvec3) INotEqual 483 485
-                              Store 422(bv) 486
-             487:   52(ivec2) Load 312(i32v)
-             488:     18(int) Load 315(i32)
-             489:   52(ivec2) CompositeConstruct 488 488
-             490:  166(bvec2) INotEqual 487 489
-             491:    259(ptr) AccessChain 422(bv) 175
-             492:   165(bool) CompositeExtract 490 0
-                              Store 491 492
-             493:    259(ptr) AccessChain 422(bv) 176
-             494:   165(bool) CompositeExtract 490 1
-                              Store 493 494
+       306(i32v):     53(ptr) Variable Function
+        309(i32):     19(ptr) Variable Function
+       319(u32v):    179(ptr) Variable Function
+        321(u32):     38(ptr) Variable Function
+       393(i8v4):    392(ptr) Variable Function
+      396(i16v2):    104(ptr) Variable Function
+       401(u8v4):    400(ptr) Variable Function
+      404(u16v2):    128(ptr) Variable Function
+        407(i64):    220(ptr) Variable Function
+      410(u32v2):     50(ptr) Variable Function
+        412(u64):    411(ptr) Variable Function
+         416(bv):    415(ptr) Variable Function
+             307:   52(ivec2) Load 306(i32v)
+             308:   52(ivec2) ExtInst 1(GLSL.std.450) 5(SAbs) 307
+                              Store 306(i32v) 308
+             310:     18(int) Load 309(i32)
+             311:     18(int) ExtInst 1(GLSL.std.450) 7(SSign) 310
+                              Store 309(i32) 311
+             312:   52(ivec2) Load 306(i32v)
+             313:     18(int) Load 309(i32)
+             314:   52(ivec2) CompositeConstruct 313 313
+             315:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 312 314
+                              Store 306(i32v) 315
+             316:   52(ivec2) Load 306(i32v)
+             318:   52(ivec2) ExtInst 1(GLSL.std.450) 39(SMin) 316 317
+                              Store 306(i32v) 318
+             320:  178(ivec3) Load 319(u32v)
+             322:     14(int) Load 321(u32)
+             323:  178(ivec3) CompositeConstruct 322 322 322
+             324:  178(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 320 323
+                              Store 319(u32v) 324
+             325:  178(ivec3) Load 319(u32v)
+             327:  178(ivec3) ExtInst 1(GLSL.std.450) 38(UMin) 325 326
+                              Store 319(u32v) 327
+             328:   52(ivec2) Load 306(i32v)
+             329:     18(int) Load 309(i32)
+             330:   52(ivec2) CompositeConstruct 329 329
+             331:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 328 330
+                              Store 306(i32v) 331
+             332:   52(ivec2) Load 306(i32v)
+             333:   52(ivec2) ExtInst 1(GLSL.std.450) 42(SMax) 332 317
+                              Store 306(i32v) 333
+             334:  178(ivec3) Load 319(u32v)
+             335:     14(int) Load 321(u32)
+             336:  178(ivec3) CompositeConstruct 335 335 335
+             337:  178(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 334 336
+                              Store 319(u32v) 337
+             338:  178(ivec3) Load 319(u32v)
+             339:  178(ivec3) ExtInst 1(GLSL.std.450) 41(UMax) 338 326
+                              Store 319(u32v) 339
+             340:   52(ivec2) Load 306(i32v)
+             341:     18(int) Load 309(i32)
+             342:     18(int) SNegate 341
+             343:     18(int) Load 309(i32)
+             344:   52(ivec2) CompositeConstruct 342 342
+             345:   52(ivec2) CompositeConstruct 343 343
+             346:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 340 344 345
+                              Store 306(i32v) 346
+             347:   52(ivec2) Load 306(i32v)
+             348:   52(ivec2) Load 306(i32v)
+             349:   52(ivec2) SNegate 348
+             350:   52(ivec2) Load 306(i32v)
+             351:   52(ivec2) ExtInst 1(GLSL.std.450) 45(SClamp) 347 349 350
+                              Store 306(i32v) 351
+             352:  178(ivec3) Load 319(u32v)
+             353:     14(int) Load 321(u32)
+             354:     14(int) SNegate 353
+             355:     14(int) Load 321(u32)
+             356:  178(ivec3) CompositeConstruct 354 354 354
+             357:  178(ivec3) CompositeConstruct 355 355 355
+             358:  178(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 352 356 357
+                              Store 319(u32v) 358
+             359:  178(ivec3) Load 319(u32v)
+             360:  178(ivec3) Load 319(u32v)
+             361:  178(ivec3) SNegate 360
+             362:  178(ivec3) Load 319(u32v)
+             363:  178(ivec3) ExtInst 1(GLSL.std.450) 44(UClamp) 359 361 362
+                              Store 319(u32v) 363
+             364:     19(ptr) AccessChain 306(i32v) 169
+             365:     18(int) Load 364
+             366:     19(ptr) AccessChain 306(i32v) 170
+             367:     18(int) Load 366
+             369:     18(int) Select 368 367 365
+                              Store 309(i32) 369
+             370:     18(int) Load 309(i32)
+             371:   52(ivec2) CompositeConstruct 370 370
+             372:     18(int) Load 309(i32)
+             373:     18(int) SNegate 372
+             374:   52(ivec2) CompositeConstruct 373 373
+             377:   52(ivec2) Select 376 374 371
+                              Store 306(i32v) 377
+             378:     38(ptr) AccessChain 319(u32v) 169
+             379:     14(int) Load 378
+             380:     38(ptr) AccessChain 319(u32v) 170
+             381:     14(int) Load 380
+             382:     14(int) Select 368 381 379
+                              Store 321(u32) 382
+             383:     14(int) Load 321(u32)
+             384:  178(ivec3) CompositeConstruct 383 383 383
+             385:     14(int) Load 321(u32)
+             386:     14(int) SNegate 385
+             387:  178(ivec3) CompositeConstruct 386 386 386
+             390:  178(ivec3) Select 389 387 384
+                              Store 319(u32v) 390
+             394: 391(i8vec4) Load 393(i8v4)
+             395:     18(int) Bitcast 394
+                              Store 309(i32) 395
+             397:103(i16vec2) Load 396(i16v2)
+             398:     18(int) Bitcast 397
+                              Store 309(i32) 398
+             402: 399(i8vec4) Load 401(u8v4)
+             403:     14(int) Bitcast 402
+                              Store 321(u32) 403
+             405:110(i16vec2) Load 404(u16v2)
+             406:     14(int) Bitcast 405
+                              Store 321(u32) 406
+             408: 57(int64_t) Load 407(i64)
+             409:   52(ivec2) Bitcast 408
+                              Store 306(i32v) 409
+             413: 63(int64_t) Load 412(u64)
+             414:   49(ivec2) Bitcast 413
+                              Store 410(u32v2) 414
+             417:  178(ivec3) Load 319(u32v)
+             418:     14(int) Load 321(u32)
+             419:  178(ivec3) CompositeConstruct 418 418 418
+             420:  388(bvec3) ULessThan 417 419
+                              Store 416(bv) 420
+             421:   52(ivec2) Load 306(i32v)
+             422:     18(int) Load 309(i32)
+             423:   52(ivec2) CompositeConstruct 422 422
+             424:  160(bvec2) SLessThan 421 423
+             425:    253(ptr) AccessChain 416(bv) 169
+             426:   159(bool) CompositeExtract 424 0
+                              Store 425 426
+             427:    253(ptr) AccessChain 416(bv) 170
+             428:   159(bool) CompositeExtract 424 1
+                              Store 427 428
+             429:  178(ivec3) Load 319(u32v)
+             430:     14(int) Load 321(u32)
+             431:  178(ivec3) CompositeConstruct 430 430 430
+             432:  388(bvec3) ULessThanEqual 429 431
+                              Store 416(bv) 432
+             433:   52(ivec2) Load 306(i32v)
+             434:     18(int) Load 309(i32)
+             435:   52(ivec2) CompositeConstruct 434 434
+             436:  160(bvec2) SLessThanEqual 433 435
+             437:    253(ptr) AccessChain 416(bv) 169
+             438:   159(bool) CompositeExtract 436 0
+                              Store 437 438
+             439:    253(ptr) AccessChain 416(bv) 170
+             440:   159(bool) CompositeExtract 436 1
+                              Store 439 440
+             441:  178(ivec3) Load 319(u32v)
+             442:     14(int) Load 321(u32)
+             443:  178(ivec3) CompositeConstruct 442 442 442
+             444:  388(bvec3) UGreaterThan 441 443
+                              Store 416(bv) 444
+             445:   52(ivec2) Load 306(i32v)
+             446:     18(int) Load 309(i32)
+             447:   52(ivec2) CompositeConstruct 446 446
+             448:  160(bvec2) SGreaterThan 445 447
+             449:    253(ptr) AccessChain 416(bv) 169
+             450:   159(bool) CompositeExtract 448 0
+                              Store 449 450
+             451:    253(ptr) AccessChain 416(bv) 170
+             452:   159(bool) CompositeExtract 448 1
+                              Store 451 452
+             453:  178(ivec3) Load 319(u32v)
+             454:     14(int) Load 321(u32)
+             455:  178(ivec3) CompositeConstruct 454 454 454
+             456:  388(bvec3) UGreaterThanEqual 453 455
+                              Store 416(bv) 456
+             457:   52(ivec2) Load 306(i32v)
+             458:     18(int) Load 309(i32)
+             459:   52(ivec2) CompositeConstruct 458 458
+             460:  160(bvec2) SGreaterThanEqual 457 459
+             461:    253(ptr) AccessChain 416(bv) 169
+             462:   159(bool) CompositeExtract 460 0
+                              Store 461 462
+             463:    253(ptr) AccessChain 416(bv) 170
+             464:   159(bool) CompositeExtract 460 1
+                              Store 463 464
+             465:  178(ivec3) Load 319(u32v)
+             466:     14(int) Load 321(u32)
+             467:  178(ivec3) CompositeConstruct 466 466 466
+             468:  388(bvec3) IEqual 465 467
+                              Store 416(bv) 468
+             469:   52(ivec2) Load 306(i32v)
+             470:     18(int) Load 309(i32)
+             471:   52(ivec2) CompositeConstruct 470 470
+             472:  160(bvec2) IEqual 469 471
+             473:    253(ptr) AccessChain 416(bv) 169
+             474:   159(bool) CompositeExtract 472 0
+                              Store 473 474
+             475:    253(ptr) AccessChain 416(bv) 170
+             476:   159(bool) CompositeExtract 472 1
+                              Store 475 476
+             477:  178(ivec3) Load 319(u32v)
+             478:     14(int) Load 321(u32)
+             479:  178(ivec3) CompositeConstruct 478 478 478
+             480:  388(bvec3) INotEqual 477 479
+                              Store 416(bv) 480
+             481:   52(ivec2) Load 306(i32v)
+             482:     18(int) Load 309(i32)
+             483:   52(ivec2) CompositeConstruct 482 482
+             484:  160(bvec2) INotEqual 481 483
+             485:    253(ptr) AccessChain 416(bv) 169
+             486:   159(bool) CompositeExtract 484 0
+                              Store 485 486
+             487:    253(ptr) AccessChain 416(bv) 170
+             488:   159(bool) CompositeExtract 484 1
+                              Store 487 488
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.int64.frag.out b/Test/baseResults/spv.int64.frag.out
index e335a54..5fff827 100644
--- a/Test/baseResults/spv.int64.frag.out
+++ b/Test/baseResults/spv.int64.frag.out
@@ -71,15 +71,15 @@
                               Name 508  "i_to_u64"
                               Name 510  "i64_to_u"
                               Name 512  "u_to_i64"
-                              MemberDecorate 28(Uniforms) 0 Offset 0
                               Decorate 28(Uniforms) Block
-                              Decorate 30 DescriptorSet 0
+                              MemberDecorate 28(Uniforms) 0 Offset 0
                               Decorate 30 Binding 0
+                              Decorate 30 DescriptorSet 0
+                              Decorate 486(Block) Block
                               MemberDecorate 486(Block) 0 Offset 0
                               MemberDecorate 486(Block) 1 Offset 24
-                              Decorate 486(Block) Block
-                              Decorate 488(block) DescriptorSet 0
                               Decorate 488(block) Binding 1
+                              Decorate 488(block) DescriptorSet 0
                               Decorate 489(si64) SpecId 100
                               Decorate 490(su64) SpecId 101
                               Decorate 491(si) SpecId 102
diff --git a/Test/baseResults/spv.int8.frag.out b/Test/baseResults/spv.int8.frag.out
index 3bfeb1a..0682281 100644
--- a/Test/baseResults/spv.int8.frag.out
+++ b/Test/baseResults/spv.int8.frag.out
@@ -80,10 +80,11 @@
                               Name 541  "block"
                               Name 542  "si8"
                               Name 543  "su8"
-                              MemberDecorate 24(Uniforms) 0 Offset 0
                               Decorate 24(Uniforms) Block
-                              Decorate 26 DescriptorSet 0
+                              MemberDecorate 24(Uniforms) 0 Offset 0
                               Decorate 26 Binding 0
+                              Decorate 26 DescriptorSet 0
+                              Decorate 539(Block) Block
                               MemberDecorate 539(Block) 0 Offset 0
                               MemberDecorate 539(Block) 1 Offset 2
                               MemberDecorate 539(Block) 2 Offset 4
@@ -92,9 +93,8 @@
                               MemberDecorate 539(Block) 5 Offset 14
                               MemberDecorate 539(Block) 6 Offset 16
                               MemberDecorate 539(Block) 7 Offset 20
-                              Decorate 539(Block) Block
-                              Decorate 541(block) DescriptorSet 0
                               Decorate 541(block) Binding 1
+                              Decorate 541(block) DescriptorSet 0
                               Decorate 542(si8) SpecId 100
                               Decorate 543(su8) SpecId 101
                2:             TypeVoid
diff --git a/Test/baseResults/spv.intcoopmat.comp.out b/Test/baseResults/spv.intcoopmat.comp.out
index 24289a9..5938807 100644
--- a/Test/baseResults/spv.intcoopmat.comp.out
+++ b/Test/baseResults/spv.intcoopmat.comp.out
@@ -91,24 +91,24 @@
                               Name 285  "scm"
                               Decorate 83 ArrayStride 4
                               Decorate 84 ArrayStride 4
+                              Decorate 85(Block) Block
                               MemberDecorate 85(Block) 0 Offset 0
                               MemberDecorate 85(Block) 1 Offset 4194304
-                              Decorate 85(Block) Block
-                              Decorate 87(block) DescriptorSet 0
                               Decorate 87(block) Binding 0
+                              Decorate 87(block) DescriptorSet 0
                               Decorate 99 ArrayStride 1
                               Decorate 101 ArrayStride 1
+                              Decorate 103(Block16) Block
                               MemberDecorate 103(Block16) 0 Offset 0
                               MemberDecorate 103(Block16) 1 Offset 1048576
                               MemberDecorate 103(Block16) 2 Offset 1048584
-                              Decorate 103(Block16) Block
                               Decorate 104 ArrayStride 4
                               Decorate 105 ArrayStride 4
+                              Decorate 106(Block) Block
                               MemberDecorate 106(Block) 0 Offset 0
                               MemberDecorate 106(Block) 1 Offset 4194304
-                              Decorate 106(Block) Block
-                              Decorate 108(block8) DescriptorSet 0
                               Decorate 108(block8) Binding 0
+                              Decorate 108(block8) DescriptorSet 0
                               Decorate 156(Y) SpecId 0
                               Decorate 247 BuiltIn WorkgroupSize
                               Decorate 280(SC) SpecId 2
diff --git a/Test/baseResults/spv.intrinsicsDebugBreak.frag.out b/Test/baseResults/spv.intrinsicsDebugBreak.frag.out
new file mode 100644
index 0000000..d536761
--- /dev/null
+++ b/Test/baseResults/spv.intrinsicsDebugBreak.frag.out
@@ -0,0 +1,22 @@
+spv.intrinsicsDebugBreak.frag
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 8
+
+                              Capability Shader
+                              Extension  "SPV_KHR_non_semantic_info"
+               1:             ExtInstImport  "GLSL.std.450"
+               6:             ExtInstImport  "NonSemantic.DebugBreak"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_spirv_intrinsics"
+                              Name 4  "main"
+               2:             TypeVoid
+               3:             TypeFunction 2
+         4(main):           2 Function None 3
+               5:             Label
+               7:           2 ExtInst 6(NonSemantic.DebugBreak) 1(DebugBreak)
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.intrinsicsInteractWithCoopMat.comp.out b/Test/baseResults/spv.intrinsicsInteractWithCoopMat.comp.out
new file mode 100644
index 0000000..4abb6d5
--- /dev/null
+++ b/Test/baseResults/spv.intrinsicsInteractWithCoopMat.comp.out
@@ -0,0 +1,71 @@
+spv.intrinsicsInteractWithCoopMat.comp
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 36
+
+                              Capability Shader
+                              Capability Float16
+                              Capability VulkanMemoryModelKHR
+                              Capability CooperativeMatrixKHR
+                              Extension  "SPV_KHR_cooperative_matrix"
+                              Extension  "SPV_KHR_storage_buffer_storage_class"
+                              Extension  "SPV_KHR_vulkan_memory_model"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical VulkanKHR
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 32 1 1
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_spirv_intrinsics"
+                              SourceExtension  "GL_KHR_cooperative_matrix"
+                              SourceExtension  "GL_KHR_memory_scope_semantics"
+                              Name 4  "main"
+                              Name 13  "tempArg"
+                              Name 16  "Buf"
+                              MemberName 16(Buf) 0  "x"
+                              Name 18  "buf"
+                              Name 26  "A"
+                              Decorate 15 ArrayStride 16
+                              Decorate 16(Buf) Block
+                              MemberDecorate 16(Buf) 0 Offset 0
+                              Decorate 18(buf) Binding 0
+                              Decorate 18(buf) DescriptorSet 0
+                              Decorate 35 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 16
+               7:             TypeInt 32 0
+               8:      7(int) Constant 3
+               9:      7(int) Constant 16
+              10:      7(int) Constant 0
+              11:             TypeCooperativeMatrixKHR 6(float16_t) 8 9 9 10
+              12:             TypePointer Function 11
+              14:             TypeVector 7(int) 4
+              15:             TypeRuntimeArray 14(ivec4)
+         16(Buf):             TypeStruct 15
+              17:             TypePointer StorageBuffer 16(Buf)
+         18(buf):     17(ptr) Variable StorageBuffer
+              19:             TypeInt 32 1
+              20:     19(int) Constant 0
+              21:             TypePointer StorageBuffer 14(ivec4)
+              23:      7(int) Constant 2
+              25:             TypePointer Private 11
+           26(A):     25(ptr) Variable Private
+              29:      7(int) Constant 64
+              31:      7(int) Constant 4
+              32:             TypeVector 7(int) 3
+              33:      7(int) Constant 32
+              34:      7(int) Constant 1
+              35:   32(ivec3) ConstantComposite 33 34 34
+         4(main):           2 Function None 3
+               5:             Label
+     13(tempArg):     12(ptr) Variable Function
+              22:     21(ptr) AccessChain 18(buf) 20 10
+              24:          11 CooperativeMatrixLoadKHR 22 20 23 None
+                              Store 13(tempArg) 24
+              27:          11 Load 13(tempArg)
+                              Store 26(A) 27
+              28:          11 Load 26(A)
+              30:     21(ptr) AccessChain 18(buf) 20 29
+                              CooperativeMatrixStoreKHR 30 28 20 31 None
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.intrinsicsSpirvDecorateId.comp.out b/Test/baseResults/spv.intrinsicsSpirvDecorateId.comp.out
index c454dc6..e9ba47b 100644
--- a/Test/baseResults/spv.intrinsicsSpirvDecorateId.comp.out
+++ b/Test/baseResults/spv.intrinsicsSpirvDecorateId.comp.out
@@ -19,14 +19,14 @@
                               MemberName 13(Uniform) 0  "y"
                               Name 15  ""
                               Decorate 9 BuiltIn WorkgroupSize
-                              MemberDecorate 10(CounterBuffer) 0 Offset 0
                               Decorate 10(CounterBuffer) Block
-                              Decorate 12(x) DescriptorSet 0
+                              MemberDecorate 10(CounterBuffer) 0 Offset 0
                               Decorate 12(x) Binding 1
-                              MemberDecorate 13(Uniform) 0 Offset 0
+                              Decorate 12(x) DescriptorSet 0
                               Decorate 13(Uniform) Block
-                              Decorate 15 DescriptorSet 0
+                              MemberDecorate 13(Uniform) 0 Offset 0
                               Decorate 15 Binding 0
+                              Decorate 15 DescriptorSet 0
                               DecorateId 15 DecorationHlslCounterBufferGOOGLE 12(x)
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.intrinsicsSpirvType.rgen.out b/Test/baseResults/spv.intrinsicsSpirvType.rgen.out
index 5d67de7..7b20ece 100644
--- a/Test/baseResults/spv.intrinsicsSpirvType.rgen.out
+++ b/Test/baseResults/spv.intrinsicsSpirvType.rgen.out
@@ -16,8 +16,8 @@
                               Name 4  "main"
                               Name 8  "rq"
                               Name 11  "as"
-                              Decorate 11(as) DescriptorSet 0
                               Decorate 11(as) Binding 0
+                              Decorate 11(as) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeRayQueryKHR
diff --git a/Test/baseResults/spv.invariantAll.vert.out b/Test/baseResults/spv.invariantAll.vert.out
index d1703dc..40d275a 100644
--- a/Test/baseResults/spv.invariantAll.vert.out
+++ b/Test/baseResults/spv.invariantAll.vert.out
@@ -1,7 +1,7 @@
 spv.invariantAll.vert
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 25
+// Id's are bound by 24
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
@@ -16,17 +16,17 @@
                               MemberName 11(gl_PerVertex) 3  "gl_CullDistance"
                               Name 13  ""
                               Name 17  "v"
-                              MemberDecorate 11(gl_PerVertex) 0 Invariant
-                              MemberDecorate 11(gl_PerVertex) 0 BuiltIn Position
-                              MemberDecorate 11(gl_PerVertex) 1 Invariant
-                              MemberDecorate 11(gl_PerVertex) 1 BuiltIn PointSize
-                              MemberDecorate 11(gl_PerVertex) 2 Invariant
-                              MemberDecorate 11(gl_PerVertex) 2 BuiltIn ClipDistance
-                              MemberDecorate 11(gl_PerVertex) 3 Invariant
-                              MemberDecorate 11(gl_PerVertex) 3 BuiltIn CullDistance
                               Decorate 11(gl_PerVertex) Block
-                              Decorate 17(v) Location 0
+                              MemberDecorate 11(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 11(gl_PerVertex) 0 Invariant
+                              MemberDecorate 11(gl_PerVertex) 1 BuiltIn PointSize
+                              MemberDecorate 11(gl_PerVertex) 1 Invariant
+                              MemberDecorate 11(gl_PerVertex) 2 BuiltIn ClipDistance
+                              MemberDecorate 11(gl_PerVertex) 2 Invariant
+                              MemberDecorate 11(gl_PerVertex) 3 BuiltIn CullDistance
+                              MemberDecorate 11(gl_PerVertex) 3 Invariant
                               Decorate 17(v) Invariant
+                              Decorate 17(v) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -41,15 +41,14 @@
               15:     14(int) Constant 0
               16:             TypePointer Output 6(float)
            17(v):     16(ptr) Variable Output
-              20:    6(float) Constant 0
-              21:    6(float) Constant 1065353216
-              23:             TypePointer Output 7(fvec4)
+              19:    6(float) Constant 0
+              20:    6(float) Constant 1065353216
+              22:             TypePointer Output 7(fvec4)
          4(main):           2 Function None 3
                5:             Label
               18:    6(float) Load 17(v)
-              19:    6(float) Load 17(v)
-              22:    7(fvec4) CompositeConstruct 18 19 20 21
-              24:     23(ptr) AccessChain 13 15
-                              Store 24 22
+              21:    7(fvec4) CompositeConstruct 18 18 19 20
+              23:     22(ptr) AccessChain 13 15
+                              Store 23 21
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.layoutNested.vert.out b/Test/baseResults/spv.layoutNested.vert.out
index 2d5111c..4b2374d 100644
--- a/Test/baseResults/spv.layoutNested.vert.out
+++ b/Test/baseResults/spv.layoutNested.vert.out
@@ -84,88 +84,88 @@
                               Name 65  "soutinv"
                               Decorate 13 ArrayStride 32
                               MemberDecorate 14(S) 0 Offset 0
-                              MemberDecorate 14(S) 1 ColMajor
                               MemberDecorate 14(S) 1 RelaxedPrecision
-                              MemberDecorate 14(S) 1 Offset 16
+                              MemberDecorate 14(S) 1 ColMajor
                               MemberDecorate 14(S) 1 MatrixStride 16
+                              MemberDecorate 14(S) 1 Offset 16
                               MemberDecorate 14(S) 2 RelaxedPrecision
                               MemberDecorate 14(S) 2 Offset 144
                               Decorate 16 ArrayStride 160
                               Decorate 18 ArrayStride 480
+                              Decorate 19(Block140) Block
                               MemberDecorate 19(Block140) 0 RelaxedPrecision
                               MemberDecorate 19(Block140) 0 Offset 0
                               MemberDecorate 19(Block140) 1 Offset 16
                               MemberDecorate 19(Block140) 2 RelaxedPrecision
                               MemberDecorate 19(Block140) 2 Offset 976
-                              Decorate 19(Block140) Block
-                              Decorate 21(inst140) DescriptorSet 0
                               Decorate 21(inst140) Binding 0
+                              Decorate 21(inst140) DescriptorSet 0
                               Decorate 22 ArrayStride 16
                               MemberDecorate 23(S) 0 Offset 0
-                              MemberDecorate 23(S) 1 ColMajor
                               MemberDecorate 23(S) 1 RelaxedPrecision
-                              MemberDecorate 23(S) 1 Offset 16
+                              MemberDecorate 23(S) 1 ColMajor
                               MemberDecorate 23(S) 1 MatrixStride 8
+                              MemberDecorate 23(S) 1 Offset 16
                               MemberDecorate 23(S) 2 RelaxedPrecision
                               MemberDecorate 23(S) 2 Offset 80
                               Decorate 24 ArrayStride 96
                               Decorate 25 ArrayStride 288
+                              Decorate 26(Block430) BufferBlock
                               MemberDecorate 26(Block430) 0 RelaxedPrecision
                               MemberDecorate 26(Block430) 0 Offset 0
                               MemberDecorate 26(Block430) 1 Offset 16
                               MemberDecorate 26(Block430) 2 RelaxedPrecision
                               MemberDecorate 26(Block430) 2 Offset 592
-                              Decorate 26(Block430) BufferBlock
-                              Decorate 28(inst430) DescriptorSet 0
                               Decorate 28(inst430) Binding 1
+                              Decorate 28(inst430) DescriptorSet 0
                               MemberDecorate 29(S) 1 RelaxedPrecision
                               MemberDecorate 29(S) 2 RelaxedPrecision
                               MemberDecorate 35(T) 0 RowMajor
-                              MemberDecorate 35(T) 0 Offset 0
                               MemberDecorate 35(T) 0 MatrixStride 16
+                              MemberDecorate 35(T) 0 Offset 0
                               MemberDecorate 35(T) 1 Offset 32
                               MemberDecorate 36(Nestor) 0 Offset 0
-                              MemberDecorate 37(Bt1) 0 Offset 0
                               Decorate 37(Bt1) Block
-                              Decorate 39(Btn1) DescriptorSet 1
+                              MemberDecorate 37(Bt1) 0 Offset 0
                               Decorate 39(Btn1) Binding 0
+                              Decorate 39(Btn1) DescriptorSet 1
                               MemberDecorate 40(T) 0 ColMajor
-                              MemberDecorate 40(T) 0 Offset 0
                               MemberDecorate 40(T) 0 MatrixStride 16
+                              MemberDecorate 40(T) 0 Offset 0
                               MemberDecorate 40(T) 1 Offset 32
                               MemberDecorate 41(Nestor) 0 Offset 0
-                              MemberDecorate 42(Bt2) 0 Offset 0
                               Decorate 42(Bt2) Block
-                              Decorate 44(Btn2) DescriptorSet 1
+                              MemberDecorate 42(Bt2) 0 Offset 0
                               Decorate 44(Btn2) Binding 0
+                              Decorate 44(Btn2) DescriptorSet 1
+                              Decorate 45(Bt3) Block
                               MemberDecorate 45(Bt3) 0 Offset 0
                               MemberDecorate 45(Bt3) 1 Offset 48
-                              Decorate 45(Bt3) Block
-                              Decorate 47(Btn3) DescriptorSet 1
                               Decorate 47(Btn3) Binding 0
+                              Decorate 47(Btn3) DescriptorSet 1
                               MemberDecorate 48(T) 0 RowMajor
-                              MemberDecorate 48(T) 0 Offset 0
                               MemberDecorate 48(T) 0 MatrixStride 8
+                              MemberDecorate 48(T) 0 Offset 0
                               MemberDecorate 48(T) 1 Offset 16
                               MemberDecorate 49(Nestor) 0 Offset 0
-                              MemberDecorate 50(bBt1) 0 Offset 0
                               Decorate 50(bBt1) BufferBlock
-                              Decorate 52(bBtn1) DescriptorSet 1
+                              MemberDecorate 50(bBt1) 0 Offset 0
                               Decorate 52(bBtn1) Binding 0
+                              Decorate 52(bBtn1) DescriptorSet 1
                               MemberDecorate 53(T) 0 ColMajor
-                              MemberDecorate 53(T) 0 Offset 0
                               MemberDecorate 53(T) 0 MatrixStride 8
+                              MemberDecorate 53(T) 0 Offset 0
                               MemberDecorate 53(T) 1 Offset 16
                               MemberDecorate 54(Nestor) 0 Offset 0
-                              MemberDecorate 55(bBt2) 0 Offset 0
                               Decorate 55(bBt2) BufferBlock
-                              Decorate 57(bBtn2) DescriptorSet 1
+                              MemberDecorate 55(bBt2) 0 Offset 0
                               Decorate 57(bBtn2) Binding 0
+                              Decorate 57(bBtn2) DescriptorSet 1
+                              Decorate 58(bBt3) BufferBlock
                               MemberDecorate 58(bBt3) 0 Offset 0
                               MemberDecorate 58(bBt3) 1 Offset 24
-                              Decorate 58(bBt3) BufferBlock
-                              Decorate 60(bBtn3) DescriptorSet 1
                               Decorate 60(bBtn3) Binding 0
+                              Decorate 60(bBtn3) DescriptorSet 1
                               Decorate 62(sout) Flat
                               Decorate 62(sout) Location 0
                               MemberDecorate 63(S) 0 Invariant
@@ -173,8 +173,8 @@
                               MemberDecorate 63(S) 1 Invariant
                               MemberDecorate 63(S) 2 RelaxedPrecision
                               MemberDecorate 63(S) 2 Invariant
-                              Decorate 65(soutinv) Location 10
                               Decorate 65(soutinv) Invariant
+                              Decorate 65(soutinv) Location 10
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
diff --git a/Test/baseResults/spv.load.bool.array.interface.block.frag.out b/Test/baseResults/spv.load.bool.array.interface.block.frag.out
index 7a80299..b50c8b7 100644
--- a/Test/baseResults/spv.load.bool.array.interface.block.frag.out
+++ b/Test/baseResults/spv.load.bool.array.interface.block.frag.out
@@ -19,16 +19,16 @@
                               Name 77  "color"
                               Decorate 8 ArrayStride 4
                               Decorate 10 ArrayStride 12
-                              MemberDecorate 11(ssbo) 0 Offset 0
                               Decorate 11(ssbo) BufferBlock
-                              Decorate 13 DescriptorSet 0
+                              MemberDecorate 11(ssbo) 0 Offset 0
                               Decorate 13 Binding 1
+                              Decorate 13 DescriptorSet 0
                               Decorate 16 ArrayStride 16
                               Decorate 17 ArrayStride 48
-                              MemberDecorate 18(ub) 0 Offset 0
                               Decorate 18(ub) Block
-                              Decorate 20 DescriptorSet 0
+                              MemberDecorate 18(ub) 0 Offset 0
                               Decorate 20 Binding 0
+                              Decorate 20 DescriptorSet 0
                               Decorate 77(color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.localAggregates.frag.out b/Test/baseResults/spv.localAggregates.frag.out
index a9ce54f..616a245 100644
--- a/Test/baseResults/spv.localAggregates.frag.out
+++ b/Test/baseResults/spv.localAggregates.frag.out
@@ -45,8 +45,8 @@
                               Decorate 90(condition) Location 18
                               Decorate 98(color) Location 1
                               Decorate 108(gl_FragColor) Location 0
-                              Decorate 128(samp2D) DescriptorSet 0
                               Decorate 128(samp2D) Binding 0
+                              Decorate 128(samp2D) DescriptorSet 0
                               Decorate 134(foo) Flat
                               Decorate 134(foo) Location 2
                               Decorate 135(foo2) Flat
diff --git a/Test/baseResults/spv.matFun.vert.out b/Test/baseResults/spv.matFun.vert.out
index 1201887..b3388c0 100644
--- a/Test/baseResults/spv.matFun.vert.out
+++ b/Test/baseResults/spv.matFun.vert.out
@@ -32,19 +32,19 @@
                               Name 86  "param"
                               Name 89  "param"
                               Name 93  "param"
+                              Decorate 74(gl_PerVertex) Block
                               MemberDecorate 74(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 74(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 74(gl_PerVertex) 2 BuiltIn ClipDistance
-                              Decorate 74(gl_PerVertex) Block
-                              MemberDecorate 77(bl) 0 ColMajor
-                              MemberDecorate 77(bl) 0 Offset 0
-                              MemberDecorate 77(bl) 0 MatrixStride 16
-                              MemberDecorate 77(bl) 1 ColMajor
-                              MemberDecorate 77(bl) 1 Offset 64
-                              MemberDecorate 77(bl) 1 MatrixStride 16
                               Decorate 77(bl) Block
-                              Decorate 79(bName) DescriptorSet 0
+                              MemberDecorate 77(bl) 0 ColMajor
+                              MemberDecorate 77(bl) 0 MatrixStride 16
+                              MemberDecorate 77(bl) 0 Offset 0
+                              MemberDecorate 77(bl) 1 ColMajor
+                              MemberDecorate 77(bl) 1 MatrixStride 16
+                              MemberDecorate 77(bl) 1 Offset 64
                               Decorate 79(bName) Binding 0
+                              Decorate 79(bName) DescriptorSet 0
                               Decorate 81(v3) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.maximalReconvergence.vert.out b/Test/baseResults/spv.maximalReconvergence.vert.out
new file mode 100644
index 0000000..2d60ca5
--- /dev/null
+++ b/Test/baseResults/spv.maximalReconvergence.vert.out
@@ -0,0 +1,22 @@
+spv.maximalReconvergence.vert
+WARNING: 0:5: '' : attribute with arguments not recognized, skipping 
+
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 6
+
+                              Capability Shader
+                              Extension  "SPV_KHR_maximal_reconvergence"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main"
+                              ExecutionMode 4 MaximallyReconverges
+                              Source GLSL 460
+                              SourceExtension  "GL_EXT_maximal_reconvergence"
+                              Name 4  "main"
+               2:             TypeVoid
+               3:             TypeFunction 2
+         4(main):           2 Function None 3
+               5:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.memoryQualifier.frag.out b/Test/baseResults/spv.memoryQualifier.frag.out
index e0a5207..57b4c71 100644
--- a/Test/baseResults/spv.memoryQualifier.frag.out
+++ b/Test/baseResults/spv.memoryQualifier.frag.out
@@ -30,30 +30,30 @@
                               MemberName 50(Buffer) 4  "i1"
                               MemberName 50(Buffer) 5  "data"
                               Name 52  ""
-                              Decorate 12(i1D) DescriptorSet 0
-                              Decorate 12(i1D) Binding 0
                               Decorate 12(i1D) Coherent
-                              Decorate 19(i2D) DescriptorSet 0
-                              Decorate 19(i2D) Binding 1
+                              Decorate 12(i1D) Binding 0
+                              Decorate 12(i1D) DescriptorSet 0
                               Decorate 19(i2D) Volatile
                               Decorate 19(i2D) Coherent
-                              Decorate 28(i2DRect) DescriptorSet 0
-                              Decorate 28(i2DRect) Binding 2
+                              Decorate 19(i2D) Binding 1
+                              Decorate 19(i2D) DescriptorSet 0
                               Decorate 28(i2DRect) Restrict
-                              Decorate 35(i3D) DescriptorSet 0
-                              Decorate 35(i3D) Binding 3
+                              Decorate 28(i2DRect) Binding 2
+                              Decorate 28(i2DRect) DescriptorSet 0
                               Decorate 35(i3D) NonWritable
-                              Decorate 44(iCube) DescriptorSet 0
-                              Decorate 44(iCube) Binding 3
+                              Decorate 35(i3D) Binding 3
+                              Decorate 35(i3D) DescriptorSet 0
                               Decorate 44(iCube) NonReadable
+                              Decorate 44(iCube) Binding 3
+                              Decorate 44(iCube) DescriptorSet 0
                               MemberDecorate 49(Data) 0 Offset 0
                               MemberDecorate 49(Data) 1 Offset 8
-                              MemberDecorate 50(Buffer) 0 Coherent
+                              Decorate 50(Buffer) BufferBlock
                               MemberDecorate 50(Buffer) 0 Volatile
                               MemberDecorate 50(Buffer) 0 Coherent
                               MemberDecorate 50(Buffer) 0 Offset 0
-                              MemberDecorate 50(Buffer) 1 Coherent
                               MemberDecorate 50(Buffer) 1 Restrict
+                              MemberDecorate 50(Buffer) 1 Coherent
                               MemberDecorate 50(Buffer) 1 Offset 8
                               MemberDecorate 50(Buffer) 2 Coherent
                               MemberDecorate 50(Buffer) 2 NonWritable
@@ -65,9 +65,9 @@
                               MemberDecorate 50(Buffer) 4 Offset 48
                               MemberDecorate 50(Buffer) 5 Coherent
                               MemberDecorate 50(Buffer) 5 Offset 56
-                              Decorate 50(Buffer) BufferBlock
-                              Decorate 52 DescriptorSet 0
+                              Decorate 52 Coherent
                               Decorate 52 Binding 4
+                              Decorate 52 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.memoryScopeSemantics.comp.out b/Test/baseResults/spv.memoryScopeSemantics.comp.out
index 1078aa5..96a7f3c 100644
--- a/Test/baseResults/spv.memoryScopeSemantics.comp.out
+++ b/Test/baseResults/spv.memoryScopeSemantics.comp.out
@@ -51,42 +51,42 @@
                               MemberName 151(BufferM) 0  "x"
                               Name 153  "bufferm"
                               Name 165  "imageMS"
-                              Decorate 36(imagei) DescriptorSet 0
                               Decorate 36(imagei) Binding 1
-                              Decorate 46(imageu) DescriptorSet 0
+                              Decorate 36(imagei) DescriptorSet 0
                               Decorate 46(imageu) Binding 0
-                              MemberDecorate 66(BufferU) 0 Offset 0
+                              Decorate 46(imageu) DescriptorSet 0
                               Decorate 66(BufferU) Block
-                              Decorate 68(bufferu) DescriptorSet 0
+                              MemberDecorate 66(BufferU) 0 Offset 0
                               Decorate 68(bufferu) Binding 2
-                              MemberDecorate 78(BufferI) 0 Offset 0
+                              Decorate 68(bufferu) DescriptorSet 0
                               Decorate 78(BufferI) Block
-                              Decorate 80(bufferi) DescriptorSet 0
+                              MemberDecorate 78(BufferI) 0 Offset 0
                               Decorate 80(bufferi) Binding 3
+                              Decorate 80(bufferi) DescriptorSet 0
                               Decorate 83 ArrayStride 4
                               MemberDecorate 84(A) 0 Offset 0
-                              MemberDecorate 85(BufferJ) 0 Offset 0
                               Decorate 85(BufferJ) Block
-                              Decorate 88(bufferj) DescriptorSet 0
+                              MemberDecorate 85(BufferJ) 0 Offset 0
                               Decorate 88(bufferj) Binding 4
-                              MemberDecorate 99(BufferK) 0 Offset 0
+                              Decorate 88(bufferj) DescriptorSet 0
                               Decorate 99(BufferK) Block
-                              Decorate 101(bufferk) DescriptorSet 0
+                              MemberDecorate 99(BufferK) 0 Offset 0
                               Decorate 101(bufferk) Binding 7
-                              Decorate 111(imagej) DescriptorSet 0
+                              Decorate 101(bufferk) DescriptorSet 0
                               Decorate 111(imagej) Binding 5
-                              Decorate 123(samp) DescriptorSet 0
+                              Decorate 111(imagej) DescriptorSet 0
                               Decorate 123(samp) Binding 6
-                              MemberDecorate 144(BufferL) 0 Offset 0
+                              Decorate 123(samp) DescriptorSet 0
                               Decorate 144(BufferL) Block
-                              Decorate 146(bufferl) DescriptorSet 0
+                              MemberDecorate 144(BufferL) 0 Offset 0
                               Decorate 146(bufferl) Binding 8
-                              MemberDecorate 151(BufferM) 0 Offset 0
+                              Decorate 146(bufferl) DescriptorSet 0
                               Decorate 151(BufferM) Block
-                              Decorate 153(bufferm) DescriptorSet 0
+                              MemberDecorate 151(BufferM) 0 Offset 0
                               Decorate 153(bufferm) Binding 9
-                              Decorate 165(imageMS) DescriptorSet 0
+                              Decorate 153(bufferm) DescriptorSet 0
                               Decorate 165(imageMS) Binding 10
+                              Decorate 165(imageMS) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
diff --git a/Test/baseResults/spv.meshShaderBuiltins.mesh.out b/Test/baseResults/spv.meshShaderBuiltins.mesh.out
index f6b0f05..d130e94 100644
--- a/Test/baseResults/spv.meshShaderBuiltins.mesh.out
+++ b/Test/baseResults/spv.meshShaderBuiltins.mesh.out
@@ -47,32 +47,32 @@
                               Name 146  "gl_PrimitiveCountNV"
                               Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId
                               Decorate 17(gl_WorkGroupID) BuiltIn WorkgroupId
+                              Decorate 30(gl_MeshPerVertexNV) Block
                               MemberDecorate 30(gl_MeshPerVertexNV) 0 BuiltIn Position
                               MemberDecorate 30(gl_MeshPerVertexNV) 1 BuiltIn PointSize
                               MemberDecorate 30(gl_MeshPerVertexNV) 2 BuiltIn ClipDistance
                               MemberDecorate 30(gl_MeshPerVertexNV) 3 BuiltIn CullDistance
-                              MemberDecorate 30(gl_MeshPerVertexNV) 4 PerViewNV
                               MemberDecorate 30(gl_MeshPerVertexNV) 4 BuiltIn PositionPerViewNV
-                              MemberDecorate 30(gl_MeshPerVertexNV) 5 PerViewNV
+                              MemberDecorate 30(gl_MeshPerVertexNV) 4 PerViewNV
                               MemberDecorate 30(gl_MeshPerVertexNV) 5 BuiltIn ClipDistancePerViewNV
-                              MemberDecorate 30(gl_MeshPerVertexNV) 6 PerViewNV
+                              MemberDecorate 30(gl_MeshPerVertexNV) 5 PerViewNV
                               MemberDecorate 30(gl_MeshPerVertexNV) 6 BuiltIn CullDistancePerViewNV
-                              Decorate 30(gl_MeshPerVertexNV) Block
-                              MemberDecorate 84(gl_MeshPerPrimitiveNV) 0 PerPrimitiveNV
+                              MemberDecorate 30(gl_MeshPerVertexNV) 6 PerViewNV
+                              Decorate 84(gl_MeshPerPrimitiveNV) Block
                               MemberDecorate 84(gl_MeshPerPrimitiveNV) 0 BuiltIn PrimitiveId
-                              MemberDecorate 84(gl_MeshPerPrimitiveNV) 1 PerPrimitiveNV
+                              MemberDecorate 84(gl_MeshPerPrimitiveNV) 0 PerPrimitiveNV
                               MemberDecorate 84(gl_MeshPerPrimitiveNV) 1 BuiltIn Layer
-                              MemberDecorate 84(gl_MeshPerPrimitiveNV) 2 PerPrimitiveNV
+                              MemberDecorate 84(gl_MeshPerPrimitiveNV) 1 PerPrimitiveNV
                               MemberDecorate 84(gl_MeshPerPrimitiveNV) 2 BuiltIn ViewportIndex
-                              MemberDecorate 84(gl_MeshPerPrimitiveNV) 3 PerPrimitiveNV
+                              MemberDecorate 84(gl_MeshPerPrimitiveNV) 2 PerPrimitiveNV
                               MemberDecorate 84(gl_MeshPerPrimitiveNV) 3 BuiltIn ViewportMaskNV
+                              MemberDecorate 84(gl_MeshPerPrimitiveNV) 3 PerPrimitiveNV
+                              MemberDecorate 84(gl_MeshPerPrimitiveNV) 4 BuiltIn LayerPerViewNV
                               MemberDecorate 84(gl_MeshPerPrimitiveNV) 4 PerPrimitiveNV
                               MemberDecorate 84(gl_MeshPerPrimitiveNV) 4 PerViewNV
-                              MemberDecorate 84(gl_MeshPerPrimitiveNV) 4 BuiltIn LayerPerViewNV
+                              MemberDecorate 84(gl_MeshPerPrimitiveNV) 5 BuiltIn ViewportMaskPerViewNV
                               MemberDecorate 84(gl_MeshPerPrimitiveNV) 5 PerPrimitiveNV
                               MemberDecorate 84(gl_MeshPerPrimitiveNV) 5 PerViewNV
-                              MemberDecorate 84(gl_MeshPerPrimitiveNV) 5 BuiltIn ViewportMaskPerViewNV
-                              Decorate 84(gl_MeshPerPrimitiveNV) Block
                               Decorate 129(gl_PrimitiveIndicesNV) BuiltIn PrimitiveIndicesNV
                               Decorate 142(gl_DrawID) BuiltIn DrawIndex
                               Decorate 146(gl_PrimitiveCountNV) BuiltIn PrimitiveCountNV
diff --git a/Test/baseResults/spv.meshShaderPerViewBuiltins.mesh.out b/Test/baseResults/spv.meshShaderPerViewBuiltins.mesh.out
index 111fa2b..7195008 100644
--- a/Test/baseResults/spv.meshShaderPerViewBuiltins.mesh.out
+++ b/Test/baseResults/spv.meshShaderPerViewBuiltins.mesh.out
@@ -42,32 +42,32 @@
                               Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId
                               Decorate 20(gl_MeshViewIndicesNV) BuiltIn MeshViewIndicesNV
                               Decorate 21(gl_MeshViewCountNV) BuiltIn MeshViewCountNV
+                              Decorate 36(gl_MeshPerVertexNV) Block
                               MemberDecorate 36(gl_MeshPerVertexNV) 0 BuiltIn Position
                               MemberDecorate 36(gl_MeshPerVertexNV) 1 BuiltIn PointSize
                               MemberDecorate 36(gl_MeshPerVertexNV) 2 BuiltIn ClipDistance
                               MemberDecorate 36(gl_MeshPerVertexNV) 3 BuiltIn CullDistance
-                              MemberDecorate 36(gl_MeshPerVertexNV) 4 PerViewNV
                               MemberDecorate 36(gl_MeshPerVertexNV) 4 BuiltIn PositionPerViewNV
-                              MemberDecorate 36(gl_MeshPerVertexNV) 5 PerViewNV
+                              MemberDecorate 36(gl_MeshPerVertexNV) 4 PerViewNV
                               MemberDecorate 36(gl_MeshPerVertexNV) 5 BuiltIn ClipDistancePerViewNV
-                              MemberDecorate 36(gl_MeshPerVertexNV) 6 PerViewNV
+                              MemberDecorate 36(gl_MeshPerVertexNV) 5 PerViewNV
                               MemberDecorate 36(gl_MeshPerVertexNV) 6 BuiltIn CullDistancePerViewNV
-                              Decorate 36(gl_MeshPerVertexNV) Block
-                              MemberDecorate 68(gl_MeshPerPrimitiveNV) 0 PerPrimitiveNV
+                              MemberDecorate 36(gl_MeshPerVertexNV) 6 PerViewNV
+                              Decorate 68(gl_MeshPerPrimitiveNV) Block
                               MemberDecorate 68(gl_MeshPerPrimitiveNV) 0 BuiltIn PrimitiveId
-                              MemberDecorate 68(gl_MeshPerPrimitiveNV) 1 PerPrimitiveNV
+                              MemberDecorate 68(gl_MeshPerPrimitiveNV) 0 PerPrimitiveNV
                               MemberDecorate 68(gl_MeshPerPrimitiveNV) 1 BuiltIn Layer
-                              MemberDecorate 68(gl_MeshPerPrimitiveNV) 2 PerPrimitiveNV
+                              MemberDecorate 68(gl_MeshPerPrimitiveNV) 1 PerPrimitiveNV
                               MemberDecorate 68(gl_MeshPerPrimitiveNV) 2 BuiltIn ViewportIndex
-                              MemberDecorate 68(gl_MeshPerPrimitiveNV) 3 PerPrimitiveNV
+                              MemberDecorate 68(gl_MeshPerPrimitiveNV) 2 PerPrimitiveNV
                               MemberDecorate 68(gl_MeshPerPrimitiveNV) 3 BuiltIn ViewportMaskNV
+                              MemberDecorate 68(gl_MeshPerPrimitiveNV) 3 PerPrimitiveNV
+                              MemberDecorate 68(gl_MeshPerPrimitiveNV) 4 BuiltIn LayerPerViewNV
                               MemberDecorate 68(gl_MeshPerPrimitiveNV) 4 PerPrimitiveNV
                               MemberDecorate 68(gl_MeshPerPrimitiveNV) 4 PerViewNV
-                              MemberDecorate 68(gl_MeshPerPrimitiveNV) 4 BuiltIn LayerPerViewNV
+                              MemberDecorate 68(gl_MeshPerPrimitiveNV) 5 BuiltIn ViewportMaskPerViewNV
                               MemberDecorate 68(gl_MeshPerPrimitiveNV) 5 PerPrimitiveNV
                               MemberDecorate 68(gl_MeshPerPrimitiveNV) 5 PerViewNV
-                              MemberDecorate 68(gl_MeshPerPrimitiveNV) 5 BuiltIn ViewportMaskPerViewNV
-                              Decorate 68(gl_MeshPerPrimitiveNV) Block
                               Decorate 125 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.meshShaderPerViewUserDefined.mesh.out b/Test/baseResults/spv.meshShaderPerViewUserDefined.mesh.out
index cd6a95b..d4ae150 100644
--- a/Test/baseResults/spv.meshShaderPerViewUserDefined.mesh.out
+++ b/Test/baseResults/spv.meshShaderPerViewUserDefined.mesh.out
@@ -43,41 +43,41 @@
                               Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId
                               Decorate 20(gl_MeshViewIndicesNV) BuiltIn MeshViewIndicesNV
                               Decorate 21(gl_MeshViewCountNV) BuiltIn MeshViewCountNV
+                              Decorate 31(block) Block
                               MemberDecorate 31(block) 0 PerPrimitiveNV
                               MemberDecorate 31(block) 0 PerViewNV
                               MemberDecorate 31(block) 1 PerPrimitiveNV
                               MemberDecorate 31(block) 2 PerViewNV
-                              Decorate 31(block) Block
                               Decorate 35(b) Location 0
+                              Decorate 64(perviewBlock) Block
                               MemberDecorate 64(perviewBlock) 0 PerPrimitiveNV
                               MemberDecorate 64(perviewBlock) 0 PerViewNV
                               MemberDecorate 64(perviewBlock) 1 PerPrimitiveNV
                               MemberDecorate 64(perviewBlock) 1 PerViewNV
                               MemberDecorate 64(perviewBlock) 2 PerViewNV
                               MemberDecorate 64(perviewBlock) 3 PerViewNV
-                              Decorate 64(perviewBlock) Block
                               Decorate 67(b2) Location 10
                               Decorate 89 BuiltIn WorkgroupSize
-                              Decorate 92(nonBlk1) PerViewNV
                               Decorate 92(nonBlk1) Location 18
+                              Decorate 92(nonBlk1) PerViewNV
+                              Decorate 95(nonBlk2) Location 19
                               Decorate 95(nonBlk2) PerPrimitiveNV
                               Decorate 95(nonBlk2) PerViewNV
-                              Decorate 95(nonBlk2) Location 19
-                              Decorate 96(nonBlk3) PerViewNV
                               Decorate 96(nonBlk3) Location 20
+                              Decorate 96(nonBlk3) PerViewNV
+                              Decorate 97(nonBlk4) Location 21
                               Decorate 97(nonBlk4) PerPrimitiveNV
                               Decorate 97(nonBlk4) PerViewNV
-                              Decorate 97(nonBlk4) Location 21
-                              Decorate 102(nonBlkArr1) PerViewNV
                               Decorate 102(nonBlkArr1) Location 22
+                              Decorate 102(nonBlkArr1) PerViewNV
+                              Decorate 105(nonBlkArr2) Location 24
                               Decorate 105(nonBlkArr2) PerPrimitiveNV
                               Decorate 105(nonBlkArr2) PerViewNV
-                              Decorate 105(nonBlkArr2) Location 24
-                              Decorate 106(nonBlkArr3) PerViewNV
                               Decorate 106(nonBlkArr3) Location 26
+                              Decorate 106(nonBlkArr3) PerViewNV
+                              Decorate 107(nonBlkArr4) Location 28
                               Decorate 107(nonBlkArr4) PerPrimitiveNV
                               Decorate 107(nonBlkArr4) PerViewNV
-                              Decorate 107(nonBlkArr4) Location 28
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
diff --git a/Test/baseResults/spv.meshShaderRedeclBuiltins.mesh.out b/Test/baseResults/spv.meshShaderRedeclBuiltins.mesh.out
index 60422d6..b75cfdd 100644
--- a/Test/baseResults/spv.meshShaderRedeclBuiltins.mesh.out
+++ b/Test/baseResults/spv.meshShaderRedeclBuiltins.mesh.out
@@ -39,20 +39,20 @@
                               Name 127  "gl_PrimitiveCountNV"
                               Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId
                               Decorate 17(gl_WorkGroupID) BuiltIn WorkgroupId
+                              Decorate 24(gl_MeshPerVertexNV) Block
                               MemberDecorate 24(gl_MeshPerVertexNV) 0 BuiltIn Position
                               MemberDecorate 24(gl_MeshPerVertexNV) 1 BuiltIn PointSize
                               MemberDecorate 24(gl_MeshPerVertexNV) 2 BuiltIn ClipDistance
                               MemberDecorate 24(gl_MeshPerVertexNV) 3 BuiltIn CullDistance
-                              Decorate 24(gl_MeshPerVertexNV) Block
-                              MemberDecorate 77(gl_MeshPerPrimitiveNV) 0 PerPrimitiveNV
-                              MemberDecorate 77(gl_MeshPerPrimitiveNV) 0 BuiltIn PrimitiveId
-                              MemberDecorate 77(gl_MeshPerPrimitiveNV) 1 PerPrimitiveNV
-                              MemberDecorate 77(gl_MeshPerPrimitiveNV) 1 BuiltIn Layer
-                              MemberDecorate 77(gl_MeshPerPrimitiveNV) 2 PerPrimitiveNV
-                              MemberDecorate 77(gl_MeshPerPrimitiveNV) 2 BuiltIn ViewportIndex
-                              MemberDecorate 77(gl_MeshPerPrimitiveNV) 3 PerPrimitiveNV
-                              MemberDecorate 77(gl_MeshPerPrimitiveNV) 3 BuiltIn ViewportMaskNV
                               Decorate 77(gl_MeshPerPrimitiveNV) Block
+                              MemberDecorate 77(gl_MeshPerPrimitiveNV) 0 BuiltIn PrimitiveId
+                              MemberDecorate 77(gl_MeshPerPrimitiveNV) 0 PerPrimitiveNV
+                              MemberDecorate 77(gl_MeshPerPrimitiveNV) 1 BuiltIn Layer
+                              MemberDecorate 77(gl_MeshPerPrimitiveNV) 1 PerPrimitiveNV
+                              MemberDecorate 77(gl_MeshPerPrimitiveNV) 2 BuiltIn ViewportIndex
+                              MemberDecorate 77(gl_MeshPerPrimitiveNV) 2 PerPrimitiveNV
+                              MemberDecorate 77(gl_MeshPerPrimitiveNV) 3 BuiltIn ViewportMaskNV
+                              MemberDecorate 77(gl_MeshPerPrimitiveNV) 3 PerPrimitiveNV
                               Decorate 122(gl_PrimitiveIndicesNV) BuiltIn PrimitiveIndicesNV
                               Decorate 127(gl_PrimitiveCountNV) BuiltIn PrimitiveCountNV
                               Decorate 128 BuiltIn WorkgroupSize
diff --git a/Test/baseResults/spv.meshShaderRedeclPerViewBuiltins.mesh.out b/Test/baseResults/spv.meshShaderRedeclPerViewBuiltins.mesh.out
index f6c2038..63e7fc6 100644
--- a/Test/baseResults/spv.meshShaderRedeclPerViewBuiltins.mesh.out
+++ b/Test/baseResults/spv.meshShaderRedeclPerViewBuiltins.mesh.out
@@ -34,20 +34,20 @@
                               Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId
                               Decorate 20(gl_MeshViewIndicesNV) BuiltIn MeshViewIndicesNV
                               Decorate 21(gl_MeshViewCountNV) BuiltIn MeshViewCountNV
-                              MemberDecorate 31(gl_MeshPerVertexNV) 0 PerViewNV
-                              MemberDecorate 31(gl_MeshPerVertexNV) 0 BuiltIn PositionPerViewNV
-                              MemberDecorate 31(gl_MeshPerVertexNV) 1 PerViewNV
-                              MemberDecorate 31(gl_MeshPerVertexNV) 1 BuiltIn ClipDistancePerViewNV
-                              MemberDecorate 31(gl_MeshPerVertexNV) 2 PerViewNV
-                              MemberDecorate 31(gl_MeshPerVertexNV) 2 BuiltIn CullDistancePerViewNV
                               Decorate 31(gl_MeshPerVertexNV) Block
+                              MemberDecorate 31(gl_MeshPerVertexNV) 0 BuiltIn PositionPerViewNV
+                              MemberDecorate 31(gl_MeshPerVertexNV) 0 PerViewNV
+                              MemberDecorate 31(gl_MeshPerVertexNV) 1 BuiltIn ClipDistancePerViewNV
+                              MemberDecorate 31(gl_MeshPerVertexNV) 1 PerViewNV
+                              MemberDecorate 31(gl_MeshPerVertexNV) 2 BuiltIn CullDistancePerViewNV
+                              MemberDecorate 31(gl_MeshPerVertexNV) 2 PerViewNV
+                              Decorate 63(gl_MeshPerPrimitiveNV) Block
+                              MemberDecorate 63(gl_MeshPerPrimitiveNV) 0 BuiltIn LayerPerViewNV
                               MemberDecorate 63(gl_MeshPerPrimitiveNV) 0 PerPrimitiveNV
                               MemberDecorate 63(gl_MeshPerPrimitiveNV) 0 PerViewNV
-                              MemberDecorate 63(gl_MeshPerPrimitiveNV) 0 BuiltIn LayerPerViewNV
+                              MemberDecorate 63(gl_MeshPerPrimitiveNV) 1 BuiltIn ViewportMaskPerViewNV
                               MemberDecorate 63(gl_MeshPerPrimitiveNV) 1 PerPrimitiveNV
                               MemberDecorate 63(gl_MeshPerPrimitiveNV) 1 PerViewNV
-                              MemberDecorate 63(gl_MeshPerPrimitiveNV) 1 BuiltIn ViewportMaskPerViewNV
-                              Decorate 63(gl_MeshPerPrimitiveNV) Block
                               Decorate 119 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.meshShaderSharedMem.mesh.out b/Test/baseResults/spv.meshShaderSharedMem.mesh.out
index 9ad333c..2e15ffb 100644
--- a/Test/baseResults/spv.meshShaderSharedMem.mesh.out
+++ b/Test/baseResults/spv.meshShaderSharedMem.mesh.out
@@ -28,13 +28,13 @@
                               Name 55  "uni_image"
                               Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId
                               Decorate 17(gl_WorkGroupID) BuiltIn WorkgroupId
-                              MemberDecorate 37(block0) 0 Offset 0
                               Decorate 37(block0) Block
-                              Decorate 39 DescriptorSet 0
+                              MemberDecorate 37(block0) 0 Offset 0
                               Decorate 39 Binding 1
-                              Decorate 55(uni_image) DescriptorSet 0
-                              Decorate 55(uni_image) Binding 0
+                              Decorate 39 DescriptorSet 0
                               Decorate 55(uni_image) NonReadable
+                              Decorate 55(uni_image) Binding 0
+                              Decorate 55(uni_image) DescriptorSet 0
                               Decorate 76 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.meshShaderTaskMem.mesh.out b/Test/baseResults/spv.meshShaderTaskMem.mesh.out
index fcbec3d..adf4cfb 100644
--- a/Test/baseResults/spv.meshShaderTaskMem.mesh.out
+++ b/Test/baseResults/spv.meshShaderTaskMem.mesh.out
@@ -33,18 +33,18 @@
                               Decorate 18(outBlock) Block
                               Decorate 22(myblk) Location 0
                               Decorate 27 ArrayStride 4
-                              MemberDecorate 28(taskBlock) 0 PerTaskNV
-                              MemberDecorate 28(taskBlock) 0 Offset 0
-                              MemberDecorate 28(taskBlock) 1 PerTaskNV
-                              MemberDecorate 28(taskBlock) 1 Offset 16
                               Decorate 28(taskBlock) Block
+                              MemberDecorate 28(taskBlock) 0 Offset 0
+                              MemberDecorate 28(taskBlock) 0 PerTaskNV
+                              MemberDecorate 28(taskBlock) 1 Offset 16
+                              MemberDecorate 28(taskBlock) 1 PerTaskNV
                               Decorate 30(mytask) Location 0
                               Decorate 35 ArrayStride 4
+                              Decorate 36(bufferBlock) BufferBlock
                               MemberDecorate 36(bufferBlock) 0 Offset 0
                               MemberDecorate 36(bufferBlock) 1 Offset 16
-                              Decorate 36(bufferBlock) BufferBlock
-                              Decorate 38(mybuf) DescriptorSet 0
                               Decorate 38(mybuf) Binding 0
+                              Decorate 38(mybuf) DescriptorSet 0
                               Decorate 57 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.meshShaderUserDefined.mesh.out b/Test/baseResults/spv.meshShaderUserDefined.mesh.out
index 0e5fd05..d4d8735 100644
--- a/Test/baseResults/spv.meshShaderUserDefined.mesh.out
+++ b/Test/baseResults/spv.meshShaderUserDefined.mesh.out
@@ -34,13 +34,13 @@
                               Name 104  "blk2"
                               Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId
                               Decorate 17(gl_WorkGroupID) BuiltIn WorkgroupId
+                              Decorate 30(myblock) Block
                               MemberDecorate 30(myblock) 0 PerPrimitiveNV
                               MemberDecorate 30(myblock) 1 PerPrimitiveNV
                               MemberDecorate 30(myblock) 2 PerPrimitiveNV
                               MemberDecorate 30(myblock) 3 PerPrimitiveNV
                               MemberDecorate 30(myblock) 4 PerPrimitiveNV
                               MemberDecorate 30(myblock) 5 PerPrimitiveNV
-                              Decorate 30(myblock) Block
                               Decorate 34(blk) Location 0
                               Decorate 100(myblock2) Block
                               Decorate 104(blk2) Location 20
diff --git a/Test/baseResults/spv.meshTaskShader.task.out b/Test/baseResults/spv.meshTaskShader.task.out
index 9442f97..dab6762 100644
--- a/Test/baseResults/spv.meshTaskShader.task.out
+++ b/Test/baseResults/spv.meshTaskShader.task.out
@@ -36,21 +36,21 @@
                               Decorate 17(gl_WorkGroupID) BuiltIn WorkgroupId
                               Decorate 24(gl_MeshViewIndicesNV) BuiltIn MeshViewIndicesNV
                               Decorate 25(gl_MeshViewCountNV) BuiltIn MeshViewCountNV
-                              MemberDecorate 47(block0) 0 Offset 0
                               Decorate 47(block0) Block
-                              Decorate 49 DescriptorSet 0
+                              MemberDecorate 47(block0) 0 Offset 0
                               Decorate 49 Binding 1
-                              Decorate 65(uni_image) DescriptorSet 0
-                              Decorate 65(uni_image) Binding 0
+                              Decorate 49 DescriptorSet 0
                               Decorate 65(uni_image) NonReadable
+                              Decorate 65(uni_image) Binding 0
+                              Decorate 65(uni_image) DescriptorSet 0
                               Decorate 87 ArrayStride 8
-                              MemberDecorate 88(Task) 0 PerTaskNV
-                              MemberDecorate 88(Task) 0 Offset 0
-                              MemberDecorate 88(Task) 1 PerTaskNV
-                              MemberDecorate 88(Task) 1 Offset 8
-                              MemberDecorate 88(Task) 2 PerTaskNV
-                              MemberDecorate 88(Task) 2 Offset 32
                               Decorate 88(Task) Block
+                              MemberDecorate 88(Task) 0 Offset 0
+                              MemberDecorate 88(Task) 0 PerTaskNV
+                              MemberDecorate 88(Task) 1 Offset 8
+                              MemberDecorate 88(Task) 1 PerTaskNV
+                              MemberDecorate 88(Task) 2 Offset 32
+                              MemberDecorate 88(Task) 2 PerTaskNV
                               Decorate 90(mytask) Location 0
                               Decorate 113(gl_TaskCountNV) BuiltIn TaskCountNV
                               Decorate 115 BuiltIn WorkgroupSize
diff --git a/Test/baseResults/spv.multiStruct.comp.out b/Test/baseResults/spv.multiStruct.comp.out
index 0ff605c..af9db96 100644
--- a/Test/baseResults/spv.multiStruct.comp.out
+++ b/Test/baseResults/spv.multiStruct.comp.out
@@ -48,35 +48,35 @@
                               Decorate 15 ArrayStride 8
                               MemberDecorate 16(MyStruct) 0 Offset 0
                               MemberDecorate 16(MyStruct) 1 Offset 16
-                              MemberDecorate 17(SSBO0) 0 Offset 0
                               Decorate 17(SSBO0) BufferBlock
-                              Decorate 19(inBuf) DescriptorSet 0
+                              MemberDecorate 17(SSBO0) 0 Offset 0
                               Decorate 19(inBuf) Binding 0
-                              MemberDecorate 39(SSBO1) 0 Offset 0
+                              Decorate 19(inBuf) DescriptorSet 0
                               Decorate 39(SSBO1) BufferBlock
-                              Decorate 41(outBuf) DescriptorSet 0
+                              MemberDecorate 39(SSBO1) 0 Offset 0
                               Decorate 41(outBuf) Binding 1
+                              Decorate 41(outBuf) DescriptorSet 0
                               Decorate 57 ArrayStride 16
                               MemberDecorate 58(MyStruct) 0 Offset 0
                               MemberDecorate 58(MyStruct) 1 Offset 32
-                              MemberDecorate 59(UBO) 0 Offset 0
                               Decorate 59(UBO) Block
-                              Decorate 61(uBuf) DescriptorSet 0
+                              MemberDecorate 59(UBO) 0 Offset 0
                               Decorate 61(uBuf) Binding 2
+                              Decorate 61(uBuf) DescriptorSet 0
                               Decorate 89 ArrayStride 48
                               MemberDecorate 90(Nested) 0 Offset 0
                               MemberDecorate 90(Nested) 1 Offset 16
-                              MemberDecorate 91(UBON) 0 Offset 0
                               Decorate 91(UBON) Block
-                              Decorate 93(uBufN) DescriptorSet 0
+                              MemberDecorate 91(UBON) 0 Offset 0
                               Decorate 93(uBufN) Binding 2
+                              Decorate 93(uBufN) DescriptorSet 0
                               Decorate 125 ArrayStride 24
                               MemberDecorate 126(Nested) 0 Offset 0
                               MemberDecorate 126(Nested) 1 Offset 8
-                              MemberDecorate 127(SSBO1N) 0 Offset 0
                               Decorate 127(SSBO1N) BufferBlock
-                              Decorate 129(outBufN) DescriptorSet 0
+                              MemberDecorate 127(SSBO1N) 0 Offset 0
                               Decorate 129(outBufN) Binding 1
+                              Decorate 129(outBufN) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.multiStructFuncall.frag.out b/Test/baseResults/spv.multiStructFuncall.frag.out
index 50f4b78..55544dc 100644
--- a/Test/baseResults/spv.multiStructFuncall.frag.out
+++ b/Test/baseResults/spv.multiStructFuncall.frag.out
@@ -30,12 +30,12 @@
                               Name 50  "param"
                               Name 61  "param"
                               MemberDecorate 22(S) 0 ColMajor
-                              MemberDecorate 22(S) 0 Offset 0
                               MemberDecorate 22(S) 0 MatrixStride 16
-                              MemberDecorate 23(blockName) 0 Offset 0
+                              MemberDecorate 22(S) 0 Offset 0
                               Decorate 23(blockName) BufferBlock
-                              Decorate 25 DescriptorSet 0
+                              MemberDecorate 23(blockName) 0 Offset 0
                               Decorate 25 Binding 0
+                              Decorate 25 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.multiView.frag.out b/Test/baseResults/spv.multiView.frag.out
index c6afe8f..dd433e8 100644
--- a/Test/baseResults/spv.multiView.frag.out
+++ b/Test/baseResults/spv.multiView.frag.out
@@ -15,8 +15,8 @@
                               Name 9  "color"
                               Name 12  "gl_ViewIndex"
                               Decorate 9(color) Location 0
-                              Decorate 12(gl_ViewIndex) Flat
                               Decorate 12(gl_ViewIndex) BuiltIn ViewIndex
+                              Decorate 12(gl_ViewIndex) Flat
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.multiple.var.same.const.frag.out b/Test/baseResults/spv.multiple.var.same.const.frag.out
new file mode 100644
index 0000000..833c6ac
--- /dev/null
+++ b/Test/baseResults/spv.multiple.var.same.const.frag.out
@@ -0,0 +1,21 @@
+spv.multiple.var.same.const.frag
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 8
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source ESSL 320
+                              Name 4  "main"
+                              Decorate 7 RelaxedPrecision
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:    6(float) Constant 897988541
+         4(main):           2 Function None 3
+               5:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out b/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out
index 9527951..fa71809 100644
--- a/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out
+++ b/Test/baseResults/spv.multiviewPerViewAttributes.tesc.out
@@ -25,16 +25,16 @@
                               MemberName 27(gl_PerVertex) 3  "gl_CullDistance"
                               MemberName 27(gl_PerVertex) 4  "gl_PositionPerViewNV"
                               Name 31  "gl_in"
+                              Decorate 13(gl_PerVertex) Block
                               MemberDecorate 13(gl_PerVertex) 0 BuiltIn PositionPerViewNV
                               MemberDecorate 13(gl_PerVertex) 1 BuiltIn ViewportMaskPerViewNV
-                              Decorate 13(gl_PerVertex) Block
                               Decorate 19(gl_InvocationID) BuiltIn InvocationId
+                              Decorate 27(gl_PerVertex) Block
                               MemberDecorate 27(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 27(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 27(gl_PerVertex) 2 BuiltIn ClipDistance
                               MemberDecorate 27(gl_PerVertex) 3 BuiltIn CullDistance
                               MemberDecorate 27(gl_PerVertex) 4 BuiltIn PositionPerViewNV
-                              Decorate 27(gl_PerVertex) Block
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.multiviewPerViewAttributes.vert.out b/Test/baseResults/spv.multiviewPerViewAttributes.vert.out
index 8268e5d..c456f02 100644
--- a/Test/baseResults/spv.multiviewPerViewAttributes.vert.out
+++ b/Test/baseResults/spv.multiviewPerViewAttributes.vert.out
@@ -22,11 +22,11 @@
                               Name 24  ""
                               Decorate 11(gl_ViewportMaskPerViewNV) BuiltIn ViewportMaskPerViewNV
                               Decorate 20(gl_PositionPerViewNV) BuiltIn PositionPerViewNV
+                              Decorate 22(gl_PerVertex) Block
                               MemberDecorate 22(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 22(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 22(gl_PerVertex) 2 BuiltIn ClipDistance
                               MemberDecorate 22(gl_PerVertex) 3 BuiltIn CullDistance
-                              Decorate 22(gl_PerVertex) Block
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
diff --git a/Test/baseResults/spv.newTexture.frag.out b/Test/baseResults/spv.newTexture.frag.out
index 723fe21..2bffe8a 100644
--- a/Test/baseResults/spv.newTexture.frag.out
+++ b/Test/baseResults/spv.newTexture.frag.out
@@ -2,7 +2,7 @@
 Validation failed
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 284
+// Id's are bound by 278
 
                               Capability Shader
                               Capability SampledRect
@@ -10,7 +10,7 @@
                               Capability ImageQuery
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 17 26 29 55 81 84 92 253 283
+                              EntryPoint Fragment 4  "main" 17 26 29 55 81 84 92 247 277
                               ExecutionMode 4 OriginUpperLeft
                               Source GLSL 430
                               Name 4  "main"
@@ -29,70 +29,70 @@
                               Name 92  "ic2D"
                               Name 102  "sr"
                               Name 128  "sCube"
-                              Name 139  "s2DArrayShadow"
-                              Name 167  "iv"
-                              Name 171  "is2D"
-                              Name 208  "is3D"
-                              Name 220  "isCube"
-                              Name 232  "is2DArray"
-                              Name 243  "iv2"
-                              Name 247  "sCubeShadow"
-                              Name 253  "FragData"
-                              Name 265  "is2Dms"
-                              Name 269  "us2D"
-                              Name 273  "us3D"
-                              Name 277  "usCube"
-                              Name 281  "us2DArray"
-                              Name 283  "ic4D"
-                              Decorate 13(s2D) DescriptorSet 0
+                              Name 137  "s2DArrayShadow"
+                              Name 162  "iv"
+                              Name 166  "is2D"
+                              Name 202  "is3D"
+                              Name 214  "isCube"
+                              Name 226  "is2DArray"
+                              Name 237  "iv2"
+                              Name 241  "sCubeShadow"
+                              Name 247  "FragData"
+                              Name 259  "is2Dms"
+                              Name 263  "us2D"
+                              Name 267  "us3D"
+                              Name 271  "usCube"
+                              Name 275  "us2DArray"
+                              Name 277  "ic4D"
                               Decorate 13(s2D) Binding 0
+                              Decorate 13(s2D) DescriptorSet 0
                               Decorate 17(c2D) Location 1
-                              Decorate 23(sCubeArrayShadow) DescriptorSet 0
                               Decorate 23(sCubeArrayShadow) Binding 5
+                              Decorate 23(sCubeArrayShadow) DescriptorSet 0
                               Decorate 26(c4D) Location 3
                               Decorate 29(c1D) Location 0
-                              Decorate 42(s3D) DescriptorSet 0
                               Decorate 42(s3D) Binding 2
-                              Decorate 51(s2DArray) DescriptorSet 0
+                              Decorate 42(s3D) DescriptorSet 0
                               Decorate 51(s2DArray) Binding 7
+                              Decorate 51(s2DArray) DescriptorSet 0
                               Decorate 55(c3D) Location 2
-                              Decorate 64(s2DShadow) DescriptorSet 0
                               Decorate 64(s2DShadow) Binding 6
+                              Decorate 64(s2DShadow) DescriptorSet 0
                               Decorate 81(ic3D) Flat
                               Decorate 81(ic3D) Location 6
                               Decorate 84(ic1D) Flat
                               Decorate 84(ic1D) Location 4
                               Decorate 92(ic2D) Flat
                               Decorate 92(ic2D) Location 5
-                              Decorate 102(sr) DescriptorSet 0
                               Decorate 102(sr) Binding 1
-                              Decorate 128(sCube) DescriptorSet 0
+                              Decorate 102(sr) DescriptorSet 0
                               Decorate 128(sCube) Binding 3
-                              Decorate 139(s2DArrayShadow) DescriptorSet 0
-                              Decorate 139(s2DArrayShadow) Binding 8
-                              Decorate 171(is2D) DescriptorSet 0
-                              Decorate 171(is2D) Binding 9
-                              Decorate 208(is3D) DescriptorSet 0
-                              Decorate 208(is3D) Binding 10
-                              Decorate 220(isCube) DescriptorSet 0
-                              Decorate 220(isCube) Binding 11
-                              Decorate 232(is2DArray) DescriptorSet 0
-                              Decorate 232(is2DArray) Binding 12
-                              Decorate 247(sCubeShadow) DescriptorSet 0
-                              Decorate 247(sCubeShadow) Binding 4
-                              Decorate 253(FragData) Location 0
-                              Decorate 265(is2Dms) DescriptorSet 0
-                              Decorate 265(is2Dms) Binding 0
-                              Decorate 269(us2D) DescriptorSet 0
-                              Decorate 269(us2D) Binding 0
-                              Decorate 273(us3D) DescriptorSet 0
-                              Decorate 273(us3D) Binding 0
-                              Decorate 277(usCube) DescriptorSet 0
-                              Decorate 277(usCube) Binding 0
-                              Decorate 281(us2DArray) DescriptorSet 0
-                              Decorate 281(us2DArray) Binding 0
-                              Decorate 283(ic4D) Flat
-                              Decorate 283(ic4D) Location 7
+                              Decorate 128(sCube) DescriptorSet 0
+                              Decorate 137(s2DArrayShadow) Binding 8
+                              Decorate 137(s2DArrayShadow) DescriptorSet 0
+                              Decorate 166(is2D) Binding 9
+                              Decorate 166(is2D) DescriptorSet 0
+                              Decorate 202(is3D) Binding 10
+                              Decorate 202(is3D) DescriptorSet 0
+                              Decorate 214(isCube) Binding 11
+                              Decorate 214(isCube) DescriptorSet 0
+                              Decorate 226(is2DArray) Binding 12
+                              Decorate 226(is2DArray) DescriptorSet 0
+                              Decorate 241(sCubeShadow) Binding 4
+                              Decorate 241(sCubeShadow) DescriptorSet 0
+                              Decorate 247(FragData) Location 0
+                              Decorate 259(is2Dms) Binding 0
+                              Decorate 259(is2Dms) DescriptorSet 0
+                              Decorate 263(us2D) Binding 0
+                              Decorate 263(us2D) DescriptorSet 0
+                              Decorate 267(us3D) Binding 0
+                              Decorate 267(us3D) DescriptorSet 0
+                              Decorate 271(usCube) Binding 0
+                              Decorate 271(usCube) DescriptorSet 0
+                              Decorate 275(us2DArray) Binding 0
+                              Decorate 275(us2DArray) DescriptorSet 0
+                              Decorate 277(ic4D) Flat
+                              Decorate 277(ic4D) Location 7
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -153,66 +153,66 @@
              126:             TypeSampledImage 125
              127:             TypePointer UniformConstant 126
       128(sCube):    127(ptr) Variable UniformConstant
-             136:             TypeImage 6(float) 2D depth array sampled format:Unknown
-             137:             TypeSampledImage 136
-             138:             TypePointer UniformConstant 137
-139(s2DArrayShadow):    138(ptr) Variable UniformConstant
-             146:     32(int) Constant 0
-             165:             TypeVector 67(int) 4
-             166:             TypePointer Function 165(ivec4)
-             168:             TypeImage 67(int) 2D sampled format:Unknown
-             169:             TypeSampledImage 168
-             170:             TypePointer UniformConstant 169
-       171(is2D):    170(ptr) Variable UniformConstant
-             205:             TypeImage 67(int) 3D sampled format:Unknown
-             206:             TypeSampledImage 205
-             207:             TypePointer UniformConstant 206
-       208(is3D):    207(ptr) Variable UniformConstant
-             211:    6(float) Constant 1082549862
-             217:             TypeImage 67(int) Cube sampled format:Unknown
-             218:             TypeSampledImage 217
-             219:             TypePointer UniformConstant 218
-     220(isCube):    219(ptr) Variable UniformConstant
-             229:             TypeImage 67(int) 2D array sampled format:Unknown
-             230:             TypeSampledImage 229
-             231:             TypePointer UniformConstant 230
-  232(is2DArray):    231(ptr) Variable UniformConstant
-             242:             TypePointer Function 68(ivec2)
-             244:             TypeImage 6(float) Cube depth sampled format:Unknown
-             245:             TypeSampledImage 244
-             246:             TypePointer UniformConstant 245
-247(sCubeShadow):    246(ptr) Variable UniformConstant
-             249:     67(int) Constant 2
-             252:             TypePointer Output 7(fvec4)
-   253(FragData):    252(ptr) Variable Output
-             257:    6(float) Constant 0
-             262:             TypeImage 67(int) 2D multi-sampled sampled format:Unknown
-             263:             TypeSampledImage 262
-             264:             TypePointer UniformConstant 263
-     265(is2Dms):    264(ptr) Variable UniformConstant
-             266:             TypeImage 32(int) 2D sampled format:Unknown
-             267:             TypeSampledImage 266
-             268:             TypePointer UniformConstant 267
-       269(us2D):    268(ptr) Variable UniformConstant
-             270:             TypeImage 32(int) 3D sampled format:Unknown
-             271:             TypeSampledImage 270
-             272:             TypePointer UniformConstant 271
-       273(us3D):    272(ptr) Variable UniformConstant
-             274:             TypeImage 32(int) Cube sampled format:Unknown
-             275:             TypeSampledImage 274
-             276:             TypePointer UniformConstant 275
-     277(usCube):    276(ptr) Variable UniformConstant
-             278:             TypeImage 32(int) 2D array sampled format:Unknown
-             279:             TypeSampledImage 278
-             280:             TypePointer UniformConstant 279
-  281(us2DArray):    280(ptr) Variable UniformConstant
-             282:             TypePointer Input 165(ivec4)
-       283(ic4D):    282(ptr) Variable Input
+             134:             TypeImage 6(float) 2D depth array sampled format:Unknown
+             135:             TypeSampledImage 134
+             136:             TypePointer UniformConstant 135
+137(s2DArrayShadow):    136(ptr) Variable UniformConstant
+             143:     32(int) Constant 0
+             160:             TypeVector 67(int) 4
+             161:             TypePointer Function 160(ivec4)
+             163:             TypeImage 67(int) 2D sampled format:Unknown
+             164:             TypeSampledImage 163
+             165:             TypePointer UniformConstant 164
+       166(is2D):    165(ptr) Variable UniformConstant
+             199:             TypeImage 67(int) 3D sampled format:Unknown
+             200:             TypeSampledImage 199
+             201:             TypePointer UniformConstant 200
+       202(is3D):    201(ptr) Variable UniformConstant
+             205:    6(float) Constant 1082549862
+             211:             TypeImage 67(int) Cube sampled format:Unknown
+             212:             TypeSampledImage 211
+             213:             TypePointer UniformConstant 212
+     214(isCube):    213(ptr) Variable UniformConstant
+             223:             TypeImage 67(int) 2D array sampled format:Unknown
+             224:             TypeSampledImage 223
+             225:             TypePointer UniformConstant 224
+  226(is2DArray):    225(ptr) Variable UniformConstant
+             236:             TypePointer Function 68(ivec2)
+             238:             TypeImage 6(float) Cube depth sampled format:Unknown
+             239:             TypeSampledImage 238
+             240:             TypePointer UniformConstant 239
+241(sCubeShadow):    240(ptr) Variable UniformConstant
+             243:     67(int) Constant 2
+             246:             TypePointer Output 7(fvec4)
+   247(FragData):    246(ptr) Variable Output
+             251:    6(float) Constant 0
+             256:             TypeImage 67(int) 2D multi-sampled sampled format:Unknown
+             257:             TypeSampledImage 256
+             258:             TypePointer UniformConstant 257
+     259(is2Dms):    258(ptr) Variable UniformConstant
+             260:             TypeImage 32(int) 2D sampled format:Unknown
+             261:             TypeSampledImage 260
+             262:             TypePointer UniformConstant 261
+       263(us2D):    262(ptr) Variable UniformConstant
+             264:             TypeImage 32(int) 3D sampled format:Unknown
+             265:             TypeSampledImage 264
+             266:             TypePointer UniformConstant 265
+       267(us3D):    266(ptr) Variable UniformConstant
+             268:             TypeImage 32(int) Cube sampled format:Unknown
+             269:             TypeSampledImage 268
+             270:             TypePointer UniformConstant 269
+     271(usCube):    270(ptr) Variable UniformConstant
+             272:             TypeImage 32(int) 2D array sampled format:Unknown
+             273:             TypeSampledImage 272
+             274:             TypePointer UniformConstant 273
+  275(us2DArray):    274(ptr) Variable UniformConstant
+             276:             TypePointer Input 160(ivec4)
+       277(ic4D):    276(ptr) Variable Input
          4(main):           2 Function None 3
                5:             Label
             9(v):      8(ptr) Variable Function
-         167(iv):    166(ptr) Variable Function
-        243(iv2):    242(ptr) Variable Function
+         162(iv):    161(ptr) Variable Function
+        237(iv2):    236(ptr) Variable Function
               14:          11 Load 13(s2D)
               18:   15(fvec2) Load 17(c2D)
               19:    7(fvec4) ImageSampleImplicitLod 14 18
@@ -289,121 +289,115 @@
                               Store 9(v) 124
              129:         126 Load 128(sCube)
              130:   53(fvec3) Load 55(c3D)
-             131:   53(fvec3) Load 55(c3D)
-             132:   53(fvec3) Load 55(c3D)
-             133:    7(fvec4) ImageSampleExplicitLod 129 130 Grad 131 132
-             134:    7(fvec4) Load 9(v)
-             135:    7(fvec4) FAdd 134 133
-                              Store 9(v) 135
-             140:         137 Load 139(s2DArrayShadow)
-             141:    7(fvec4) Load 26(c4D)
-             142:   15(fvec2) Load 17(c2D)
-             143:   15(fvec2) Load 17(c2D)
-             144:    6(float) CompositeExtract 141 3
-             145:    6(float) ImageSampleDrefExplicitLod 140 141 144 Grad ConstOffset 142 143 70
-             147:     34(ptr) AccessChain 9(v) 146
-             148:    6(float) Load 147
-             149:    6(float) FAdd 148 145
-             150:     34(ptr) AccessChain 9(v) 146
-                              Store 150 149
-             151:          40 Load 42(s3D)
-             152:    7(fvec4) Load 26(c4D)
-             153:   53(fvec3) Load 55(c3D)
-             154:   53(fvec3) Load 55(c3D)
-             155:    7(fvec4) ImageSampleProjExplicitLod 151 152 Grad 153 154
-             156:    7(fvec4) Load 9(v)
-             157:    7(fvec4) FAdd 156 155
-                              Store 9(v) 157
-             158:          11 Load 13(s2D)
-             159:   53(fvec3) Load 55(c3D)
-             160:   15(fvec2) Load 17(c2D)
-             161:   15(fvec2) Load 17(c2D)
-             162:    7(fvec4) ImageSampleProjExplicitLod 158 159 Grad ConstOffset 160 161 70
-             163:    7(fvec4) Load 9(v)
-             164:    7(fvec4) FAdd 163 162
-                              Store 9(v) 164
-             172:         169 Load 171(is2D)
-             173:   15(fvec2) Load 17(c2D)
-             174:  165(ivec4) ImageSampleImplicitLod 172 173
-                              Store 167(iv) 174
-             175:  165(ivec4) Load 167(iv)
-             176:    7(fvec4) ConvertSToF 175
-             177:    7(fvec4) Load 9(v)
-             178:    7(fvec4) FAdd 177 176
-                              Store 9(v) 178
-             179:         169 Load 171(is2D)
-             180:    7(fvec4) Load 26(c4D)
-             181:    6(float) CompositeExtract 180 3
-             182:    7(fvec4) CompositeInsert 181 180 2
-             183:  165(ivec4) ImageSampleProjImplicitLod 179 182 ConstOffset 70
-                              Store 167(iv) 183
-             184:  165(ivec4) Load 167(iv)
-             185:    7(fvec4) ConvertSToF 184
-             186:    7(fvec4) Load 9(v)
-             187:    7(fvec4) FAdd 186 185
-                              Store 9(v) 187
-             188:         169 Load 171(is2D)
-             189:   53(fvec3) Load 55(c3D)
-             190:    6(float) Load 29(c1D)
-             191:  165(ivec4) ImageSampleProjExplicitLod 188 189 Lod 190
-                              Store 167(iv) 191
-             192:  165(ivec4) Load 167(iv)
-             193:    7(fvec4) ConvertSToF 192
-             194:    7(fvec4) Load 9(v)
-             195:    7(fvec4) FAdd 194 193
-                              Store 9(v) 195
-             196:         169 Load 171(is2D)
-             197:   53(fvec3) Load 55(c3D)
-             198:   15(fvec2) Load 17(c2D)
-             199:   15(fvec2) Load 17(c2D)
-             200:  165(ivec4) ImageSampleProjExplicitLod 196 197 Grad 198 199
-                              Store 167(iv) 200
-             201:  165(ivec4) Load 167(iv)
-             202:    7(fvec4) ConvertSToF 201
-             203:    7(fvec4) Load 9(v)
-             204:    7(fvec4) FAdd 203 202
-                              Store 9(v) 204
-             209:         206 Load 208(is3D)
-             210:   53(fvec3) Load 55(c3D)
-             212:  165(ivec4) ImageSampleImplicitLod 209 210 Bias 211
-                              Store 167(iv) 212
-             213:  165(ivec4) Load 167(iv)
-             214:    7(fvec4) ConvertSToF 213
-             215:    7(fvec4) Load 9(v)
-             216:    7(fvec4) FAdd 215 214
-                              Store 9(v) 216
-             221:         218 Load 220(isCube)
-             222:   53(fvec3) Load 55(c3D)
-             223:    6(float) Load 29(c1D)
-             224:  165(ivec4) ImageSampleExplicitLod 221 222 Lod 223
-                              Store 167(iv) 224
-             225:  165(ivec4) Load 167(iv)
-             226:    7(fvec4) ConvertSToF 225
-             227:    7(fvec4) Load 9(v)
-             228:    7(fvec4) FAdd 227 226
-                              Store 9(v) 228
-             233:         230 Load 232(is2DArray)
-             234:   79(ivec3) Load 81(ic3D)
-             235:     67(int) Load 84(ic1D)
-             236:         229 Image 233
-             237:  165(ivec4) ImageFetch 236 234 Lod 235
-                              Store 167(iv) 237
-             238:  165(ivec4) Load 167(iv)
-             239:    7(fvec4) ConvertSToF 238
-             240:    7(fvec4) Load 9(v)
-             241:    7(fvec4) FAdd 240 239
-                              Store 9(v) 241
-             248:         245 Load 247(sCubeShadow)
-             250:         244 Image 248
-             251:   68(ivec2) ImageQuerySizeLod 250 249
-                              Store 243(iv2) 251
-             254:    7(fvec4) Load 9(v)
-             255:   68(ivec2) Load 243(iv2)
-             256:   15(fvec2) ConvertSToF 255
-             258:    6(float) CompositeExtract 256 0
-             259:    6(float) CompositeExtract 256 1
-             260:    7(fvec4) CompositeConstruct 258 259 257 257
-             261:    7(fvec4) FAdd 254 260
-                              Store 253(FragData) 261
+             131:    7(fvec4) ImageSampleExplicitLod 129 130 Grad 130 130
+             132:    7(fvec4) Load 9(v)
+             133:    7(fvec4) FAdd 132 131
+                              Store 9(v) 133
+             138:         135 Load 137(s2DArrayShadow)
+             139:    7(fvec4) Load 26(c4D)
+             140:   15(fvec2) Load 17(c2D)
+             141:    6(float) CompositeExtract 139 3
+             142:    6(float) ImageSampleDrefExplicitLod 138 139 141 Grad ConstOffset 140 140 70
+             144:     34(ptr) AccessChain 9(v) 143
+             145:    6(float) Load 144
+             146:    6(float) FAdd 145 142
+             147:     34(ptr) AccessChain 9(v) 143
+                              Store 147 146
+             148:          40 Load 42(s3D)
+             149:    7(fvec4) Load 26(c4D)
+             150:   53(fvec3) Load 55(c3D)
+             151:    7(fvec4) ImageSampleProjExplicitLod 148 149 Grad 150 150
+             152:    7(fvec4) Load 9(v)
+             153:    7(fvec4) FAdd 152 151
+                              Store 9(v) 153
+             154:          11 Load 13(s2D)
+             155:   53(fvec3) Load 55(c3D)
+             156:   15(fvec2) Load 17(c2D)
+             157:    7(fvec4) ImageSampleProjExplicitLod 154 155 Grad ConstOffset 156 156 70
+             158:    7(fvec4) Load 9(v)
+             159:    7(fvec4) FAdd 158 157
+                              Store 9(v) 159
+             167:         164 Load 166(is2D)
+             168:   15(fvec2) Load 17(c2D)
+             169:  160(ivec4) ImageSampleImplicitLod 167 168
+                              Store 162(iv) 169
+             170:  160(ivec4) Load 162(iv)
+             171:    7(fvec4) ConvertSToF 170
+             172:    7(fvec4) Load 9(v)
+             173:    7(fvec4) FAdd 172 171
+                              Store 9(v) 173
+             174:         164 Load 166(is2D)
+             175:    7(fvec4) Load 26(c4D)
+             176:    6(float) CompositeExtract 175 3
+             177:    7(fvec4) CompositeInsert 176 175 2
+             178:  160(ivec4) ImageSampleProjImplicitLod 174 177 ConstOffset 70
+                              Store 162(iv) 178
+             179:  160(ivec4) Load 162(iv)
+             180:    7(fvec4) ConvertSToF 179
+             181:    7(fvec4) Load 9(v)
+             182:    7(fvec4) FAdd 181 180
+                              Store 9(v) 182
+             183:         164 Load 166(is2D)
+             184:   53(fvec3) Load 55(c3D)
+             185:    6(float) Load 29(c1D)
+             186:  160(ivec4) ImageSampleProjExplicitLod 183 184 Lod 185
+                              Store 162(iv) 186
+             187:  160(ivec4) Load 162(iv)
+             188:    7(fvec4) ConvertSToF 187
+             189:    7(fvec4) Load 9(v)
+             190:    7(fvec4) FAdd 189 188
+                              Store 9(v) 190
+             191:         164 Load 166(is2D)
+             192:   53(fvec3) Load 55(c3D)
+             193:   15(fvec2) Load 17(c2D)
+             194:  160(ivec4) ImageSampleProjExplicitLod 191 192 Grad 193 193
+                              Store 162(iv) 194
+             195:  160(ivec4) Load 162(iv)
+             196:    7(fvec4) ConvertSToF 195
+             197:    7(fvec4) Load 9(v)
+             198:    7(fvec4) FAdd 197 196
+                              Store 9(v) 198
+             203:         200 Load 202(is3D)
+             204:   53(fvec3) Load 55(c3D)
+             206:  160(ivec4) ImageSampleImplicitLod 203 204 Bias 205
+                              Store 162(iv) 206
+             207:  160(ivec4) Load 162(iv)
+             208:    7(fvec4) ConvertSToF 207
+             209:    7(fvec4) Load 9(v)
+             210:    7(fvec4) FAdd 209 208
+                              Store 9(v) 210
+             215:         212 Load 214(isCube)
+             216:   53(fvec3) Load 55(c3D)
+             217:    6(float) Load 29(c1D)
+             218:  160(ivec4) ImageSampleExplicitLod 215 216 Lod 217
+                              Store 162(iv) 218
+             219:  160(ivec4) Load 162(iv)
+             220:    7(fvec4) ConvertSToF 219
+             221:    7(fvec4) Load 9(v)
+             222:    7(fvec4) FAdd 221 220
+                              Store 9(v) 222
+             227:         224 Load 226(is2DArray)
+             228:   79(ivec3) Load 81(ic3D)
+             229:     67(int) Load 84(ic1D)
+             230:         223 Image 227
+             231:  160(ivec4) ImageFetch 230 228 Lod 229
+                              Store 162(iv) 231
+             232:  160(ivec4) Load 162(iv)
+             233:    7(fvec4) ConvertSToF 232
+             234:    7(fvec4) Load 9(v)
+             235:    7(fvec4) FAdd 234 233
+                              Store 9(v) 235
+             242:         239 Load 241(sCubeShadow)
+             244:         238 Image 242
+             245:   68(ivec2) ImageQuerySizeLod 244 243
+                              Store 237(iv2) 245
+             248:    7(fvec4) Load 9(v)
+             249:   68(ivec2) Load 237(iv2)
+             250:   15(fvec2) ConvertSToF 249
+             252:    6(float) CompositeExtract 250 0
+             253:    6(float) CompositeExtract 250 1
+             254:    7(fvec4) CompositeConstruct 252 253 251 251
+             255:    7(fvec4) FAdd 248 254
+                              Store 247(FragData) 255
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.noBuiltInLoc.vert.out b/Test/baseResults/spv.noBuiltInLoc.vert.out
index 65ee22a..c7541bf 100644
--- a/Test/baseResults/spv.noBuiltInLoc.vert.out
+++ b/Test/baseResults/spv.noBuiltInLoc.vert.out
@@ -26,20 +26,20 @@
                               Name 34  "gl_InstanceID"
                               Decorate 9(bar) Location 0
                               Decorate 11(foo) Location 0
+                              Decorate 16(gl_PerVertex) Block
                               MemberDecorate 16(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 16(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 16(gl_PerVertex) 2 BuiltIn ClipDistance
                               MemberDecorate 16(gl_PerVertex) 3 BuiltIn CullDistance
-                              Decorate 16(gl_PerVertex) Block
                               Decorate 24(uv1) Location 0
                               Decorate 24(uv1) DescriptorSet 0
                               Decorate 26(uv2) Location 1
                               Decorate 26(uv2) DescriptorSet 0
                               Decorate 29(uv3) Location 2
                               Decorate 29(uv3) DescriptorSet 0
-                              Decorate 31(a_uint) Offset 0
-                              Decorate 31(a_uint) DescriptorSet 0
                               Decorate 31(a_uint) Binding 0
+                              Decorate 31(a_uint) DescriptorSet 0
+                              Decorate 31(a_uint) Offset 0
                               Decorate 33(gl_VertexID) BuiltIn VertexId
                               Decorate 34(gl_InstanceID) BuiltIn InstanceId
                2:             TypeVoid
diff --git a/Test/baseResults/spv.noDeadDecorations.vert.out b/Test/baseResults/spv.noDeadDecorations.vert.out
index 0185eaf..51814d0 100644
--- a/Test/baseResults/spv.noDeadDecorations.vert.out
+++ b/Test/baseResults/spv.noDeadDecorations.vert.out
@@ -16,13 +16,13 @@
                               MemberName 20(gl_PerVertex) 1  "gl_PointSize"
                               Name 22  ""
                               Name 26  "param"
-                              Decorate 10(func(f1;) RelaxedPrecision
                               Decorate 9(a) RelaxedPrecision
+                              Decorate 10(func(f1;) RelaxedPrecision
                               Decorate 12 RelaxedPrecision
                               Decorate 13 RelaxedPrecision
+                              Decorate 20(gl_PerVertex) Block
                               MemberDecorate 20(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 20(gl_PerVertex) 1 BuiltIn PointSize
-                              Decorate 20(gl_PerVertex) Block
                               Decorate 26(param) RelaxedPrecision
                               Decorate 27 RelaxedPrecision
                2:             TypeVoid
diff --git a/Test/baseResults/spv.nonuniform.frag.out b/Test/baseResults/spv.nonuniform.frag.out
index 26b020c..8aa6883 100644
--- a/Test/baseResults/spv.nonuniform.frag.out
+++ b/Test/baseResults/spv.nonuniform.frag.out
@@ -82,65 +82,65 @@
                               Decorate 46 DecorationNonUniformEXT
                               Decorate 48 DecorationNonUniformEXT
                               Decorate 49 DecorationNonUniformEXT
-                              Decorate 53(inputAttachmentDyn) DescriptorSet 0
                               Decorate 53(inputAttachmentDyn) Binding 0
+                              Decorate 53(inputAttachmentDyn) DescriptorSet 0
                               Decorate 53(inputAttachmentDyn) InputAttachmentIndex 0
-                              Decorate 70(uniformTexelBufferDyn) DescriptorSet 0
                               Decorate 70(uniformTexelBufferDyn) Binding 1
-                              Decorate 84(storageTexelBufferDyn) DescriptorSet 0
+                              Decorate 70(uniformTexelBufferDyn) DescriptorSet 0
                               Decorate 84(storageTexelBufferDyn) Binding 2
-                              MemberDecorate 93(uname) 0 Offset 0
+                              Decorate 84(storageTexelBufferDyn) DescriptorSet 0
                               Decorate 93(uname) Block
-                              Decorate 96(uniformBuffer) DescriptorSet 0
+                              MemberDecorate 93(uname) 0 Offset 0
                               Decorate 96(uniformBuffer) Binding 3
+                              Decorate 96(uniformBuffer) DescriptorSet 0
                               Decorate 98(nu_ii) Flat
                               Decorate 98(nu_ii) Location 1
                               Decorate 99 DecorationNonUniformEXT
                               Decorate 101 DecorationNonUniformEXT
                               Decorate 102 DecorationNonUniformEXT
                               Decorate 104 DecorationNonUniformEXT
-                              MemberDecorate 105(bname) 0 Offset 0
                               Decorate 105(bname) BufferBlock
-                              Decorate 108(storageBuffer) DescriptorSet 0
+                              MemberDecorate 105(bname) 0 Offset 0
                               Decorate 108(storageBuffer) Binding 4
+                              Decorate 108(storageBuffer) DescriptorSet 0
                               Decorate 109 DecorationNonUniformEXT
                               Decorate 110 DecorationNonUniformEXT
                               Decorate 111 DecorationNonUniformEXT
                               Decorate 113 DecorationNonUniformEXT
-                              Decorate 118(sampledImage) DescriptorSet 0
                               Decorate 118(sampledImage) Binding 5
+                              Decorate 118(sampledImage) DescriptorSet 0
                               Decorate 119 DecorationNonUniformEXT
                               Decorate 121 DecorationNonUniformEXT
                               Decorate 122 DecorationNonUniformEXT
-                              Decorate 133(storageImage) DescriptorSet 0
                               Decorate 133(storageImage) Binding 6
+                              Decorate 133(storageImage) DescriptorSet 0
                               Decorate 134 DecorationNonUniformEXT
                               Decorate 136 DecorationNonUniformEXT
                               Decorate 137 DecorationNonUniformEXT
-                              Decorate 145(inputAttachment) DescriptorSet 0
                               Decorate 145(inputAttachment) Binding 7
+                              Decorate 145(inputAttachment) DescriptorSet 0
                               Decorate 145(inputAttachment) InputAttachmentIndex 1
                               Decorate 146 DecorationNonUniformEXT
                               Decorate 147 DecorationNonUniformEXT
                               Decorate 148 DecorationNonUniformEXT
-                              Decorate 155(uniformTexelBuffer) DescriptorSet 0
                               Decorate 155(uniformTexelBuffer) Binding 8
+                              Decorate 155(uniformTexelBuffer) DescriptorSet 0
                               Decorate 156 DecorationNonUniformEXT
                               Decorate 157 DecorationNonUniformEXT
                               Decorate 158 DecorationNonUniformEXT
                               Decorate 159 DecorationNonUniformEXT
-                              Decorate 166(storageTexelBuffer) DescriptorSet 0
                               Decorate 166(storageTexelBuffer) Binding 9
+                              Decorate 166(storageTexelBuffer) DescriptorSet 0
                               Decorate 167 DecorationNonUniformEXT
                               Decorate 168 DecorationNonUniformEXT
                               Decorate 169 DecorationNonUniformEXT
-                              Decorate 177(uniformTexArr) DescriptorSet 0
                               Decorate 177(uniformTexArr) Binding 10
+                              Decorate 177(uniformTexArr) DescriptorSet 0
                               Decorate 178 DecorationNonUniformEXT
                               Decorate 180 DecorationNonUniformEXT
                               Decorate 181 DecorationNonUniformEXT
-                              Decorate 184(uniformSampler) DescriptorSet 0
                               Decorate 184(uniformSampler) Binding 11
+                              Decorate 184(uniformSampler) DescriptorSet 0
                               Decorate 188(inTexcoord) Location 2
                               Decorate 194 DecorationNonUniformEXT
                               Decorate 195 DecorationNonUniformEXT
diff --git a/Test/baseResults/spv.nonuniform2.frag.out b/Test/baseResults/spv.nonuniform2.frag.out
index b9d64dd..b5b3dfe 100644
--- a/Test/baseResults/spv.nonuniform2.frag.out
+++ b/Test/baseResults/spv.nonuniform2.frag.out
@@ -20,8 +20,8 @@
                               Name 13  "data"
                               Name 16  "rIndex"
                               Decorate 9(FragColor) Location 0
-                              Decorate 13(data) DescriptorSet 0
                               Decorate 13(data) Binding 4
+                              Decorate 13(data) DescriptorSet 0
                               Decorate 16(rIndex) Flat
                               Decorate 16(rIndex) Location 3
                               Decorate 18 DecorationNonUniformEXT
diff --git a/Test/baseResults/spv.nonuniform3.frag.out b/Test/baseResults/spv.nonuniform3.frag.out
index 119a6d9..331c058 100644
--- a/Test/baseResults/spv.nonuniform3.frag.out
+++ b/Test/baseResults/spv.nonuniform3.frag.out
@@ -19,12 +19,12 @@
                               Name 16  "Index"
                               Name 23  "uSamp"
                               Decorate 9(FragColor) Location 0
-                              Decorate 13(uTex) DescriptorSet 0
                               Decorate 13(uTex) Binding 0
+                              Decorate 13(uTex) DescriptorSet 0
                               Decorate 16(Index) Flat
                               Decorate 16(Index) Location 0
-                              Decorate 23(uSamp) DescriptorSet 1
                               Decorate 23(uSamp) Binding 0
+                              Decorate 23(uSamp) DescriptorSet 1
                               Decorate 27 DecorationNonUniformEXT
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.nonuniform4.frag.out b/Test/baseResults/spv.nonuniform4.frag.out
index 4442e5f..a20f64b 100644
--- a/Test/baseResults/spv.nonuniform4.frag.out
+++ b/Test/baseResults/spv.nonuniform4.frag.out
@@ -18,8 +18,8 @@
                               Name 4  "main"
                               Name 10  "data"
                               Name 13  "rIndex"
-                              Decorate 10(data) DescriptorSet 0
                               Decorate 10(data) Binding 4
+                              Decorate 10(data) DescriptorSet 0
                               Decorate 13(rIndex) Flat
                               Decorate 13(rIndex) Location 3
                               Decorate 15 DecorationNonUniformEXT
diff --git a/Test/baseResults/spv.nonuniform5.frag.out b/Test/baseResults/spv.nonuniform5.frag.out
index abf10c2..d2f0563 100644
--- a/Test/baseResults/spv.nonuniform5.frag.out
+++ b/Test/baseResults/spv.nonuniform5.frag.out
@@ -21,10 +21,10 @@
                               Name 13  "ubos"
                               Name 16  "Index"
                               Decorate 9(FragColor) Location 0
-                              MemberDecorate 10(UBO) 0 Offset 0
                               Decorate 10(UBO) Block
-                              Decorate 13(ubos) DescriptorSet 0
+                              MemberDecorate 10(UBO) 0 Offset 0
                               Decorate 13(ubos) Binding 0
+                              Decorate 13(ubos) DescriptorSet 0
                               Decorate 16(Index) Flat
                               Decorate 16(Index) Location 0
                               Decorate 18 DecorationNonUniformEXT
diff --git a/Test/baseResults/spv.nullInit.comp.out b/Test/baseResults/spv.nullInit.comp.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.nv.dmm-allops.comp.out b/Test/baseResults/spv.nv.dmm-allops.comp.out
index b980714..68537d4 100644
--- a/Test/baseResults/spv.nv.dmm-allops.comp.out
+++ b/Test/baseResults/spv.nv.dmm-allops.comp.out
@@ -21,13 +21,13 @@
                               MemberName 9(block) 1  "op_bary"
                               Name 11  ""
                               Name 16  "as"
+                              Decorate 9(block) Block
                               MemberDecorate 9(block) 0 Offset 0
                               MemberDecorate 9(block) 1 Offset 16
-                              Decorate 9(block) Block
-                              Decorate 11 DescriptorSet 0
                               Decorate 11 Binding 0
-                              Decorate 16(as) DescriptorSet 0
+                              Decorate 11 DescriptorSet 0
                               Decorate 16(as) Binding 1
+                              Decorate 16(as) DescriptorSet 0
                               Decorate 58 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.nv.dmm-allops.mesh.out b/Test/baseResults/spv.nv.dmm-allops.mesh.out
index 9f626c2..f2edf54 100644
--- a/Test/baseResults/spv.nv.dmm-allops.mesh.out
+++ b/Test/baseResults/spv.nv.dmm-allops.mesh.out
@@ -26,13 +26,13 @@
                               MemberName 9(block) 1  "op_bary"
                               Name 11  ""
                               Name 16  "as"
+                              Decorate 9(block) Block
                               MemberDecorate 9(block) 0 Offset 0
                               MemberDecorate 9(block) 1 Offset 16
-                              Decorate 9(block) Block
-                              Decorate 11 DescriptorSet 0
                               Decorate 11 Binding 0
-                              Decorate 16(as) DescriptorSet 0
+                              Decorate 11 DescriptorSet 0
                               Decorate 16(as) Binding 1
+                              Decorate 16(as) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.nv.dmm-allops.rahit.out b/Test/baseResults/spv.nv.dmm-allops.rahit.out
index 388ab04..5655119 100644
--- a/Test/baseResults/spv.nv.dmm-allops.rahit.out
+++ b/Test/baseResults/spv.nv.dmm-allops.rahit.out
@@ -26,19 +26,19 @@
                               Name 64  "gl_HitKindFrontFacingMicroTriangleNV"
                               Name 67  "gl_HitKindBackFacingMicroTriangleNV"
                               Name 76  "as"
+                              Decorate 10(block) Block
                               MemberDecorate 10(block) 0 Offset 0
                               MemberDecorate 10(block) 1 Offset 16
                               MemberDecorate 10(block) 2 Offset 24
-                              Decorate 10(block) Block
-                              Decorate 12 DescriptorSet 0
                               Decorate 12 Binding 0
+                              Decorate 12 DescriptorSet 0
                               Decorate 18(gl_HitMicroTriangleVertexPositionsNV) BuiltIn HitMicroTriangleVertexPositionsNV
                               Decorate 40(gl_HitMicroTriangleVertexBarycentricsNV) BuiltIn HitMicroTriangleVertexBarycentricsNV
                               Decorate 59(gl_HitKindEXT) BuiltIn HitKindKHR
                               Decorate 64(gl_HitKindFrontFacingMicroTriangleNV) BuiltIn HitKindFrontFacingMicroTriangleNV
                               Decorate 67(gl_HitKindBackFacingMicroTriangleNV) BuiltIn HitKindBackFacingMicroTriangleNV
-                              Decorate 76(as) DescriptorSet 0
                               Decorate 76(as) Binding 1
+                              Decorate 76(as) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.nv.dmm-allops.rchit.out b/Test/baseResults/spv.nv.dmm-allops.rchit.out
index c53bc8c..291b514 100644
--- a/Test/baseResults/spv.nv.dmm-allops.rchit.out
+++ b/Test/baseResults/spv.nv.dmm-allops.rchit.out
@@ -26,19 +26,19 @@
                               Name 64  "gl_HitKindFrontFacingMicroTriangleNV"
                               Name 67  "gl_HitKindBackFacingMicroTriangleNV"
                               Name 76  "as"
+                              Decorate 10(block) Block
                               MemberDecorate 10(block) 0 Offset 0
                               MemberDecorate 10(block) 1 Offset 16
                               MemberDecorate 10(block) 2 Offset 24
-                              Decorate 10(block) Block
-                              Decorate 12 DescriptorSet 0
                               Decorate 12 Binding 0
+                              Decorate 12 DescriptorSet 0
                               Decorate 18(gl_HitMicroTriangleVertexPositionsNV) BuiltIn HitMicroTriangleVertexPositionsNV
                               Decorate 40(gl_HitMicroTriangleVertexBarycentricsNV) BuiltIn HitMicroTriangleVertexBarycentricsNV
                               Decorate 59(gl_HitKindEXT) BuiltIn HitKindKHR
                               Decorate 64(gl_HitKindFrontFacingMicroTriangleNV) BuiltIn HitKindFrontFacingMicroTriangleNV
                               Decorate 67(gl_HitKindBackFacingMicroTriangleNV) BuiltIn HitKindBackFacingMicroTriangleNV
-                              Decorate 76(as) DescriptorSet 0
                               Decorate 76(as) Binding 1
+                              Decorate 76(as) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.nv.dmm-allops.rgen.out b/Test/baseResults/spv.nv.dmm-allops.rgen.out
index 78001e1..aaff10f 100644
--- a/Test/baseResults/spv.nv.dmm-allops.rgen.out
+++ b/Test/baseResults/spv.nv.dmm-allops.rgen.out
@@ -23,14 +23,14 @@
                               Name 17  "as"
                               Name 58  "gl_HitKindFrontFacingMicroTriangleNV"
                               Name 61  "gl_HitKindBackFacingMicroTriangleNV"
+                              Decorate 10(block) Block
                               MemberDecorate 10(block) 0 Offset 0
                               MemberDecorate 10(block) 1 Offset 16
                               MemberDecorate 10(block) 2 Offset 24
-                              Decorate 10(block) Block
-                              Decorate 12 DescriptorSet 0
                               Decorate 12 Binding 0
-                              Decorate 17(as) DescriptorSet 0
+                              Decorate 12 DescriptorSet 0
                               Decorate 17(as) Binding 1
+                              Decorate 17(as) DescriptorSet 0
                               Decorate 58(gl_HitKindFrontFacingMicroTriangleNV) BuiltIn HitKindFrontFacingMicroTriangleNV
                               Decorate 61(gl_HitKindBackFacingMicroTriangleNV) BuiltIn HitKindBackFacingMicroTriangleNV
                2:             TypeVoid
diff --git a/Test/baseResults/spv.nv.hitobject-allops.rchit.out b/Test/baseResults/spv.nv.hitobject-allops.rchit.out
index 15e6d41..0ab305c 100644
--- a/Test/baseResults/spv.nv.hitobject-allops.rchit.out
+++ b/Test/baseResults/spv.nv.hitobject-allops.rchit.out
@@ -48,13 +48,13 @@
                               Name 112  "handle"
                               Name 114  "rid"
                               Decorate 12(hBlock) Block
-                              Decorate 25(as) DescriptorSet 0
                               Decorate 25(as) Binding 0
+                              Decorate 25(as) DescriptorSet 0
                               Decorate 40(pBlock) Block
-                              MemberDecorate 62(block) 0 Offset 0
                               Decorate 62(block) Block
-                              Decorate 64 DescriptorSet 0
+                              MemberDecorate 62(block) 0 Offset 0
                               Decorate 64 Binding 1
+                              Decorate 64 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.nv.hitobject-allops.rgen.out b/Test/baseResults/spv.nv.hitobject-allops.rgen.out
index d395500..c681111 100644
--- a/Test/baseResults/spv.nv.hitobject-allops.rgen.out
+++ b/Test/baseResults/spv.nv.hitobject-allops.rgen.out
@@ -48,13 +48,13 @@
                               Name 112  "handle"
                               Name 114  "rid"
                               Decorate 12(hBlock) Block
-                              Decorate 25(as) DescriptorSet 0
                               Decorate 25(as) Binding 0
+                              Decorate 25(as) DescriptorSet 0
                               Decorate 40(pBlock) Block
-                              MemberDecorate 62(block) 0 Offset 0
                               Decorate 62(block) Block
-                              Decorate 64 DescriptorSet 0
+                              MemberDecorate 62(block) 0 Offset 0
                               Decorate 64 Binding 1
+                              Decorate 64 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.nv.hitobject-allops.rmiss.out b/Test/baseResults/spv.nv.hitobject-allops.rmiss.out
index 970d08a..4ad23a5 100644
--- a/Test/baseResults/spv.nv.hitobject-allops.rmiss.out
+++ b/Test/baseResults/spv.nv.hitobject-allops.rmiss.out
@@ -48,13 +48,13 @@
                               Name 112  "handle"
                               Name 114  "rid"
                               Decorate 12(hBlock) Block
-                              Decorate 25(as) DescriptorSet 0
                               Decorate 25(as) Binding 0
+                              Decorate 25(as) DescriptorSet 0
                               Decorate 40(pBlock) Block
-                              MemberDecorate 62(block) 0 Offset 0
                               Decorate 62(block) Block
-                              Decorate 64 DescriptorSet 0
+                              MemberDecorate 62(block) 0 Offset 0
                               Decorate 64 Binding 1
+                              Decorate 64 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.nv.hitobject-errors.rgen.out b/Test/baseResults/spv.nv.hitobject-errors.rgen.out
new file mode 100644
index 0000000..1394827
--- /dev/null
+++ b/Test/baseResults/spv.nv.hitobject-errors.rgen.out
@@ -0,0 +1,9 @@
+spv.nv.hitobject-errors.rgen
+ERROR: 0:7: 'hitObjectNV' : hitObjectNV can only be declared in global or function scope with no storage qualifier: uHitObj
+ERROR: 0:9: 'hitObjectNV' : hitObjectNV can only be declared in global or function scope with no storage qualifier: hobjIn
+ERROR: 0:10: 'hitObjectNV' : hitObjectNV can only be declared in global or function scope with no storage qualifier: hobjOut
+ERROR: 0:21: 'hObjWrapper' : struct is not allowed to contain hitObjectNV: wrapper
+ERROR: 4 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.nvAtomicFp16Vec.frag.out b/Test/baseResults/spv.nvAtomicFp16Vec.frag.out
new file mode 100644
index 0000000..76d683e
--- /dev/null
+++ b/Test/baseResults/spv.nvAtomicFp16Vec.frag.out
@@ -0,0 +1,688 @@
+spv.nvAtomicFp16Vec.frag
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 515
+
+                              Capability Shader
+                              Capability Float16
+                              Capability ImageCubeArray
+                              Capability Image1D
+                              Capability StorageImageExtendedFormats
+                              Capability StorageUniformBufferBlock16
+                              Capability AtomicFloat16VectorNV
+                              Extension  "SPV_KHR_16bit_storage"
+                              Extension  "SPV_NV_shader_atomic_fp16_vector"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main"
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 430
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_float16"
+                              SourceExtension  "GL_NV_shader_atomic_fp16_vector"
+                              Name 4  "main"
+                              Name 9  "Buffer"
+                              MemberName 9(Buffer) 0  "dataf16v2"
+                              MemberName 9(Buffer) 1  "dataf16v4"
+                              MemberName 9(Buffer) 2  "resf16v2"
+                              MemberName 9(Buffer) 3  "resf16v4"
+                              Name 11  "buf"
+                              Name 68  "constVec2"
+                              Name 74  "fimage1D"
+                              Name 85  "fimage1DArray"
+                              Name 97  "fimage2D"
+                              Name 107  "fimage2DArray"
+                              Name 119  "fimageCube"
+                              Name 129  "fimageCubeArray"
+                              Name 139  "fimage3D"
+                              Name 295  "constVec4"
+                              Name 299  "fimage1Dv4"
+                              Name 310  "fimage1DArrayv4"
+                              Name 320  "fimage2Dv4"
+                              Name 330  "fimage2DArrayv4"
+                              Name 340  "fimageCubev4"
+                              Name 350  "fimageCubeArrayv4"
+                              Name 360  "fimage3Dv4"
+                              Decorate 9(Buffer) BufferBlock
+                              MemberDecorate 9(Buffer) 0 Offset 0
+                              MemberDecorate 9(Buffer) 1 Offset 8
+                              MemberDecorate 9(Buffer) 2 Offset 16
+                              MemberDecorate 9(Buffer) 3 Offset 24
+                              Decorate 11(buf) Binding 0
+                              Decorate 11(buf) DescriptorSet 0
+                              Decorate 74(fimage1D) Volatile
+                              Decorate 74(fimage1D) Coherent
+                              Decorate 74(fimage1D) Binding 0
+                              Decorate 74(fimage1D) DescriptorSet 0
+                              Decorate 85(fimage1DArray) Volatile
+                              Decorate 85(fimage1DArray) Coherent
+                              Decorate 85(fimage1DArray) Binding 1
+                              Decorate 85(fimage1DArray) DescriptorSet 0
+                              Decorate 97(fimage2D) Volatile
+                              Decorate 97(fimage2D) Coherent
+                              Decorate 97(fimage2D) Binding 2
+                              Decorate 97(fimage2D) DescriptorSet 0
+                              Decorate 107(fimage2DArray) Volatile
+                              Decorate 107(fimage2DArray) Coherent
+                              Decorate 107(fimage2DArray) Binding 3
+                              Decorate 107(fimage2DArray) DescriptorSet 0
+                              Decorate 119(fimageCube) Volatile
+                              Decorate 119(fimageCube) Coherent
+                              Decorate 119(fimageCube) Binding 5
+                              Decorate 119(fimageCube) DescriptorSet 0
+                              Decorate 129(fimageCubeArray) Volatile
+                              Decorate 129(fimageCubeArray) Coherent
+                              Decorate 129(fimageCubeArray) Binding 6
+                              Decorate 129(fimageCubeArray) DescriptorSet 0
+                              Decorate 139(fimage3D) Volatile
+                              Decorate 139(fimage3D) Coherent
+                              Decorate 139(fimage3D) Binding 9
+                              Decorate 139(fimage3D) DescriptorSet 0
+                              Decorate 299(fimage1Dv4) Volatile
+                              Decorate 299(fimage1Dv4) Coherent
+                              Decorate 299(fimage1Dv4) Binding 10
+                              Decorate 299(fimage1Dv4) DescriptorSet 0
+                              Decorate 310(fimage1DArrayv4) Volatile
+                              Decorate 310(fimage1DArrayv4) Coherent
+                              Decorate 310(fimage1DArrayv4) Binding 11
+                              Decorate 310(fimage1DArrayv4) DescriptorSet 0
+                              Decorate 320(fimage2Dv4) Volatile
+                              Decorate 320(fimage2Dv4) Coherent
+                              Decorate 320(fimage2Dv4) Binding 12
+                              Decorate 320(fimage2Dv4) DescriptorSet 0
+                              Decorate 330(fimage2DArrayv4) Volatile
+                              Decorate 330(fimage2DArrayv4) Coherent
+                              Decorate 330(fimage2DArrayv4) Binding 13
+                              Decorate 330(fimage2DArrayv4) DescriptorSet 0
+                              Decorate 340(fimageCubev4) Volatile
+                              Decorate 340(fimageCubev4) Coherent
+                              Decorate 340(fimageCubev4) Binding 15
+                              Decorate 340(fimageCubev4) DescriptorSet 0
+                              Decorate 350(fimageCubeArrayv4) Volatile
+                              Decorate 350(fimageCubeArrayv4) Coherent
+                              Decorate 350(fimageCubeArrayv4) Binding 16
+                              Decorate 350(fimageCubeArrayv4) DescriptorSet 0
+                              Decorate 360(fimage3Dv4) Volatile
+                              Decorate 360(fimage3Dv4) Coherent
+                              Decorate 360(fimage3Dv4) Binding 19
+                              Decorate 360(fimage3Dv4) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 16
+               7:             TypeVector 6(float16_t) 2
+               8:             TypeVector 6(float16_t) 4
+       9(Buffer):             TypeStruct 7(f16vec2) 8(f16vec4) 7(f16vec2) 8(f16vec4)
+              10:             TypePointer Uniform 9(Buffer)
+         11(buf):     10(ptr) Variable Uniform
+              12:             TypeInt 32 1
+              13:     12(int) Constant 2
+              14:     12(int) Constant 0
+              15:             TypePointer Uniform 7(f16vec2)
+              17:6(float16_t) Constant 16896
+              18:  7(f16vec2) ConstantComposite 17 17
+              19:             TypeInt 32 0
+              20:     19(int) Constant 1
+              21:     19(int) Constant 0
+              42:     12(int) Constant 3
+              43:     12(int) Constant 1
+              44:             TypePointer Uniform 8(f16vec4)
+              46:  8(f16vec4) ConstantComposite 17 17 17 17
+              67:             TypePointer Function 7(f16vec2)
+              69:6(float16_t) Constant 16384
+              70:  7(f16vec2) ConstantComposite 69 69
+              71:             TypeFloat 32
+              72:             TypeImage 71(float) 1D nonsampled format:Rg16f
+              73:             TypePointer UniformConstant 72
+    74(fimage1D):     73(ptr) Variable UniformConstant
+              76:             TypePointer Image 7(f16vec2)
+              83:             TypeImage 71(float) 1D array nonsampled format:Rg16f
+              84:             TypePointer UniformConstant 83
+85(fimage1DArray):     84(ptr) Variable UniformConstant
+              86:             TypeVector 12(int) 2
+              87:   86(ivec2) ConstantComposite 14 14
+              95:             TypeImage 71(float) 2D nonsampled format:Rg16f
+              96:             TypePointer UniformConstant 95
+    97(fimage2D):     96(ptr) Variable UniformConstant
+             105:             TypeImage 71(float) 2D array nonsampled format:Rg16f
+             106:             TypePointer UniformConstant 105
+107(fimage2DArray):    106(ptr) Variable UniformConstant
+             108:             TypeVector 12(int) 3
+             109:  108(ivec3) ConstantComposite 14 14 14
+             117:             TypeImage 71(float) Cube nonsampled format:Rg16f
+             118:             TypePointer UniformConstant 117
+ 119(fimageCube):    118(ptr) Variable UniformConstant
+             127:             TypeImage 71(float) Cube array nonsampled format:Rg16f
+             128:             TypePointer UniformConstant 127
+129(fimageCubeArray):    128(ptr) Variable UniformConstant
+             137:             TypeImage 71(float) 3D nonsampled format:Rg16f
+             138:             TypePointer UniformConstant 137
+   139(fimage3D):    138(ptr) Variable UniformConstant
+             294:             TypePointer Function 8(f16vec4)
+             296:  8(f16vec4) ConstantComposite 69 69 69 69
+             297:             TypeImage 71(float) 1D nonsampled format:Rgba16f
+             298:             TypePointer UniformConstant 297
+ 299(fimage1Dv4):    298(ptr) Variable UniformConstant
+             301:             TypePointer Image 8(f16vec4)
+             308:             TypeImage 71(float) 1D array nonsampled format:Rgba16f
+             309:             TypePointer UniformConstant 308
+310(fimage1DArrayv4):    309(ptr) Variable UniformConstant
+             318:             TypeImage 71(float) 2D nonsampled format:Rgba16f
+             319:             TypePointer UniformConstant 318
+ 320(fimage2Dv4):    319(ptr) Variable UniformConstant
+             328:             TypeImage 71(float) 2D array nonsampled format:Rgba16f
+             329:             TypePointer UniformConstant 328
+330(fimage2DArrayv4):    329(ptr) Variable UniformConstant
+             338:             TypeImage 71(float) Cube nonsampled format:Rgba16f
+             339:             TypePointer UniformConstant 338
+340(fimageCubev4):    339(ptr) Variable UniformConstant
+             348:             TypeImage 71(float) Cube array nonsampled format:Rgba16f
+             349:             TypePointer UniformConstant 348
+350(fimageCubeArrayv4):    349(ptr) Variable UniformConstant
+             358:             TypeImage 71(float) 3D nonsampled format:Rgba16f
+             359:             TypePointer UniformConstant 358
+ 360(fimage3Dv4):    359(ptr) Variable UniformConstant
+         4(main):           2 Function None 3
+               5:             Label
+   68(constVec2):     67(ptr) Variable Function
+  295(constVec4):    294(ptr) Variable Function
+              16:     15(ptr) AccessChain 11(buf) 14
+              22:  7(f16vec2) AtomicFAddEXT 16 20 21 18
+              23:     15(ptr) AccessChain 11(buf) 13
+                              Store 23 22
+              24:     15(ptr) AccessChain 11(buf) 14
+              25:  7(f16vec2) AtomicFMinEXT 24 20 21 18
+              26:     15(ptr) AccessChain 11(buf) 13
+              27:  7(f16vec2) Load 26
+              28:  7(f16vec2) FAdd 27 25
+              29:     15(ptr) AccessChain 11(buf) 13
+                              Store 29 28
+              30:     15(ptr) AccessChain 11(buf) 14
+              31:  7(f16vec2) AtomicFMaxEXT 30 20 21 18
+              32:     15(ptr) AccessChain 11(buf) 13
+              33:  7(f16vec2) Load 32
+              34:  7(f16vec2) FAdd 33 31
+              35:     15(ptr) AccessChain 11(buf) 13
+                              Store 35 34
+              36:     15(ptr) AccessChain 11(buf) 14
+              37:  7(f16vec2) AtomicExchange 36 20 21 18
+              38:     15(ptr) AccessChain 11(buf) 13
+              39:  7(f16vec2) Load 38
+              40:  7(f16vec2) FAdd 39 37
+              41:     15(ptr) AccessChain 11(buf) 13
+                              Store 41 40
+              45:     44(ptr) AccessChain 11(buf) 43
+              47:  8(f16vec4) AtomicFAddEXT 45 20 21 46
+              48:     44(ptr) AccessChain 11(buf) 42
+                              Store 48 47
+              49:     44(ptr) AccessChain 11(buf) 43
+              50:  8(f16vec4) AtomicFMinEXT 49 20 21 46
+              51:     44(ptr) AccessChain 11(buf) 42
+              52:  8(f16vec4) Load 51
+              53:  8(f16vec4) FAdd 52 50
+              54:     44(ptr) AccessChain 11(buf) 42
+                              Store 54 53
+              55:     44(ptr) AccessChain 11(buf) 43
+              56:  8(f16vec4) AtomicFMaxEXT 55 20 21 46
+              57:     44(ptr) AccessChain 11(buf) 42
+              58:  8(f16vec4) Load 57
+              59:  8(f16vec4) FAdd 58 56
+              60:     44(ptr) AccessChain 11(buf) 42
+                              Store 60 59
+              61:     44(ptr) AccessChain 11(buf) 43
+              62:  8(f16vec4) AtomicExchange 61 20 21 46
+              63:     44(ptr) AccessChain 11(buf) 42
+              64:  8(f16vec4) Load 63
+              65:  8(f16vec4) FAdd 64 62
+              66:     44(ptr) AccessChain 11(buf) 42
+                              Store 66 65
+                              Store 68(constVec2) 70
+              75:  7(f16vec2) Load 68(constVec2)
+              77:     76(ptr) ImageTexelPointer 74(fimage1D) 14 21
+              78:  7(f16vec2) AtomicFAddEXT 77 20 21 75
+              79:     15(ptr) AccessChain 11(buf) 13
+              80:  7(f16vec2) Load 79
+              81:  7(f16vec2) FAdd 80 78
+              82:     15(ptr) AccessChain 11(buf) 13
+                              Store 82 81
+              88:  7(f16vec2) Load 68(constVec2)
+              89:     76(ptr) ImageTexelPointer 85(fimage1DArray) 87 21
+              90:  7(f16vec2) AtomicFAddEXT 89 20 21 88
+              91:     15(ptr) AccessChain 11(buf) 13
+              92:  7(f16vec2) Load 91
+              93:  7(f16vec2) FAdd 92 90
+              94:     15(ptr) AccessChain 11(buf) 13
+                              Store 94 93
+              98:  7(f16vec2) Load 68(constVec2)
+              99:     76(ptr) ImageTexelPointer 97(fimage2D) 87 21
+             100:  7(f16vec2) AtomicFAddEXT 99 20 21 98
+             101:     15(ptr) AccessChain 11(buf) 13
+             102:  7(f16vec2) Load 101
+             103:  7(f16vec2) FAdd 102 100
+             104:     15(ptr) AccessChain 11(buf) 13
+                              Store 104 103
+             110:  7(f16vec2) Load 68(constVec2)
+             111:     76(ptr) ImageTexelPointer 107(fimage2DArray) 109 21
+             112:  7(f16vec2) AtomicFAddEXT 111 20 21 110
+             113:     15(ptr) AccessChain 11(buf) 13
+             114:  7(f16vec2) Load 113
+             115:  7(f16vec2) FAdd 114 112
+             116:     15(ptr) AccessChain 11(buf) 13
+                              Store 116 115
+             120:  7(f16vec2) Load 68(constVec2)
+             121:     76(ptr) ImageTexelPointer 119(fimageCube) 109 21
+             122:  7(f16vec2) AtomicFAddEXT 121 20 21 120
+             123:     15(ptr) AccessChain 11(buf) 13
+             124:  7(f16vec2) Load 123
+             125:  7(f16vec2) FAdd 124 122
+             126:     15(ptr) AccessChain 11(buf) 13
+                              Store 126 125
+             130:  7(f16vec2) Load 68(constVec2)
+             131:     76(ptr) ImageTexelPointer 129(fimageCubeArray) 109 21
+             132:  7(f16vec2) AtomicFAddEXT 131 20 21 130
+             133:     15(ptr) AccessChain 11(buf) 13
+             134:  7(f16vec2) Load 133
+             135:  7(f16vec2) FAdd 134 132
+             136:     15(ptr) AccessChain 11(buf) 13
+                              Store 136 135
+             140:  7(f16vec2) Load 68(constVec2)
+             141:     76(ptr) ImageTexelPointer 139(fimage3D) 109 21
+             142:  7(f16vec2) AtomicFAddEXT 141 20 21 140
+             143:     15(ptr) AccessChain 11(buf) 13
+             144:  7(f16vec2) Load 143
+             145:  7(f16vec2) FAdd 144 142
+             146:     15(ptr) AccessChain 11(buf) 13
+                              Store 146 145
+             147:  7(f16vec2) Load 68(constVec2)
+             148:     76(ptr) ImageTexelPointer 74(fimage1D) 14 21
+             149:  7(f16vec2) AtomicFMinEXT 148 20 21 147
+             150:     15(ptr) AccessChain 11(buf) 13
+             151:  7(f16vec2) Load 150
+             152:  7(f16vec2) FAdd 151 149
+             153:     15(ptr) AccessChain 11(buf) 13
+                              Store 153 152
+             154:  7(f16vec2) Load 68(constVec2)
+             155:     76(ptr) ImageTexelPointer 85(fimage1DArray) 87 21
+             156:  7(f16vec2) AtomicFMinEXT 155 20 21 154
+             157:     15(ptr) AccessChain 11(buf) 13
+             158:  7(f16vec2) Load 157
+             159:  7(f16vec2) FAdd 158 156
+             160:     15(ptr) AccessChain 11(buf) 13
+                              Store 160 159
+             161:  7(f16vec2) Load 68(constVec2)
+             162:     76(ptr) ImageTexelPointer 97(fimage2D) 87 21
+             163:  7(f16vec2) AtomicFMinEXT 162 20 21 161
+             164:     15(ptr) AccessChain 11(buf) 13
+             165:  7(f16vec2) Load 164
+             166:  7(f16vec2) FAdd 165 163
+             167:     15(ptr) AccessChain 11(buf) 13
+                              Store 167 166
+             168:  7(f16vec2) Load 68(constVec2)
+             169:     76(ptr) ImageTexelPointer 107(fimage2DArray) 109 21
+             170:  7(f16vec2) AtomicFMinEXT 169 20 21 168
+             171:     15(ptr) AccessChain 11(buf) 13
+             172:  7(f16vec2) Load 171
+             173:  7(f16vec2) FAdd 172 170
+             174:     15(ptr) AccessChain 11(buf) 13
+                              Store 174 173
+             175:  7(f16vec2) Load 68(constVec2)
+             176:     76(ptr) ImageTexelPointer 119(fimageCube) 109 21
+             177:  7(f16vec2) AtomicFMinEXT 176 20 21 175
+             178:     15(ptr) AccessChain 11(buf) 13
+             179:  7(f16vec2) Load 178
+             180:  7(f16vec2) FAdd 179 177
+             181:     15(ptr) AccessChain 11(buf) 13
+                              Store 181 180
+             182:  7(f16vec2) Load 68(constVec2)
+             183:     76(ptr) ImageTexelPointer 129(fimageCubeArray) 109 21
+             184:  7(f16vec2) AtomicFMinEXT 183 20 21 182
+             185:     15(ptr) AccessChain 11(buf) 13
+             186:  7(f16vec2) Load 185
+             187:  7(f16vec2) FAdd 186 184
+             188:     15(ptr) AccessChain 11(buf) 13
+                              Store 188 187
+             189:  7(f16vec2) Load 68(constVec2)
+             190:     76(ptr) ImageTexelPointer 139(fimage3D) 109 21
+             191:  7(f16vec2) AtomicFMinEXT 190 20 21 189
+             192:     15(ptr) AccessChain 11(buf) 13
+             193:  7(f16vec2) Load 192
+             194:  7(f16vec2) FAdd 193 191
+             195:     15(ptr) AccessChain 11(buf) 13
+                              Store 195 194
+             196:  7(f16vec2) Load 68(constVec2)
+             197:     76(ptr) ImageTexelPointer 74(fimage1D) 14 21
+             198:  7(f16vec2) AtomicFMaxEXT 197 20 21 196
+             199:     15(ptr) AccessChain 11(buf) 13
+             200:  7(f16vec2) Load 199
+             201:  7(f16vec2) FAdd 200 198
+             202:     15(ptr) AccessChain 11(buf) 13
+                              Store 202 201
+             203:  7(f16vec2) Load 68(constVec2)
+             204:     76(ptr) ImageTexelPointer 85(fimage1DArray) 87 21
+             205:  7(f16vec2) AtomicFMaxEXT 204 20 21 203
+             206:     15(ptr) AccessChain 11(buf) 13
+             207:  7(f16vec2) Load 206
+             208:  7(f16vec2) FAdd 207 205
+             209:     15(ptr) AccessChain 11(buf) 13
+                              Store 209 208
+             210:  7(f16vec2) Load 68(constVec2)
+             211:     76(ptr) ImageTexelPointer 97(fimage2D) 87 21
+             212:  7(f16vec2) AtomicFMaxEXT 211 20 21 210
+             213:     15(ptr) AccessChain 11(buf) 13
+             214:  7(f16vec2) Load 213
+             215:  7(f16vec2) FAdd 214 212
+             216:     15(ptr) AccessChain 11(buf) 13
+                              Store 216 215
+             217:  7(f16vec2) Load 68(constVec2)
+             218:     76(ptr) ImageTexelPointer 107(fimage2DArray) 109 21
+             219:  7(f16vec2) AtomicFMaxEXT 218 20 21 217
+             220:     15(ptr) AccessChain 11(buf) 13
+             221:  7(f16vec2) Load 220
+             222:  7(f16vec2) FAdd 221 219
+             223:     15(ptr) AccessChain 11(buf) 13
+                              Store 223 222
+             224:  7(f16vec2) Load 68(constVec2)
+             225:     76(ptr) ImageTexelPointer 119(fimageCube) 109 21
+             226:  7(f16vec2) AtomicFMaxEXT 225 20 21 224
+             227:     15(ptr) AccessChain 11(buf) 13
+             228:  7(f16vec2) Load 227
+             229:  7(f16vec2) FAdd 228 226
+             230:     15(ptr) AccessChain 11(buf) 13
+                              Store 230 229
+             231:  7(f16vec2) Load 68(constVec2)
+             232:     76(ptr) ImageTexelPointer 129(fimageCubeArray) 109 21
+             233:  7(f16vec2) AtomicFMaxEXT 232 20 21 231
+             234:     15(ptr) AccessChain 11(buf) 13
+             235:  7(f16vec2) Load 234
+             236:  7(f16vec2) FAdd 235 233
+             237:     15(ptr) AccessChain 11(buf) 13
+                              Store 237 236
+             238:  7(f16vec2) Load 68(constVec2)
+             239:     76(ptr) ImageTexelPointer 139(fimage3D) 109 21
+             240:  7(f16vec2) AtomicFMaxEXT 239 20 21 238
+             241:     15(ptr) AccessChain 11(buf) 13
+             242:  7(f16vec2) Load 241
+             243:  7(f16vec2) FAdd 242 240
+             244:     15(ptr) AccessChain 11(buf) 13
+                              Store 244 243
+             245:  7(f16vec2) Load 68(constVec2)
+             246:     76(ptr) ImageTexelPointer 74(fimage1D) 14 21
+             247:  7(f16vec2) AtomicExchange 246 20 21 245
+             248:     15(ptr) AccessChain 11(buf) 13
+             249:  7(f16vec2) Load 248
+             250:  7(f16vec2) FAdd 249 247
+             251:     15(ptr) AccessChain 11(buf) 13
+                              Store 251 250
+             252:  7(f16vec2) Load 68(constVec2)
+             253:     76(ptr) ImageTexelPointer 85(fimage1DArray) 87 21
+             254:  7(f16vec2) AtomicExchange 253 20 21 252
+             255:     15(ptr) AccessChain 11(buf) 13
+             256:  7(f16vec2) Load 255
+             257:  7(f16vec2) FAdd 256 254
+             258:     15(ptr) AccessChain 11(buf) 13
+                              Store 258 257
+             259:  7(f16vec2) Load 68(constVec2)
+             260:     76(ptr) ImageTexelPointer 97(fimage2D) 87 21
+             261:  7(f16vec2) AtomicExchange 260 20 21 259
+             262:     15(ptr) AccessChain 11(buf) 13
+             263:  7(f16vec2) Load 262
+             264:  7(f16vec2) FAdd 263 261
+             265:     15(ptr) AccessChain 11(buf) 13
+                              Store 265 264
+             266:  7(f16vec2) Load 68(constVec2)
+             267:     76(ptr) ImageTexelPointer 107(fimage2DArray) 109 21
+             268:  7(f16vec2) AtomicExchange 267 20 21 266
+             269:     15(ptr) AccessChain 11(buf) 13
+             270:  7(f16vec2) Load 269
+             271:  7(f16vec2) FAdd 270 268
+             272:     15(ptr) AccessChain 11(buf) 13
+                              Store 272 271
+             273:  7(f16vec2) Load 68(constVec2)
+             274:     76(ptr) ImageTexelPointer 119(fimageCube) 109 21
+             275:  7(f16vec2) AtomicExchange 274 20 21 273
+             276:     15(ptr) AccessChain 11(buf) 13
+             277:  7(f16vec2) Load 276
+             278:  7(f16vec2) FAdd 277 275
+             279:     15(ptr) AccessChain 11(buf) 13
+                              Store 279 278
+             280:  7(f16vec2) Load 68(constVec2)
+             281:     76(ptr) ImageTexelPointer 129(fimageCubeArray) 109 21
+             282:  7(f16vec2) AtomicExchange 281 20 21 280
+             283:     15(ptr) AccessChain 11(buf) 13
+             284:  7(f16vec2) Load 283
+             285:  7(f16vec2) FAdd 284 282
+             286:     15(ptr) AccessChain 11(buf) 13
+                              Store 286 285
+             287:  7(f16vec2) Load 68(constVec2)
+             288:     76(ptr) ImageTexelPointer 139(fimage3D) 109 21
+             289:  7(f16vec2) AtomicExchange 288 20 21 287
+             290:     15(ptr) AccessChain 11(buf) 13
+             291:  7(f16vec2) Load 290
+             292:  7(f16vec2) FAdd 291 289
+             293:     15(ptr) AccessChain 11(buf) 13
+                              Store 293 292
+                              Store 295(constVec4) 296
+             300:  8(f16vec4) Load 295(constVec4)
+             302:    301(ptr) ImageTexelPointer 299(fimage1Dv4) 14 21
+             303:  8(f16vec4) AtomicFAddEXT 302 20 21 300
+             304:     44(ptr) AccessChain 11(buf) 42
+             305:  8(f16vec4) Load 304
+             306:  8(f16vec4) FAdd 305 303
+             307:     44(ptr) AccessChain 11(buf) 42
+                              Store 307 306
+             311:  8(f16vec4) Load 295(constVec4)
+             312:    301(ptr) ImageTexelPointer 310(fimage1DArrayv4) 87 21
+             313:  8(f16vec4) AtomicFAddEXT 312 20 21 311
+             314:     44(ptr) AccessChain 11(buf) 42
+             315:  8(f16vec4) Load 314
+             316:  8(f16vec4) FAdd 315 313
+             317:     44(ptr) AccessChain 11(buf) 42
+                              Store 317 316
+             321:  8(f16vec4) Load 295(constVec4)
+             322:    301(ptr) ImageTexelPointer 320(fimage2Dv4) 87 21
+             323:  8(f16vec4) AtomicFAddEXT 322 20 21 321
+             324:     44(ptr) AccessChain 11(buf) 42
+             325:  8(f16vec4) Load 324
+             326:  8(f16vec4) FAdd 325 323
+             327:     44(ptr) AccessChain 11(buf) 42
+                              Store 327 326
+             331:  8(f16vec4) Load 295(constVec4)
+             332:    301(ptr) ImageTexelPointer 330(fimage2DArrayv4) 109 21
+             333:  8(f16vec4) AtomicFAddEXT 332 20 21 331
+             334:     44(ptr) AccessChain 11(buf) 42
+             335:  8(f16vec4) Load 334
+             336:  8(f16vec4) FAdd 335 333
+             337:     44(ptr) AccessChain 11(buf) 42
+                              Store 337 336
+             341:  8(f16vec4) Load 295(constVec4)
+             342:    301(ptr) ImageTexelPointer 340(fimageCubev4) 109 21
+             343:  8(f16vec4) AtomicFAddEXT 342 20 21 341
+             344:     44(ptr) AccessChain 11(buf) 42
+             345:  8(f16vec4) Load 344
+             346:  8(f16vec4) FAdd 345 343
+             347:     44(ptr) AccessChain 11(buf) 42
+                              Store 347 346
+             351:  8(f16vec4) Load 295(constVec4)
+             352:    301(ptr) ImageTexelPointer 350(fimageCubeArrayv4) 109 21
+             353:  8(f16vec4) AtomicFAddEXT 352 20 21 351
+             354:     44(ptr) AccessChain 11(buf) 42
+             355:  8(f16vec4) Load 354
+             356:  8(f16vec4) FAdd 355 353
+             357:     44(ptr) AccessChain 11(buf) 42
+                              Store 357 356
+             361:  8(f16vec4) Load 295(constVec4)
+             362:    301(ptr) ImageTexelPointer 360(fimage3Dv4) 109 21
+             363:  8(f16vec4) AtomicFAddEXT 362 20 21 361
+             364:     44(ptr) AccessChain 11(buf) 42
+             365:  8(f16vec4) Load 364
+             366:  8(f16vec4) FAdd 365 363
+             367:     44(ptr) AccessChain 11(buf) 42
+                              Store 367 366
+             368:  8(f16vec4) Load 295(constVec4)
+             369:    301(ptr) ImageTexelPointer 299(fimage1Dv4) 14 21
+             370:  8(f16vec4) AtomicFMinEXT 369 20 21 368
+             371:     44(ptr) AccessChain 11(buf) 42
+             372:  8(f16vec4) Load 371
+             373:  8(f16vec4) FAdd 372 370
+             374:     44(ptr) AccessChain 11(buf) 42
+                              Store 374 373
+             375:  8(f16vec4) Load 295(constVec4)
+             376:    301(ptr) ImageTexelPointer 310(fimage1DArrayv4) 87 21
+             377:  8(f16vec4) AtomicFMinEXT 376 20 21 375
+             378:     44(ptr) AccessChain 11(buf) 42
+             379:  8(f16vec4) Load 378
+             380:  8(f16vec4) FAdd 379 377
+             381:     44(ptr) AccessChain 11(buf) 42
+                              Store 381 380
+             382:  8(f16vec4) Load 295(constVec4)
+             383:    301(ptr) ImageTexelPointer 320(fimage2Dv4) 87 21
+             384:  8(f16vec4) AtomicFMinEXT 383 20 21 382
+             385:     44(ptr) AccessChain 11(buf) 42
+             386:  8(f16vec4) Load 385
+             387:  8(f16vec4) FAdd 386 384
+             388:     44(ptr) AccessChain 11(buf) 42
+                              Store 388 387
+             389:  8(f16vec4) Load 295(constVec4)
+             390:    301(ptr) ImageTexelPointer 330(fimage2DArrayv4) 109 21
+             391:  8(f16vec4) AtomicFMinEXT 390 20 21 389
+             392:     44(ptr) AccessChain 11(buf) 42
+             393:  8(f16vec4) Load 392
+             394:  8(f16vec4) FAdd 393 391
+             395:     44(ptr) AccessChain 11(buf) 42
+                              Store 395 394
+             396:  8(f16vec4) Load 295(constVec4)
+             397:    301(ptr) ImageTexelPointer 340(fimageCubev4) 109 21
+             398:  8(f16vec4) AtomicFMinEXT 397 20 21 396
+             399:     44(ptr) AccessChain 11(buf) 42
+             400:  8(f16vec4) Load 399
+             401:  8(f16vec4) FAdd 400 398
+             402:     44(ptr) AccessChain 11(buf) 42
+                              Store 402 401
+             403:  8(f16vec4) Load 295(constVec4)
+             404:    301(ptr) ImageTexelPointer 350(fimageCubeArrayv4) 109 21
+             405:  8(f16vec4) AtomicFMinEXT 404 20 21 403
+             406:     44(ptr) AccessChain 11(buf) 42
+             407:  8(f16vec4) Load 406
+             408:  8(f16vec4) FAdd 407 405
+             409:     44(ptr) AccessChain 11(buf) 42
+                              Store 409 408
+             410:  8(f16vec4) Load 295(constVec4)
+             411:    301(ptr) ImageTexelPointer 360(fimage3Dv4) 109 21
+             412:  8(f16vec4) AtomicFMinEXT 411 20 21 410
+             413:     44(ptr) AccessChain 11(buf) 42
+             414:  8(f16vec4) Load 413
+             415:  8(f16vec4) FAdd 414 412
+             416:     44(ptr) AccessChain 11(buf) 42
+                              Store 416 415
+             417:  8(f16vec4) Load 295(constVec4)
+             418:    301(ptr) ImageTexelPointer 299(fimage1Dv4) 14 21
+             419:  8(f16vec4) AtomicFMaxEXT 418 20 21 417
+             420:     44(ptr) AccessChain 11(buf) 42
+             421:  8(f16vec4) Load 420
+             422:  8(f16vec4) FAdd 421 419
+             423:     44(ptr) AccessChain 11(buf) 42
+                              Store 423 422
+             424:  8(f16vec4) Load 295(constVec4)
+             425:    301(ptr) ImageTexelPointer 310(fimage1DArrayv4) 87 21
+             426:  8(f16vec4) AtomicFMaxEXT 425 20 21 424
+             427:     44(ptr) AccessChain 11(buf) 42
+             428:  8(f16vec4) Load 427
+             429:  8(f16vec4) FAdd 428 426
+             430:     44(ptr) AccessChain 11(buf) 42
+                              Store 430 429
+             431:  8(f16vec4) Load 295(constVec4)
+             432:    301(ptr) ImageTexelPointer 320(fimage2Dv4) 87 21
+             433:  8(f16vec4) AtomicFMaxEXT 432 20 21 431
+             434:     44(ptr) AccessChain 11(buf) 42
+             435:  8(f16vec4) Load 434
+             436:  8(f16vec4) FAdd 435 433
+             437:     44(ptr) AccessChain 11(buf) 42
+                              Store 437 436
+             438:  8(f16vec4) Load 295(constVec4)
+             439:    301(ptr) ImageTexelPointer 330(fimage2DArrayv4) 109 21
+             440:  8(f16vec4) AtomicFMaxEXT 439 20 21 438
+             441:     44(ptr) AccessChain 11(buf) 42
+             442:  8(f16vec4) Load 441
+             443:  8(f16vec4) FAdd 442 440
+             444:     44(ptr) AccessChain 11(buf) 42
+                              Store 444 443
+             445:  8(f16vec4) Load 295(constVec4)
+             446:    301(ptr) ImageTexelPointer 340(fimageCubev4) 109 21
+             447:  8(f16vec4) AtomicFMaxEXT 446 20 21 445
+             448:     44(ptr) AccessChain 11(buf) 42
+             449:  8(f16vec4) Load 448
+             450:  8(f16vec4) FAdd 449 447
+             451:     44(ptr) AccessChain 11(buf) 42
+                              Store 451 450
+             452:  8(f16vec4) Load 295(constVec4)
+             453:    301(ptr) ImageTexelPointer 350(fimageCubeArrayv4) 109 21
+             454:  8(f16vec4) AtomicFMaxEXT 453 20 21 452
+             455:     44(ptr) AccessChain 11(buf) 42
+             456:  8(f16vec4) Load 455
+             457:  8(f16vec4) FAdd 456 454
+             458:     44(ptr) AccessChain 11(buf) 42
+                              Store 458 457
+             459:  8(f16vec4) Load 295(constVec4)
+             460:    301(ptr) ImageTexelPointer 360(fimage3Dv4) 109 21
+             461:  8(f16vec4) AtomicFMaxEXT 460 20 21 459
+             462:     44(ptr) AccessChain 11(buf) 42
+             463:  8(f16vec4) Load 462
+             464:  8(f16vec4) FAdd 463 461
+             465:     44(ptr) AccessChain 11(buf) 42
+                              Store 465 464
+             466:  8(f16vec4) Load 295(constVec4)
+             467:    301(ptr) ImageTexelPointer 299(fimage1Dv4) 14 21
+             468:  8(f16vec4) AtomicExchange 467 20 21 466
+             469:     44(ptr) AccessChain 11(buf) 42
+             470:  8(f16vec4) Load 469
+             471:  8(f16vec4) FAdd 470 468
+             472:     44(ptr) AccessChain 11(buf) 42
+                              Store 472 471
+             473:  8(f16vec4) Load 295(constVec4)
+             474:    301(ptr) ImageTexelPointer 310(fimage1DArrayv4) 87 21
+             475:  8(f16vec4) AtomicExchange 474 20 21 473
+             476:     44(ptr) AccessChain 11(buf) 42
+             477:  8(f16vec4) Load 476
+             478:  8(f16vec4) FAdd 477 475
+             479:     44(ptr) AccessChain 11(buf) 42
+                              Store 479 478
+             480:  8(f16vec4) Load 295(constVec4)
+             481:    301(ptr) ImageTexelPointer 320(fimage2Dv4) 87 21
+             482:  8(f16vec4) AtomicExchange 481 20 21 480
+             483:     44(ptr) AccessChain 11(buf) 42
+             484:  8(f16vec4) Load 483
+             485:  8(f16vec4) FAdd 484 482
+             486:     44(ptr) AccessChain 11(buf) 42
+                              Store 486 485
+             487:  8(f16vec4) Load 295(constVec4)
+             488:    301(ptr) ImageTexelPointer 330(fimage2DArrayv4) 109 21
+             489:  8(f16vec4) AtomicExchange 488 20 21 487
+             490:     44(ptr) AccessChain 11(buf) 42
+             491:  8(f16vec4) Load 490
+             492:  8(f16vec4) FAdd 491 489
+             493:     44(ptr) AccessChain 11(buf) 42
+                              Store 493 492
+             494:  8(f16vec4) Load 295(constVec4)
+             495:    301(ptr) ImageTexelPointer 340(fimageCubev4) 109 21
+             496:  8(f16vec4) AtomicExchange 495 20 21 494
+             497:     44(ptr) AccessChain 11(buf) 42
+             498:  8(f16vec4) Load 497
+             499:  8(f16vec4) FAdd 498 496
+             500:     44(ptr) AccessChain 11(buf) 42
+                              Store 500 499
+             501:  8(f16vec4) Load 295(constVec4)
+             502:    301(ptr) ImageTexelPointer 350(fimageCubeArrayv4) 109 21
+             503:  8(f16vec4) AtomicExchange 502 20 21 501
+             504:     44(ptr) AccessChain 11(buf) 42
+             505:  8(f16vec4) Load 504
+             506:  8(f16vec4) FAdd 505 503
+             507:     44(ptr) AccessChain 11(buf) 42
+                              Store 507 506
+             508:  8(f16vec4) Load 295(constVec4)
+             509:    301(ptr) ImageTexelPointer 360(fimage3Dv4) 109 21
+             510:  8(f16vec4) AtomicExchange 509 20 21 508
+             511:     44(ptr) AccessChain 11(buf) 42
+             512:  8(f16vec4) Load 511
+             513:  8(f16vec4) FAdd 512 510
+             514:     44(ptr) AccessChain 11(buf) 42
+                              Store 514 513
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.offsets.frag.out b/Test/baseResults/spv.offsets.frag.out
index d753f2f..b6f826e 100644
--- a/Test/baseResults/spv.offsets.frag.out
+++ b/Test/baseResults/spv.offsets.frag.out
@@ -22,20 +22,20 @@
                               MemberName 12(n2) 2  "g"
                               MemberName 12(n2) 3  "h"
                               Name 14  "i2"
+                              Decorate 7(n1) Block
                               MemberDecorate 7(n1) 0 Offset 8
                               MemberDecorate 7(n1) 1 Offset 4
                               MemberDecorate 7(n1) 2 Offset 0
                               MemberDecorate 7(n1) 3 Offset 12
-                              Decorate 7(n1) Block
-                              Decorate 9(i1) DescriptorSet 0
                               Decorate 9(i1) Binding 0
+                              Decorate 9(i1) DescriptorSet 0
+                              Decorate 12(n2) BufferBlock
                               MemberDecorate 12(n2) 0 Offset 32
                               MemberDecorate 12(n2) 1 Offset 48
                               MemberDecorate 12(n2) 2 Offset 16
                               MemberDecorate 12(n2) 3 Offset 0
-                              Decorate 12(n2) BufferBlock
-                              Decorate 14(i2) DescriptorSet 0
                               Decorate 14(i2) Binding 1
+                              Decorate 14(i2) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
diff --git a/Test/baseResults/spv.paramMemory.420.frag.out b/Test/baseResults/spv.paramMemory.420.frag.out
index bc11df4..d533ec7 100644
--- a/Test/baseResults/spv.paramMemory.420.frag.out
+++ b/Test/baseResults/spv.paramMemory.420.frag.out
@@ -41,20 +41,20 @@
                               Decorate 20(image) NonReadable
                               Decorate 27(in_coords) Flat
                               Decorate 27(in_coords) Location 0
-                              Decorate 36(image1) DescriptorSet 0
-                              Decorate 36(image1) Binding 0
                               Decorate 36(image1) Coherent
                               Decorate 36(image1) NonWritable
-                              Decorate 41(image2) DescriptorSet 0
-                              Decorate 41(image2) Binding 2
+                              Decorate 36(image1) Binding 0
+                              Decorate 36(image1) DescriptorSet 0
                               Decorate 41(image2) NonWritable
-                              Decorate 47(image3) DescriptorSet 0
-                              Decorate 47(image3) Binding 1
+                              Decorate 41(image2) Binding 2
+                              Decorate 41(image2) DescriptorSet 0
                               Decorate 47(image3) Coherent
                               Decorate 47(image3) NonReadable
-                              Decorate 57(image4) DescriptorSet 0
-                              Decorate 57(image4) Binding 3
+                              Decorate 47(image3) Binding 1
+                              Decorate 47(image3) DescriptorSet 0
                               Decorate 57(image4) NonReadable
+                              Decorate 57(image4) Binding 3
+                              Decorate 57(image4) DescriptorSet 0
                               Decorate 66(out_color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.paramMemory.frag.out b/Test/baseResults/spv.paramMemory.frag.out
index ebb2ccb..ccca402 100644
--- a/Test/baseResults/spv.paramMemory.frag.out
+++ b/Test/baseResults/spv.paramMemory.frag.out
@@ -36,13 +36,13 @@
                               Decorate 20(image) NonReadable
                               Decorate 27(in_coords) Flat
                               Decorate 27(in_coords) Location 0
-                              Decorate 43(image3) DescriptorSet 0
-                              Decorate 43(image3) Binding 1
                               Decorate 43(image3) Coherent
                               Decorate 43(image3) NonReadable
-                              Decorate 52(image4) DescriptorSet 0
-                              Decorate 52(image4) Binding 3
+                              Decorate 43(image3) Binding 1
+                              Decorate 43(image3) DescriptorSet 0
                               Decorate 52(image4) NonReadable
+                              Decorate 52(image4) Binding 3
+                              Decorate 52(image4) DescriptorSet 0
                               Decorate 61(out_color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.perprimitiveNV.frag.out b/Test/baseResults/spv.perprimitiveNV.frag.out
index 079a5f4..b319ec0 100644
--- a/Test/baseResults/spv.perprimitiveNV.frag.out
+++ b/Test/baseResults/spv.perprimitiveNV.frag.out
@@ -21,12 +21,12 @@
                               MemberName 17(C) 0  "h"
                               Name 19  ""
                               Decorate 8(g) Location 8
-                              MemberDecorate 9(B) 0 PerPrimitiveNV
                               Decorate 9(B) Block
+                              MemberDecorate 9(B) 0 PerPrimitiveNV
                               Decorate 11 Location 0
+                              Decorate 17(C) Block
                               MemberDecorate 17(C) 0 Flat
                               MemberDecorate 17(C) 0 Centroid
-                              Decorate 17(C) Block
                               Decorate 19 Location 4
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.pp.line.frag.out b/Test/baseResults/spv.pp.line.frag.out
index 7218254..807ecae 100644
--- a/Test/baseResults/spv.pp.line.frag.out
+++ b/Test/baseResults/spv.pp.line.frag.out
@@ -13,7 +13,7 @@
                               EntryPoint Fragment 5  "main" 60 72 75 78
                               ExecutionMode 5 OriginUpperLeft
                1:             String  "spv.pp.line.frag"
-              13:             String  "header.h"
+               7:             String  "header.h"
                               Source GLSL 140 1  "// OpModuleProcessed auto-map-locations
 // OpModuleProcessed auto-map-bindings
 // OpModuleProcessed client vulkan100
@@ -61,8 +61,8 @@
 "
                               SourceExtension  "GL_GOOGLE_cpp_style_line_directive"
                               Name 5  "main"
-                              Name 11  "myAbs(f1;"
-                              Name 10  "x"
+                              Name 12  "myAbs(f1;"
+                              Name 11  "x"
                               Name 27  "blendscale"
                               Name 29  "param"
                               Name 31  "bias"
@@ -74,54 +74,54 @@
                               Name 72  "gl_FragColor"
                               Name 75  "u"
                               Name 78  "blend"
-                              Decorate 41(texSampler1D) DescriptorSet 0
                               Decorate 41(texSampler1D) Binding 0
-                              Decorate 56(texSampler2D) DescriptorSet 0
+                              Decorate 41(texSampler1D) DescriptorSet 0
                               Decorate 56(texSampler2D) Binding 1
+                              Decorate 56(texSampler2D) DescriptorSet 0
                               Decorate 60(coords2D) Location 2
                               Decorate 72(gl_FragColor) Location 0
                               Decorate 75(u) Location 1
                               Decorate 78(blend) Location 0
                3:             TypeVoid
                4:             TypeFunction 3
-               7:             TypeFloat 32
-               8:             TypePointer Function 7(float)
-               9:             TypeFunction 7(float) 8(ptr)
-              15:    7(float) Constant 0
+               8:             TypeFloat 32
+               9:             TypePointer Function 8(float)
+              10:             TypeFunction 8(float) 9(ptr)
+              15:    8(float) Constant 0
               16:             TypeBool
-              28:    7(float) Constant 1071971828
-              32:    7(float) Constant 1073741824
-              34:             TypeVector 7(float) 4
+              28:    8(float) Constant 1071971828
+              32:    8(float) Constant 1073741824
+              34:             TypeVector 8(float) 4
               35:             TypePointer Function 34(fvec4)
               37:   34(fvec4) ConstantComposite 15 15 15 15
-              38:             TypeImage 7(float) 1D sampled format:Unknown
+              38:             TypeImage 8(float) 1D sampled format:Unknown
               39:             TypeSampledImage 38
               40:             TypePointer UniformConstant 39
 41(texSampler1D):     40(ptr) Variable UniformConstant
-              53:             TypeImage 7(float) 2D sampled format:Unknown
+              53:             TypeImage 8(float) 2D sampled format:Unknown
               54:             TypeSampledImage 53
               55:             TypePointer UniformConstant 54
 56(texSampler2D):     55(ptr) Variable UniformConstant
-              58:             TypeVector 7(float) 2
+              58:             TypeVector 8(float) 2
               59:             TypePointer Input 58(fvec2)
     60(coords2D):     59(ptr) Variable Input
               71:             TypePointer Output 34(fvec4)
 72(gl_FragColor):     71(ptr) Variable Output
               74:             TypePointer Input 34(fvec4)
            75(u):     74(ptr) Variable Input
-              77:             TypePointer Input 7(float)
+              77:             TypePointer Input 8(float)
        78(blend):     77(ptr) Variable Input
                               Line 1 23 11
          5(main):           3 Function None 4
                6:             Label
-  27(blendscale):      8(ptr) Variable Function
-       29(param):      8(ptr) Variable Function
-        31(bias):      8(ptr) Variable Function
-    33(coords1D):      8(ptr) Variable Function
+  27(blendscale):      9(ptr) Variable Function
+       29(param):      9(ptr) Variable Function
+        31(bias):      9(ptr) Variable Function
+    33(coords1D):      9(ptr) Variable Function
        36(color):     35(ptr) Variable Function
                               Line 1 25 0
                               Store 29(param) 28
-              30:    7(float) FunctionCall 11(myAbs(f1;) 29(param)
+              30:    8(float) FunctionCall 12(myAbs(f1;) 29(param)
                               Store 27(blendscale) 30
                               Line 1 26 0
                               Store 31(bias) 32
@@ -131,15 +131,15 @@
                               Store 36(color) 37
                               Line 1 54 0
               42:          39 Load 41(texSampler1D)
-              43:    7(float) Load 33(coords1D)
+              43:    8(float) Load 33(coords1D)
               44:   34(fvec4) ImageSampleImplicitLod 42 43
               45:   34(fvec4) Load 36(color)
               46:   34(fvec4) FAdd 45 44
                               Store 36(color) 46
                               Line 1 55 0
               47:          39 Load 41(texSampler1D)
-              48:    7(float) Load 33(coords1D)
-              49:    7(float) Load 31(bias)
+              48:    8(float) Load 33(coords1D)
+              49:    8(float) Load 31(bias)
               50:   34(fvec4) ImageSampleImplicitLod 47 48 Bias 49
               51:   34(fvec4) Load 36(color)
               52:   34(fvec4) FAdd 51 50
@@ -154,7 +154,7 @@
                               Line 1 104 0
               65:          54 Load 56(texSampler2D)
               66:   58(fvec2) Load 60(coords2D)
-              67:    7(float) Load 31(bias)
+              67:    8(float) Load 31(bias)
               68:   34(fvec4) ImageSampleImplicitLod 65 66 Bias 67
               69:   34(fvec4) Load 36(color)
               70:   34(fvec4) FAdd 69 68
@@ -162,31 +162,32 @@
                               Line 1 106 0
               73:   34(fvec4) Load 36(color)
               76:   34(fvec4) Load 75(u)
-              79:    7(float) Load 78(blend)
-              80:    7(float) Load 27(blendscale)
-              81:    7(float) FMul 79 80
+              79:    8(float) Load 78(blend)
+              80:    8(float) Load 27(blendscale)
+              81:    8(float) FMul 79 80
               82:   34(fvec4) CompositeConstruct 81 81 81 81
               83:   34(fvec4) ExtInst 2(GLSL.std.450) 46(FMix) 73 76 82
                               Store 72(gl_FragColor) 83
+                              Line 1 107 0
                               Return
                               FunctionEnd
-                              Line 13 1 20
-   11(myAbs(f1;):    7(float) Function None 9
-           10(x):      8(ptr) FunctionParameter
-              12:             Label
-                              Line 13 2 0
-              14:    7(float) Load 10(x)
+                              Line 7 1 20
+   12(myAbs(f1;):    8(float) Function None 10
+           11(x):      9(ptr) FunctionParameter
+              13:             Label
+                              Line 7 2 0
+              14:    8(float) Load 11(x)
               17:    16(bool) FOrdGreaterThan 14 15
                               SelectionMerge 19 None
                               BranchConditional 17 18 22
               18:               Label
-                                Line 13 3 0
-              20:    7(float)   Load 10(x)
+                                Line 7 3 0
+              20:    8(float)   Load 11(x)
                                 ReturnValue 20
               22:               Label
-                                Line 13 6 0
-              23:    7(float)   Load 10(x)
-              24:    7(float)   FNegate 23
+                                Line 7 6 0
+              23:    8(float)   Load 11(x)
+              24:    8(float)   FNegate 23
                                 ReturnValue 24
               19:             Label
                               Unreachable
diff --git a/Test/baseResults/spv.precise.tesc.out b/Test/baseResults/spv.precise.tesc.out
index 84617ca..93d1d98 100644
--- a/Test/baseResults/spv.precise.tesc.out
+++ b/Test/baseResults/spv.precise.tesc.out
@@ -22,10 +22,10 @@
                               Decorate 12(in_te_position) Location 0
                               Decorate 15(gl_InvocationID) BuiltIn InvocationId
                               Decorate 20(in_tc_position) Location 0
-                              Decorate 30(gl_TessLevelInner) Patch
                               Decorate 30(gl_TessLevelInner) BuiltIn TessLevelInner
-                              Decorate 40(gl_TessLevelOuter) Patch
+                              Decorate 30(gl_TessLevelInner) Patch
                               Decorate 40(gl_TessLevelOuter) BuiltIn TessLevelOuter
+                              Decorate 40(gl_TessLevelOuter) Patch
                               Decorate 45(in_tc_tessParam) Location 1
                               Decorate 52 NoContraction
                               Decorate 53 NoContraction
diff --git a/Test/baseResults/spv.precise.tese.out b/Test/baseResults/spv.precise.tese.out
index 6fe183d..d9b7141 100644
--- a/Test/baseResults/spv.precise.tese.out
+++ b/Test/baseResults/spv.precise.tese.out
@@ -41,9 +41,9 @@
                               Decorate 101 NoContraction
                               Decorate 106 NoContraction
                               Decorate 109 NoContraction
+                              Decorate 110(gl_PerVertex) Block
                               MemberDecorate 110(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 110(gl_PerVertex) 1 BuiltIn PointSize
-                              Decorate 110(gl_PerVertex) Block
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.precision.frag.out b/Test/baseResults/spv.precision.frag.out
index 8144dfb..0cdba71 100644
--- a/Test/baseResults/spv.precision.frag.out
+++ b/Test/baseResults/spv.precision.frag.out
@@ -35,8 +35,8 @@
                               MemberName 117(S) 1  "b"
                               Name 119  "s"
                               Name 149  "gl_SampleMaskIn"
-                              Decorate 12(foo(vf3;) RelaxedPrecision
                               Decorate 11(mv3) RelaxedPrecision
+                              Decorate 12(foo(vf3;) RelaxedPrecision
                               Decorate 23(highfin) Location 2
                               Decorate 27 RelaxedPrecision
                               Decorate 28 RelaxedPrecision
@@ -99,8 +99,8 @@
                               Decorate 143 RelaxedPrecision
                               Decorate 144 RelaxedPrecision
                               Decorate 145 RelaxedPrecision
-                              Decorate 149(gl_SampleMaskIn) Flat
                               Decorate 149(gl_SampleMaskIn) BuiltIn SampleMask
+                              Decorate 149(gl_SampleMaskIn) Flat
                               Decorate 153 RelaxedPrecision
                               Decorate 156 RelaxedPrecision
                               Decorate 159 RelaxedPrecision
diff --git a/Test/baseResults/spv.precisionArgs.frag.out b/Test/baseResults/spv.precisionArgs.frag.out
index a35b1d3..3cc72c3 100644
--- a/Test/baseResults/spv.precisionArgs.frag.out
+++ b/Test/baseResults/spv.precisionArgs.frag.out
@@ -40,8 +40,8 @@
                               Name 80  "param"
                               Decorate 8(f) RelaxedPrecision
                               Decorate 14(f) RelaxedPrecision
-                              Decorate 20(retM(f1;) RelaxedPrecision
                               Decorate 19(x) RelaxedPrecision
+                              Decorate 20(retM(f1;) RelaxedPrecision
                               Decorate 26(retHM(f1;) RelaxedPrecision
                               Decorate 28(x) RelaxedPrecision
                               Decorate 31 RelaxedPrecision
diff --git a/Test/baseResults/spv.precisionNonESSamp.frag.out b/Test/baseResults/spv.precisionNonESSamp.frag.out
index 40ca536..d082bee 100644
--- a/Test/baseResults/spv.precisionNonESSamp.frag.out
+++ b/Test/baseResults/spv.precisionNonESSamp.frag.out
@@ -23,22 +23,22 @@
                               Decorate 9(color) RelaxedPrecision
                               Decorate 9(color) Location 0
                               Decorate 13(s) RelaxedPrecision
-                              Decorate 13(s) DescriptorSet 0
                               Decorate 13(s) Binding 0
+                              Decorate 13(s) DescriptorSet 0
                               Decorate 14 RelaxedPrecision
                               Decorate 17(v2) RelaxedPrecision
                               Decorate 17(v2) Location 0
                               Decorate 18 RelaxedPrecision
                               Decorate 19 RelaxedPrecision
-                              Decorate 23(t) DescriptorSet 0
                               Decorate 23(t) Binding 1
+                              Decorate 23(t) DescriptorSet 0
                               Decorate 27(v3) RelaxedPrecision
                               Decorate 27(v3) Location 1
                               Decorate 28 RelaxedPrecision
                               Decorate 31(vi1) RelaxedPrecision
                               Decorate 34(i1) RelaxedPrecision
-                              Decorate 34(i1) DescriptorSet 0
                               Decorate 34(i1) Binding 2
+                              Decorate 34(i1) DescriptorSet 0
                               Decorate 35 RelaxedPrecision
                               Decorate 39(iv2) RelaxedPrecision
                               Decorate 39(iv2) Flat
@@ -46,8 +46,8 @@
                               Decorate 40 RelaxedPrecision
                               Decorate 41 RelaxedPrecision
                               Decorate 42(vi2) RelaxedPrecision
-                              Decorate 43(i2) DescriptorSet 0
                               Decorate 43(i2) Binding 3
+                              Decorate 43(i2) DescriptorSet 0
                               Decorate 45 RelaxedPrecision
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.precisionTexture.frag.out b/Test/baseResults/spv.precisionTexture.frag.out
index e46b2d7..19aa656 100644
--- a/Test/baseResults/spv.precisionTexture.frag.out
+++ b/Test/baseResults/spv.precisionTexture.frag.out
@@ -20,28 +20,28 @@
                               Name 65  "fragColor"
                               Decorate 9(v) RelaxedPrecision
                               Decorate 13(texM) RelaxedPrecision
-                              Decorate 13(texM) DescriptorSet 0
                               Decorate 13(texM) Binding 0
+                              Decorate 13(texM) DescriptorSet 0
                               Decorate 14 RelaxedPrecision
                               Decorate 16(vertex) Location 0
                               Decorate 20 RelaxedPrecision
-                              Decorate 21(texH) DescriptorSet 0
                               Decorate 21(texH) Binding 1
+                              Decorate 21(texH) DescriptorSet 0
                               Decorate 26 RelaxedPrecision
                               Decorate 34 RelaxedPrecision
                               Decorate 41 RelaxedPrecision
                               Decorate 45 RelaxedPrecision
                               Decorate 52(imageM) RelaxedPrecision
-                              Decorate 52(imageM) DescriptorSet 0
-                              Decorate 52(imageM) Binding 0
                               Decorate 52(imageM) NonWritable
+                              Decorate 52(imageM) Binding 0
+                              Decorate 52(imageM) DescriptorSet 0
                               Decorate 53 RelaxedPrecision
                               Decorate 57(coord) Flat
                               Decorate 57(coord) Location 1
                               Decorate 59 RelaxedPrecision
-                              Decorate 60(imageH) DescriptorSet 0
-                              Decorate 60(imageH) Binding 1
                               Decorate 60(imageH) NonWritable
+                              Decorate 60(imageH) Binding 1
+                              Decorate 60(imageH) DescriptorSet 0
                               Decorate 65(fragColor) RelaxedPrecision
                               Decorate 65(fragColor) Location 0
                2:             TypeVoid
diff --git a/Test/baseResults/spv.pushConstant.vert.out b/Test/baseResults/spv.pushConstant.vert.out
index f6df47d..cd82500 100644
--- a/Test/baseResults/spv.pushConstant.vert.out
+++ b/Test/baseResults/spv.pushConstant.vert.out
@@ -15,9 +15,9 @@
                               Name 13  "matInst"
                               Name 24  "color"
                               Decorate 10 ArrayStride 4
+                              Decorate 11(Material) Block
                               MemberDecorate 11(Material) 0 Offset 0
                               MemberDecorate 11(Material) 1 Offset 4
-                              Decorate 11(Material) Block
                               Decorate 24(color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.pushConstantAnon.vert.out b/Test/baseResults/spv.pushConstantAnon.vert.out
index ca7d345..eddb77a 100644
--- a/Test/baseResults/spv.pushConstantAnon.vert.out
+++ b/Test/baseResults/spv.pushConstantAnon.vert.out
@@ -15,9 +15,9 @@
                               Name 13  ""
                               Name 24  "color"
                               Decorate 10 ArrayStride 4
+                              Decorate 11(Material) Block
                               MemberDecorate 11(Material) 0 Offset 0
                               MemberDecorate 11(Material) 1 Offset 4
-                              Decorate 11(Material) Block
                               Decorate 24(color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.queryL.frag.out b/Test/baseResults/spv.queryL.frag.out
index 1e18387..1b3c63e 100644
--- a/Test/baseResults/spv.queryL.frag.out
+++ b/Test/baseResults/spv.queryL.frag.out
@@ -41,46 +41,46 @@
                               Name 182  "usampCubeA"
                               Name 219  "sampBuf"
                               Name 223  "sampRect"
-                              Decorate 13(samp1D) DescriptorSet 0
                               Decorate 13(samp1D) Binding 0
-                              Decorate 23(isamp2D) DescriptorSet 0
+                              Decorate 13(samp1D) DescriptorSet 0
                               Decorate 23(isamp2D) Binding 1
-                              Decorate 34(usamp3D) DescriptorSet 0
+                              Decorate 23(isamp2D) DescriptorSet 0
                               Decorate 34(usamp3D) Binding 4
-                              Decorate 46(sampCube) DescriptorSet 0
+                              Decorate 34(usamp3D) DescriptorSet 0
                               Decorate 46(sampCube) Binding 5
-                              Decorate 55(isamp1DA) DescriptorSet 0
+                              Decorate 46(sampCube) DescriptorSet 0
                               Decorate 55(isamp1DA) Binding 7
-                              Decorate 64(usamp2DA) DescriptorSet 0
+                              Decorate 55(isamp1DA) DescriptorSet 0
                               Decorate 64(usamp2DA) Binding 9
-                              Decorate 73(isampCubeA) DescriptorSet 0
+                              Decorate 64(usamp2DA) DescriptorSet 0
                               Decorate 73(isampCubeA) Binding 10
-                              Decorate 82(samp1Ds) DescriptorSet 0
+                              Decorate 73(isampCubeA) DescriptorSet 0
                               Decorate 82(samp1Ds) Binding 12
-                              Decorate 91(samp2Ds) DescriptorSet 0
+                              Decorate 82(samp1Ds) DescriptorSet 0
                               Decorate 91(samp2Ds) Binding 13
-                              Decorate 100(sampCubes) DescriptorSet 0
+                              Decorate 91(samp2Ds) DescriptorSet 0
                               Decorate 100(sampCubes) Binding 14
-                              Decorate 109(samp1DAs) DescriptorSet 0
+                              Decorate 100(sampCubes) DescriptorSet 0
                               Decorate 109(samp1DAs) Binding 15
-                              Decorate 118(samp2DAs) DescriptorSet 0
+                              Decorate 109(samp1DAs) DescriptorSet 0
                               Decorate 118(samp2DAs) Binding 16
-                              Decorate 127(sampCubeAs) DescriptorSet 0
+                              Decorate 118(samp2DAs) DescriptorSet 0
                               Decorate 127(sampCubeAs) Binding 17
-                              Decorate 141(usamp2D) DescriptorSet 0
+                              Decorate 127(sampCubeAs) DescriptorSet 0
                               Decorate 141(usamp2D) Binding 2
-                              Decorate 150(isamp3D) DescriptorSet 0
+                              Decorate 141(usamp2D) DescriptorSet 0
                               Decorate 150(isamp3D) Binding 3
-                              Decorate 159(isampCube) DescriptorSet 0
+                              Decorate 150(isamp3D) DescriptorSet 0
                               Decorate 159(isampCube) Binding 6
-                              Decorate 173(samp2DA) DescriptorSet 0
+                              Decorate 159(isampCube) DescriptorSet 0
                               Decorate 173(samp2DA) Binding 8
-                              Decorate 182(usampCubeA) DescriptorSet 0
+                              Decorate 173(samp2DA) DescriptorSet 0
                               Decorate 182(usampCubeA) Binding 11
-                              Decorate 219(sampBuf) DescriptorSet 0
+                              Decorate 182(usampCubeA) DescriptorSet 0
                               Decorate 219(sampBuf) Binding 0
-                              Decorate 223(sampRect) DescriptorSet 0
+                              Decorate 219(sampBuf) DescriptorSet 0
                               Decorate 223(sampRect) Binding 0
+                              Decorate 223(sampRect) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.queueFamilyScope.comp.out b/Test/baseResults/spv.queueFamilyScope.comp.out
index 49a59a3..565269c 100644
--- a/Test/baseResults/spv.queueFamilyScope.comp.out
+++ b/Test/baseResults/spv.queueFamilyScope.comp.out
@@ -16,10 +16,10 @@
                               Name 7  "Buffer"
                               MemberName 7(Buffer) 0  "a"
                               Name 9  "A"
-                              MemberDecorate 7(Buffer) 0 Offset 0
                               Decorate 7(Buffer) Block
-                              Decorate 9(A) DescriptorSet 0
+                              MemberDecorate 7(Buffer) 0 Offset 0
                               Decorate 9(A) Binding 0
+                              Decorate 9(A) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
diff --git a/Test/baseResults/spv.rankShift.comp.out b/Test/baseResults/spv.rankShift.comp.out
index cecde79..a091ec1 100644
--- a/Test/baseResults/spv.rankShift.comp.out
+++ b/Test/baseResults/spv.rankShift.comp.out
@@ -16,11 +16,11 @@
                               Name 11  "arg0"
                               Name 15  "arg1"
                               Decorate 11(arg0) Location 4
-                              Decorate 11(arg0) DescriptorSet 0
                               Decorate 11(arg0) Binding 0
+                              Decorate 11(arg0) DescriptorSet 0
                               Decorate 15(arg1) Location 5
-                              Decorate 15(arg1) DescriptorSet 0
                               Decorate 15(arg1) Binding 1
+                              Decorate 15(arg1) DescriptorSet 0
                               Decorate 32 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.register.autoassign-2.frag.out b/Test/baseResults/spv.register.autoassign-2.frag.out
index 61d920c..a921f10 100644
--- a/Test/baseResults/spv.register.autoassign-2.frag.out
+++ b/Test/baseResults/spv.register.autoassign-2.frag.out
@@ -20,12 +20,12 @@
                               Name 39  "psout"
                               Name 40  "param"
                               Name 44  "psout.Color"
-                              Decorate 18(g_tScene[0]) DescriptorSet 0
                               Decorate 18(g_tScene[0]) Binding 10
-                              Decorate 22(g_tSamp) DescriptorSet 0
+                              Decorate 18(g_tScene[0]) DescriptorSet 0
                               Decorate 22(g_tSamp) Binding 5
-                              Decorate 31(g_tScene[1]) DescriptorSet 0
+                              Decorate 22(g_tSamp) DescriptorSet 0
                               Decorate 31(g_tScene[1]) Binding 11
+                              Decorate 31(g_tScene[1]) DescriptorSet 0
                               Decorate 44(psout.Color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.register.autoassign.frag.out b/Test/baseResults/spv.register.autoassign.frag.out
index b4db04e..be86a86 100644
--- a/Test/baseResults/spv.register.autoassign.frag.out
+++ b/Test/baseResults/spv.register.autoassign.frag.out
@@ -44,47 +44,47 @@
                               Name 141  "psout"
                               Name 151  "@entryPointOutput.Color"
                               Name 154  "g_tTex_unused3"
-                              Decorate 21(g_tTex1) DescriptorSet 0
                               Decorate 21(g_tTex1) Binding 11
-                              Decorate 25(g_sSamp1) DescriptorSet 0
+                              Decorate 21(g_tTex1) DescriptorSet 0
                               Decorate 25(g_sSamp1) Binding 5
-                              Decorate 31(g_tTex2) DescriptorSet 0
+                              Decorate 25(g_sSamp1) DescriptorSet 0
                               Decorate 31(g_tTex2) Binding 14
-                              Decorate 33(g_sSamp2) DescriptorSet 0
+                              Decorate 31(g_tTex2) DescriptorSet 0
                               Decorate 33(g_sSamp2) Binding 6
-                              Decorate 43(g_tTex3) DescriptorSet 0
+                              Decorate 33(g_sSamp2) DescriptorSet 0
                               Decorate 43(g_tTex3) Binding 13
-                              Decorate 50(g_sSamp3) DescriptorSet 0
+                              Decorate 43(g_tTex3) DescriptorSet 0
                               Decorate 50(g_sSamp3) Binding 7
-                              Decorate 68(g_tTex4) DescriptorSet 0
+                              Decorate 50(g_sSamp3) DescriptorSet 0
                               Decorate 68(g_tTex4) Binding 15
-                              Decorate 73(g_sSamp4) DescriptorSet 0
+                              Decorate 68(g_tTex4) DescriptorSet 0
                               Decorate 73(g_sSamp4) Binding 8
-                              Decorate 88(g_tTex5) DescriptorSet 0
+                              Decorate 73(g_sSamp4) DescriptorSet 0
                               Decorate 88(g_tTex5) Binding 16
-                              Decorate 90(g_sSamp5) DescriptorSet 0
+                              Decorate 88(g_tTex5) DescriptorSet 0
                               Decorate 90(g_sSamp5) Binding 9
+                              Decorate 90(g_sSamp5) DescriptorSet 0
                               MemberDecorate 97(MyStruct_t) 0 Offset 0
                               MemberDecorate 97(MyStruct_t) 1 Offset 4
                               MemberDecorate 97(MyStruct_t) 2 Offset 16
+                              Decorate 99($Global) Block
                               MemberDecorate 99($Global) 0 Offset 0
                               MemberDecorate 99($Global) 1 Offset 32
                               MemberDecorate 99($Global) 2 Offset 48
                               MemberDecorate 99($Global) 3 Offset 64
-                              Decorate 99($Global) Block
-                              Decorate 101 DescriptorSet 0
                               Decorate 101 Binding 20
-                              Decorate 123(g_tTex_unused1) DescriptorSet 0
+                              Decorate 101 DescriptorSet 0
                               Decorate 123(g_tTex_unused1) Binding 10
-                              Decorate 125(g_sSamp_unused1) DescriptorSet 0
+                              Decorate 123(g_tTex_unused1) DescriptorSet 0
                               Decorate 125(g_sSamp_unused1) Binding 0
-                              Decorate 130(g_tTex_unused2) DescriptorSet 0
+                              Decorate 125(g_sSamp_unused1) DescriptorSet 0
                               Decorate 130(g_tTex_unused2) Binding 12
-                              Decorate 132(g_sSamp_unused2) DescriptorSet 0
+                              Decorate 130(g_tTex_unused2) DescriptorSet 0
                               Decorate 132(g_sSamp_unused2) Binding 0
+                              Decorate 132(g_sSamp_unused2) DescriptorSet 0
                               Decorate 151(@entryPointOutput.Color) Location 0
-                              Decorate 154(g_tTex_unused3) DescriptorSet 0
                               Decorate 154(g_tTex_unused3) Binding 0
+                              Decorate 154(g_tTex_unused3) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.register.autoassign.rangetest.frag.out b/Test/baseResults/spv.register.autoassign.rangetest.frag.out
index 84a439a..b8e2573 100644
--- a/Test/baseResults/spv.register.autoassign.rangetest.frag.out
+++ b/Test/baseResults/spv.register.autoassign.rangetest.frag.out
@@ -22,10 +22,10 @@
                               Name 44  "psout"
                               Name 45  "param"
                               Name 49  "psout.Color"
-                              Decorate 21(g_tScene) DescriptorSet 0
                               Decorate 21(g_tScene) Binding 5
-                              Decorate 27(g_tSamp) DescriptorSet 0
+                              Decorate 21(g_tScene) DescriptorSet 0
                               Decorate 27(g_tSamp) Binding 5
+                              Decorate 27(g_tSamp) DescriptorSet 0
                               Decorate 49(psout.Color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.register.noautoassign.frag.out b/Test/baseResults/spv.register.noautoassign.frag.out
index 8c8cd3c..8b2c29c 100644
--- a/Test/baseResults/spv.register.noautoassign.frag.out
+++ b/Test/baseResults/spv.register.noautoassign.frag.out
@@ -44,47 +44,47 @@
                               Name 141  "psout"
                               Name 151  "@entryPointOutput.Color"
                               Name 154  "g_tTex_unused3"
-                              Decorate 21(g_tTex1) DescriptorSet 0
                               Decorate 21(g_tTex1) Binding 11
-                              Decorate 25(g_sSamp1) DescriptorSet 0
+                              Decorate 21(g_tTex1) DescriptorSet 0
                               Decorate 25(g_sSamp1) Binding 5
-                              Decorate 31(g_tTex2) DescriptorSet 0
+                              Decorate 25(g_sSamp1) DescriptorSet 0
                               Decorate 31(g_tTex2) Binding 0
-                              Decorate 33(g_sSamp2) DescriptorSet 0
+                              Decorate 31(g_tTex2) DescriptorSet 0
                               Decorate 33(g_sSamp2) Binding 0
-                              Decorate 43(g_tTex3) DescriptorSet 0
+                              Decorate 33(g_sSamp2) DescriptorSet 0
                               Decorate 43(g_tTex3) Binding 13
-                              Decorate 50(g_sSamp3) DescriptorSet 0
+                              Decorate 43(g_tTex3) DescriptorSet 0
                               Decorate 50(g_sSamp3) Binding 7
-                              Decorate 68(g_tTex4) DescriptorSet 0
+                              Decorate 50(g_sSamp3) DescriptorSet 0
                               Decorate 68(g_tTex4) Binding 0
-                              Decorate 73(g_sSamp4) DescriptorSet 0
+                              Decorate 68(g_tTex4) DescriptorSet 0
                               Decorate 73(g_sSamp4) Binding 0
-                              Decorate 88(g_tTex5) DescriptorSet 0
+                              Decorate 73(g_sSamp4) DescriptorSet 0
                               Decorate 88(g_tTex5) Binding 0
-                              Decorate 90(g_sSamp5) DescriptorSet 0
+                              Decorate 88(g_tTex5) DescriptorSet 0
                               Decorate 90(g_sSamp5) Binding 0
+                              Decorate 90(g_sSamp5) DescriptorSet 0
                               MemberDecorate 97(MyStruct_t) 0 Offset 0
                               MemberDecorate 97(MyStruct_t) 1 Offset 4
                               MemberDecorate 97(MyStruct_t) 2 Offset 16
+                              Decorate 99($Global) Block
                               MemberDecorate 99($Global) 0 Offset 0
                               MemberDecorate 99($Global) 1 Offset 32
                               MemberDecorate 99($Global) 2 Offset 48
                               MemberDecorate 99($Global) 3 Offset 64
-                              Decorate 99($Global) Block
-                              Decorate 101 DescriptorSet 0
                               Decorate 101 Binding 0
-                              Decorate 123(g_tTex_unused1) DescriptorSet 0
+                              Decorate 101 DescriptorSet 0
                               Decorate 123(g_tTex_unused1) Binding 10
-                              Decorate 125(g_sSamp_unused1) DescriptorSet 0
+                              Decorate 123(g_tTex_unused1) DescriptorSet 0
                               Decorate 125(g_sSamp_unused1) Binding 0
-                              Decorate 130(g_tTex_unused2) DescriptorSet 0
+                              Decorate 125(g_sSamp_unused1) DescriptorSet 0
                               Decorate 130(g_tTex_unused2) Binding 12
-                              Decorate 132(g_sSamp_unused2) DescriptorSet 0
+                              Decorate 130(g_tTex_unused2) DescriptorSet 0
                               Decorate 132(g_sSamp_unused2) Binding 0
+                              Decorate 132(g_sSamp_unused2) DescriptorSet 0
                               Decorate 151(@entryPointOutput.Color) Location 0
-                              Decorate 154(g_tTex_unused3) DescriptorSet 0
                               Decorate 154(g_tTex_unused3) Binding 0
+                              Decorate 154(g_tTex_unused3) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.register.subpass.frag.out b/Test/baseResults/spv.register.subpass.frag.out
index 7c69c91..c20f596 100644
--- a/Test/baseResults/spv.register.subpass.frag.out
+++ b/Test/baseResults/spv.register.subpass.frag.out
@@ -19,14 +19,14 @@
                               Name 29  "result73"
                               Name 30  "subpass_2"
                               Name 38  "@entryPointOutput"
-                              Decorate 15(subpass_f4) DescriptorSet 0
                               Decorate 15(subpass_f4) Binding 21
+                              Decorate 15(subpass_f4) DescriptorSet 0
                               Decorate 15(subpass_f4) InputAttachmentIndex 1
-                              Decorate 25(subpass_ms_f4) DescriptorSet 0
                               Decorate 25(subpass_ms_f4) Binding 20
+                              Decorate 25(subpass_ms_f4) DescriptorSet 0
                               Decorate 25(subpass_ms_f4) InputAttachmentIndex 4
-                              Decorate 30(subpass_2) DescriptorSet 0
                               Decorate 30(subpass_2) Binding 22
+                              Decorate 30(subpass_2) DescriptorSet 0
                               Decorate 30(subpass_2) InputAttachmentIndex 7
                               Decorate 38(@entryPointOutput) Location 0
                2:             TypeVoid
diff --git a/Test/baseResults/spv.replicate.comp.out b/Test/baseResults/spv.replicate.comp.out
new file mode 100644
index 0000000..965b37b
--- /dev/null
+++ b/Test/baseResults/spv.replicate.comp.out
@@ -0,0 +1,117 @@
+spv.replicate.comp
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 66
+
+                              Capability Shader
+                              Capability VulkanMemoryModelKHR
+                              Capability CooperativeMatrixKHR
+                              Capability CapabilityReplicatedCompositesEXT
+                              Extension  "SPV_EXT_replicated_composites"
+                              Extension  "SPV_KHR_cooperative_matrix"
+                              Extension  "SPV_KHR_vulkan_memory_model"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical VulkanKHR
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 1 1 1
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_spec_constant_composites"
+                              SourceExtension  "GL_KHR_cooperative_matrix"
+                              SourceExtension  "GL_KHR_memory_scope_semantics"
+                              Name 4  "main"
+                              Name 13  "coop"
+                              Name 17  "a"
+                              Name 21  "v"
+                              Name 28  "m"
+                              Name 33  "five"
+                              Name 35  "six"
+                              Name 39  "arr"
+                              Name 44  "arr2"
+                              Name 49  "S"
+                              MemberName 49(S) 0  "a"
+                              MemberName 49(S) 1  "b"
+                              MemberName 49(S) 2  "c"
+                              Name 51  "s2"
+                              Name 54  "SS"
+                              MemberName 54(SS) 0  "s1"
+                              MemberName 54(SS) 1  "s2"
+                              Name 56  "ss"
+                              Decorate 61 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeInt 32 0
+               8:      7(int) Constant 3
+               9:      7(int) Constant 16
+              10:      7(int) Constant 0
+              11:             TypeCooperativeMatrixKHR 6(float) 8 9 9 10
+              12:             TypePointer Function 11
+              14:    6(float) Constant 1065353216
+              15:          11 ConstantCompositeReplicateEXT 14
+              16:             TypePointer Function 6(float)
+              18:    6(float) Constant 1073741824
+              19:             TypeVector 6(float) 4
+              20:             TypePointer Function 19(fvec4)
+              24:    6(float) Constant 1077936128
+              25:   19(fvec4) ConstantCompositeReplicateEXT 24
+              26:             TypeMatrix 19(fvec4) 4
+              27:             TypePointer Function 26
+              31:             TypeInt 32 1
+              32:             TypePointer Function 31(int)
+              34:     31(int) Constant 5
+              36:     31(int) Constant 6
+              37:             TypeArray 31(int) 8
+              38:             TypePointer Function 37
+              42:             TypeArray 37 8
+              43:             TypePointer Function 42
+              47:          37 ConstantCompositeReplicateEXT 34
+              48:          42 ConstantCompositeReplicateEXT 47
+           49(S):             TypeStruct 31(int) 31(int) 31(int)
+              50:             TypePointer Function 49(S)
+          54(SS):             TypeStruct 49(S) 49(S)
+              55:             TypePointer Function 54(SS)
+              59:             TypeVector 7(int) 3
+              60:      7(int) Constant 1
+              61:   59(ivec3) ConstantCompositeReplicateEXT 60
+              62:       49(S) ConstantCompositeReplicateEXT 36
+              63:      54(SS) ConstantCompositeReplicateEXT 62
+              64:          26 ConstantCompositeReplicateEXT 25
+              65:          11 ConstantCompositeReplicateEXT 24
+         4(main):           2 Function None 3
+               5:             Label
+        13(coop):     12(ptr) Variable Function
+           17(a):     16(ptr) Variable Function
+           21(v):     20(ptr) Variable Function
+           28(m):     27(ptr) Variable Function
+        33(five):     32(ptr) Variable Function
+         35(six):     32(ptr) Variable Function
+         39(arr):     38(ptr) Variable Function
+        44(arr2):     43(ptr) Variable Function
+          51(s2):     50(ptr) Variable Function
+          56(ss):     55(ptr) Variable Function
+                              Store 13(coop) 15
+                              Store 17(a) 18
+              22:    6(float) Load 17(a)
+              23:   19(fvec4) CompositeConstructReplicateEXT 22
+                              Store 21(v) 23
+                              Store 21(v) 25
+              29:   19(fvec4) Load 21(v)
+              30:          26 CompositeConstructReplicateEXT 29
+                              Store 28(m) 30
+                              Store 33(five) 34
+                              Store 35(six) 36
+              40:     31(int) Load 33(five)
+              41:          37 CompositeConstructReplicateEXT 40
+                              Store 39(arr) 41
+              45:          37 Load 39(arr)
+              46:          42 CompositeConstructReplicateEXT 45
+                              Store 44(arr2) 46
+                              Store 44(arr2) 48
+              52:     31(int) Load 35(six)
+              53:       49(S) CompositeConstructReplicateEXT 52
+                              Store 51(s2) 53
+              57:       49(S) Load 51(s2)
+              58:      54(SS) CompositeConstructReplicateEXT 57
+                              Store 56(ss) 58
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.replicatespec.comp.out b/Test/baseResults/spv.replicatespec.comp.out
new file mode 100644
index 0000000..dd7157f
--- /dev/null
+++ b/Test/baseResults/spv.replicatespec.comp.out
@@ -0,0 +1,132 @@
+spv.replicatespec.comp
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 68
+
+                              Capability Shader
+                              Capability VulkanMemoryModelKHR
+                              Capability CooperativeMatrixKHR
+                              Capability CapabilityReplicatedCompositesEXT
+                              Extension  "SPV_EXT_replicated_composites"
+                              Extension  "SPV_KHR_cooperative_matrix"
+                              Extension  "SPV_KHR_vulkan_memory_model"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical VulkanKHR
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 1 1 1
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_spec_constant_composites"
+                              SourceExtension  "GL_KHR_cooperative_matrix"
+                              SourceExtension  "GL_KHR_memory_scope_semantics"
+                              Name 4  "main"
+                              Name 13  "coop"
+                              Name 17  "a"
+                              Name 21  "v"
+                              Name 24  "spec_float"
+                              Name 25  "cv"
+                              Name 28  "m"
+                              Name 33  "five"
+                              Name 35  "six"
+                              Name 39  "arr"
+                              Name 44  "arr2"
+                              Name 47  "cfive"
+                              Name 48  "carr"
+                              Name 49  "carr2"
+                              Name 50  "S"
+                              MemberName 50(S) 0  "a"
+                              MemberName 50(S) 1  "b"
+                              MemberName 50(S) 2  "c"
+                              Name 52  "s2"
+                              Name 55  "SS"
+                              MemberName 55(SS) 0  "s1"
+                              MemberName 55(SS) 1  "s2"
+                              Name 57  "ss"
+                              Name 63  "csix"
+                              Name 64  "cs"
+                              Name 65  "css"
+                              Name 66  "cm"
+                              Name 67  "ccoop"
+                              Decorate 24(spec_float) SpecId 2
+                              Decorate 47(cfive) SpecId 0
+                              Decorate 62 BuiltIn WorkgroupSize
+                              Decorate 63(csix) SpecId 1
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeInt 32 0
+               8:      7(int) Constant 3
+               9:      7(int) Constant 16
+              10:      7(int) Constant 0
+              11:             TypeCooperativeMatrixKHR 6(float) 8 9 9 10
+              12:             TypePointer Function 11
+              14:    6(float) Constant 1065353216
+              15:          11 ConstantCompositeReplicateEXT 14
+              16:             TypePointer Function 6(float)
+              18:    6(float) Constant 1073741824
+              19:             TypeVector 6(float) 4
+              20:             TypePointer Function 19(fvec4)
+  24(spec_float):    6(float) SpecConstant 1077936128
+          25(cv):   19(fvec4) SpecConstantCompositeReplicateEXT 24(spec_float)
+              26:             TypeMatrix 19(fvec4) 4
+              27:             TypePointer Function 26
+              31:             TypeInt 32 1
+              32:             TypePointer Function 31(int)
+              34:     31(int) Constant 5
+              36:     31(int) Constant 6
+              37:             TypeArray 31(int) 8
+              38:             TypePointer Function 37
+              42:             TypeArray 37 8
+              43:             TypePointer Function 42
+       47(cfive):     31(int) SpecConstant 5
+        48(carr):          37 SpecConstantCompositeReplicateEXT 47(cfive)
+       49(carr2):          42 SpecConstantCompositeReplicateEXT 48(carr)
+           50(S):             TypeStruct 31(int) 31(int) 31(int)
+              51:             TypePointer Function 50(S)
+          55(SS):             TypeStruct 50(S) 50(S)
+              56:             TypePointer Function 55(SS)
+              60:             TypeVector 7(int) 3
+              61:      7(int) Constant 1
+              62:   60(ivec3) ConstantCompositeReplicateEXT 61
+        63(csix):     31(int) SpecConstant 6
+          64(cs):       50(S) SpecConstantCompositeReplicateEXT 63(csix)
+         65(css):      55(SS) SpecConstantCompositeReplicateEXT 64(cs)
+          66(cm):          26 SpecConstantCompositeReplicateEXT 25(cv)
+       67(ccoop):          11 SpecConstantCompositeReplicateEXT 24(spec_float)
+         4(main):           2 Function None 3
+               5:             Label
+        13(coop):     12(ptr) Variable Function
+           17(a):     16(ptr) Variable Function
+           21(v):     20(ptr) Variable Function
+           28(m):     27(ptr) Variable Function
+        33(five):     32(ptr) Variable Function
+         35(six):     32(ptr) Variable Function
+         39(arr):     38(ptr) Variable Function
+        44(arr2):     43(ptr) Variable Function
+          52(s2):     51(ptr) Variable Function
+          57(ss):     56(ptr) Variable Function
+                              Store 13(coop) 15
+                              Store 17(a) 18
+              22:    6(float) Load 17(a)
+              23:   19(fvec4) CompositeConstructReplicateEXT 22
+                              Store 21(v) 23
+                              Store 21(v) 25(cv)
+              29:   19(fvec4) Load 21(v)
+              30:          26 CompositeConstructReplicateEXT 29
+                              Store 28(m) 30
+                              Store 33(five) 34
+                              Store 35(six) 36
+              40:     31(int) Load 33(five)
+              41:          37 CompositeConstructReplicateEXT 40
+                              Store 39(arr) 41
+              45:          37 Load 39(arr)
+              46:          42 CompositeConstructReplicateEXT 45
+                              Store 44(arr2) 46
+                              Store 44(arr2) 49(carr2)
+              53:     31(int) Load 35(six)
+              54:       50(S) CompositeConstructReplicateEXT 53
+                              Store 52(s2) 54
+              58:       50(S) Load 52(s2)
+              59:      55(SS) CompositeConstructReplicateEXT 58
+                              Store 57(ss) 59
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.rw.autoassign.frag.out b/Test/baseResults/spv.rw.autoassign.frag.out
index 0c46493..3dd6088 100644
--- a/Test/baseResults/spv.rw.autoassign.frag.out
+++ b/Test/baseResults/spv.rw.autoassign.frag.out
@@ -21,10 +21,10 @@
                               Name 27  "g_tBuf1du1"
                               Name 33  "psout"
                               Name 42  "@entryPointOutput.Color"
-                              Decorate 16(g_tTex1df1) DescriptorSet 0
                               Decorate 16(g_tTex1df1) Binding 20
-                              Decorate 27(g_tBuf1du1) DescriptorSet 0
+                              Decorate 16(g_tTex1df1) DescriptorSet 0
                               Decorate 27(g_tBuf1du1) Binding 21
+                              Decorate 27(g_tBuf1du1) DescriptorSet 0
                               Decorate 42(@entryPointOutput.Color) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.sampleId.frag.out b/Test/baseResults/spv.sampleId.frag.out
index 7f3232d..c4dda4a 100644
--- a/Test/baseResults/spv.sampleId.frag.out
+++ b/Test/baseResults/spv.sampleId.frag.out
@@ -14,8 +14,8 @@
                               Name 8  "gl_SampleID"
                               Name 18  "color"
                               Name 20  "samp"
-                              Decorate 8(gl_SampleID) Flat
                               Decorate 8(gl_SampleID) BuiltIn SampleId
+                              Decorate 8(gl_SampleID) Flat
                               Decorate 18(color) Location 0
                               Decorate 20(samp) Location 0
                2:             TypeVoid
diff --git a/Test/baseResults/spv.sampledImageBlock.frag.out b/Test/baseResults/spv.sampledImageBlock.frag.out
new file mode 100644
index 0000000..a6625f7
--- /dev/null
+++ b/Test/baseResults/spv.sampledImageBlock.frag.out
@@ -0,0 +1,94 @@
+spv.sampledImageBlock.frag
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 55
+
+                              Capability Shader
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 36 45
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 9  "texel"
+                              Name 12  "tex0"
+                              Name 16  "samp0"
+                              Name 21  "ParamBuffer"
+                              MemberName 21(ParamBuffer) 0  "cond"
+                              Name 23  "paramBuffer"
+                              Name 36  "texCoord"
+                              Name 45  "fragColor"
+                              Decorate 12(tex0) Binding 0
+                              Decorate 12(tex0) DescriptorSet 0
+                              Decorate 16(samp0) Binding 1
+                              Decorate 16(samp0) DescriptorSet 0
+                              Decorate 21(ParamBuffer) Block
+                              MemberDecorate 21(ParamBuffer) 0 Offset 0
+                              Decorate 23(paramBuffer) Binding 2
+                              Decorate 23(paramBuffer) DescriptorSet 0
+                              Decorate 36(texCoord) Flat
+                              Decorate 36(texCoord) Location 0
+                              Decorate 45(fragColor) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 32
+               7:             TypeVector 6(float) 4
+               8:             TypePointer Function 7(fvec4)
+              10:             TypeImage 6(float) 2D sampled format:Unknown
+              11:             TypePointer UniformConstant 10
+        12(tex0):     11(ptr) Variable UniformConstant
+              14:             TypeSampler
+              15:             TypePointer UniformConstant 14
+       16(samp0):     15(ptr) Variable UniformConstant
+              18:             TypeSampledImage 10
+              20:             TypeInt 32 1
+ 21(ParamBuffer):             TypeStruct 20(int)
+              22:             TypePointer Uniform 21(ParamBuffer)
+ 23(paramBuffer):     22(ptr) Variable Uniform
+              24:     20(int) Constant 0
+              25:             TypePointer Uniform 20(int)
+              28:             TypeBool
+              30:             TypeVector 20(int) 2
+              31:             TypePointer Function 30(ivec2)
+              35:             TypePointer Input 30(ivec2)
+    36(texCoord):     35(ptr) Variable Input
+              44:             TypePointer Output 7(fvec4)
+   45(fragColor):     44(ptr) Variable Output
+              46:             TypeVector 6(float) 3
+              49:    6(float) Constant 1065353216
+         4(main):           2 Function None 3
+               5:             Label
+        9(texel):      8(ptr) Variable Function
+              32:     31(ptr) Variable Function
+              13:          10 Load 12(tex0)
+              17:          14 Load 16(samp0)
+              19:          18 SampledImage 13 17
+              26:     25(ptr) AccessChain 23(paramBuffer) 24
+              27:     20(int) Load 26
+              29:    28(bool) IEqual 27 24
+                              SelectionMerge 34 None
+                              BranchConditional 29 33 38
+              33:               Label
+              37:   30(ivec2)   Load 36(texCoord)
+                                Store 32 37
+                                Branch 34
+              38:               Label
+              39:   30(ivec2)   Load 36(texCoord)
+              40:   30(ivec2)   VectorShuffle 39 39 1 0
+                                Store 32 40
+                                Branch 34
+              34:             Label
+              41:   30(ivec2) Load 32
+              54:          18 SampledImage 13 17
+              42:          10 Image 54
+              43:    7(fvec4) ImageFetch 42 41 Lod 24
+                              Store 9(texel) 43
+              47:    7(fvec4) Load 9(texel)
+              48:   46(fvec3) VectorShuffle 47 47 0 1 2
+              50:    6(float) CompositeExtract 48 0
+              51:    6(float) CompositeExtract 48 1
+              52:    6(float) CompositeExtract 48 2
+              53:    7(fvec4) CompositeConstruct 50 51 52 49
+                              Store 45(fragColor) 53
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.samplerlessTextureFunctions.frag.out b/Test/baseResults/spv.samplerlessTextureFunctions.frag.out
index 4479912..ef7b436 100644
--- a/Test/baseResults/spv.samplerlessTextureFunctions.frag.out
+++ b/Test/baseResults/spv.samplerlessTextureFunctions.frag.out
@@ -25,12 +25,12 @@
                               Name 42  "bufSize"
                               Name 45  "tex2DLevels"
                               Name 48  "texMSSamples"
-                              Decorate 12(tex2D) DescriptorSet 0
                               Decorate 12(tex2D) Binding 1
-                              Decorate 22(texMS) DescriptorSet 0
+                              Decorate 12(tex2D) DescriptorSet 0
                               Decorate 22(texMS) Binding 1
-                              Decorate 28(buf) DescriptorSet 0
+                              Decorate 22(texMS) DescriptorSet 0
                               Decorate 28(buf) Binding 0
+                              Decorate 28(buf) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.scalarlayout.frag.out b/Test/baseResults/spv.scalarlayout.frag.out
index 977f06b..a99709d 100644
--- a/Test/baseResults/spv.scalarlayout.frag.out
+++ b/Test/baseResults/spv.scalarlayout.frag.out
@@ -39,22 +39,22 @@
                               MemberDecorate 15(S) 4 Offset 28
                               MemberDecorate 15(S) 5 Offset 40
                               Decorate 16 ArrayStride 48
+                              Decorate 17(B1) Block
                               MemberDecorate 17(B1) 0 Offset 0
                               MemberDecorate 17(B1) 1 Offset 4
                               MemberDecorate 17(B1) 2 Offset 12
                               MemberDecorate 17(B1) 3 Offset 24
                               MemberDecorate 17(B1) 4 ColMajor
-                              MemberDecorate 17(B1) 4 Offset 32
                               MemberDecorate 17(B1) 4 MatrixStride 12
+                              MemberDecorate 17(B1) 4 Offset 32
                               MemberDecorate 17(B1) 5 ColMajor
-                              MemberDecorate 17(B1) 5 Offset 56
                               MemberDecorate 17(B1) 5 MatrixStride 12
+                              MemberDecorate 17(B1) 5 Offset 56
                               MemberDecorate 17(B1) 6 Offset 104
                               MemberDecorate 17(B1) 7 Offset 112
                               MemberDecorate 17(B1) 8 Offset 160
-                              Decorate 17(B1) Block
-                              Decorate 19 DescriptorSet 0
                               Decorate 19 Binding 0
+                              Decorate 19 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.scalarlayoutfloat16.frag.out b/Test/baseResults/spv.scalarlayoutfloat16.frag.out
index 93c0d2a..880786f 100644
--- a/Test/baseResults/spv.scalarlayoutfloat16.frag.out
+++ b/Test/baseResults/spv.scalarlayoutfloat16.frag.out
@@ -39,6 +39,7 @@
                               MemberDecorate 13(S) 4 Offset 18
                               MemberDecorate 13(S) 5 Offset 24
                               Decorate 14 ArrayStride 32
+                              Decorate 15(B1) Block
                               MemberDecorate 15(B1) 0 Offset 0
                               MemberDecorate 15(B1) 1 Offset 2
                               MemberDecorate 15(B1) 2 Offset 6
@@ -46,9 +47,8 @@
                               MemberDecorate 15(B1) 4 Offset 16
                               MemberDecorate 15(B1) 5 Offset 24
                               MemberDecorate 15(B1) 6 Offset 56
-                              Decorate 15(B1) Block
-                              Decorate 17 DescriptorSet 0
                               Decorate 17 Binding 0
+                              Decorate 17 DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 16
diff --git a/Test/baseResults/spv.separate.frag.out b/Test/baseResults/spv.separate.frag.out
index b960934..00d3282 100644
--- a/Test/baseResults/spv.separate.frag.out
+++ b/Test/baseResults/spv.separate.frag.out
@@ -57,84 +57,84 @@
                               Name 293  "tex3D"
                               Name 304  "tex2DRect"
                               Decorate 11(color) Location 0
-                              Decorate 14(t2d) DescriptorSet 0
                               Decorate 14(t2d) Binding 2
-                              Decorate 18(s) DescriptorSet 0
+                              Decorate 14(t2d) DescriptorSet 0
                               Decorate 18(s) Binding 0
-                              Decorate 31(t3d) DescriptorSet 0
+                              Decorate 18(s) DescriptorSet 0
                               Decorate 31(t3d) Binding 3
+                              Decorate 31(t3d) DescriptorSet 0
                               Decorate 34(i) Flat
                               Decorate 34(i) Location 0
-                              Decorate 41(sA) DescriptorSet 0
                               Decorate 41(sA) Binding 1
-                              Decorate 58(tex2D) DescriptorSet 0
+                              Decorate 41(sA) DescriptorSet 0
                               Decorate 58(tex2D) Binding 0
-                              Decorate 64(texCube) DescriptorSet 0
+                              Decorate 58(tex2D) DescriptorSet 0
                               Decorate 64(texCube) Binding 0
-                              Decorate 71(texCubeArray) DescriptorSet 0
+                              Decorate 64(texCube) DescriptorSet 0
                               Decorate 71(texCubeArray) Binding 0
-                              Decorate 77(sShadow) DescriptorSet 0
+                              Decorate 71(texCubeArray) DescriptorSet 0
                               Decorate 77(sShadow) Binding 0
-                              Decorate 84(itexCubeArray) DescriptorSet 0
+                              Decorate 77(sShadow) DescriptorSet 0
                               Decorate 84(itexCubeArray) Binding 0
-                              Decorate 91(utexCubeArray) DescriptorSet 0
+                              Decorate 84(itexCubeArray) DescriptorSet 0
                               Decorate 91(utexCubeArray) Binding 0
-                              Decorate 98(tex1DArray) DescriptorSet 0
+                              Decorate 91(utexCubeArray) DescriptorSet 0
                               Decorate 98(tex1DArray) Binding 0
-                              Decorate 105(itex1DArray) DescriptorSet 0
+                              Decorate 98(tex1DArray) DescriptorSet 0
                               Decorate 105(itex1DArray) Binding 0
-                              Decorate 112(utex1D) DescriptorSet 0
+                              Decorate 105(itex1DArray) DescriptorSet 0
                               Decorate 112(utex1D) Binding 0
-                              Decorate 119(itex1D) DescriptorSet 0
+                              Decorate 112(utex1D) DescriptorSet 0
                               Decorate 119(itex1D) Binding 0
-                              Decorate 126(utex1DArray) DescriptorSet 0
+                              Decorate 119(itex1D) DescriptorSet 0
                               Decorate 126(utex1DArray) Binding 0
-                              Decorate 133(texBuffer) DescriptorSet 0
+                              Decorate 126(utex1DArray) DescriptorSet 0
                               Decorate 133(texBuffer) Binding 0
-                              Decorate 145(tex2DArray) DescriptorSet 0
+                              Decorate 133(texBuffer) DescriptorSet 0
                               Decorate 145(tex2DArray) Binding 0
-                              Decorate 157(itex2D) DescriptorSet 0
+                              Decorate 145(tex2DArray) DescriptorSet 0
                               Decorate 157(itex2D) Binding 0
-                              Decorate 164(itex3D) DescriptorSet 0
+                              Decorate 157(itex2D) DescriptorSet 0
                               Decorate 164(itex3D) Binding 0
-                              Decorate 171(itexCube) DescriptorSet 0
+                              Decorate 164(itex3D) DescriptorSet 0
                               Decorate 171(itexCube) Binding 0
-                              Decorate 178(itex2DArray) DescriptorSet 0
+                              Decorate 171(itexCube) DescriptorSet 0
                               Decorate 178(itex2DArray) Binding 0
-                              Decorate 185(utex2D) DescriptorSet 0
+                              Decorate 178(itex2DArray) DescriptorSet 0
                               Decorate 185(utex2D) Binding 0
-                              Decorate 192(utex3D) DescriptorSet 0
+                              Decorate 185(utex2D) DescriptorSet 0
                               Decorate 192(utex3D) Binding 0
-                              Decorate 199(utexCube) DescriptorSet 0
+                              Decorate 192(utex3D) DescriptorSet 0
                               Decorate 199(utexCube) Binding 0
-                              Decorate 206(utex2DArray) DescriptorSet 0
+                              Decorate 199(utexCube) DescriptorSet 0
                               Decorate 206(utex2DArray) Binding 0
-                              Decorate 213(itex2DRect) DescriptorSet 0
+                              Decorate 206(utex2DArray) DescriptorSet 0
                               Decorate 213(itex2DRect) Binding 0
-                              Decorate 220(utex2DRect) DescriptorSet 0
+                              Decorate 213(itex2DRect) DescriptorSet 0
                               Decorate 220(utex2DRect) Binding 0
-                              Decorate 227(itexBuffer) DescriptorSet 0
+                              Decorate 220(utex2DRect) DescriptorSet 0
                               Decorate 227(itexBuffer) Binding 0
-                              Decorate 234(utexBuffer) DescriptorSet 0
+                              Decorate 227(itexBuffer) DescriptorSet 0
                               Decorate 234(utexBuffer) Binding 0
-                              Decorate 241(tex2DMS) DescriptorSet 0
+                              Decorate 234(utexBuffer) DescriptorSet 0
                               Decorate 241(tex2DMS) Binding 0
-                              Decorate 248(itex2DMS) DescriptorSet 0
+                              Decorate 241(tex2DMS) DescriptorSet 0
                               Decorate 248(itex2DMS) Binding 0
-                              Decorate 255(utex2DMS) DescriptorSet 0
+                              Decorate 248(itex2DMS) DescriptorSet 0
                               Decorate 255(utex2DMS) Binding 0
-                              Decorate 262(tex2DMSArray) DescriptorSet 0
+                              Decorate 255(utex2DMS) DescriptorSet 0
                               Decorate 262(tex2DMSArray) Binding 0
-                              Decorate 269(itex2DMSArray) DescriptorSet 0
+                              Decorate 262(tex2DMSArray) DescriptorSet 0
                               Decorate 269(itex2DMSArray) Binding 0
-                              Decorate 276(utex2DMSArray) DescriptorSet 0
+                              Decorate 269(itex2DMSArray) DescriptorSet 0
                               Decorate 276(utex2DMSArray) Binding 0
-                              Decorate 283(tex1D) DescriptorSet 0
+                              Decorate 276(utex2DMSArray) DescriptorSet 0
                               Decorate 283(tex1D) Binding 0
-                              Decorate 293(tex3D) DescriptorSet 0
+                              Decorate 283(tex1D) DescriptorSet 0
                               Decorate 293(tex3D) Binding 0
-                              Decorate 304(tex2DRect) DescriptorSet 0
+                              Decorate 293(tex3D) DescriptorSet 0
                               Decorate 304(tex2DRect) Binding 0
+                              Decorate 304(tex2DRect) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                8:             TypeFloat 32
diff --git a/Test/baseResults/spv.set.vert.out b/Test/baseResults/spv.set.vert.out
index b311c70..95c7cbd 100644
--- a/Test/baseResults/spv.set.vert.out
+++ b/Test/baseResults/spv.set.vert.out
@@ -15,12 +15,12 @@
                               Name 12  "setBufInst"
                               Name 21  "samp2D"
                               Decorate 9(color) Location 0
-                              MemberDecorate 10(setBuf) 0 Offset 0
                               Decorate 10(setBuf) BufferBlock
-                              Decorate 12(setBufInst) DescriptorSet 0
+                              MemberDecorate 10(setBuf) 0 Offset 0
                               Decorate 12(setBufInst) Binding 8
-                              Decorate 21(samp2D) DescriptorSet 4
+                              Decorate 12(setBufInst) DescriptorSet 0
                               Decorate 21(samp2D) Binding 7
+                              Decorate 21(samp2D) DescriptorSet 4
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.shaderBallot.comp.out b/Test/baseResults/spv.shaderBallot.comp.out
index 143b2e9..da363e9 100644
--- a/Test/baseResults/spv.shaderBallot.comp.out
+++ b/Test/baseResults/spv.shaderBallot.comp.out
@@ -36,12 +36,12 @@
                               Decorate 36(gl_SubGroupGtMaskARB) BuiltIn SubgroupGtMaskKHR
                               Decorate 43(gl_SubGroupLeMaskARB) BuiltIn SubgroupLeMaskKHR
                               Decorate 50(gl_SubGroupLtMaskARB) BuiltIn SubgroupLtMaskKHR
+                              Decorate 72(Buffers) BufferBlock
                               MemberDecorate 72(Buffers) 0 Offset 0
                               MemberDecorate 72(Buffers) 1 Offset 16
                               MemberDecorate 72(Buffers) 2 Offset 32
-                              Decorate 72(Buffers) BufferBlock
-                              Decorate 75(data) DescriptorSet 0
                               Decorate 75(data) Binding 0
+                              Decorate 75(data) DescriptorSet 0
                               Decorate 396 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.shaderBallotAMD.comp.out b/Test/baseResults/spv.shaderBallotAMD.comp.out
index 2d8ad55..a52f5b9 100644
--- a/Test/baseResults/spv.shaderBallotAMD.comp.out
+++ b/Test/baseResults/spv.shaderBallotAMD.comp.out
@@ -33,6 +33,7 @@
                               MemberName 21(Buffers) 7  "i16v"
                               MemberName 21(Buffers) 8  "u16"
                               Name 23  ""
+                              Decorate 21(Buffers) BufferBlock
                               MemberDecorate 21(Buffers) 0 Offset 0
                               MemberDecorate 21(Buffers) 1 Offset 8
                               MemberDecorate 21(Buffers) 2 Offset 16
@@ -42,9 +43,8 @@
                               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 23 DescriptorSet 0
                               Decorate 1342 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.shaderDrawParams.vert.out b/Test/baseResults/spv.shaderDrawParams.vert.out
index a84c2fe..58b26cb 100644
--- a/Test/baseResults/spv.shaderDrawParams.vert.out
+++ b/Test/baseResults/spv.shaderDrawParams.vert.out
@@ -26,17 +26,17 @@
                               Name 37  "gl_DrawIDARB"
                               Decorate 9(gl_BaseVertexARB) BuiltIn BaseVertex
                               Decorate 16(gl_BaseInstanceARB) BuiltIn BaseInstance
+                              Decorate 27(gl_PerVertex) Block
                               MemberDecorate 27(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 27(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 27(gl_PerVertex) 2 BuiltIn ClipDistance
                               MemberDecorate 27(gl_PerVertex) 3 BuiltIn CullDistance
-                              Decorate 27(gl_PerVertex) Block
                               Decorate 31 ArrayStride 16
                               Decorate 33 ArrayStride 64
-                              MemberDecorate 34(Block) 0 Offset 0
                               Decorate 34(Block) Block
-                              Decorate 36(block) DescriptorSet 0
+                              MemberDecorate 34(Block) 0 Offset 0
                               Decorate 36(block) Binding 0
+                              Decorate 36(block) DescriptorSet 0
                               Decorate 37(gl_DrawIDARB) BuiltIn DrawIndex
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.shaderFragMaskAMD.frag.out b/Test/baseResults/spv.shaderFragMaskAMD.frag.out
index 3b46114..17f98d4 100644
--- a/Test/baseResults/spv.shaderFragMaskAMD.frag.out
+++ b/Test/baseResults/spv.shaderFragMaskAMD.frag.out
@@ -21,12 +21,12 @@
                               Name 42  "is2DMSArray"
                               Name 62  "usubpassMS"
                               Name 78  "fragColor"
-                              Decorate 18(s2DMS) DescriptorSet 0
                               Decorate 18(s2DMS) Binding 0
-                              Decorate 42(is2DMSArray) DescriptorSet 0
+                              Decorate 18(s2DMS) DescriptorSet 0
                               Decorate 42(is2DMSArray) Binding 1
-                              Decorate 62(usubpassMS) DescriptorSet 0
+                              Decorate 42(is2DMSArray) DescriptorSet 0
                               Decorate 62(usubpassMS) Binding 2
+                              Decorate 62(usubpassMS) DescriptorSet 0
                               Decorate 62(usubpassMS) InputAttachmentIndex 0
                               Decorate 78(fragColor) Location 0
                2:             TypeVoid
diff --git a/Test/baseResults/spv.shaderGroupVote.comp.out b/Test/baseResults/spv.shaderGroupVote.comp.out
index 0724170..0a8c5a2 100644
--- a/Test/baseResults/spv.shaderGroupVote.comp.out
+++ b/Test/baseResults/spv.shaderGroupVote.comp.out
@@ -17,10 +17,10 @@
                               Name 10  "Buffers"
                               MemberName 10(Buffers) 0  "b"
                               Name 12  ""
-                              MemberDecorate 10(Buffers) 0 Offset 0
                               Decorate 10(Buffers) BufferBlock
-                              Decorate 12 DescriptorSet 0
+                              MemberDecorate 10(Buffers) 0 Offset 0
                               Decorate 12 Binding 0
+                              Decorate 12 DescriptorSet 0
                               Decorate 32 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.shaderImageFootprint.frag.out b/Test/baseResults/spv.shaderImageFootprint.frag.out
index 743fd36..0f87bcb 100644
--- a/Test/baseResults/spv.shaderImageFootprint.frag.out
+++ b/Test/baseResults/spv.shaderImageFootprint.frag.out
@@ -66,17 +66,17 @@
                               Name 478  "ResType"
                               Name 528  "ResType"
                               Name 577  "ResType"
+                              Decorate 8(result2D) BufferBlock
                               MemberDecorate 8(result2D) 0 Offset 0
                               MemberDecorate 8(result2D) 1 Offset 8
                               MemberDecorate 8(result2D) 2 Offset 16
                               MemberDecorate 8(result2D) 3 Offset 24
                               MemberDecorate 8(result2D) 4 Offset 32
                               MemberDecorate 8(result2D) 5 Offset 36
-                              Decorate 8(result2D) BufferBlock
-                              Decorate 10 DescriptorSet 0
                               Decorate 10 Binding 2
-                              Decorate 17(sample2D) DescriptorSet 0
+                              Decorate 10 DescriptorSet 0
                               Decorate 17(sample2D) Binding 0
+                              Decorate 17(sample2D) DescriptorSet 0
                               Decorate 21(P2) Location 0
                               Decorate 24(granularity) Flat
                               Decorate 24(granularity) Location 3
@@ -85,17 +85,17 @@
                               Decorate 225(lod) Location 5
                               Decorate 275(dx) Location 6
                               Decorate 277(dy) Location 8
+                              Decorate 377(result3D) BufferBlock
                               MemberDecorate 377(result3D) 0 Offset 0
                               MemberDecorate 377(result3D) 1 Offset 16
                               MemberDecorate 377(result3D) 2 Offset 32
                               MemberDecorate 377(result3D) 3 Offset 48
                               MemberDecorate 377(result3D) 4 Offset 56
                               MemberDecorate 377(result3D) 5 Offset 60
-                              Decorate 377(result3D) BufferBlock
-                              Decorate 379 DescriptorSet 0
                               Decorate 379 Binding 3
-                              Decorate 383(sample3D) DescriptorSet 0
+                              Decorate 379 DescriptorSet 0
                               Decorate 383(sample3D) Binding 1
+                              Decorate 383(sample3D) DescriptorSet 0
                               Decorate 387(P3) Location 2
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.shadingRate.frag.out b/Test/baseResults/spv.shadingRate.frag.out
index 86079ce..a05cbed 100644
--- a/Test/baseResults/spv.shadingRate.frag.out
+++ b/Test/baseResults/spv.shadingRate.frag.out
@@ -18,11 +18,11 @@
                               Name 17  "InvocationsPerPixel"
                               Name 19  "gl_InvocationsPerPixelNV"
                               Decorate 9(FragmentSize) Location 0
-                              Decorate 13(gl_FragmentSizeNV) Flat
                               Decorate 13(gl_FragmentSizeNV) BuiltIn FragSizeEXT
+                              Decorate 13(gl_FragmentSizeNV) Flat
                               Decorate 17(InvocationsPerPixel) Location 2
-                              Decorate 19(gl_InvocationsPerPixelNV) Flat
                               Decorate 19(gl_InvocationsPerPixelNV) BuiltIn FragInvocationCountEXT
+                              Decorate 19(gl_InvocationsPerPixelNV) Flat
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.smBuiltins.frag.out b/Test/baseResults/spv.smBuiltins.frag.out
index 1619cf6..dc6ce4e 100644
--- a/Test/baseResults/spv.smBuiltins.frag.out
+++ b/Test/baseResults/spv.smBuiltins.frag.out
@@ -19,14 +19,14 @@
                               Name 15  "gl_WarpIDNV"
                               Name 17  "gl_SMIDNV"
                               Decorate 9(data) Location 0
-                              Decorate 11(gl_WarpsPerSMNV) Flat
                               Decorate 11(gl_WarpsPerSMNV) BuiltIn WarpsPerSMNV
-                              Decorate 13(gl_SMCountNV) Flat
+                              Decorate 11(gl_WarpsPerSMNV) Flat
                               Decorate 13(gl_SMCountNV) BuiltIn SMCountNV
-                              Decorate 15(gl_WarpIDNV) Flat
+                              Decorate 13(gl_SMCountNV) Flat
                               Decorate 15(gl_WarpIDNV) BuiltIn WarpIDNV
-                              Decorate 17(gl_SMIDNV) Flat
+                              Decorate 15(gl_WarpIDNV) Flat
                               Decorate 17(gl_SMIDNV) BuiltIn SMIDNV
+                              Decorate 17(gl_SMIDNV) Flat
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
diff --git a/Test/baseResults/spv.smBuiltins.vert.out b/Test/baseResults/spv.smBuiltins.vert.out
index c03c3cd..9d5d664 100644
--- a/Test/baseResults/spv.smBuiltins.vert.out
+++ b/Test/baseResults/spv.smBuiltins.vert.out
@@ -21,10 +21,10 @@
                               Name 22  "gl_WarpIDNV"
                               Name 24  "gl_SMIDNV"
                               Decorate 8 ArrayStride 16
-                              MemberDecorate 9(Output) 0 Offset 0
                               Decorate 9(Output) BufferBlock
-                              Decorate 11 DescriptorSet 0
+                              MemberDecorate 9(Output) 0 Offset 0
                               Decorate 11 Binding 0
+                              Decorate 11 DescriptorSet 0
                               Decorate 15(gl_VertexIndex) BuiltIn VertexIndex
                               Decorate 18(gl_WarpsPerSMNV) BuiltIn WarpsPerSMNV
                               Decorate 20(gl_SMCountNV) BuiltIn SMCountNV
diff --git a/Test/baseResults/spv.sparseTexture.frag.out b/Test/baseResults/spv.sparseTexture.frag.out
index 84ca757..0d71953 100644
--- a/Test/baseResults/spv.sparseTexture.frag.out
+++ b/Test/baseResults/spv.sparseTexture.frag.out
@@ -2,7 +2,7 @@
 Validation failed
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 442
+// Id's are bound by 434
 
                               Capability Shader
                               Capability ImageGatherExtended
@@ -12,7 +12,7 @@
                               Capability SampledCubeArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 33 48 89 397 409 427
+                              EntryPoint Fragment 4  "main" 33 48 89 389 401 419
                               ExecutionMode 4 OriginUpperLeft
                               Source GLSL 450
                               SourceExtension  "GL_ARB_sparse_texture2"
@@ -38,52 +38,52 @@
                               Name 154  "s2DArrayShadow"
                               Name 188  "s2DMS"
                               Name 228  "is2DArray"
-                              Name 261  "sCubeShadow"
-                              Name 294  "s2DRectShadow"
-                              Name 394  "i2D"
-                              Name 397  "ic2"
-                              Name 406  "ii3D"
-                              Name 409  "ic3"
-                              Name 418  "i2DMS"
-                              Name 427  "outColor"
-                              Decorate 29(s2D) DescriptorSet 0
+                              Name 259  "sCubeShadow"
+                              Name 288  "s2DRectShadow"
+                              Name 386  "i2D"
+                              Name 389  "ic2"
+                              Name 398  "ii3D"
+                              Name 401  "ic3"
+                              Name 410  "i2DMS"
+                              Name 419  "outColor"
                               Decorate 29(s2D) Binding 0
+                              Decorate 29(s2D) DescriptorSet 0
                               Decorate 33(c2) Location 0
-                              Decorate 44(s3D) DescriptorSet 0
                               Decorate 44(s3D) Binding 1
+                              Decorate 44(s3D) DescriptorSet 0
                               Decorate 48(c3) Location 1
-                              Decorate 59(isCube) DescriptorSet 0
                               Decorate 59(isCube) Binding 8
-                              Decorate 71(s2DShadow) DescriptorSet 0
+                              Decorate 59(isCube) DescriptorSet 0
                               Decorate 71(s2DShadow) Binding 2
-                              Decorate 86(sCubeArrayShadow) DescriptorSet 0
+                              Decorate 71(s2DShadow) DescriptorSet 0
                               Decorate 86(sCubeArrayShadow) Binding 6
+                              Decorate 86(sCubeArrayShadow) DescriptorSet 0
                               Decorate 89(c4) Location 2
-                              Decorate 108(usCubeArray) DescriptorSet 0
                               Decorate 108(usCubeArray) Binding 10
-                              Decorate 140(us2DRect) DescriptorSet 0
+                              Decorate 108(usCubeArray) DescriptorSet 0
                               Decorate 140(us2DRect) Binding 11
-                              Decorate 154(s2DArrayShadow) DescriptorSet 0
+                              Decorate 140(us2DRect) DescriptorSet 0
                               Decorate 154(s2DArrayShadow) Binding 4
-                              Decorate 188(s2DMS) DescriptorSet 0
+                              Decorate 154(s2DArrayShadow) DescriptorSet 0
                               Decorate 188(s2DMS) Binding 7
-                              Decorate 228(is2DArray) DescriptorSet 0
+                              Decorate 188(s2DMS) DescriptorSet 0
                               Decorate 228(is2DArray) Binding 9
-                              Decorate 261(sCubeShadow) DescriptorSet 0
-                              Decorate 261(sCubeShadow) Binding 3
-                              Decorate 294(s2DRectShadow) DescriptorSet 0
-                              Decorate 294(s2DRectShadow) Binding 5
-                              Decorate 394(i2D) DescriptorSet 0
-                              Decorate 394(i2D) Binding 12
-                              Decorate 397(ic2) Flat
-                              Decorate 397(ic2) Location 3
-                              Decorate 406(ii3D) DescriptorSet 0
-                              Decorate 406(ii3D) Binding 13
-                              Decorate 409(ic3) Flat
-                              Decorate 409(ic3) Location 4
-                              Decorate 418(i2DMS) DescriptorSet 0
-                              Decorate 418(i2DMS) Binding 14
-                              Decorate 427(outColor) Location 0
+                              Decorate 228(is2DArray) DescriptorSet 0
+                              Decorate 259(sCubeShadow) Binding 3
+                              Decorate 259(sCubeShadow) DescriptorSet 0
+                              Decorate 288(s2DRectShadow) Binding 5
+                              Decorate 288(s2DRectShadow) DescriptorSet 0
+                              Decorate 386(i2D) Binding 12
+                              Decorate 386(i2D) DescriptorSet 0
+                              Decorate 389(ic2) Flat
+                              Decorate 389(ic2) Location 3
+                              Decorate 398(ii3D) Binding 13
+                              Decorate 398(ii3D) DescriptorSet 0
+                              Decorate 401(ic3) Flat
+                              Decorate 401(ic3) Location 4
+                              Decorate 410(i2DMS) Binding 14
+                              Decorate 410(i2DMS) DescriptorSet 0
+                              Decorate 419(outColor) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
@@ -173,51 +173,51 @@
              232:  143(ivec2) ConstantComposite 231 231
              240:      6(int) Constant 7
              241:  143(ivec2) ConstantComposite 240 240
-             258:             TypeImage 10(float) Cube depth sampled format:Unknown
-             259:             TypeSampledImage 258
-             260:             TypePointer UniformConstant 259
-261(sCubeShadow):    260(ptr) Variable UniformConstant
-             291:             TypeImage 10(float) Rect depth sampled format:Unknown
-             292:             TypeSampledImage 291
-             293:             TypePointer UniformConstant 292
-294(s2DRectShadow):    293(ptr) Variable UniformConstant
-             299:     20(int) Constant 3
-             311:  143(ivec2) ConstantComposite 130 130
-             340:  143(ivec2) ConstantComposite 192 192
-             362:     20(int) Constant 4
-             363:             TypeArray 143(ivec2) 362
-             364:      6(int) Constant 1
-             365:  143(ivec2) ConstantComposite 364 130
-             366:  143(ivec2) ConstantComposite 144 192
-             367:      6(int) Constant 15
-             368:      6(int) Constant 16
-             369:  143(ivec2) ConstantComposite 367 368
-             370:      6(int) Constant 4294967294
-             371:  143(ivec2) ConstantComposite 370 9
-             372:         363 ConstantComposite 365 366 369 371
-             392:             TypeImage 10(float) 2D nonsampled format:Rgba32f
-             393:             TypePointer UniformConstant 392
-        394(i2D):    393(ptr) Variable UniformConstant
-             396:             TypePointer Input 143(ivec2)
-        397(ic2):    396(ptr) Variable Input
-             404:             TypeImage 6(int) 3D nonsampled format:Rgba32i
-             405:             TypePointer UniformConstant 404
-       406(ii3D):    405(ptr) Variable UniformConstant
-             408:             TypePointer Input 129(ivec3)
-        409(ic3):    408(ptr) Variable Input
-             416:             TypeImage 10(float) 2D multi-sampled nonsampled format:Rgba32f
-             417:             TypePointer UniformConstant 416
-      418(i2DMS):    417(ptr) Variable UniformConstant
-             426:             TypePointer Output 11(fvec4)
-   427(outColor):    426(ptr) Variable Output
-             429:             TypeBool
+             256:             TypeImage 10(float) Cube depth sampled format:Unknown
+             257:             TypeSampledImage 256
+             258:             TypePointer UniformConstant 257
+259(sCubeShadow):    258(ptr) Variable UniformConstant
+             285:             TypeImage 10(float) Rect depth sampled format:Unknown
+             286:             TypeSampledImage 285
+             287:             TypePointer UniformConstant 286
+288(s2DRectShadow):    287(ptr) Variable UniformConstant
+             292:     20(int) Constant 3
+             303:  143(ivec2) ConstantComposite 130 130
+             332:  143(ivec2) ConstantComposite 192 192
+             354:     20(int) Constant 4
+             355:             TypeArray 143(ivec2) 354
+             356:      6(int) Constant 1
+             357:  143(ivec2) ConstantComposite 356 130
+             358:  143(ivec2) ConstantComposite 144 192
+             359:      6(int) Constant 15
+             360:      6(int) Constant 16
+             361:  143(ivec2) ConstantComposite 359 360
+             362:      6(int) Constant 4294967294
+             363:  143(ivec2) ConstantComposite 362 9
+             364:         355 ConstantComposite 357 358 361 363
+             384:             TypeImage 10(float) 2D nonsampled format:Rgba32f
+             385:             TypePointer UniformConstant 384
+        386(i2D):    385(ptr) Variable UniformConstant
+             388:             TypePointer Input 143(ivec2)
+        389(ic2):    388(ptr) Variable Input
+             396:             TypeImage 6(int) 3D nonsampled format:Rgba32i
+             397:             TypePointer UniformConstant 396
+       398(ii3D):    397(ptr) Variable UniformConstant
+             400:             TypePointer Input 129(ivec3)
+        401(ic3):    400(ptr) Variable Input
+             408:             TypeImage 10(float) 2D multi-sampled nonsampled format:Rgba32f
+             409:             TypePointer UniformConstant 408
+      410(i2DMS):    409(ptr) Variable UniformConstant
+             418:             TypePointer Output 11(fvec4)
+   419(outColor):    418(ptr) Variable Output
+             421:             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
-             431:     12(ptr) Variable Function
+             423:     12(ptr) Variable Function
                               Store 8(resident) 9
                               Store 13(texel) 15
                               Store 18(itexel) 19
@@ -414,200 +414,192 @@
                               Store 8(resident) 248
              249:          42 Load 44(s3D)
              250:   46(fvec3) Load 48(c3)
-             251:   46(fvec3) Load 48(c3)
-             252:   46(fvec3) Load 48(c3)
-             253: 35(ResType) ImageSparseSampleExplicitLod 249 250 Grad 251 252
-             254:   11(fvec4) CompositeExtract 253 1
-                              Store 13(texel) 254
-             255:      6(int) CompositeExtract 253 0
-             256:      6(int) Load 8(resident)
-             257:      6(int) BitwiseOr 256 255
-                              Store 8(resident) 257
-             262:         259 Load 261(sCubeShadow)
-             263:   11(fvec4) Load 89(c4)
-             264:   46(fvec3) Load 48(c3)
-             265:   46(fvec3) Load 48(c3)
-             266:     74(ptr) AccessChain 13(texel) 119
-             267:   10(float) CompositeExtract 263 3
-             268: 77(ResType) ImageSparseSampleDrefExplicitLod 262 263 267 Grad 264 265
-             269:   10(float) CompositeExtract 268 1
-                              Store 266 269
-             270:      6(int) CompositeExtract 268 0
-             271:      6(int) Load 8(resident)
-             272:      6(int) BitwiseOr 271 270
-                              Store 8(resident) 272
-             273:         106 Load 108(usCubeArray)
-             274:   11(fvec4) Load 89(c4)
-             275:   46(fvec3) Load 48(c3)
-             276:   46(fvec3) Load 48(c3)
-             277:111(ResType) ImageSparseSampleExplicitLod 273 274 Grad 275 276
-             278:   21(ivec4) CompositeExtract 277 1
-                              Store 23(utexel) 278
-             279:      6(int) CompositeExtract 277 0
-             280:      6(int) Load 8(resident)
-             281:      6(int) BitwiseOr 280 279
-                              Store 8(resident) 281
-             282:          27 Load 29(s2D)
-             283:   31(fvec2) Load 33(c2)
-             284:   31(fvec2) Load 33(c2)
-             285:   31(fvec2) Load 33(c2)
-             286: 35(ResType) ImageSparseSampleExplicitLod 282 283 Grad ConstOffset 284 285 158
-             287:   11(fvec4) CompositeExtract 286 1
-                              Store 13(texel) 287
-             288:      6(int) CompositeExtract 286 0
-             289:      6(int) Load 8(resident)
-             290:      6(int) BitwiseOr 289 288
-                              Store 8(resident) 290
-             295:         292 Load 294(s2DRectShadow)
-             296:   46(fvec3) Load 48(c3)
-             297:   31(fvec2) Load 33(c2)
-             298:   31(fvec2) Load 33(c2)
-             300:     74(ptr) AccessChain 13(texel) 299
-             301:   10(float) CompositeExtract 296 2
-             302: 77(ResType) ImageSparseSampleDrefExplicitLod 295 296 301 Grad ConstOffset 297 298 232
-             303:   10(float) CompositeExtract 302 1
-                              Store 300 303
-             304:      6(int) CompositeExtract 302 0
-             305:      6(int) Load 8(resident)
-             306:      6(int) BitwiseOr 305 304
-                              Store 8(resident) 306
-             307:         226 Load 228(is2DArray)
-             308:   46(fvec3) Load 48(c3)
-             309:   31(fvec2) Load 33(c2)
+             251: 35(ResType) ImageSparseSampleExplicitLod 249 250 Grad 250 250
+             252:   11(fvec4) CompositeExtract 251 1
+                              Store 13(texel) 252
+             253:      6(int) CompositeExtract 251 0
+             254:      6(int) Load 8(resident)
+             255:      6(int) BitwiseOr 254 253
+                              Store 8(resident) 255
+             260:         257 Load 259(sCubeShadow)
+             261:   11(fvec4) Load 89(c4)
+             262:   46(fvec3) Load 48(c3)
+             263:     74(ptr) AccessChain 13(texel) 119
+             264:   10(float) CompositeExtract 261 3
+             265: 77(ResType) ImageSparseSampleDrefExplicitLod 260 261 264 Grad 262 262
+             266:   10(float) CompositeExtract 265 1
+                              Store 263 266
+             267:      6(int) CompositeExtract 265 0
+             268:      6(int) Load 8(resident)
+             269:      6(int) BitwiseOr 268 267
+                              Store 8(resident) 269
+             270:         106 Load 108(usCubeArray)
+             271:   11(fvec4) Load 89(c4)
+             272:   46(fvec3) Load 48(c3)
+             273:111(ResType) ImageSparseSampleExplicitLod 270 271 Grad 272 272
+             274:   21(ivec4) CompositeExtract 273 1
+                              Store 23(utexel) 274
+             275:      6(int) CompositeExtract 273 0
+             276:      6(int) Load 8(resident)
+             277:      6(int) BitwiseOr 276 275
+                              Store 8(resident) 277
+             278:          27 Load 29(s2D)
+             279:   31(fvec2) Load 33(c2)
+             280: 35(ResType) ImageSparseSampleExplicitLod 278 279 Grad ConstOffset 279 279 158
+             281:   11(fvec4) CompositeExtract 280 1
+                              Store 13(texel) 281
+             282:      6(int) CompositeExtract 280 0
+             283:      6(int) Load 8(resident)
+             284:      6(int) BitwiseOr 283 282
+                              Store 8(resident) 284
+             289:         286 Load 288(s2DRectShadow)
+             290:   46(fvec3) Load 48(c3)
+             291:   31(fvec2) Load 33(c2)
+             293:     74(ptr) AccessChain 13(texel) 292
+             294:   10(float) CompositeExtract 290 2
+             295: 77(ResType) ImageSparseSampleDrefExplicitLod 289 290 294 Grad ConstOffset 291 291 232
+             296:   10(float) CompositeExtract 295 1
+                              Store 293 296
+             297:      6(int) CompositeExtract 295 0
+             298:      6(int) Load 8(resident)
+             299:      6(int) BitwiseOr 298 297
+                              Store 8(resident) 299
+             300:         226 Load 228(is2DArray)
+             301:   46(fvec3) Load 48(c3)
+             302:   31(fvec2) Load 33(c2)
+             304: 62(ResType) ImageSparseSampleExplicitLod 300 301 Grad ConstOffset 302 302 303
+             305:   16(ivec4) CompositeExtract 304 1
+                              Store 18(itexel) 305
+             306:      6(int) CompositeExtract 304 0
+             307:      6(int) Load 8(resident)
+             308:      6(int) BitwiseOr 307 306
+                              Store 8(resident) 308
+             309:          27 Load 29(s2D)
              310:   31(fvec2) Load 33(c2)
-             312: 62(ResType) ImageSparseSampleExplicitLod 307 308 Grad ConstOffset 309 310 311
-             313:   16(ivec4) CompositeExtract 312 1
-                              Store 18(itexel) 313
-             314:      6(int) CompositeExtract 312 0
-             315:      6(int) Load 8(resident)
-             316:      6(int) BitwiseOr 315 314
-                              Store 8(resident) 316
-             317:          27 Load 29(s2D)
-             318:   31(fvec2) Load 33(c2)
-             319: 35(ResType) ImageSparseGather 317 318 9
-             320:   11(fvec4) CompositeExtract 319 1
-                              Store 13(texel) 320
-             321:      6(int) CompositeExtract 319 0
-             322:      6(int) Load 8(resident)
-             323:      6(int) BitwiseOr 322 321
-                              Store 8(resident) 323
-             324:         226 Load 228(is2DArray)
-             325:   46(fvec3) Load 48(c3)
-             326: 62(ResType) ImageSparseGather 324 325 130
-             327:   16(ivec4) CompositeExtract 326 1
-                              Store 18(itexel) 327
-             328:      6(int) CompositeExtract 326 0
-             329:      6(int) Load 8(resident)
-             330:      6(int) BitwiseOr 329 328
-                              Store 8(resident) 330
-             331:         152 Load 154(s2DArrayShadow)
-             332:   46(fvec3) Load 48(c3)
-             333: 35(ResType) ImageSparseDrefGather 331 332 50
+             311: 35(ResType) ImageSparseGather 309 310 9
+             312:   11(fvec4) CompositeExtract 311 1
+                              Store 13(texel) 312
+             313:      6(int) CompositeExtract 311 0
+             314:      6(int) Load 8(resident)
+             315:      6(int) BitwiseOr 314 313
+                              Store 8(resident) 315
+             316:         226 Load 228(is2DArray)
+             317:   46(fvec3) Load 48(c3)
+             318: 62(ResType) ImageSparseGather 316 317 130
+             319:   16(ivec4) CompositeExtract 318 1
+                              Store 18(itexel) 319
+             320:      6(int) CompositeExtract 318 0
+             321:      6(int) Load 8(resident)
+             322:      6(int) BitwiseOr 321 320
+                              Store 8(resident) 322
+             323:         152 Load 154(s2DArrayShadow)
+             324:   46(fvec3) Load 48(c3)
+             325: 35(ResType) ImageSparseDrefGather 323 324 50
+             326:   11(fvec4) CompositeExtract 325 1
+                              Store 13(texel) 326
+             327:      6(int) CompositeExtract 325 0
+             328:      6(int) Load 8(resident)
+             329:      6(int) BitwiseOr 328 327
+                              Store 8(resident) 329
+             330:          27 Load 29(s2D)
+             331:   31(fvec2) Load 33(c2)
+             333: 35(ResType) ImageSparseGather 330 331 9 ConstOffset 332
              334:   11(fvec4) CompositeExtract 333 1
                               Store 13(texel) 334
              335:      6(int) CompositeExtract 333 0
              336:      6(int) Load 8(resident)
              337:      6(int) BitwiseOr 336 335
                               Store 8(resident) 337
-             338:          27 Load 29(s2D)
-             339:   31(fvec2) Load 33(c2)
-             341: 35(ResType) ImageSparseGather 338 339 9 ConstOffset 340
-             342:   11(fvec4) CompositeExtract 341 1
-                              Store 13(texel) 342
-             343:      6(int) CompositeExtract 341 0
-             344:      6(int) Load 8(resident)
-             345:      6(int) BitwiseOr 344 343
-                              Store 8(resident) 345
-             346:         226 Load 228(is2DArray)
-             347:   46(fvec3) Load 48(c3)
-             348: 62(ResType) ImageSparseGather 346 347 130 ConstOffset 158
-             349:   16(ivec4) CompositeExtract 348 1
-                              Store 18(itexel) 349
-             350:      6(int) CompositeExtract 348 0
-             351:      6(int) Load 8(resident)
-             352:      6(int) BitwiseOr 351 350
-                              Store 8(resident) 352
-             353:         292 Load 294(s2DRectShadow)
-             354:   31(fvec2) Load 33(c2)
-             355: 35(ResType) ImageSparseDrefGather 353 354 50 ConstOffset 241
-             356:   11(fvec4) CompositeExtract 355 1
-                              Store 13(texel) 356
-             357:      6(int) CompositeExtract 355 0
-             358:      6(int) Load 8(resident)
-             359:      6(int) BitwiseOr 358 357
-                              Store 8(resident) 359
-             360:          27 Load 29(s2D)
-             361:   31(fvec2) Load 33(c2)
-             373: 35(ResType) ImageSparseGather 360 361 9 ConstOffsets 372
-             374:   11(fvec4) CompositeExtract 373 1
-                              Store 13(texel) 374
-             375:      6(int) CompositeExtract 373 0
-             376:      6(int) Load 8(resident)
-             377:      6(int) BitwiseOr 376 375
-                              Store 8(resident) 377
-             378:         226 Load 228(is2DArray)
-             379:   46(fvec3) Load 48(c3)
-             380: 62(ResType) ImageSparseGather 378 379 130 ConstOffsets 372
-             381:   16(ivec4) CompositeExtract 380 1
-                              Store 18(itexel) 381
-             382:      6(int) CompositeExtract 380 0
-             383:      6(int) Load 8(resident)
-             384:      6(int) BitwiseOr 383 382
-                              Store 8(resident) 384
-             385:         292 Load 294(s2DRectShadow)
-             386:   31(fvec2) Load 33(c2)
-             387: 35(ResType) ImageSparseDrefGather 385 386 50 ConstOffsets 372
-             388:   11(fvec4) CompositeExtract 387 1
-                              Store 13(texel) 388
-             389:      6(int) CompositeExtract 387 0
-             390:      6(int) Load 8(resident)
-             391:      6(int) BitwiseOr 390 389
-                              Store 8(resident) 391
-             395:         392 Load 394(i2D)
-             398:  143(ivec2) Load 397(ic2)
-             399: 35(ResType) ImageSparseRead 395 398
-             400:   11(fvec4) CompositeExtract 399 1
-                              Store 13(texel) 400
-             401:      6(int) CompositeExtract 399 0
-             402:      6(int) Load 8(resident)
-             403:      6(int) BitwiseOr 402 401
-                              Store 8(resident) 403
-             407:         404 Load 406(ii3D)
-             410:  129(ivec3) Load 409(ic3)
-             411: 62(ResType) ImageSparseRead 407 410
-             412:   16(ivec4) CompositeExtract 411 1
-                              Store 18(itexel) 412
-             413:      6(int) CompositeExtract 411 0
-             414:      6(int) Load 8(resident)
-             415:      6(int) BitwiseOr 414 413
-                              Store 8(resident) 415
-             419:         416 Load 418(i2DMS)
-             420:  143(ivec2) Load 397(ic2)
-             421: 35(ResType) ImageSparseRead 419 420 Sample 144
-             422:   11(fvec4) CompositeExtract 421 1
-                              Store 13(texel) 422
-             423:      6(int) CompositeExtract 421 0
-             424:      6(int) Load 8(resident)
-             425:      6(int) BitwiseOr 424 423
-                              Store 8(resident) 425
-             428:      6(int) Load 8(resident)
-             430:   429(bool) ImageSparseTexelsResident 428
-                              SelectionMerge 433 None
-                              BranchConditional 430 432 435
-             432:               Label
-             434:   11(fvec4)   Load 13(texel)
-                                Store 431 434
-                                Branch 433
-             435:               Label
-             436:   16(ivec4)   Load 18(itexel)
-             437:   11(fvec4)   ConvertSToF 436
-             438:   21(ivec4)   Load 23(utexel)
-             439:   11(fvec4)   ConvertUToF 438
-             440:   11(fvec4)   FAdd 437 439
-                                Store 431 440
-                                Branch 433
-             433:             Label
-             441:   11(fvec4) Load 431
-                              Store 427(outColor) 441
+             338:         226 Load 228(is2DArray)
+             339:   46(fvec3) Load 48(c3)
+             340: 62(ResType) ImageSparseGather 338 339 130 ConstOffset 158
+             341:   16(ivec4) CompositeExtract 340 1
+                              Store 18(itexel) 341
+             342:      6(int) CompositeExtract 340 0
+             343:      6(int) Load 8(resident)
+             344:      6(int) BitwiseOr 343 342
+                              Store 8(resident) 344
+             345:         286 Load 288(s2DRectShadow)
+             346:   31(fvec2) Load 33(c2)
+             347: 35(ResType) ImageSparseDrefGather 345 346 50 ConstOffset 241
+             348:   11(fvec4) CompositeExtract 347 1
+                              Store 13(texel) 348
+             349:      6(int) CompositeExtract 347 0
+             350:      6(int) Load 8(resident)
+             351:      6(int) BitwiseOr 350 349
+                              Store 8(resident) 351
+             352:          27 Load 29(s2D)
+             353:   31(fvec2) Load 33(c2)
+             365: 35(ResType) ImageSparseGather 352 353 9 ConstOffsets 364
+             366:   11(fvec4) CompositeExtract 365 1
+                              Store 13(texel) 366
+             367:      6(int) CompositeExtract 365 0
+             368:      6(int) Load 8(resident)
+             369:      6(int) BitwiseOr 368 367
+                              Store 8(resident) 369
+             370:         226 Load 228(is2DArray)
+             371:   46(fvec3) Load 48(c3)
+             372: 62(ResType) ImageSparseGather 370 371 130 ConstOffsets 364
+             373:   16(ivec4) CompositeExtract 372 1
+                              Store 18(itexel) 373
+             374:      6(int) CompositeExtract 372 0
+             375:      6(int) Load 8(resident)
+             376:      6(int) BitwiseOr 375 374
+                              Store 8(resident) 376
+             377:         286 Load 288(s2DRectShadow)
+             378:   31(fvec2) Load 33(c2)
+             379: 35(ResType) ImageSparseDrefGather 377 378 50 ConstOffsets 364
+             380:   11(fvec4) CompositeExtract 379 1
+                              Store 13(texel) 380
+             381:      6(int) CompositeExtract 379 0
+             382:      6(int) Load 8(resident)
+             383:      6(int) BitwiseOr 382 381
+                              Store 8(resident) 383
+             387:         384 Load 386(i2D)
+             390:  143(ivec2) Load 389(ic2)
+             391: 35(ResType) ImageSparseRead 387 390
+             392:   11(fvec4) CompositeExtract 391 1
+                              Store 13(texel) 392
+             393:      6(int) CompositeExtract 391 0
+             394:      6(int) Load 8(resident)
+             395:      6(int) BitwiseOr 394 393
+                              Store 8(resident) 395
+             399:         396 Load 398(ii3D)
+             402:  129(ivec3) Load 401(ic3)
+             403: 62(ResType) ImageSparseRead 399 402
+             404:   16(ivec4) CompositeExtract 403 1
+                              Store 18(itexel) 404
+             405:      6(int) CompositeExtract 403 0
+             406:      6(int) Load 8(resident)
+             407:      6(int) BitwiseOr 406 405
+                              Store 8(resident) 407
+             411:         408 Load 410(i2DMS)
+             412:  143(ivec2) Load 389(ic2)
+             413: 35(ResType) ImageSparseRead 411 412 Sample 144
+             414:   11(fvec4) CompositeExtract 413 1
+                              Store 13(texel) 414
+             415:      6(int) CompositeExtract 413 0
+             416:      6(int) Load 8(resident)
+             417:      6(int) BitwiseOr 416 415
+                              Store 8(resident) 417
+             420:      6(int) Load 8(resident)
+             422:   421(bool) ImageSparseTexelsResident 420
+                              SelectionMerge 425 None
+                              BranchConditional 422 424 427
+             424:               Label
+             426:   11(fvec4)   Load 13(texel)
+                                Store 423 426
+                                Branch 425
+             427:               Label
+             428:   16(ivec4)   Load 18(itexel)
+             429:   11(fvec4)   ConvertSToF 428
+             430:   21(ivec4)   Load 23(utexel)
+             431:   11(fvec4)   ConvertUToF 430
+             432:   11(fvec4)   FAdd 429 431
+                                Store 423 432
+                                Branch 425
+             425:             Label
+             433:   11(fvec4) Load 423
+                              Store 419(outColor) 433
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.sparseTextureClamp.frag.out b/Test/baseResults/spv.sparseTextureClamp.frag.out
index e56297c..5ea7dc4 100644
--- a/Test/baseResults/spv.sparseTextureClamp.frag.out
+++ b/Test/baseResults/spv.sparseTextureClamp.frag.out
@@ -2,7 +2,7 @@
 Validation failed
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 360
+// Id's are bound by 344
 
                               Capability Shader
                               Capability SampledRect
@@ -11,7 +11,7 @@
                               Capability SampledCubeArray
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 33 36 51 95 345
+                              EntryPoint Fragment 4  "main" 33 36 51 95 329
                               ExecutionMode 4 OriginUpperLeft
                               Source GLSL 450
                               SourceExtension  "GL_ARB_sparse_texture_clamp"
@@ -35,38 +35,38 @@
                               Name 154  "us2DRect"
                               Name 161  "ResType"
                               Name 170  "s2DArrayShadow"
-                              Name 218  "sCubeShadow"
-                              Name 235  "usCubeArray"
-                              Name 286  "s2DRectShadow"
-                              Name 305  "is2DArray"
-                              Name 345  "outColor"
-                              Decorate 29(s2D) DescriptorSet 0
+                              Name 216  "sCubeShadow"
+                              Name 232  "usCubeArray"
+                              Name 276  "s2DRectShadow"
+                              Name 294  "is2DArray"
+                              Name 329  "outColor"
                               Decorate 29(s2D) Binding 0
+                              Decorate 29(s2D) DescriptorSet 0
                               Decorate 33(c2) Location 0
                               Decorate 36(lodClamp) Location 3
-                              Decorate 47(s3D) DescriptorSet 0
                               Decorate 47(s3D) Binding 1
+                              Decorate 47(s3D) DescriptorSet 0
                               Decorate 51(c3) Location 1
-                              Decorate 63(isCube) DescriptorSet 0
                               Decorate 63(isCube) Binding 7
-                              Decorate 76(s2DShadow) DescriptorSet 0
+                              Decorate 63(isCube) DescriptorSet 0
                               Decorate 76(s2DShadow) Binding 2
-                              Decorate 92(sCubeArrayShadow) DescriptorSet 0
+                              Decorate 76(s2DShadow) DescriptorSet 0
                               Decorate 92(sCubeArrayShadow) Binding 6
+                              Decorate 92(sCubeArrayShadow) DescriptorSet 0
                               Decorate 95(c4) Location 2
-                              Decorate 154(us2DRect) DescriptorSet 0
                               Decorate 154(us2DRect) Binding 10
-                              Decorate 170(s2DArrayShadow) DescriptorSet 0
+                              Decorate 154(us2DRect) DescriptorSet 0
                               Decorate 170(s2DArrayShadow) Binding 4
-                              Decorate 218(sCubeShadow) DescriptorSet 0
-                              Decorate 218(sCubeShadow) Binding 3
-                              Decorate 235(usCubeArray) DescriptorSet 0
-                              Decorate 235(usCubeArray) Binding 9
-                              Decorate 286(s2DRectShadow) DescriptorSet 0
-                              Decorate 286(s2DRectShadow) Binding 5
-                              Decorate 305(is2DArray) DescriptorSet 0
-                              Decorate 305(is2DArray) Binding 8
-                              Decorate 345(outColor) Location 0
+                              Decorate 170(s2DArrayShadow) DescriptorSet 0
+                              Decorate 216(sCubeShadow) Binding 3
+                              Decorate 216(sCubeShadow) DescriptorSet 0
+                              Decorate 232(usCubeArray) Binding 9
+                              Decorate 232(usCubeArray) DescriptorSet 0
+                              Decorate 276(s2DRectShadow) Binding 5
+                              Decorate 276(s2DRectShadow) DescriptorSet 0
+                              Decorate 294(is2DArray) Binding 8
+                              Decorate 294(is2DArray) DescriptorSet 0
+                              Decorate 329(outColor) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
@@ -139,37 +139,37 @@
              173:      6(int) Constant 5
              174:  157(ivec2) ConstantComposite 173 173
              176:     20(int) Constant 2
-             215:             TypeImage 10(float) Cube depth sampled format:Unknown
-             216:             TypeSampledImage 215
-             217:             TypePointer UniformConstant 216
-218(sCubeShadow):    217(ptr) Variable UniformConstant
-             224:     20(int) Constant 1
-             232:             TypeImage 20(int) Cube array sampled format:Unknown
-             233:             TypeSampledImage 232
-             234:             TypePointer UniformConstant 233
-235(usCubeArray):    234(ptr) Variable UniformConstant
-             283:             TypeImage 10(float) Rect depth sampled format:Unknown
-             284:             TypeSampledImage 283
-             285:             TypePointer UniformConstant 284
-286(s2DRectShadow):    285(ptr) Variable UniformConstant
-             291:      6(int) Constant 6
-             292:  157(ivec2) ConstantComposite 291 291
-             294:     20(int) Constant 3
-             302:             TypeImage 6(int) 2D array sampled format:Unknown
-             303:             TypeSampledImage 302
-             304:             TypePointer UniformConstant 303
-  305(is2DArray):    304(ptr) Variable UniformConstant
-             310:  157(ivec2) ConstantComposite 143 143
-             344:             TypePointer Output 11(fvec4)
-   345(outColor):    344(ptr) Variable Output
-             347:             TypeBool
+             213:             TypeImage 10(float) Cube depth sampled format:Unknown
+             214:             TypeSampledImage 213
+             215:             TypePointer UniformConstant 214
+216(sCubeShadow):    215(ptr) Variable UniformConstant
+             221:     20(int) Constant 1
+             229:             TypeImage 20(int) Cube array sampled format:Unknown
+             230:             TypeSampledImage 229
+             231:             TypePointer UniformConstant 230
+232(usCubeArray):    231(ptr) Variable UniformConstant
+             273:             TypeImage 10(float) Rect depth sampled format:Unknown
+             274:             TypeSampledImage 273
+             275:             TypePointer UniformConstant 274
+276(s2DRectShadow):    275(ptr) Variable UniformConstant
+             280:      6(int) Constant 6
+             281:  157(ivec2) ConstantComposite 280 280
+             283:     20(int) Constant 3
+             291:             TypeImage 6(int) 2D array sampled format:Unknown
+             292:             TypeSampledImage 291
+             293:             TypePointer UniformConstant 292
+  294(is2DArray):    293(ptr) Variable UniformConstant
+             298:  157(ivec2) ConstantComposite 143 143
+             328:             TypePointer Output 11(fvec4)
+   329(outColor):    328(ptr) Variable Output
+             331:             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
-             349:     12(ptr) Variable Function
+             333:     12(ptr) Variable Function
                               Store 8(resident) 9
                               Store 13(texel) 15
                               Store 18(itexel) 19
@@ -325,158 +325,142 @@
                               Store 204 203
              205:          45 Load 47(s3D)
              206:   49(fvec3) Load 51(c3)
-             207:   49(fvec3) Load 51(c3)
-             208:   49(fvec3) Load 51(c3)
-             209:   10(float) Load 36(lodClamp)
-             210: 38(ResType) ImageSparseSampleExplicitLod 205 206 Grad MinLod 207 208 209
-             211:   11(fvec4) CompositeExtract 210 1
-                              Store 13(texel) 211
-             212:      6(int) CompositeExtract 210 0
-             213:      6(int) Load 8(resident)
-             214:      6(int) BitwiseOr 213 212
-                              Store 8(resident) 214
-             219:         216 Load 218(sCubeShadow)
-             220:   11(fvec4) Load 95(c4)
-             221:   49(fvec3) Load 51(c3)
-             222:   49(fvec3) Load 51(c3)
-             223:   10(float) Load 36(lodClamp)
-             225:     80(ptr) AccessChain 13(texel) 224
-             226:   10(float) CompositeExtract 220 3
-             227: 83(ResType) ImageSparseSampleDrefExplicitLod 219 220 226 Grad MinLod 221 222 223
-             228:   10(float) CompositeExtract 227 1
-                              Store 225 228
-             229:      6(int) CompositeExtract 227 0
-             230:      6(int) Load 8(resident)
-             231:      6(int) BitwiseOr 230 229
-                              Store 8(resident) 231
-             236:         233 Load 235(usCubeArray)
-             237:   11(fvec4) Load 95(c4)
-             238:   49(fvec3) Load 51(c3)
-             239:   49(fvec3) Load 51(c3)
-             240:   10(float) Load 36(lodClamp)
-             241:161(ResType) ImageSparseSampleExplicitLod 236 237 Grad MinLod 238 239 240
-             242:   21(ivec4) CompositeExtract 241 1
-                              Store 23(utexel) 242
-             243:      6(int) CompositeExtract 241 0
-             244:      6(int) Load 8(resident)
-             245:      6(int) BitwiseOr 244 243
-                              Store 8(resident) 245
-             246:          45 Load 47(s3D)
-             247:   49(fvec3) Load 51(c3)
-             248:   49(fvec3) Load 51(c3)
-             249:   49(fvec3) Load 51(c3)
-             250:   10(float) Load 36(lodClamp)
-             251:   11(fvec4) ImageSampleExplicitLod 246 247 Grad MinLod 248 249 250
-             252:   11(fvec4) Load 13(texel)
-             253:   11(fvec4) FAdd 252 251
-                              Store 13(texel) 253
-             254:         216 Load 218(sCubeShadow)
-             255:   11(fvec4) Load 95(c4)
-             256:   49(fvec3) Load 51(c3)
-             257:   49(fvec3) Load 51(c3)
-             258:   10(float) Load 36(lodClamp)
-             259:   10(float) CompositeExtract 255 3
-             260:   10(float) ImageSampleDrefExplicitLod 254 255 259 Grad MinLod 256 257 258
-             261:     80(ptr) AccessChain 13(texel) 224
-             262:   10(float) Load 261
-             263:   10(float) FAdd 262 260
-             264:     80(ptr) AccessChain 13(texel) 224
-                              Store 264 263
-             265:         233 Load 235(usCubeArray)
-             266:   11(fvec4) Load 95(c4)
-             267:   49(fvec3) Load 51(c3)
-             268:   49(fvec3) Load 51(c3)
-             269:   10(float) Load 36(lodClamp)
-             270:   21(ivec4) ImageSampleExplicitLod 265 266 Grad MinLod 267 268 269
-             271:   21(ivec4) Load 23(utexel)
-             272:   21(ivec4) IAdd 271 270
-                              Store 23(utexel) 272
-             273:          27 Load 29(s2D)
-             274:   31(fvec2) Load 33(c2)
-             275:   31(fvec2) Load 33(c2)
-             276:   31(fvec2) Load 33(c2)
-             277:   10(float) Load 36(lodClamp)
-             278: 38(ResType) ImageSparseSampleExplicitLod 273 274 Grad ConstOffset MinLod 275 276 174 277
-             279:   11(fvec4) CompositeExtract 278 1
-                              Store 13(texel) 279
-             280:      6(int) CompositeExtract 278 0
-             281:      6(int) Load 8(resident)
-             282:      6(int) BitwiseOr 281 280
-                              Store 8(resident) 282
-             287:         284 Load 286(s2DRectShadow)
-             288:   49(fvec3) Load 51(c3)
-             289:   31(fvec2) Load 33(c2)
-             290:   31(fvec2) Load 33(c2)
-             293:   10(float) Load 36(lodClamp)
-             295:     80(ptr) AccessChain 13(texel) 294
-             296:   10(float) CompositeExtract 288 2
-             297: 83(ResType) ImageSparseSampleDrefExplicitLod 287 288 296 Grad ConstOffset MinLod 289 290 292 293
-             298:   10(float) CompositeExtract 297 1
-                              Store 295 298
-             299:      6(int) CompositeExtract 297 0
-             300:      6(int) Load 8(resident)
-             301:      6(int) BitwiseOr 300 299
-                              Store 8(resident) 301
-             306:         303 Load 305(is2DArray)
-             307:   49(fvec3) Load 51(c3)
-             308:   31(fvec2) Load 33(c2)
-             309:   31(fvec2) Load 33(c2)
-             311:   10(float) Load 36(lodClamp)
-             312: 67(ResType) ImageSparseSampleExplicitLod 306 307 Grad ConstOffset MinLod 308 309 310 311
-             313:   16(ivec4) CompositeExtract 312 1
-                              Store 18(itexel) 313
-             314:      6(int) CompositeExtract 312 0
-             315:      6(int) Load 8(resident)
-             316:      6(int) BitwiseOr 315 314
-                              Store 8(resident) 316
-             317:          27 Load 29(s2D)
-             318:   31(fvec2) Load 33(c2)
-             319:   31(fvec2) Load 33(c2)
-             320:   31(fvec2) Load 33(c2)
-             321:   10(float) Load 36(lodClamp)
-             322:   11(fvec4) ImageSampleExplicitLod 317 318 Grad ConstOffset MinLod 319 320 174 321
-             323:   11(fvec4) Load 13(texel)
-             324:   11(fvec4) FAdd 323 322
-                              Store 13(texel) 324
-             325:         284 Load 286(s2DRectShadow)
-             326:   49(fvec3) Load 51(c3)
-             327:   31(fvec2) Load 33(c2)
-             328:   31(fvec2) Load 33(c2)
-             329:   10(float) Load 36(lodClamp)
-             330:   10(float) CompositeExtract 326 2
-             331:   10(float) ImageSampleDrefExplicitLod 325 326 330 Grad ConstOffset MinLod 327 328 292 329
-             332:     80(ptr) AccessChain 13(texel) 294
-             333:   10(float) Load 332
-             334:   10(float) FAdd 333 331
-             335:     80(ptr) AccessChain 13(texel) 294
-                              Store 335 334
-             336:         303 Load 305(is2DArray)
-             337:   49(fvec3) Load 51(c3)
-             338:   31(fvec2) Load 33(c2)
-             339:   31(fvec2) Load 33(c2)
-             340:   10(float) Load 36(lodClamp)
-             341:   16(ivec4) ImageSampleExplicitLod 336 337 Grad ConstOffset MinLod 338 339 310 340
-             342:   16(ivec4) Load 18(itexel)
-             343:   16(ivec4) IAdd 342 341
-                              Store 18(itexel) 343
-             346:      6(int) Load 8(resident)
-             348:   347(bool) ImageSparseTexelsResident 346
-                              SelectionMerge 351 None
-                              BranchConditional 348 350 353
-             350:               Label
-             352:   11(fvec4)   Load 13(texel)
-                                Store 349 352
-                                Branch 351
-             353:               Label
-             354:   16(ivec4)   Load 18(itexel)
-             355:   11(fvec4)   ConvertSToF 354
-             356:   21(ivec4)   Load 23(utexel)
-             357:   11(fvec4)   ConvertUToF 356
-             358:   11(fvec4)   FAdd 355 357
-                                Store 349 358
-                                Branch 351
-             351:             Label
-             359:   11(fvec4) Load 349
-                              Store 345(outColor) 359
+             207:   10(float) Load 36(lodClamp)
+             208: 38(ResType) ImageSparseSampleExplicitLod 205 206 Grad MinLod 206 206 207
+             209:   11(fvec4) CompositeExtract 208 1
+                              Store 13(texel) 209
+             210:      6(int) CompositeExtract 208 0
+             211:      6(int) Load 8(resident)
+             212:      6(int) BitwiseOr 211 210
+                              Store 8(resident) 212
+             217:         214 Load 216(sCubeShadow)
+             218:   11(fvec4) Load 95(c4)
+             219:   49(fvec3) Load 51(c3)
+             220:   10(float) Load 36(lodClamp)
+             222:     80(ptr) AccessChain 13(texel) 221
+             223:   10(float) CompositeExtract 218 3
+             224: 83(ResType) ImageSparseSampleDrefExplicitLod 217 218 223 Grad MinLod 219 219 220
+             225:   10(float) CompositeExtract 224 1
+                              Store 222 225
+             226:      6(int) CompositeExtract 224 0
+             227:      6(int) Load 8(resident)
+             228:      6(int) BitwiseOr 227 226
+                              Store 8(resident) 228
+             233:         230 Load 232(usCubeArray)
+             234:   11(fvec4) Load 95(c4)
+             235:   49(fvec3) Load 51(c3)
+             236:   10(float) Load 36(lodClamp)
+             237:161(ResType) ImageSparseSampleExplicitLod 233 234 Grad MinLod 235 235 236
+             238:   21(ivec4) CompositeExtract 237 1
+                              Store 23(utexel) 238
+             239:      6(int) CompositeExtract 237 0
+             240:      6(int) Load 8(resident)
+             241:      6(int) BitwiseOr 240 239
+                              Store 8(resident) 241
+             242:          45 Load 47(s3D)
+             243:   49(fvec3) Load 51(c3)
+             244:   10(float) Load 36(lodClamp)
+             245:   11(fvec4) ImageSampleExplicitLod 242 243 Grad MinLod 243 243 244
+             246:   11(fvec4) Load 13(texel)
+             247:   11(fvec4) FAdd 246 245
+                              Store 13(texel) 247
+             248:         214 Load 216(sCubeShadow)
+             249:   11(fvec4) Load 95(c4)
+             250:   49(fvec3) Load 51(c3)
+             251:   10(float) Load 36(lodClamp)
+             252:   10(float) CompositeExtract 249 3
+             253:   10(float) ImageSampleDrefExplicitLod 248 249 252 Grad MinLod 250 250 251
+             254:     80(ptr) AccessChain 13(texel) 221
+             255:   10(float) Load 254
+             256:   10(float) FAdd 255 253
+             257:     80(ptr) AccessChain 13(texel) 221
+                              Store 257 256
+             258:         230 Load 232(usCubeArray)
+             259:   11(fvec4) Load 95(c4)
+             260:   49(fvec3) Load 51(c3)
+             261:   10(float) Load 36(lodClamp)
+             262:   21(ivec4) ImageSampleExplicitLod 258 259 Grad MinLod 260 260 261
+             263:   21(ivec4) Load 23(utexel)
+             264:   21(ivec4) IAdd 263 262
+                              Store 23(utexel) 264
+             265:          27 Load 29(s2D)
+             266:   31(fvec2) Load 33(c2)
+             267:   10(float) Load 36(lodClamp)
+             268: 38(ResType) ImageSparseSampleExplicitLod 265 266 Grad ConstOffset MinLod 266 266 174 267
+             269:   11(fvec4) CompositeExtract 268 1
+                              Store 13(texel) 269
+             270:      6(int) CompositeExtract 268 0
+             271:      6(int) Load 8(resident)
+             272:      6(int) BitwiseOr 271 270
+                              Store 8(resident) 272
+             277:         274 Load 276(s2DRectShadow)
+             278:   49(fvec3) Load 51(c3)
+             279:   31(fvec2) Load 33(c2)
+             282:   10(float) Load 36(lodClamp)
+             284:     80(ptr) AccessChain 13(texel) 283
+             285:   10(float) CompositeExtract 278 2
+             286: 83(ResType) ImageSparseSampleDrefExplicitLod 277 278 285 Grad ConstOffset MinLod 279 279 281 282
+             287:   10(float) CompositeExtract 286 1
+                              Store 284 287
+             288:      6(int) CompositeExtract 286 0
+             289:      6(int) Load 8(resident)
+             290:      6(int) BitwiseOr 289 288
+                              Store 8(resident) 290
+             295:         292 Load 294(is2DArray)
+             296:   49(fvec3) Load 51(c3)
+             297:   31(fvec2) Load 33(c2)
+             299:   10(float) Load 36(lodClamp)
+             300: 67(ResType) ImageSparseSampleExplicitLod 295 296 Grad ConstOffset MinLod 297 297 298 299
+             301:   16(ivec4) CompositeExtract 300 1
+                              Store 18(itexel) 301
+             302:      6(int) CompositeExtract 300 0
+             303:      6(int) Load 8(resident)
+             304:      6(int) BitwiseOr 303 302
+                              Store 8(resident) 304
+             305:          27 Load 29(s2D)
+             306:   31(fvec2) Load 33(c2)
+             307:   10(float) Load 36(lodClamp)
+             308:   11(fvec4) ImageSampleExplicitLod 305 306 Grad ConstOffset MinLod 306 306 174 307
+             309:   11(fvec4) Load 13(texel)
+             310:   11(fvec4) FAdd 309 308
+                              Store 13(texel) 310
+             311:         274 Load 276(s2DRectShadow)
+             312:   49(fvec3) Load 51(c3)
+             313:   31(fvec2) Load 33(c2)
+             314:   10(float) Load 36(lodClamp)
+             315:   10(float) CompositeExtract 312 2
+             316:   10(float) ImageSampleDrefExplicitLod 311 312 315 Grad ConstOffset MinLod 313 313 281 314
+             317:     80(ptr) AccessChain 13(texel) 283
+             318:   10(float) Load 317
+             319:   10(float) FAdd 318 316
+             320:     80(ptr) AccessChain 13(texel) 283
+                              Store 320 319
+             321:         292 Load 294(is2DArray)
+             322:   49(fvec3) Load 51(c3)
+             323:   31(fvec2) Load 33(c2)
+             324:   10(float) Load 36(lodClamp)
+             325:   16(ivec4) ImageSampleExplicitLod 321 322 Grad ConstOffset MinLod 323 323 298 324
+             326:   16(ivec4) Load 18(itexel)
+             327:   16(ivec4) IAdd 326 325
+                              Store 18(itexel) 327
+             330:      6(int) Load 8(resident)
+             332:   331(bool) ImageSparseTexelsResident 330
+                              SelectionMerge 335 None
+                              BranchConditional 332 334 337
+             334:               Label
+             336:   11(fvec4)   Load 13(texel)
+                                Store 333 336
+                                Branch 335
+             337:               Label
+             338:   16(ivec4)   Load 18(itexel)
+             339:   11(fvec4)   ConvertSToF 338
+             340:   21(ivec4)   Load 23(utexel)
+             341:   11(fvec4)   ConvertUToF 340
+             342:   11(fvec4)   FAdd 339 341
+                                Store 333 342
+                                Branch 335
+             335:             Label
+             343:   11(fvec4) Load 333
+                              Store 329(outColor) 343
                               Return
                               FunctionEnd
diff --git a/Test/baseResults/spv.specConst.vert.out b/Test/baseResults/spv.specConst.vert.out
index a2e234b..404d308 100644
--- a/Test/baseResults/spv.specConst.vert.out
+++ b/Test/baseResults/spv.specConst.vert.out
@@ -18,11 +18,11 @@
                               Name 18  "a"
                               Name 25  "gl_VertexID"
                               Name 26  "gl_InstanceID"
+                              Decorate 11(gl_PerVertex) Block
                               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
                               Decorate 18(a) SpecId 11
                               Decorate 25(gl_VertexID) BuiltIn VertexId
                               Decorate 26(gl_InstanceID) BuiltIn InstanceId
diff --git a/Test/baseResults/spv.specConstant.comp.out b/Test/baseResults/spv.specConstant.comp.out
index bfe7114..6a7dd1d 100644
--- a/Test/baseResults/spv.specConstant.comp.out
+++ b/Test/baseResults/spv.specConstant.comp.out
@@ -13,10 +13,10 @@
                               Name 7  "bn"
                               MemberName 7(bn) 0  "a"
                               Name 9  "bi"
-                              MemberDecorate 7(bn) 0 Offset 0
                               Decorate 7(bn) BufferBlock
-                              Decorate 9(bi) DescriptorSet 0
+                              MemberDecorate 7(bn) 0 Offset 0
                               Decorate 9(bi) Binding 0
+                              Decorate 9(bi) DescriptorSet 0
                               Decorate 12 SpecId 18
                               Decorate 14 SpecId 19
                               Decorate 16 BuiltIn WorkgroupSize
diff --git a/Test/baseResults/spv.specConstant.float16.comp.out b/Test/baseResults/spv.specConstant.float16.comp.out
index 3381fc7..ba4169e 100644
--- a/Test/baseResults/spv.specConstant.float16.comp.out
+++ b/Test/baseResults/spv.specConstant.float16.comp.out
@@ -20,13 +20,14 @@
                               Name 9  "sb_out"
                               Name 12  "sc0"
                               Name 16  "sc1"
+                              Decorate 7(Output) BufferBlock
                               MemberDecorate 7(Output) 0 NonReadable
                               MemberDecorate 7(Output) 0 Offset 0
                               MemberDecorate 7(Output) 1 NonReadable
                               MemberDecorate 7(Output) 1 Offset 2
-                              Decorate 7(Output) BufferBlock
-                              Decorate 9(sb_out) DescriptorSet 0
+                              Decorate 9(sb_out) NonReadable
                               Decorate 9(sb_out) Binding 0
+                              Decorate 9(sb_out) DescriptorSet 0
                               Decorate 12(sc0) SpecId 1
                               Decorate 16(sc1) SpecId 2
                2:             TypeVoid
diff --git a/Test/baseResults/spv.specConstant.int16.comp.out b/Test/baseResults/spv.specConstant.int16.comp.out
index 17f385b..dfb2317 100644
--- a/Test/baseResults/spv.specConstant.int16.comp.out
+++ b/Test/baseResults/spv.specConstant.int16.comp.out
@@ -20,13 +20,14 @@
                               Name 9  "sb_out"
                               Name 12  "sc0"
                               Name 16  "sc1"
+                              Decorate 7(Output) BufferBlock
                               MemberDecorate 7(Output) 0 NonReadable
                               MemberDecorate 7(Output) 0 Offset 0
                               MemberDecorate 7(Output) 1 NonReadable
                               MemberDecorate 7(Output) 1 Offset 2
-                              Decorate 7(Output) BufferBlock
-                              Decorate 9(sb_out) DescriptorSet 0
+                              Decorate 9(sb_out) NonReadable
                               Decorate 9(sb_out) Binding 0
+                              Decorate 9(sb_out) DescriptorSet 0
                               Decorate 12(sc0) SpecId 1
                               Decorate 16(sc1) SpecId 2
                2:             TypeVoid
diff --git a/Test/baseResults/spv.specConstant.int8.comp.out b/Test/baseResults/spv.specConstant.int8.comp.out
index c906d71..7f1175a 100644
--- a/Test/baseResults/spv.specConstant.int8.comp.out
+++ b/Test/baseResults/spv.specConstant.int8.comp.out
@@ -20,13 +20,14 @@
                               Name 9  "sb_out"
                               Name 12  "sc0"
                               Name 16  "sc1"
+                              Decorate 7(Output) BufferBlock
                               MemberDecorate 7(Output) 0 NonReadable
                               MemberDecorate 7(Output) 0 Offset 0
                               MemberDecorate 7(Output) 1 NonReadable
                               MemberDecorate 7(Output) 1 Offset 1
-                              Decorate 7(Output) BufferBlock
-                              Decorate 9(sb_out) DescriptorSet 0
+                              Decorate 9(sb_out) NonReadable
                               Decorate 9(sb_out) Binding 0
+                              Decorate 9(sb_out) DescriptorSet 0
                               Decorate 12(sc0) SpecId 1
                               Decorate 16(sc1) SpecId 2
                2:             TypeVoid
diff --git a/Test/baseResults/spv.specConstantComposite2.vert.out b/Test/baseResults/spv.specConstantComposite2.vert.out
new file mode 100644
index 0000000..191f350
--- /dev/null
+++ b/Test/baseResults/spv.specConstantComposite2.vert.out
@@ -0,0 +1,89 @@
+spv.specConstantComposite2.vert
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 43
+
+                              Capability Shader
+                              Capability Float64
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Vertex 4  "main" 27 42
+                              Source GLSL 450
+                              Name 4  "main"
+                              Name 6  "refer_primary_spec_const("
+                              Name 8  "refer_composite_spec_const("
+                              Name 10  "refer_copmosite_dot_dereference("
+                              Name 12  "refer_composite_bracket_dereference("
+                              Name 16  "refer_spec_const_array_length("
+                              Name 18  "declare_spec_const_in_func("
+                              Name 21  "spec_bool"
+                              Name 27  "color"
+                              Name 28  "spec_int"
+                              Name 33  "len"
+                              Name 37  "spec_float"
+                              Name 39  "spec_double"
+                              Name 42  "global_vec4_array_with_spec_length"
+                              Decorate 21(spec_bool) SpecId 203
+                              Decorate 27(color) Location 0
+                              Decorate 28(spec_int) SpecId 200
+                              Decorate 37(spec_float) SpecId 201
+                              Decorate 39(spec_double) SpecId 202
+                              Decorate 42(global_vec4_array_with_spec_length) Location 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+              14:             TypeInt 32 1
+              15:             TypeFunction 14(int)
+              20:             TypeBool
+   21(spec_bool):    20(bool) SpecConstantTrue
+              24:             TypeFloat 32
+              25:             TypeVector 24(float) 4
+              26:             TypePointer Output 25(fvec4)
+       27(color):     26(ptr) Variable Output
+    28(spec_int):     14(int) SpecConstant 3
+              32:             TypePointer Function 14(int)
+  37(spec_float):   24(float) SpecConstant 1078523331
+              38:             TypeFloat 64
+ 39(spec_double):38(float64_t) SpecConstant 1413754136 1074340347
+              40:             TypeArray 25(fvec4) 28(spec_int)
+              41:             TypePointer Input 40
+42(global_vec4_array_with_spec_length):     41(ptr) Variable Input
+         4(main):           2 Function None 3
+               5:             Label
+                              Return
+                              FunctionEnd
+6(refer_primary_spec_const():           2 Function None 3
+               7:             Label
+                              SelectionMerge 23 None
+                              BranchConditional 21(spec_bool) 22 23
+              22:               Label
+              29:   24(float)   ConvertSToF 28(spec_int)
+              30:   25(fvec4)   Load 27(color)
+              31:   25(fvec4)   VectorTimesScalar 30 29
+                                Store 27(color) 31
+                                Branch 23
+              23:             Label
+                              Return
+                              FunctionEnd
+8(refer_composite_spec_const():           2 Function None 3
+               9:             Label
+                              Return
+                              FunctionEnd
+10(refer_copmosite_dot_dereference():           2 Function None 3
+              11:             Label
+                              Return
+                              FunctionEnd
+12(refer_composite_bracket_dereference():           2 Function None 3
+              13:             Label
+                              Return
+                              FunctionEnd
+16(refer_spec_const_array_length():     14(int) Function None 15
+              17:             Label
+         33(len):     32(ptr) Variable Function
+                              Store 33(len) 28(spec_int)
+              34:     14(int) Load 33(len)
+                              ReturnValue 34
+                              FunctionEnd
+18(declare_spec_const_in_func():           2 Function None 3
+              19:             Label
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.specConstantOp.float16.comp.out b/Test/baseResults/spv.specConstantOp.float16.comp.out
new file mode 100644
index 0000000..f4f1ae1
--- /dev/null
+++ b/Test/baseResults/spv.specConstantOp.float16.comp.out
@@ -0,0 +1,49 @@
+spv.specConstantOp.float16.comp
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 18
+
+                              Capability Shader
+                              Capability Float16
+                              Capability StorageUniformBufferBlock16
+                              Extension  "SPV_KHR_16bit_storage"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 1 1 1
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_float16"
+                              Name 4  "main"
+                              Name 8  "S"
+                              MemberName 8(S) 0  "p_out"
+                              Name 10  ""
+                              Name 14  "c"
+                              Decorate 7 ArrayStride 2
+                              Decorate 8(S) BufferBlock
+                              MemberDecorate 8(S) 0 Restrict
+                              MemberDecorate 8(S) 0 NonReadable
+                              MemberDecorate 8(S) 0 Offset 0
+                              Decorate 10 Restrict
+                              Decorate 10 NonReadable
+                              Decorate 10 Binding 0
+                              Decorate 10 DescriptorSet 0
+                              Decorate 14(c) SpecId 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeFloat 16
+               7:             TypeRuntimeArray 6(float16_t)
+            8(S):             TypeStruct 7
+               9:             TypePointer Uniform 8(S)
+              10:      9(ptr) Variable Uniform
+              11:             TypeInt 32 1
+              12:     11(int) Constant 0
+              13:             TypeFloat 32
+           14(c):   13(float) SpecConstant 1090519040
+              15:6(float16_t) SpecConstantOp 115 14(c)
+              16:             TypePointer Uniform 6(float16_t)
+         4(main):           2 Function None 3
+               5:             Label
+              17:     16(ptr) AccessChain 10 12 12
+                              Store 17 15
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.specConstantOp.int16.comp.out b/Test/baseResults/spv.specConstantOp.int16.comp.out
new file mode 100644
index 0000000..8d39f09
--- /dev/null
+++ b/Test/baseResults/spv.specConstantOp.int16.comp.out
@@ -0,0 +1,51 @@
+spv.specConstantOp.int16.comp
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 20
+
+                              Capability Shader
+                              Capability Int16
+                              Capability StorageUniformBufferBlock16
+                              Extension  "SPV_KHR_16bit_storage"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 1 1 1
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_int16"
+                              Name 4  "main"
+                              Name 8  "S"
+                              MemberName 8(S) 0  "p_out"
+                              Name 10  ""
+                              Name 13  "c"
+                              Decorate 7 ArrayStride 2
+                              Decorate 8(S) BufferBlock
+                              MemberDecorate 8(S) 0 Restrict
+                              MemberDecorate 8(S) 0 NonReadable
+                              MemberDecorate 8(S) 0 Offset 0
+                              Decorate 10 Restrict
+                              Decorate 10 NonReadable
+                              Decorate 10 Binding 0
+                              Decorate 10 DescriptorSet 0
+                              Decorate 13(c) SpecId 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 16 0
+               7:             TypeRuntimeArray 6(int16_t)
+            8(S):             TypeStruct 7
+               9:             TypePointer Uniform 8(S)
+              10:      9(ptr) Variable Uniform
+              11:             TypeInt 32 1
+              12:     11(int) Constant 0
+           13(c):     11(int) SpecConstant 8
+              14:             TypeInt 16 1
+              15: 14(int16_t) SpecConstantOp 114 13(c)
+              16:  6(int16_t) Constant 0
+              17:  6(int16_t) SpecConstantOp 128 15 16
+              18:             TypePointer Uniform 6(int16_t)
+         4(main):           2 Function None 3
+               5:             Label
+              19:     18(ptr) AccessChain 10 12 12
+                              Store 19 17
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.specConstantOp.int8.comp.out b/Test/baseResults/spv.specConstantOp.int8.comp.out
new file mode 100644
index 0000000..d88fce9
--- /dev/null
+++ b/Test/baseResults/spv.specConstantOp.int8.comp.out
@@ -0,0 +1,51 @@
+spv.specConstantOp.int8.comp
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 20
+
+                              Capability Shader
+                              Capability Int8
+                              Capability UniformAndStorageBuffer8BitAccess
+                              Extension  "SPV_KHR_8bit_storage"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 1 1 1
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_int8"
+                              Name 4  "main"
+                              Name 8  "S"
+                              MemberName 8(S) 0  "p_out"
+                              Name 10  ""
+                              Name 13  "c"
+                              Decorate 7 ArrayStride 1
+                              Decorate 8(S) BufferBlock
+                              MemberDecorate 8(S) 0 Restrict
+                              MemberDecorate 8(S) 0 NonReadable
+                              MemberDecorate 8(S) 0 Offset 0
+                              Decorate 10 Restrict
+                              Decorate 10 NonReadable
+                              Decorate 10 Binding 0
+                              Decorate 10 DescriptorSet 0
+                              Decorate 13(c) SpecId 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 8 0
+               7:             TypeRuntimeArray 6(int8_t)
+            8(S):             TypeStruct 7
+               9:             TypePointer Uniform 8(S)
+              10:      9(ptr) Variable Uniform
+              11:             TypeInt 32 1
+              12:     11(int) Constant 0
+           13(c):     11(int) SpecConstant 8
+              14:             TypeInt 8 1
+              15:  14(int8_t) SpecConstantOp 114 13(c)
+              16:   6(int8_t) Constant 0
+              17:   6(int8_t) SpecConstantOp 128 15 16
+              18:             TypePointer Uniform 6(int8_t)
+         4(main):           2 Function None 3
+               5:             Label
+              19:     18(ptr) AccessChain 10 12 12
+                              Store 19 17
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.specTexture.frag.out b/Test/baseResults/spv.specTexture.frag.out
index b599e35..a5875d0 100644
--- a/Test/baseResults/spv.specTexture.frag.out
+++ b/Test/baseResults/spv.specTexture.frag.out
@@ -15,8 +15,8 @@
                               Name 19  "offs"
                               Decorate 9(color_out) Location 0
                               Decorate 13(tex) Location 0
-                              Decorate 13(tex) DescriptorSet 0
                               Decorate 13(tex) Binding 0
+                              Decorate 13(tex) DescriptorSet 0
                               Decorate 19(offs) SpecId 1
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.ssbo.autoassign.frag.out b/Test/baseResults/spv.ssbo.autoassign.frag.out
index 3538105..2d8c283 100644
--- a/Test/baseResults/spv.ssbo.autoassign.frag.out
+++ b/Test/baseResults/spv.ssbo.autoassign.frag.out
@@ -33,21 +33,22 @@
                               MemberDecorate 14(BufType) 0 Offset 0
                               MemberDecorate 14(BufType) 1 Offset 16
                               Decorate 15 ArrayStride 32
+                              Decorate 16(SB0) BufferBlock
                               MemberDecorate 16(SB0) 0 NonWritable
                               MemberDecorate 16(SB0) 0 Offset 0
-                              Decorate 16(SB0) BufferBlock
-                              Decorate 18(SB0) DescriptorSet 0
+                              Decorate 18(SB0) NonWritable
                               Decorate 18(SB0) Binding 30
+                              Decorate 18(SB0) DescriptorSet 0
+                              Decorate 26(TestCB) Block
                               MemberDecorate 26(TestCB) 0 Offset 0
                               MemberDecorate 26(TestCB) 1 Offset 4
-                              Decorate 26(TestCB) Block
-                              Decorate 28 DescriptorSet 0
                               Decorate 28 Binding 15
+                              Decorate 28 DescriptorSet 0
                               Decorate 56 ArrayStride 32
-                              MemberDecorate 57(SB1) 0 Offset 0
                               Decorate 57(SB1) BufferBlock
-                              Decorate 59(SB1) DescriptorSet 0
+                              MemberDecorate 57(SB1) 0 Offset 0
                               Decorate 59(SB1) Binding 31
+                              Decorate 59(SB1) DescriptorSet 0
                               Decorate 92(pos) Location 0
                               Decorate 95(@entryPointOutput) Location 0
                2:             TypeVoid
diff --git a/Test/baseResults/spv.ssboAlias.frag.out b/Test/baseResults/spv.ssboAlias.frag.out
index 0a5a12b..73842e8 100644
--- a/Test/baseResults/spv.ssboAlias.frag.out
+++ b/Test/baseResults/spv.ssboAlias.frag.out
@@ -22,21 +22,21 @@
                               Name 41  "@entryPointOutput"
                               Name 43  "Buf3"
                               Decorate 12 ArrayStride 4
-                              MemberDecorate 13(Buf1) 0 Offset 0
                               Decorate 13(Buf1) BufferBlock
-                              Decorate 15(Buf1) DescriptorSet 0
+                              MemberDecorate 13(Buf1) 0 Offset 0
                               Decorate 15(Buf1) Binding 84
-                              MemberDecorate 18(Buf1@count) 0 Offset 0
+                              Decorate 15(Buf1) DescriptorSet 0
                               Decorate 18(Buf1@count) BufferBlock
-                              Decorate 20(Buf1@count) DescriptorSet 0
+                              MemberDecorate 18(Buf1@count) 0 Offset 0
                               Decorate 20(Buf1@count) Binding 83
-                              Decorate 28(Buf2) DescriptorSet 0
+                              Decorate 20(Buf1@count) DescriptorSet 0
                               Decorate 28(Buf2) Binding 85
-                              Decorate 29(Buf2@count) DescriptorSet 0
+                              Decorate 28(Buf2) DescriptorSet 0
                               Decorate 29(Buf2@count) Binding 86
+                              Decorate 29(Buf2@count) DescriptorSet 0
                               Decorate 41(@entryPointOutput) Location 0
-                              Decorate 43(Buf3) DescriptorSet 0
                               Decorate 43(Buf3) Binding 84
+                              Decorate 43(Buf3) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.stereoViewRendering.tesc.out b/Test/baseResults/spv.stereoViewRendering.tesc.out
index 100b553..a0a9cb1 100644
--- a/Test/baseResults/spv.stereoViewRendering.tesc.out
+++ b/Test/baseResults/spv.stereoViewRendering.tesc.out
@@ -31,16 +31,16 @@
                               MemberName 27(gl_PerVertex) 4  "gl_SecondaryPositionNV"
                               Name 31  "gl_in"
                               Name 41  "gl_Layer"
+                              Decorate 12(gl_PerVertex) Block
                               MemberDecorate 12(gl_PerVertex) 0 BuiltIn SecondaryPositionNV
                               MemberDecorate 12(gl_PerVertex) 1 BuiltIn SecondaryViewportMaskNV
-                              Decorate 12(gl_PerVertex) Block
                               Decorate 18(gl_InvocationID) BuiltIn InvocationId
+                              Decorate 27(gl_PerVertex) Block
                               MemberDecorate 27(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 27(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 27(gl_PerVertex) 2 BuiltIn ClipDistance
                               MemberDecorate 27(gl_PerVertex) 3 BuiltIn CullDistance
                               MemberDecorate 27(gl_PerVertex) 4 BuiltIn SecondaryPositionNV
-                              Decorate 27(gl_PerVertex) Block
                               Decorate 41(gl_Layer) BuiltIn Layer
                               Decorate 41(gl_Layer) ViewportRelativeNV
                               Decorate 41(gl_Layer) SecondaryViewportRelativeNV 1
diff --git a/Test/baseResults/spv.stereoViewRendering.vert.out b/Test/baseResults/spv.stereoViewRendering.vert.out
index 530d75e..491c377 100644
--- a/Test/baseResults/spv.stereoViewRendering.vert.out
+++ b/Test/baseResults/spv.stereoViewRendering.vert.out
@@ -28,11 +28,11 @@
                               Name 26  "gl_Layer"
                               Decorate 11(gl_SecondaryViewportMaskNV) BuiltIn SecondaryViewportMaskNV
                               Decorate 19(gl_SecondaryPositionNV) BuiltIn SecondaryPositionNV
+                              Decorate 21(gl_PerVertex) Block
                               MemberDecorate 21(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 21(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 21(gl_PerVertex) 2 BuiltIn ClipDistance
                               MemberDecorate 21(gl_PerVertex) 3 BuiltIn CullDistance
-                              Decorate 21(gl_PerVertex) Block
                               Decorate 26(gl_Layer) BuiltIn Layer
                               Decorate 26(gl_Layer) ViewportRelativeNV
                               Decorate 26(gl_Layer) SecondaryViewportRelativeNV 2
diff --git a/Test/baseResults/spv.storageBuffer.vert.out b/Test/baseResults/spv.storageBuffer.vert.out
index fdbb4db..5081998 100644
--- a/Test/baseResults/spv.storageBuffer.vert.out
+++ b/Test/baseResults/spv.storageBuffer.vert.out
@@ -22,19 +22,19 @@
                               Name 22  "bb"
                               MemberName 22(bb) 0  "b"
                               Name 24  "bbi"
+                              Decorate 11(gl_PerVertex) Block
                               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 16(ub) 0 Offset 0
                               Decorate 18(ubi) Binding 0
-                              MemberDecorate 22(bb) 0 Offset 0
+                              Decorate 18(ubi) DescriptorSet 0
                               Decorate 22(bb) Block
-                              Decorate 24(bbi) DescriptorSet 0
+                              MemberDecorate 22(bb) 0 Offset 0
                               Decorate 24(bbi) Binding 1
+                              Decorate 24(bbi) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.structAssignment.frag.out b/Test/baseResults/spv.structAssignment.frag.out
index a0cfb54..e04b558 100644
--- a/Test/baseResults/spv.structAssignment.frag.out
+++ b/Test/baseResults/spv.structAssignment.frag.out
@@ -37,8 +37,8 @@
                               MemberDecorate 10(lunarStruct3) 1 RelaxedPrecision
                               Decorate 16 RelaxedPrecision
                               Decorate 31(gl_FragColor) Location 0
-                              Decorate 40(samp2D) DescriptorSet 0
                               Decorate 40(samp2D) Binding 0
+                              Decorate 40(samp2D) DescriptorSet 0
                               Decorate 44(coord) RelaxedPrecision
                               Decorate 44(coord) Location 0
                               Decorate 45 RelaxedPrecision
diff --git a/Test/baseResults/spv.structCopy.comp.out b/Test/baseResults/spv.structCopy.comp.out
index 38c7c09..f94e567 100644
--- a/Test/baseResults/spv.structCopy.comp.out
+++ b/Test/baseResults/spv.structCopy.comp.out
@@ -36,17 +36,17 @@
                               MemberDecorate 32(MyStruct) 1 Offset 4
                               MemberDecorate 32(MyStruct) 2 Offset 8
                               Decorate 33 ArrayStride 12
+                              Decorate 34(MyStructs) BufferBlock
                               MemberDecorate 34(MyStructs) 0 Offset 0
                               MemberDecorate 34(MyStructs) 1 Offset 4
-                              Decorate 34(MyStructs) BufferBlock
-                              Decorate 36(my_structs) DescriptorSet 0
                               Decorate 36(my_structs) Binding 0
+                              Decorate 36(my_structs) DescriptorSet 0
+                              Decorate 65(Output) BufferBlock
                               MemberDecorate 65(Output) 0 Offset 0
                               MemberDecorate 65(Output) 1 Offset 4
                               MemberDecorate 65(Output) 2 Offset 8
-                              Decorate 65(Output) BufferBlock
-                              Decorate 67(o) DescriptorSet 0
                               Decorate 67(o) Binding 1
+                              Decorate 67(o) DescriptorSet 0
                               Decorate 80 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.structDeref.frag.out b/Test/baseResults/spv.structDeref.frag.out
index a528a59..b788430 100644
--- a/Test/baseResults/spv.structDeref.frag.out
+++ b/Test/baseResults/spv.structDeref.frag.out
@@ -42,8 +42,8 @@
                               Name 122  "foo2"
                               Decorate 61(coord) Location 0
                               Decorate 99(gl_FragColor) Location 0
-                              Decorate 116(samp2D) DescriptorSet 0
                               Decorate 116(samp2D) Binding 0
+                              Decorate 116(samp2D) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 1
diff --git a/Test/baseResults/spv.structure.frag.out b/Test/baseResults/spv.structure.frag.out
index 6b39c29..3b43ba5 100644
--- a/Test/baseResults/spv.structure.frag.out
+++ b/Test/baseResults/spv.structure.frag.out
@@ -25,8 +25,8 @@
                               Name 54  "coord"
                               Name 59  "foo"
                               Decorate 45(gl_FragColor) Location 0
-                              Decorate 50(samp2D) DescriptorSet 0
                               Decorate 50(samp2D) Binding 0
+                              Decorate 50(samp2D) DescriptorSet 0
                               Decorate 54(coord) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.subgroup.frag.out b/Test/baseResults/spv.subgroup.frag.out
index a882a22..9c6bfbf 100644
--- a/Test/baseResults/spv.subgroup.frag.out
+++ b/Test/baseResults/spv.subgroup.frag.out
@@ -17,12 +17,12 @@
                               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 11(gl_SubgroupSize) Flat
                               Decorate 12 RelaxedPrecision
                               Decorate 13(gl_SubgroupInvocationID) RelaxedPrecision
-                              Decorate 13(gl_SubgroupInvocationID) Flat
                               Decorate 13(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId
+                              Decorate 13(gl_SubgroupInvocationID) Flat
                               Decorate 14 RelaxedPrecision
                               Decorate 16 RelaxedPrecision
                2:             TypeVoid
diff --git a/Test/baseResults/spv.subgroup.geom.out b/Test/baseResults/spv.subgroup.geom.out
index 3340595..905e874 100644
--- a/Test/baseResults/spv.subgroup.geom.out
+++ b/Test/baseResults/spv.subgroup.geom.out
@@ -22,10 +22,10 @@
                               Name 18  "gl_SubgroupSize"
                               Name 20  "gl_SubgroupInvocationID"
                               Decorate 8 ArrayStride 16
-                              MemberDecorate 9(Output) 0 Offset 0
                               Decorate 9(Output) Block
-                              Decorate 11 DescriptorSet 0
+                              MemberDecorate 9(Output) 0 Offset 0
                               Decorate 11 Binding 0
+                              Decorate 11 DescriptorSet 0
                               Decorate 15(gl_PrimitiveIDIn) BuiltIn PrimitiveId
                               Decorate 18(gl_SubgroupSize) RelaxedPrecision
                               Decorate 18(gl_SubgroupSize) BuiltIn SubgroupSize
diff --git a/Test/baseResults/spv.subgroup.tesc.out b/Test/baseResults/spv.subgroup.tesc.out
index aaac4b8..23e0e3e 100644
--- a/Test/baseResults/spv.subgroup.tesc.out
+++ b/Test/baseResults/spv.subgroup.tesc.out
@@ -19,10 +19,10 @@
                               Name 18  "gl_SubgroupSize"
                               Name 20  "gl_SubgroupInvocationID"
                               Decorate 8 ArrayStride 16
-                              MemberDecorate 9(Output) 0 Offset 0
                               Decorate 9(Output) Block
-                              Decorate 11 DescriptorSet 0
+                              MemberDecorate 9(Output) 0 Offset 0
                               Decorate 11 Binding 0
+                              Decorate 11 DescriptorSet 0
                               Decorate 15(gl_PrimitiveID) BuiltIn PrimitiveId
                               Decorate 18(gl_SubgroupSize) RelaxedPrecision
                               Decorate 18(gl_SubgroupSize) BuiltIn SubgroupSize
diff --git a/Test/baseResults/spv.subgroup.tese.out b/Test/baseResults/spv.subgroup.tese.out
index f989981..c0ef120 100644
--- a/Test/baseResults/spv.subgroup.tese.out
+++ b/Test/baseResults/spv.subgroup.tese.out
@@ -21,10 +21,10 @@
                               Name 18  "gl_SubgroupSize"
                               Name 20  "gl_SubgroupInvocationID"
                               Decorate 8 ArrayStride 16
-                              MemberDecorate 9(Output) 0 Offset 0
                               Decorate 9(Output) Block
-                              Decorate 11 DescriptorSet 0
+                              MemberDecorate 9(Output) 0 Offset 0
                               Decorate 11 Binding 0
+                              Decorate 11 DescriptorSet 0
                               Decorate 15(gl_PrimitiveID) BuiltIn PrimitiveId
                               Decorate 18(gl_SubgroupSize) RelaxedPrecision
                               Decorate 18(gl_SubgroupSize) BuiltIn SubgroupSize
diff --git a/Test/baseResults/spv.subgroup.vert.out b/Test/baseResults/spv.subgroup.vert.out
index 6add1c7..3537f58 100644
--- a/Test/baseResults/spv.subgroup.vert.out
+++ b/Test/baseResults/spv.subgroup.vert.out
@@ -18,10 +18,10 @@
                               Name 18  "gl_SubgroupSize"
                               Name 20  "gl_SubgroupInvocationID"
                               Decorate 8 ArrayStride 16
-                              MemberDecorate 9(Output) 0 Offset 0
                               Decorate 9(Output) Block
-                              Decorate 11 DescriptorSet 0
+                              MemberDecorate 9(Output) 0 Offset 0
                               Decorate 11 Binding 0
+                              Decorate 11 DescriptorSet 0
                               Decorate 15(gl_VertexIndex) BuiltIn VertexIndex
                               Decorate 18(gl_SubgroupSize) RelaxedPrecision
                               Decorate 18(gl_SubgroupSize) BuiltIn SubgroupSize
diff --git a/Test/baseResults/spv.subgroupArithmetic.comp.out b/Test/baseResults/spv.subgroupArithmetic.comp.out
index bd71fc7..c3b467b 100644
--- a/Test/baseResults/spv.subgroupArithmetic.comp.out
+++ b/Test/baseResults/spv.subgroupArithmetic.comp.out
@@ -32,13 +32,13 @@
                               Decorate 13 RelaxedPrecision
                               Decorate 14 RelaxedPrecision
                               Decorate 16 RelaxedPrecision
+                              Decorate 24(Buffers) Block
                               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) Block
-                              Decorate 27(data) DescriptorSet 0
                               Decorate 27(data) Binding 0
+                              Decorate 27(data) DescriptorSet 0
                               Decorate 2385 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.subgroupBallot.comp.out b/Test/baseResults/spv.subgroupBallot.comp.out
index 51cb7ac..834331d 100644
--- a/Test/baseResults/spv.subgroupBallot.comp.out
+++ b/Test/baseResults/spv.subgroupBallot.comp.out
@@ -44,13 +44,13 @@
                               Decorate 26(gl_SubgroupGtMask) BuiltIn SubgroupGtMaskKHR
                               Decorate 29(gl_SubgroupLeMask) BuiltIn SubgroupLeMaskKHR
                               Decorate 32(gl_SubgroupLtMask) BuiltIn SubgroupLtMaskKHR
+                              Decorate 46(Buffers) Block
                               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) Block
-                              Decorate 49(data) DescriptorSet 0
                               Decorate 49(data) Binding 0
+                              Decorate 49(data) DescriptorSet 0
                               Decorate 436 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.subgroupBasic.comp.out b/Test/baseResults/spv.subgroupBasic.comp.out
index 51eae75..7135012 100644
--- a/Test/baseResults/spv.subgroupBasic.comp.out
+++ b/Test/baseResults/spv.subgroupBasic.comp.out
@@ -20,10 +20,10 @@
                               Name 22  "gl_NumSubgroups"
                               Name 25  "gl_SubgroupID"
                               Decorate 7 ArrayStride 4
-                              MemberDecorate 8(Buffer) 0 Offset 0
                               Decorate 8(Buffer) Block
-                              Decorate 10(data) DescriptorSet 0
+                              MemberDecorate 8(Buffer) 0 Offset 0
                               Decorate 10(data) Binding 0
+                              Decorate 10(data) DescriptorSet 0
                               Decorate 14(gl_SubgroupSize) RelaxedPrecision
                               Decorate 14(gl_SubgroupSize) BuiltIn SubgroupSize
                               Decorate 15 RelaxedPrecision
diff --git a/Test/baseResults/spv.subgroupClustered.comp.out b/Test/baseResults/spv.subgroupClustered.comp.out
index 2529eef..b86570a 100644
--- a/Test/baseResults/spv.subgroupClustered.comp.out
+++ b/Test/baseResults/spv.subgroupClustered.comp.out
@@ -32,13 +32,13 @@
                               Decorate 13 RelaxedPrecision
                               Decorate 14 RelaxedPrecision
                               Decorate 16 RelaxedPrecision
+                              Decorate 24(Buffers) Block
                               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) Block
-                              Decorate 27(data) DescriptorSet 0
                               Decorate 27(data) Binding 0
+                              Decorate 27(data) DescriptorSet 0
                               Decorate 837 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.subgroupExtendedTypesArithmetic.comp.out b/Test/baseResults/spv.subgroupExtendedTypesArithmetic.comp.out
index 51c2a5e..92c0029 100644
--- a/Test/baseResults/spv.subgroupExtendedTypesArithmetic.comp.out
+++ b/Test/baseResults/spv.subgroupExtendedTypesArithmetic.comp.out
@@ -49,6 +49,7 @@
                               Decorate 13 RelaxedPrecision
                               Decorate 14 RelaxedPrecision
                               Decorate 16 RelaxedPrecision
+                              Decorate 31(Buffers) Block
                               MemberDecorate 31(Buffers) 0 Offset 0
                               MemberDecorate 31(Buffers) 1 Offset 4
                               MemberDecorate 31(Buffers) 2 Offset 8
@@ -56,9 +57,8 @@
                               MemberDecorate 31(Buffers) 4 Offset 32
                               MemberDecorate 31(Buffers) 5 Offset 64
                               MemberDecorate 31(Buffers) 6 Offset 96
-                              Decorate 31(Buffers) Block
-                              Decorate 34(data) DescriptorSet 0
                               Decorate 34(data) Binding 0
+                              Decorate 34(data) DescriptorSet 0
                               Decorate 4217 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.subgroupExtendedTypesBallot.comp.out b/Test/baseResults/spv.subgroupExtendedTypesBallot.comp.out
index 0a706a5..880df85 100644
--- a/Test/baseResults/spv.subgroupExtendedTypesBallot.comp.out
+++ b/Test/baseResults/spv.subgroupExtendedTypesBallot.comp.out
@@ -49,6 +49,7 @@
                               Decorate 13 RelaxedPrecision
                               Decorate 14 RelaxedPrecision
                               Decorate 16 RelaxedPrecision
+                              Decorate 31(Buffers) Block
                               MemberDecorate 31(Buffers) 0 Offset 0
                               MemberDecorate 31(Buffers) 1 Offset 4
                               MemberDecorate 31(Buffers) 2 Offset 8
@@ -56,9 +57,8 @@
                               MemberDecorate 31(Buffers) 4 Offset 32
                               MemberDecorate 31(Buffers) 5 Offset 64
                               MemberDecorate 31(Buffers) 6 Offset 96
-                              Decorate 31(Buffers) Block
-                              Decorate 34(data) DescriptorSet 0
                               Decorate 34(data) Binding 0
+                              Decorate 34(data) DescriptorSet 0
                               Decorate 497 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.subgroupExtendedTypesClustered.comp.out b/Test/baseResults/spv.subgroupExtendedTypesClustered.comp.out
index f876c5a..849cd67 100644
--- a/Test/baseResults/spv.subgroupExtendedTypesClustered.comp.out
+++ b/Test/baseResults/spv.subgroupExtendedTypesClustered.comp.out
@@ -49,6 +49,7 @@
                               Decorate 13 RelaxedPrecision
                               Decorate 14 RelaxedPrecision
                               Decorate 16 RelaxedPrecision
+                              Decorate 31(Buffers) Block
                               MemberDecorate 31(Buffers) 0 Offset 0
                               MemberDecorate 31(Buffers) 1 Offset 4
                               MemberDecorate 31(Buffers) 2 Offset 8
@@ -56,9 +57,8 @@
                               MemberDecorate 31(Buffers) 4 Offset 32
                               MemberDecorate 31(Buffers) 5 Offset 64
                               MemberDecorate 31(Buffers) 6 Offset 96
-                              Decorate 31(Buffers) Block
-                              Decorate 34(data) DescriptorSet 0
                               Decorate 34(data) Binding 0
+                              Decorate 34(data) DescriptorSet 0
                               Decorate 1457 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.subgroupExtendedTypesPartitioned.comp.out b/Test/baseResults/spv.subgroupExtendedTypesPartitioned.comp.out
index f2cb8cb..8381c49 100644
--- a/Test/baseResults/spv.subgroupExtendedTypesPartitioned.comp.out
+++ b/Test/baseResults/spv.subgroupExtendedTypesPartitioned.comp.out
@@ -51,6 +51,7 @@
                               Decorate 13 RelaxedPrecision
                               Decorate 14 RelaxedPrecision
                               Decorate 16 RelaxedPrecision
+                              Decorate 34(Buffers) Block
                               MemberDecorate 34(Buffers) 0 Offset 0
                               MemberDecorate 34(Buffers) 1 Offset 4
                               MemberDecorate 34(Buffers) 2 Offset 8
@@ -58,9 +59,8 @@
                               MemberDecorate 34(Buffers) 4 Offset 32
                               MemberDecorate 34(Buffers) 5 Offset 64
                               MemberDecorate 34(Buffers) 6 Offset 96
-                              Decorate 34(Buffers) Block
-                              Decorate 37(data) DescriptorSet 0
                               Decorate 37(data) Binding 0
+                              Decorate 37(data) DescriptorSet 0
                               Decorate 1742 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.subgroupExtendedTypesQuad.comp.out b/Test/baseResults/spv.subgroupExtendedTypesQuad.comp.out
index 8aa7c12..a0f8564 100644
--- a/Test/baseResults/spv.subgroupExtendedTypesQuad.comp.out
+++ b/Test/baseResults/spv.subgroupExtendedTypesQuad.comp.out
@@ -49,6 +49,7 @@
                               Decorate 13 RelaxedPrecision
                               Decorate 14 RelaxedPrecision
                               Decorate 16 RelaxedPrecision
+                              Decorate 31(Buffers) Block
                               MemberDecorate 31(Buffers) 0 Offset 0
                               MemberDecorate 31(Buffers) 1 Offset 4
                               MemberDecorate 31(Buffers) 2 Offset 8
@@ -56,9 +57,8 @@
                               MemberDecorate 31(Buffers) 4 Offset 32
                               MemberDecorate 31(Buffers) 5 Offset 64
                               MemberDecorate 31(Buffers) 6 Offset 96
-                              Decorate 31(Buffers) Block
-                              Decorate 34(data) DescriptorSet 0
                               Decorate 34(data) Binding 0
+                              Decorate 34(data) DescriptorSet 0
                               Decorate 917 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.subgroupExtendedTypesRotate.comp.out b/Test/baseResults/spv.subgroupExtendedTypesRotate.comp.out
new file mode 100644
index 0000000..cb13289
--- /dev/null
+++ b/Test/baseResults/spv.subgroupExtendedTypesRotate.comp.out
@@ -0,0 +1,712 @@
+spv.subgroupExtendedTypesRotate.comp
+// Module Version 10300
+// Generated by (magic number): 8000b
+// Id's are bound by 553
+
+                              Capability Shader
+                              Capability Float16
+                              Capability Int64
+                              Capability Int16
+                              Capability Int8
+                              Capability StorageUniformBufferBlock16
+                              Capability StorageBuffer8BitAccess
+                              Capability CapabilityGroupNonUniformRotateKHR
+                              Extension  "SPV_KHR_8bit_storage"
+                              Extension  "SPV_KHR_subgroup_rotate"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 8 1 1
+                              Source GLSL 450
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_float16"
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_int16"
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_int64"
+                              SourceExtension  "GL_EXT_shader_explicit_arithmetic_types_int8"
+                              SourceExtension  "GL_EXT_shader_subgroup_extended_types_float16"
+                              SourceExtension  "GL_EXT_shader_subgroup_extended_types_int16"
+                              SourceExtension  "GL_EXT_shader_subgroup_extended_types_int64"
+                              SourceExtension  "GL_EXT_shader_subgroup_extended_types_int8"
+                              SourceExtension  "GL_KHR_shader_subgroup_rotate"
+                              Name 4  "main"
+                              Name 8  "delta"
+                              Name 9  "roblock"
+                              MemberName 9(roblock) 0  "delta"
+                              Name 11  "ro"
+                              Name 31  "Buffers"
+                              MemberName 31(Buffers) 0  "i8"
+                              MemberName 31(Buffers) 1  "u8"
+                              MemberName 31(Buffers) 2  "i16"
+                              MemberName 31(Buffers) 3  "u16"
+                              MemberName 31(Buffers) 4  "i64"
+                              MemberName 31(Buffers) 5  "u64"
+                              MemberName 31(Buffers) 6  "f16"
+                              Name 35  "data"
+                              Decorate 9(roblock) Block
+                              MemberDecorate 9(roblock) 0 NonWritable
+                              MemberDecorate 9(roblock) 0 Offset 0
+                              Decorate 11(ro) NonWritable
+                              Decorate 11(ro) Binding 1
+                              Decorate 11(ro) DescriptorSet 0
+                              Decorate 31(Buffers) Block
+                              MemberDecorate 31(Buffers) 0 Offset 0
+                              MemberDecorate 31(Buffers) 1 Offset 4
+                              MemberDecorate 31(Buffers) 2 Offset 8
+                              MemberDecorate 31(Buffers) 3 Offset 16
+                              MemberDecorate 31(Buffers) 4 Offset 32
+                              MemberDecorate 31(Buffers) 5 Offset 64
+                              MemberDecorate 31(Buffers) 6 Offset 96
+                              Decorate 35(data) Binding 0
+                              Decorate 35(data) DescriptorSet 0
+                              Decorate 552 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+      9(roblock):             TypeStruct 6(int)
+              10:             TypePointer StorageBuffer 9(roblock)
+          11(ro):     10(ptr) Variable StorageBuffer
+              12:             TypeInt 32 1
+              13:     12(int) Constant 0
+              14:             TypePointer StorageBuffer 6(int)
+              17:             TypeInt 8 1
+              18:             TypeVector 17(int8_t) 4
+              19:             TypeInt 8 0
+              20:             TypeVector 19(int8_t) 4
+              21:             TypeInt 16 1
+              22:             TypeVector 21(int16_t) 4
+              23:             TypeInt 16 0
+              24:             TypeVector 23(int16_t) 4
+              25:             TypeInt 64 1
+              26:             TypeVector 25(int64_t) 4
+              27:             TypeInt 64 0
+              28:             TypeVector 27(int64_t) 4
+              29:             TypeFloat 16
+              30:             TypeVector 29(float16_t) 4
+     31(Buffers):             TypeStruct 18(i8vec4) 20(i8vec4) 22(i16vec4) 24(i16vec4) 26(i64vec4) 28(i64vec4) 30(f16vec4)
+              32:      6(int) Constant 4
+              33:             TypeArray 31(Buffers) 32
+              34:             TypePointer StorageBuffer 33
+        35(data):     34(ptr) Variable StorageBuffer
+              37:      6(int) Constant 0
+              38:             TypePointer StorageBuffer 17(int8_t)
+              42:      6(int) Constant 3
+              46:     12(int) Constant 1
+              47:             TypeVector 17(int8_t) 2
+              48:             TypePointer StorageBuffer 18(i8vec4)
+              56:      6(int) Constant 1
+              60:     12(int) Constant 2
+              61:             TypeVector 17(int8_t) 3
+              71:      6(int) Constant 2
+              75:     12(int) Constant 3
+             116:             TypePointer StorageBuffer 19(int8_t)
+             123:             TypeVector 19(int8_t) 2
+             124:             TypePointer StorageBuffer 20(i8vec4)
+             135:             TypeVector 19(int8_t) 3
+             188:             TypePointer StorageBuffer 21(int16_t)
+             195:             TypeVector 21(int16_t) 2
+             196:             TypePointer StorageBuffer 22(i16vec4)
+             207:             TypeVector 21(int16_t) 3
+             260:             TypePointer StorageBuffer 23(int16_t)
+             267:             TypeVector 23(int16_t) 2
+             268:             TypePointer StorageBuffer 24(i16vec4)
+             279:             TypeVector 23(int16_t) 3
+             332:     12(int) Constant 4
+             333:             TypePointer StorageBuffer 25(int64_t)
+             340:             TypeVector 25(int64_t) 2
+             341:             TypePointer StorageBuffer 26(i64vec4)
+             352:             TypeVector 25(int64_t) 3
+             405:     12(int) Constant 5
+             406:             TypePointer StorageBuffer 27(int64_t)
+             413:             TypeVector 27(int64_t) 2
+             414:             TypePointer StorageBuffer 28(i64vec4)
+             425:             TypeVector 27(int64_t) 3
+             478:     12(int) Constant 6
+             479:             TypePointer StorageBuffer 29(float16_t)
+             486:             TypeVector 29(float16_t) 2
+             487:             TypePointer StorageBuffer 30(f16vec4)
+             498:             TypeVector 29(float16_t) 3
+             550:             TypeVector 6(int) 3
+             551:      6(int) Constant 8
+             552:  550(ivec3) ConstantComposite 551 56 56
+         4(main):           2 Function None 3
+               5:             Label
+        8(delta):      7(ptr) Variable Function
+              15:     14(ptr) AccessChain 11(ro) 13
+              16:      6(int) Load 15
+                              Store 8(delta) 16
+              36:      6(int) Load 8(delta)
+              39:     38(ptr) AccessChain 35(data) 13 13 37
+              40:  17(int8_t) Load 39
+              41:      6(int) Load 8(delta)
+              43:  17(int8_t) GroupNonUniformRotateKHR 42 40 41
+              44:     38(ptr) AccessChain 35(data) 36 13 37
+                              Store 44 43
+              45:      6(int) Load 8(delta)
+              49:     48(ptr) AccessChain 35(data) 46 13
+              50:  18(i8vec4) Load 49
+              51:  47(i8vec2) VectorShuffle 50 50 0 1
+              52:      6(int) Load 8(delta)
+              53:  47(i8vec2) GroupNonUniformRotateKHR 42 51 52
+              54:     38(ptr) AccessChain 35(data) 45 13 37
+              55:  17(int8_t) CompositeExtract 53 0
+                              Store 54 55
+              57:     38(ptr) AccessChain 35(data) 45 13 56
+              58:  17(int8_t) CompositeExtract 53 1
+                              Store 57 58
+              59:      6(int) Load 8(delta)
+              62:     48(ptr) AccessChain 35(data) 60 13
+              63:  18(i8vec4) Load 62
+              64:  61(i8vec3) VectorShuffle 63 63 0 1 2
+              65:      6(int) Load 8(delta)
+              66:  61(i8vec3) GroupNonUniformRotateKHR 42 64 65
+              67:     38(ptr) AccessChain 35(data) 59 13 37
+              68:  17(int8_t) CompositeExtract 66 0
+                              Store 67 68
+              69:     38(ptr) AccessChain 35(data) 59 13 56
+              70:  17(int8_t) CompositeExtract 66 1
+                              Store 69 70
+              72:     38(ptr) AccessChain 35(data) 59 13 71
+              73:  17(int8_t) CompositeExtract 66 2
+                              Store 72 73
+              74:      6(int) Load 8(delta)
+              76:     48(ptr) AccessChain 35(data) 75 13
+              77:  18(i8vec4) Load 76
+              78:      6(int) Load 8(delta)
+              79:  18(i8vec4) GroupNonUniformRotateKHR 42 77 78
+              80:     48(ptr) AccessChain 35(data) 74 13
+                              Store 80 79
+              81:      6(int) Load 8(delta)
+              82:     38(ptr) AccessChain 35(data) 13 13 37
+              83:  17(int8_t) Load 82
+              84:      6(int) Load 8(delta)
+              85:  17(int8_t) GroupNonUniformRotateKHR 42 83 84 56
+              86:     38(ptr) AccessChain 35(data) 81 13 37
+                              Store 86 85
+              87:      6(int) Load 8(delta)
+              88:     48(ptr) AccessChain 35(data) 46 13
+              89:  18(i8vec4) Load 88
+              90:  47(i8vec2) VectorShuffle 89 89 0 1
+              91:      6(int) Load 8(delta)
+              92:  47(i8vec2) GroupNonUniformRotateKHR 42 90 91 56
+              93:     38(ptr) AccessChain 35(data) 87 13 37
+              94:  17(int8_t) CompositeExtract 92 0
+                              Store 93 94
+              95:     38(ptr) AccessChain 35(data) 87 13 56
+              96:  17(int8_t) CompositeExtract 92 1
+                              Store 95 96
+              97:      6(int) Load 8(delta)
+              98:     48(ptr) AccessChain 35(data) 60 13
+              99:  18(i8vec4) Load 98
+             100:  61(i8vec3) VectorShuffle 99 99 0 1 2
+             101:      6(int) Load 8(delta)
+             102:  61(i8vec3) GroupNonUniformRotateKHR 42 100 101 56
+             103:     38(ptr) AccessChain 35(data) 97 13 37
+             104:  17(int8_t) CompositeExtract 102 0
+                              Store 103 104
+             105:     38(ptr) AccessChain 35(data) 97 13 56
+             106:  17(int8_t) CompositeExtract 102 1
+                              Store 105 106
+             107:     38(ptr) AccessChain 35(data) 97 13 71
+             108:  17(int8_t) CompositeExtract 102 2
+                              Store 107 108
+             109:      6(int) Load 8(delta)
+             110:     48(ptr) AccessChain 35(data) 75 13
+             111:  18(i8vec4) Load 110
+             112:      6(int) Load 8(delta)
+             113:  18(i8vec4) GroupNonUniformRotateKHR 42 111 112 56
+             114:     48(ptr) AccessChain 35(data) 109 13
+                              Store 114 113
+             115:      6(int) Load 8(delta)
+             117:    116(ptr) AccessChain 35(data) 13 46 37
+             118:  19(int8_t) Load 117
+             119:      6(int) Load 8(delta)
+             120:  19(int8_t) GroupNonUniformRotateKHR 42 118 119
+             121:    116(ptr) AccessChain 35(data) 115 46 37
+                              Store 121 120
+             122:      6(int) Load 8(delta)
+             125:    124(ptr) AccessChain 35(data) 46 46
+             126:  20(i8vec4) Load 125
+             127: 123(i8vec2) VectorShuffle 126 126 0 1
+             128:      6(int) Load 8(delta)
+             129: 123(i8vec2) GroupNonUniformRotateKHR 42 127 128
+             130:    116(ptr) AccessChain 35(data) 122 46 37
+             131:  19(int8_t) CompositeExtract 129 0
+                              Store 130 131
+             132:    116(ptr) AccessChain 35(data) 122 46 56
+             133:  19(int8_t) CompositeExtract 129 1
+                              Store 132 133
+             134:      6(int) Load 8(delta)
+             136:    124(ptr) AccessChain 35(data) 60 46
+             137:  20(i8vec4) Load 136
+             138: 135(i8vec3) VectorShuffle 137 137 0 1 2
+             139:      6(int) Load 8(delta)
+             140: 135(i8vec3) GroupNonUniformRotateKHR 42 138 139
+             141:    116(ptr) AccessChain 35(data) 134 46 37
+             142:  19(int8_t) CompositeExtract 140 0
+                              Store 141 142
+             143:    116(ptr) AccessChain 35(data) 134 46 56
+             144:  19(int8_t) CompositeExtract 140 1
+                              Store 143 144
+             145:    116(ptr) AccessChain 35(data) 134 46 71
+             146:  19(int8_t) CompositeExtract 140 2
+                              Store 145 146
+             147:      6(int) Load 8(delta)
+             148:    124(ptr) AccessChain 35(data) 75 46
+             149:  20(i8vec4) Load 148
+             150:      6(int) Load 8(delta)
+             151:  20(i8vec4) GroupNonUniformRotateKHR 42 149 150
+             152:    124(ptr) AccessChain 35(data) 147 46
+                              Store 152 151
+             153:      6(int) Load 8(delta)
+             154:    116(ptr) AccessChain 35(data) 13 46 37
+             155:  19(int8_t) Load 154
+             156:      6(int) Load 8(delta)
+             157:  19(int8_t) GroupNonUniformRotateKHR 42 155 156 56
+             158:    116(ptr) AccessChain 35(data) 153 46 37
+                              Store 158 157
+             159:      6(int) Load 8(delta)
+             160:    124(ptr) AccessChain 35(data) 46 46
+             161:  20(i8vec4) Load 160
+             162: 123(i8vec2) VectorShuffle 161 161 0 1
+             163:      6(int) Load 8(delta)
+             164: 123(i8vec2) GroupNonUniformRotateKHR 42 162 163 56
+             165:    116(ptr) AccessChain 35(data) 159 46 37
+             166:  19(int8_t) CompositeExtract 164 0
+                              Store 165 166
+             167:    116(ptr) AccessChain 35(data) 159 46 56
+             168:  19(int8_t) CompositeExtract 164 1
+                              Store 167 168
+             169:      6(int) Load 8(delta)
+             170:    124(ptr) AccessChain 35(data) 60 46
+             171:  20(i8vec4) Load 170
+             172: 135(i8vec3) VectorShuffle 171 171 0 1 2
+             173:      6(int) Load 8(delta)
+             174: 135(i8vec3) GroupNonUniformRotateKHR 42 172 173 56
+             175:    116(ptr) AccessChain 35(data) 169 46 37
+             176:  19(int8_t) CompositeExtract 174 0
+                              Store 175 176
+             177:    116(ptr) AccessChain 35(data) 169 46 56
+             178:  19(int8_t) CompositeExtract 174 1
+                              Store 177 178
+             179:    116(ptr) AccessChain 35(data) 169 46 71
+             180:  19(int8_t) CompositeExtract 174 2
+                              Store 179 180
+             181:      6(int) Load 8(delta)
+             182:    124(ptr) AccessChain 35(data) 75 46
+             183:  20(i8vec4) Load 182
+             184:      6(int) Load 8(delta)
+             185:  20(i8vec4) GroupNonUniformRotateKHR 42 183 184 56
+             186:    124(ptr) AccessChain 35(data) 181 46
+                              Store 186 185
+             187:      6(int) Load 8(delta)
+             189:    188(ptr) AccessChain 35(data) 13 60 37
+             190: 21(int16_t) Load 189
+             191:      6(int) Load 8(delta)
+             192: 21(int16_t) GroupNonUniformRotateKHR 42 190 191
+             193:    188(ptr) AccessChain 35(data) 187 60 37
+                              Store 193 192
+             194:      6(int) Load 8(delta)
+             197:    196(ptr) AccessChain 35(data) 46 60
+             198: 22(i16vec4) Load 197
+             199:195(i16vec2) VectorShuffle 198 198 0 1
+             200:      6(int) Load 8(delta)
+             201:195(i16vec2) GroupNonUniformRotateKHR 42 199 200
+             202:    188(ptr) AccessChain 35(data) 194 60 37
+             203: 21(int16_t) CompositeExtract 201 0
+                              Store 202 203
+             204:    188(ptr) AccessChain 35(data) 194 60 56
+             205: 21(int16_t) CompositeExtract 201 1
+                              Store 204 205
+             206:      6(int) Load 8(delta)
+             208:    196(ptr) AccessChain 35(data) 60 60
+             209: 22(i16vec4) Load 208
+             210:207(i16vec3) VectorShuffle 209 209 0 1 2
+             211:      6(int) Load 8(delta)
+             212:207(i16vec3) GroupNonUniformRotateKHR 42 210 211
+             213:    188(ptr) AccessChain 35(data) 206 60 37
+             214: 21(int16_t) CompositeExtract 212 0
+                              Store 213 214
+             215:    188(ptr) AccessChain 35(data) 206 60 56
+             216: 21(int16_t) CompositeExtract 212 1
+                              Store 215 216
+             217:    188(ptr) AccessChain 35(data) 206 60 71
+             218: 21(int16_t) CompositeExtract 212 2
+                              Store 217 218
+             219:      6(int) Load 8(delta)
+             220:    196(ptr) AccessChain 35(data) 75 60
+             221: 22(i16vec4) Load 220
+             222:      6(int) Load 8(delta)
+             223: 22(i16vec4) GroupNonUniformRotateKHR 42 221 222
+             224:    196(ptr) AccessChain 35(data) 219 60
+                              Store 224 223
+             225:      6(int) Load 8(delta)
+             226:    188(ptr) AccessChain 35(data) 13 60 37
+             227: 21(int16_t) Load 226
+             228:      6(int) Load 8(delta)
+             229: 21(int16_t) GroupNonUniformRotateKHR 42 227 228 56
+             230:    188(ptr) AccessChain 35(data) 225 60 37
+                              Store 230 229
+             231:      6(int) Load 8(delta)
+             232:    196(ptr) AccessChain 35(data) 46 60
+             233: 22(i16vec4) Load 232
+             234:195(i16vec2) VectorShuffle 233 233 0 1
+             235:      6(int) Load 8(delta)
+             236:195(i16vec2) GroupNonUniformRotateKHR 42 234 235 56
+             237:    188(ptr) AccessChain 35(data) 231 60 37
+             238: 21(int16_t) CompositeExtract 236 0
+                              Store 237 238
+             239:    188(ptr) AccessChain 35(data) 231 60 56
+             240: 21(int16_t) CompositeExtract 236 1
+                              Store 239 240
+             241:      6(int) Load 8(delta)
+             242:    196(ptr) AccessChain 35(data) 60 60
+             243: 22(i16vec4) Load 242
+             244:207(i16vec3) VectorShuffle 243 243 0 1 2
+             245:      6(int) Load 8(delta)
+             246:207(i16vec3) GroupNonUniformRotateKHR 42 244 245 56
+             247:    188(ptr) AccessChain 35(data) 241 60 37
+             248: 21(int16_t) CompositeExtract 246 0
+                              Store 247 248
+             249:    188(ptr) AccessChain 35(data) 241 60 56
+             250: 21(int16_t) CompositeExtract 246 1
+                              Store 249 250
+             251:    188(ptr) AccessChain 35(data) 241 60 71
+             252: 21(int16_t) CompositeExtract 246 2
+                              Store 251 252
+             253:      6(int) Load 8(delta)
+             254:    196(ptr) AccessChain 35(data) 75 60
+             255: 22(i16vec4) Load 254
+             256:      6(int) Load 8(delta)
+             257: 22(i16vec4) GroupNonUniformRotateKHR 42 255 256 56
+             258:    196(ptr) AccessChain 35(data) 253 60
+                              Store 258 257
+             259:      6(int) Load 8(delta)
+             261:    260(ptr) AccessChain 35(data) 13 75 37
+             262: 23(int16_t) Load 261
+             263:      6(int) Load 8(delta)
+             264: 23(int16_t) GroupNonUniformRotateKHR 42 262 263
+             265:    260(ptr) AccessChain 35(data) 259 75 37
+                              Store 265 264
+             266:      6(int) Load 8(delta)
+             269:    268(ptr) AccessChain 35(data) 46 75
+             270: 24(i16vec4) Load 269
+             271:267(i16vec2) VectorShuffle 270 270 0 1
+             272:      6(int) Load 8(delta)
+             273:267(i16vec2) GroupNonUniformRotateKHR 42 271 272
+             274:    260(ptr) AccessChain 35(data) 266 75 37
+             275: 23(int16_t) CompositeExtract 273 0
+                              Store 274 275
+             276:    260(ptr) AccessChain 35(data) 266 75 56
+             277: 23(int16_t) CompositeExtract 273 1
+                              Store 276 277
+             278:      6(int) Load 8(delta)
+             280:    268(ptr) AccessChain 35(data) 60 75
+             281: 24(i16vec4) Load 280
+             282:279(i16vec3) VectorShuffle 281 281 0 1 2
+             283:      6(int) Load 8(delta)
+             284:279(i16vec3) GroupNonUniformRotateKHR 42 282 283
+             285:    260(ptr) AccessChain 35(data) 278 75 37
+             286: 23(int16_t) CompositeExtract 284 0
+                              Store 285 286
+             287:    260(ptr) AccessChain 35(data) 278 75 56
+             288: 23(int16_t) CompositeExtract 284 1
+                              Store 287 288
+             289:    260(ptr) AccessChain 35(data) 278 75 71
+             290: 23(int16_t) CompositeExtract 284 2
+                              Store 289 290
+             291:      6(int) Load 8(delta)
+             292:    268(ptr) AccessChain 35(data) 75 75
+             293: 24(i16vec4) Load 292
+             294:      6(int) Load 8(delta)
+             295: 24(i16vec4) GroupNonUniformRotateKHR 42 293 294
+             296:    268(ptr) AccessChain 35(data) 291 75
+                              Store 296 295
+             297:      6(int) Load 8(delta)
+             298:    260(ptr) AccessChain 35(data) 13 75 37
+             299: 23(int16_t) Load 298
+             300:      6(int) Load 8(delta)
+             301: 23(int16_t) GroupNonUniformRotateKHR 42 299 300 56
+             302:    260(ptr) AccessChain 35(data) 297 75 37
+                              Store 302 301
+             303:      6(int) Load 8(delta)
+             304:    268(ptr) AccessChain 35(data) 46 75
+             305: 24(i16vec4) Load 304
+             306:267(i16vec2) VectorShuffle 305 305 0 1
+             307:      6(int) Load 8(delta)
+             308:267(i16vec2) GroupNonUniformRotateKHR 42 306 307 56
+             309:    260(ptr) AccessChain 35(data) 303 75 37
+             310: 23(int16_t) CompositeExtract 308 0
+                              Store 309 310
+             311:    260(ptr) AccessChain 35(data) 303 75 56
+             312: 23(int16_t) CompositeExtract 308 1
+                              Store 311 312
+             313:      6(int) Load 8(delta)
+             314:    268(ptr) AccessChain 35(data) 60 75
+             315: 24(i16vec4) Load 314
+             316:279(i16vec3) VectorShuffle 315 315 0 1 2
+             317:      6(int) Load 8(delta)
+             318:279(i16vec3) GroupNonUniformRotateKHR 42 316 317 56
+             319:    260(ptr) AccessChain 35(data) 313 75 37
+             320: 23(int16_t) CompositeExtract 318 0
+                              Store 319 320
+             321:    260(ptr) AccessChain 35(data) 313 75 56
+             322: 23(int16_t) CompositeExtract 318 1
+                              Store 321 322
+             323:    260(ptr) AccessChain 35(data) 313 75 71
+             324: 23(int16_t) CompositeExtract 318 2
+                              Store 323 324
+             325:      6(int) Load 8(delta)
+             326:    268(ptr) AccessChain 35(data) 75 75
+             327: 24(i16vec4) Load 326
+             328:      6(int) Load 8(delta)
+             329: 24(i16vec4) GroupNonUniformRotateKHR 42 327 328 56
+             330:    268(ptr) AccessChain 35(data) 325 75
+                              Store 330 329
+             331:      6(int) Load 8(delta)
+             334:    333(ptr) AccessChain 35(data) 13 332 37
+             335: 25(int64_t) Load 334
+             336:      6(int) Load 8(delta)
+             337: 25(int64_t) GroupNonUniformRotateKHR 42 335 336
+             338:    333(ptr) AccessChain 35(data) 331 332 37
+                              Store 338 337
+             339:      6(int) Load 8(delta)
+             342:    341(ptr) AccessChain 35(data) 46 332
+             343: 26(i64vec4) Load 342
+             344:340(i64vec2) VectorShuffle 343 343 0 1
+             345:      6(int) Load 8(delta)
+             346:340(i64vec2) GroupNonUniformRotateKHR 42 344 345
+             347:    333(ptr) AccessChain 35(data) 339 332 37
+             348: 25(int64_t) CompositeExtract 346 0
+                              Store 347 348
+             349:    333(ptr) AccessChain 35(data) 339 332 56
+             350: 25(int64_t) CompositeExtract 346 1
+                              Store 349 350
+             351:      6(int) Load 8(delta)
+             353:    341(ptr) AccessChain 35(data) 60 332
+             354: 26(i64vec4) Load 353
+             355:352(i64vec3) VectorShuffle 354 354 0 1 2
+             356:      6(int) Load 8(delta)
+             357:352(i64vec3) GroupNonUniformRotateKHR 42 355 356
+             358:    333(ptr) AccessChain 35(data) 351 332 37
+             359: 25(int64_t) CompositeExtract 357 0
+                              Store 358 359
+             360:    333(ptr) AccessChain 35(data) 351 332 56
+             361: 25(int64_t) CompositeExtract 357 1
+                              Store 360 361
+             362:    333(ptr) AccessChain 35(data) 351 332 71
+             363: 25(int64_t) CompositeExtract 357 2
+                              Store 362 363
+             364:      6(int) Load 8(delta)
+             365:    341(ptr) AccessChain 35(data) 75 332
+             366: 26(i64vec4) Load 365
+             367:      6(int) Load 8(delta)
+             368: 26(i64vec4) GroupNonUniformRotateKHR 42 366 367
+             369:    341(ptr) AccessChain 35(data) 364 332
+                              Store 369 368
+             370:      6(int) Load 8(delta)
+             371:    333(ptr) AccessChain 35(data) 13 332 37
+             372: 25(int64_t) Load 371
+             373:      6(int) Load 8(delta)
+             374: 25(int64_t) GroupNonUniformRotateKHR 42 372 373 56
+             375:    333(ptr) AccessChain 35(data) 370 332 37
+                              Store 375 374
+             376:      6(int) Load 8(delta)
+             377:    341(ptr) AccessChain 35(data) 46 332
+             378: 26(i64vec4) Load 377
+             379:340(i64vec2) VectorShuffle 378 378 0 1
+             380:      6(int) Load 8(delta)
+             381:340(i64vec2) GroupNonUniformRotateKHR 42 379 380 56
+             382:    333(ptr) AccessChain 35(data) 376 332 37
+             383: 25(int64_t) CompositeExtract 381 0
+                              Store 382 383
+             384:    333(ptr) AccessChain 35(data) 376 332 56
+             385: 25(int64_t) CompositeExtract 381 1
+                              Store 384 385
+             386:      6(int) Load 8(delta)
+             387:    341(ptr) AccessChain 35(data) 60 332
+             388: 26(i64vec4) Load 387
+             389:352(i64vec3) VectorShuffle 388 388 0 1 2
+             390:      6(int) Load 8(delta)
+             391:352(i64vec3) GroupNonUniformRotateKHR 42 389 390 56
+             392:    333(ptr) AccessChain 35(data) 386 332 37
+             393: 25(int64_t) CompositeExtract 391 0
+                              Store 392 393
+             394:    333(ptr) AccessChain 35(data) 386 332 56
+             395: 25(int64_t) CompositeExtract 391 1
+                              Store 394 395
+             396:    333(ptr) AccessChain 35(data) 386 332 71
+             397: 25(int64_t) CompositeExtract 391 2
+                              Store 396 397
+             398:      6(int) Load 8(delta)
+             399:    341(ptr) AccessChain 35(data) 75 332
+             400: 26(i64vec4) Load 399
+             401:      6(int) Load 8(delta)
+             402: 26(i64vec4) GroupNonUniformRotateKHR 42 400 401 56
+             403:    341(ptr) AccessChain 35(data) 398 332
+                              Store 403 402
+             404:      6(int) Load 8(delta)
+             407:    406(ptr) AccessChain 35(data) 13 405 37
+             408: 27(int64_t) Load 407
+             409:      6(int) Load 8(delta)
+             410: 27(int64_t) GroupNonUniformRotateKHR 42 408 409
+             411:    406(ptr) AccessChain 35(data) 404 405 37
+                              Store 411 410
+             412:      6(int) Load 8(delta)
+             415:    414(ptr) AccessChain 35(data) 46 405
+             416: 28(i64vec4) Load 415
+             417:413(i64vec2) VectorShuffle 416 416 0 1
+             418:      6(int) Load 8(delta)
+             419:413(i64vec2) GroupNonUniformRotateKHR 42 417 418
+             420:    406(ptr) AccessChain 35(data) 412 405 37
+             421: 27(int64_t) CompositeExtract 419 0
+                              Store 420 421
+             422:    406(ptr) AccessChain 35(data) 412 405 56
+             423: 27(int64_t) CompositeExtract 419 1
+                              Store 422 423
+             424:      6(int) Load 8(delta)
+             426:    414(ptr) AccessChain 35(data) 60 405
+             427: 28(i64vec4) Load 426
+             428:425(i64vec3) VectorShuffle 427 427 0 1 2
+             429:      6(int) Load 8(delta)
+             430:425(i64vec3) GroupNonUniformRotateKHR 42 428 429
+             431:    406(ptr) AccessChain 35(data) 424 405 37
+             432: 27(int64_t) CompositeExtract 430 0
+                              Store 431 432
+             433:    406(ptr) AccessChain 35(data) 424 405 56
+             434: 27(int64_t) CompositeExtract 430 1
+                              Store 433 434
+             435:    406(ptr) AccessChain 35(data) 424 405 71
+             436: 27(int64_t) CompositeExtract 430 2
+                              Store 435 436
+             437:      6(int) Load 8(delta)
+             438:    414(ptr) AccessChain 35(data) 75 405
+             439: 28(i64vec4) Load 438
+             440:      6(int) Load 8(delta)
+             441: 28(i64vec4) GroupNonUniformRotateKHR 42 439 440
+             442:    414(ptr) AccessChain 35(data) 437 405
+                              Store 442 441
+             443:      6(int) Load 8(delta)
+             444:    406(ptr) AccessChain 35(data) 13 405 37
+             445: 27(int64_t) Load 444
+             446:      6(int) Load 8(delta)
+             447: 27(int64_t) GroupNonUniformRotateKHR 42 445 446 56
+             448:    406(ptr) AccessChain 35(data) 443 405 37
+                              Store 448 447
+             449:      6(int) Load 8(delta)
+             450:    414(ptr) AccessChain 35(data) 46 405
+             451: 28(i64vec4) Load 450
+             452:413(i64vec2) VectorShuffle 451 451 0 1
+             453:      6(int) Load 8(delta)
+             454:413(i64vec2) GroupNonUniformRotateKHR 42 452 453 56
+             455:    406(ptr) AccessChain 35(data) 449 405 37
+             456: 27(int64_t) CompositeExtract 454 0
+                              Store 455 456
+             457:    406(ptr) AccessChain 35(data) 449 405 56
+             458: 27(int64_t) CompositeExtract 454 1
+                              Store 457 458
+             459:      6(int) Load 8(delta)
+             460:    414(ptr) AccessChain 35(data) 60 405
+             461: 28(i64vec4) Load 460
+             462:425(i64vec3) VectorShuffle 461 461 0 1 2
+             463:      6(int) Load 8(delta)
+             464:425(i64vec3) GroupNonUniformRotateKHR 42 462 463 56
+             465:    406(ptr) AccessChain 35(data) 459 405 37
+             466: 27(int64_t) CompositeExtract 464 0
+                              Store 465 466
+             467:    406(ptr) AccessChain 35(data) 459 405 56
+             468: 27(int64_t) CompositeExtract 464 1
+                              Store 467 468
+             469:    406(ptr) AccessChain 35(data) 459 405 71
+             470: 27(int64_t) CompositeExtract 464 2
+                              Store 469 470
+             471:      6(int) Load 8(delta)
+             472:    414(ptr) AccessChain 35(data) 75 405
+             473: 28(i64vec4) Load 472
+             474:      6(int) Load 8(delta)
+             475: 28(i64vec4) GroupNonUniformRotateKHR 42 473 474 56
+             476:    414(ptr) AccessChain 35(data) 471 405
+                              Store 476 475
+             477:      6(int) Load 8(delta)
+             480:    479(ptr) AccessChain 35(data) 13 478 37
+             481:29(float16_t) Load 480
+             482:      6(int) Load 8(delta)
+             483:29(float16_t) GroupNonUniformRotateKHR 42 481 482
+             484:    479(ptr) AccessChain 35(data) 477 478 37
+                              Store 484 483
+             485:      6(int) Load 8(delta)
+             488:    487(ptr) AccessChain 35(data) 46 478
+             489: 30(f16vec4) Load 488
+             490:486(f16vec2) VectorShuffle 489 489 0 1
+             491:      6(int) Load 8(delta)
+             492:486(f16vec2) GroupNonUniformRotateKHR 42 490 491
+             493:    479(ptr) AccessChain 35(data) 485 478 37
+             494:29(float16_t) CompositeExtract 492 0
+                              Store 493 494
+             495:    479(ptr) AccessChain 35(data) 485 478 56
+             496:29(float16_t) CompositeExtract 492 1
+                              Store 495 496
+             497:      6(int) Load 8(delta)
+             499:    487(ptr) AccessChain 35(data) 60 478
+             500: 30(f16vec4) Load 499
+             501:498(f16vec3) VectorShuffle 500 500 0 1 2
+             502:      6(int) Load 8(delta)
+             503:498(f16vec3) GroupNonUniformRotateKHR 42 501 502
+             504:    479(ptr) AccessChain 35(data) 497 478 37
+             505:29(float16_t) CompositeExtract 503 0
+                              Store 504 505
+             506:    479(ptr) AccessChain 35(data) 497 478 56
+             507:29(float16_t) CompositeExtract 503 1
+                              Store 506 507
+             508:    479(ptr) AccessChain 35(data) 497 478 71
+             509:29(float16_t) CompositeExtract 503 2
+                              Store 508 509
+             510:      6(int) Load 8(delta)
+             511:    487(ptr) AccessChain 35(data) 75 478
+             512: 30(f16vec4) Load 511
+             513:      6(int) Load 8(delta)
+             514: 30(f16vec4) GroupNonUniformRotateKHR 42 512 513
+             515:    487(ptr) AccessChain 35(data) 510 478
+                              Store 515 514
+             516:      6(int) Load 8(delta)
+             517:    479(ptr) AccessChain 35(data) 13 478 37
+             518:29(float16_t) Load 517
+             519:      6(int) Load 8(delta)
+             520:29(float16_t) GroupNonUniformRotateKHR 42 518 519 56
+             521:    479(ptr) AccessChain 35(data) 516 478 37
+                              Store 521 520
+             522:      6(int) Load 8(delta)
+             523:    487(ptr) AccessChain 35(data) 46 478
+             524: 30(f16vec4) Load 523
+             525:486(f16vec2) VectorShuffle 524 524 0 1
+             526:      6(int) Load 8(delta)
+             527:486(f16vec2) GroupNonUniformRotateKHR 42 525 526 56
+             528:    479(ptr) AccessChain 35(data) 522 478 37
+             529:29(float16_t) CompositeExtract 527 0
+                              Store 528 529
+             530:    479(ptr) AccessChain 35(data) 522 478 56
+             531:29(float16_t) CompositeExtract 527 1
+                              Store 530 531
+             532:      6(int) Load 8(delta)
+             533:    487(ptr) AccessChain 35(data) 60 478
+             534: 30(f16vec4) Load 533
+             535:498(f16vec3) VectorShuffle 534 534 0 1 2
+             536:      6(int) Load 8(delta)
+             537:498(f16vec3) GroupNonUniformRotateKHR 42 535 536 56
+             538:    479(ptr) AccessChain 35(data) 532 478 37
+             539:29(float16_t) CompositeExtract 537 0
+                              Store 538 539
+             540:    479(ptr) AccessChain 35(data) 532 478 56
+             541:29(float16_t) CompositeExtract 537 1
+                              Store 540 541
+             542:    479(ptr) AccessChain 35(data) 532 478 71
+             543:29(float16_t) CompositeExtract 537 2
+                              Store 542 543
+             544:      6(int) Load 8(delta)
+             545:    487(ptr) AccessChain 35(data) 75 478
+             546: 30(f16vec4) Load 545
+             547:      6(int) Load 8(delta)
+             548: 30(f16vec4) GroupNonUniformRotateKHR 42 546 547 56
+             549:    487(ptr) AccessChain 35(data) 544 478
+                              Store 549 548
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.subgroupExtendedTypesRotateNeg.comp.out b/Test/baseResults/spv.subgroupExtendedTypesRotateNeg.comp.out
new file mode 100644
index 0000000..b386506
--- /dev/null
+++ b/Test/baseResults/spv.subgroupExtendedTypesRotateNeg.comp.out
@@ -0,0 +1,61 @@
+spv.subgroupExtendedTypesRotateNeg.comp
+ERROR: 0:31: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:32: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:33: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:34: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:36: ' temp int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:37: ' temp 2-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:38: ' temp 3-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:39: 'layout( column_major std430) buffer 4-component vector of int8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:41: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:42: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:43: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:44: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:46: ' temp uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:47: ' temp 2-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:48: ' temp 3-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:49: 'layout( column_major std430) buffer 4-component vector of uint8_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int8
+ERROR: 0:51: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:52: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:53: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:54: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:56: ' temp int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:57: ' temp 2-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:58: ' temp 3-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:59: 'layout( column_major std430) buffer 4-component vector of int16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:61: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:62: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:63: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:64: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:66: ' temp uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:67: ' temp 2-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:68: ' temp 3-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:69: 'layout( column_major std430) buffer 4-component vector of uint16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int16
+ERROR: 0:71: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:72: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:73: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:74: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:76: ' temp int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:77: ' temp 2-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:78: ' temp 3-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:79: 'layout( column_major std430) buffer 4-component vector of int64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:81: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:82: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:83: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:84: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:86: ' temp uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:87: ' temp 2-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:88: ' temp 3-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:89: 'layout( column_major std430) buffer 4-component vector of uint64_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_int64
+ERROR: 0:91: ' temp highp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:92: ' temp highp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:93: ' temp highp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:94: 'layout( column_major std430) buffer highp 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:96: ' temp highp float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:97: ' temp highp 2-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:98: ' temp highp 3-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 0:99: 'layout( column_major std430) buffer highp 4-component vector of float16_t' : required extension not requested: GL_EXT_shader_subgroup_extended_types_float16
+ERROR: 56 compilation errors.  No code generated.
+
+
+SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/spv.subgroupExtendedTypesShuffle.comp.out b/Test/baseResults/spv.subgroupExtendedTypesShuffle.comp.out
index 0051bd7..354e344 100644
--- a/Test/baseResults/spv.subgroupExtendedTypesShuffle.comp.out
+++ b/Test/baseResults/spv.subgroupExtendedTypesShuffle.comp.out
@@ -49,6 +49,7 @@
                               Decorate 13 RelaxedPrecision
                               Decorate 14 RelaxedPrecision
                               Decorate 16 RelaxedPrecision
+                              Decorate 31(Buffers) Block
                               MemberDecorate 31(Buffers) 0 Offset 0
                               MemberDecorate 31(Buffers) 1 Offset 4
                               MemberDecorate 31(Buffers) 2 Offset 8
@@ -56,9 +57,8 @@
                               MemberDecorate 31(Buffers) 4 Offset 32
                               MemberDecorate 31(Buffers) 5 Offset 64
                               MemberDecorate 31(Buffers) 6 Offset 96
-                              Decorate 31(Buffers) Block
-                              Decorate 34(data) DescriptorSet 0
                               Decorate 34(data) Binding 0
+                              Decorate 34(data) DescriptorSet 0
                               Decorate 553 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.subgroupExtendedTypesShuffleRelative.comp.out b/Test/baseResults/spv.subgroupExtendedTypesShuffleRelative.comp.out
index 46244ba..2ce9481 100644
--- a/Test/baseResults/spv.subgroupExtendedTypesShuffleRelative.comp.out
+++ b/Test/baseResults/spv.subgroupExtendedTypesShuffleRelative.comp.out
@@ -49,6 +49,7 @@
                               Decorate 13 RelaxedPrecision
                               Decorate 14 RelaxedPrecision
                               Decorate 16 RelaxedPrecision
+                              Decorate 31(Buffers) Block
                               MemberDecorate 31(Buffers) 0 Offset 0
                               MemberDecorate 31(Buffers) 1 Offset 4
                               MemberDecorate 31(Buffers) 2 Offset 8
@@ -56,9 +57,8 @@
                               MemberDecorate 31(Buffers) 4 Offset 32
                               MemberDecorate 31(Buffers) 5 Offset 64
                               MemberDecorate 31(Buffers) 6 Offset 96
-                              Decorate 31(Buffers) Block
-                              Decorate 34(data) DescriptorSet 0
                               Decorate 34(data) Binding 0
+                              Decorate 34(data) DescriptorSet 0
                               Decorate 553 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.subgroupExtendedTypesVote.comp.out b/Test/baseResults/spv.subgroupExtendedTypesVote.comp.out
index a53847c..f4b35ad 100644
--- a/Test/baseResults/spv.subgroupExtendedTypesVote.comp.out
+++ b/Test/baseResults/spv.subgroupExtendedTypesVote.comp.out
@@ -50,6 +50,7 @@
                               Decorate 13 RelaxedPrecision
                               Decorate 14 RelaxedPrecision
                               Decorate 16 RelaxedPrecision
+                              Decorate 32(Buffers) Block
                               MemberDecorate 32(Buffers) 0 Offset 0
                               MemberDecorate 32(Buffers) 1 Offset 4
                               MemberDecorate 32(Buffers) 2 Offset 8
@@ -58,9 +59,8 @@
                               MemberDecorate 32(Buffers) 5 Offset 64
                               MemberDecorate 32(Buffers) 6 Offset 96
                               MemberDecorate 32(Buffers) 7 Offset 104
-                              Decorate 32(Buffers) Block
-                              Decorate 35(data) DescriptorSet 0
                               Decorate 35(data) Binding 0
+                              Decorate 35(data) DescriptorSet 0
                               Decorate 276 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.subgroupPartitioned.comp.out b/Test/baseResults/spv.subgroupPartitioned.comp.out
index 922d393..4c129db 100644
--- a/Test/baseResults/spv.subgroupPartitioned.comp.out
+++ b/Test/baseResults/spv.subgroupPartitioned.comp.out
@@ -34,13 +34,13 @@
                               Decorate 13 RelaxedPrecision
                               Decorate 14 RelaxedPrecision
                               Decorate 16 RelaxedPrecision
+                              Decorate 28(Buffers) Block
                               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) Block
-                              Decorate 31(data) DescriptorSet 0
                               Decorate 31(data) Binding 0
+                              Decorate 31(data) DescriptorSet 0
                               Decorate 2806 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.subgroupQuad.comp.out b/Test/baseResults/spv.subgroupQuad.comp.out
index b418148..cc5a1e3 100644
--- a/Test/baseResults/spv.subgroupQuad.comp.out
+++ b/Test/baseResults/spv.subgroupQuad.comp.out
@@ -32,13 +32,13 @@
                               Decorate 13 RelaxedPrecision
                               Decorate 14 RelaxedPrecision
                               Decorate 16 RelaxedPrecision
+                              Decorate 24(Buffers) Block
                               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) Block
-                              Decorate 27(data) DescriptorSet 0
                               Decorate 27(data) Binding 0
+                              Decorate 27(data) DescriptorSet 0
                               Decorate 695 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.subgroupRotate.comp.out b/Test/baseResults/spv.subgroupRotate.comp.out
new file mode 100644
index 0000000..147b37f
--- /dev/null
+++ b/Test/baseResults/spv.subgroupRotate.comp.out
@@ -0,0 +1,529 @@
+spv.subgroupRotate.comp
+// Module Version 10300
+// Generated by (magic number): 8000b
+// Id's are bound by 418
+
+                              Capability Shader
+                              Capability Float64
+                              Capability CapabilityGroupNonUniformRotateKHR
+                              Extension  "SPV_KHR_subgroup_rotate"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint GLCompute 4  "main"
+                              ExecutionMode 4 LocalSize 8 8 1
+                              Source GLSL 450
+                              SourceExtension  "GL_KHR_shader_subgroup_rotate"
+                              Name 4  "main"
+                              Name 8  "delta"
+                              Name 9  "roblock"
+                              MemberName 9(roblock) 0  "delta"
+                              Name 11  "ro"
+                              Name 23  "Buffers"
+                              MemberName 23(Buffers) 0  "f4"
+                              MemberName 23(Buffers) 1  "i4"
+                              MemberName 23(Buffers) 2  "u4"
+                              MemberName 23(Buffers) 3  "d4"
+                              Name 27  "data"
+                              Decorate 9(roblock) Block
+                              MemberDecorate 9(roblock) 0 NonWritable
+                              MemberDecorate 9(roblock) 0 Offset 0
+                              Decorate 11(ro) NonWritable
+                              Decorate 11(ro) Binding 1
+                              Decorate 11(ro) DescriptorSet 0
+                              Decorate 23(Buffers) Block
+                              MemberDecorate 23(Buffers) 0 Offset 0
+                              MemberDecorate 23(Buffers) 1 Offset 16
+                              MemberDecorate 23(Buffers) 2 Offset 32
+                              MemberDecorate 23(Buffers) 3 Offset 64
+                              Decorate 27(data) Binding 0
+                              Decorate 27(data) DescriptorSet 0
+                              Decorate 417 BuiltIn WorkgroupSize
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypePointer Function 6(int)
+      9(roblock):             TypeStruct 6(int)
+              10:             TypePointer StorageBuffer 9(roblock)
+          11(ro):     10(ptr) Variable StorageBuffer
+              12:             TypeInt 32 1
+              13:     12(int) Constant 0
+              14:             TypePointer StorageBuffer 6(int)
+              17:             TypeFloat 32
+              18:             TypeVector 17(float) 4
+              19:             TypeVector 12(int) 4
+              20:             TypeVector 6(int) 4
+              21:             TypeFloat 64
+              22:             TypeVector 21(float64_t) 4
+     23(Buffers):             TypeStruct 18(fvec4) 19(ivec4) 20(ivec4) 22(f64vec4)
+              24:      6(int) Constant 4
+              25:             TypeArray 23(Buffers) 24
+              26:             TypePointer StorageBuffer 25
+        27(data):     26(ptr) Variable StorageBuffer
+              29:      6(int) Constant 0
+              30:             TypePointer StorageBuffer 17(float)
+              34:      6(int) Constant 3
+              38:     12(int) Constant 1
+              39:             TypeVector 17(float) 2
+              40:             TypePointer StorageBuffer 18(fvec4)
+              48:      6(int) Constant 1
+              52:     12(int) Constant 2
+              53:             TypeVector 17(float) 3
+              63:      6(int) Constant 2
+              67:     12(int) Constant 3
+              74:             TypePointer StorageBuffer 12(int)
+              81:             TypeVector 12(int) 2
+              82:             TypePointer StorageBuffer 19(ivec4)
+              93:             TypeVector 12(int) 3
+             118:             TypeVector 6(int) 2
+             119:             TypePointer StorageBuffer 20(ivec4)
+             130:             TypeVector 6(int) 3
+             149:             TypePointer StorageBuffer 21(float64_t)
+             156:             TypeVector 21(float64_t) 2
+             157:             TypePointer StorageBuffer 22(f64vec4)
+             168:             TypeVector 21(float64_t) 3
+             189:             TypeBool
+             199:   81(ivec2) ConstantComposite 13 13
+             200:             TypeVector 189(bool) 2
+             204:   81(ivec2) ConstantComposite 38 38
+             214:   93(ivec3) ConstantComposite 13 13 13
+             215:             TypeVector 189(bool) 3
+             219:   93(ivec3) ConstantComposite 38 38 38
+             230:   19(ivec4) ConstantComposite 13 13 13 13
+             231:             TypeVector 189(bool) 4
+             235:   19(ivec4) ConstantComposite 38 38 38 38
+             416:      6(int) Constant 8
+             417:  130(ivec3) ConstantComposite 416 416 48
+         4(main):           2 Function None 3
+               5:             Label
+        8(delta):      7(ptr) Variable Function
+              15:     14(ptr) AccessChain 11(ro) 13
+              16:      6(int) Load 15
+                              Store 8(delta) 16
+              28:      6(int) Load 8(delta)
+              31:     30(ptr) AccessChain 27(data) 13 13 29
+              32:   17(float) Load 31
+              33:      6(int) Load 8(delta)
+              35:   17(float) GroupNonUniformRotateKHR 34 32 33
+              36:     30(ptr) AccessChain 27(data) 28 13 29
+                              Store 36 35
+              37:      6(int) Load 8(delta)
+              41:     40(ptr) AccessChain 27(data) 38 13
+              42:   18(fvec4) Load 41
+              43:   39(fvec2) VectorShuffle 42 42 0 1
+              44:      6(int) Load 8(delta)
+              45:   39(fvec2) GroupNonUniformRotateKHR 34 43 44
+              46:     30(ptr) AccessChain 27(data) 37 13 29
+              47:   17(float) CompositeExtract 45 0
+                              Store 46 47
+              49:     30(ptr) AccessChain 27(data) 37 13 48
+              50:   17(float) CompositeExtract 45 1
+                              Store 49 50
+              51:      6(int) Load 8(delta)
+              54:     40(ptr) AccessChain 27(data) 52 13
+              55:   18(fvec4) Load 54
+              56:   53(fvec3) VectorShuffle 55 55 0 1 2
+              57:      6(int) Load 8(delta)
+              58:   53(fvec3) GroupNonUniformRotateKHR 34 56 57
+              59:     30(ptr) AccessChain 27(data) 51 13 29
+              60:   17(float) CompositeExtract 58 0
+                              Store 59 60
+              61:     30(ptr) AccessChain 27(data) 51 13 48
+              62:   17(float) CompositeExtract 58 1
+                              Store 61 62
+              64:     30(ptr) AccessChain 27(data) 51 13 63
+              65:   17(float) CompositeExtract 58 2
+                              Store 64 65
+              66:      6(int) Load 8(delta)
+              68:     40(ptr) AccessChain 27(data) 67 13
+              69:   18(fvec4) Load 68
+              70:      6(int) Load 8(delta)
+              71:   18(fvec4) GroupNonUniformRotateKHR 34 69 70
+              72:     40(ptr) AccessChain 27(data) 66 13
+                              Store 72 71
+              73:      6(int) Load 8(delta)
+              75:     74(ptr) AccessChain 27(data) 13 38 29
+              76:     12(int) Load 75
+              77:      6(int) Load 8(delta)
+              78:     12(int) GroupNonUniformRotateKHR 34 76 77
+              79:     74(ptr) AccessChain 27(data) 73 38 29
+                              Store 79 78
+              80:      6(int) Load 8(delta)
+              83:     82(ptr) AccessChain 27(data) 38 38
+              84:   19(ivec4) Load 83
+              85:   81(ivec2) VectorShuffle 84 84 0 1
+              86:      6(int) Load 8(delta)
+              87:   81(ivec2) GroupNonUniformRotateKHR 34 85 86
+              88:     74(ptr) AccessChain 27(data) 80 38 29
+              89:     12(int) CompositeExtract 87 0
+                              Store 88 89
+              90:     74(ptr) AccessChain 27(data) 80 38 48
+              91:     12(int) CompositeExtract 87 1
+                              Store 90 91
+              92:      6(int) Load 8(delta)
+              94:     82(ptr) AccessChain 27(data) 52 38
+              95:   19(ivec4) Load 94
+              96:   93(ivec3) VectorShuffle 95 95 0 1 2
+              97:      6(int) Load 8(delta)
+              98:   93(ivec3) GroupNonUniformRotateKHR 34 96 97
+              99:     74(ptr) AccessChain 27(data) 92 38 29
+             100:     12(int) CompositeExtract 98 0
+                              Store 99 100
+             101:     74(ptr) AccessChain 27(data) 92 38 48
+             102:     12(int) CompositeExtract 98 1
+                              Store 101 102
+             103:     74(ptr) AccessChain 27(data) 92 38 63
+             104:     12(int) CompositeExtract 98 2
+                              Store 103 104
+             105:      6(int) Load 8(delta)
+             106:     82(ptr) AccessChain 27(data) 67 38
+             107:   19(ivec4) Load 106
+             108:      6(int) Load 8(delta)
+             109:   19(ivec4) GroupNonUniformRotateKHR 34 107 108
+             110:     82(ptr) AccessChain 27(data) 105 38
+                              Store 110 109
+             111:      6(int) Load 8(delta)
+             112:     14(ptr) AccessChain 27(data) 13 52 29
+             113:      6(int) Load 112
+             114:      6(int) Load 8(delta)
+             115:      6(int) GroupNonUniformRotateKHR 34 113 114
+             116:     14(ptr) AccessChain 27(data) 111 52 29
+                              Store 116 115
+             117:      6(int) Load 8(delta)
+             120:    119(ptr) AccessChain 27(data) 38 52
+             121:   20(ivec4) Load 120
+             122:  118(ivec2) VectorShuffle 121 121 0 1
+             123:      6(int) Load 8(delta)
+             124:  118(ivec2) GroupNonUniformRotateKHR 34 122 123
+             125:     14(ptr) AccessChain 27(data) 117 52 29
+             126:      6(int) CompositeExtract 124 0
+                              Store 125 126
+             127:     14(ptr) AccessChain 27(data) 117 52 48
+             128:      6(int) CompositeExtract 124 1
+                              Store 127 128
+             129:      6(int) Load 8(delta)
+             131:    119(ptr) AccessChain 27(data) 52 52
+             132:   20(ivec4) Load 131
+             133:  130(ivec3) VectorShuffle 132 132 0 1 2
+             134:      6(int) Load 8(delta)
+             135:  130(ivec3) GroupNonUniformRotateKHR 34 133 134
+             136:     14(ptr) AccessChain 27(data) 129 52 29
+             137:      6(int) CompositeExtract 135 0
+                              Store 136 137
+             138:     14(ptr) AccessChain 27(data) 129 52 48
+             139:      6(int) CompositeExtract 135 1
+                              Store 138 139
+             140:     14(ptr) AccessChain 27(data) 129 52 63
+             141:      6(int) CompositeExtract 135 2
+                              Store 140 141
+             142:      6(int) Load 8(delta)
+             143:    119(ptr) AccessChain 27(data) 67 52
+             144:   20(ivec4) Load 143
+             145:      6(int) Load 8(delta)
+             146:   20(ivec4) GroupNonUniformRotateKHR 34 144 145
+             147:    119(ptr) AccessChain 27(data) 142 52
+                              Store 147 146
+             148:      6(int) Load 8(delta)
+             150:    149(ptr) AccessChain 27(data) 13 67 29
+             151:21(float64_t) Load 150
+             152:      6(int) Load 8(delta)
+             153:21(float64_t) GroupNonUniformRotateKHR 34 151 152
+             154:    149(ptr) AccessChain 27(data) 148 67 29
+                              Store 154 153
+             155:      6(int) Load 8(delta)
+             158:    157(ptr) AccessChain 27(data) 38 67
+             159: 22(f64vec4) Load 158
+             160:156(f64vec2) VectorShuffle 159 159 0 1
+             161:      6(int) Load 8(delta)
+             162:156(f64vec2) GroupNonUniformRotateKHR 34 160 161
+             163:    149(ptr) AccessChain 27(data) 155 67 29
+             164:21(float64_t) CompositeExtract 162 0
+                              Store 163 164
+             165:    149(ptr) AccessChain 27(data) 155 67 48
+             166:21(float64_t) CompositeExtract 162 1
+                              Store 165 166
+             167:      6(int) Load 8(delta)
+             169:    157(ptr) AccessChain 27(data) 52 67
+             170: 22(f64vec4) Load 169
+             171:168(f64vec3) VectorShuffle 170 170 0 1 2
+             172:      6(int) Load 8(delta)
+             173:168(f64vec3) GroupNonUniformRotateKHR 34 171 172
+             174:    149(ptr) AccessChain 27(data) 167 67 29
+             175:21(float64_t) CompositeExtract 173 0
+                              Store 174 175
+             176:    149(ptr) AccessChain 27(data) 167 67 48
+             177:21(float64_t) CompositeExtract 173 1
+                              Store 176 177
+             178:    149(ptr) AccessChain 27(data) 167 67 63
+             179:21(float64_t) CompositeExtract 173 2
+                              Store 178 179
+             180:      6(int) Load 8(delta)
+             181:    157(ptr) AccessChain 27(data) 67 67
+             182: 22(f64vec4) Load 181
+             183:      6(int) Load 8(delta)
+             184: 22(f64vec4) GroupNonUniformRotateKHR 34 182 183
+             185:    157(ptr) AccessChain 27(data) 180 67
+                              Store 185 184
+             186:      6(int) Load 8(delta)
+             187:     74(ptr) AccessChain 27(data) 13 38 29
+             188:     12(int) Load 187
+             190:   189(bool) SLessThan 188 13
+             191:      6(int) Load 8(delta)
+             192:   189(bool) GroupNonUniformRotateKHR 34 190 191
+             193:     12(int) Select 192 38 13
+             194:     74(ptr) AccessChain 27(data) 186 38 29
+                              Store 194 193
+             195:      6(int) Load 8(delta)
+             196:     82(ptr) AccessChain 27(data) 38 38
+             197:   19(ivec4) Load 196
+             198:   81(ivec2) VectorShuffle 197 197 0 1
+             201:  200(bvec2) SLessThan 198 199
+             202:      6(int) Load 8(delta)
+             203:  200(bvec2) GroupNonUniformRotateKHR 34 201 202
+             205:   81(ivec2) Select 203 204 199
+             206:     74(ptr) AccessChain 27(data) 195 38 29
+             207:     12(int) CompositeExtract 205 0
+                              Store 206 207
+             208:     74(ptr) AccessChain 27(data) 195 38 48
+             209:     12(int) CompositeExtract 205 1
+                              Store 208 209
+             210:      6(int) Load 8(delta)
+             211:     82(ptr) AccessChain 27(data) 38 38
+             212:   19(ivec4) Load 211
+             213:   93(ivec3) VectorShuffle 212 212 0 1 2
+             216:  215(bvec3) SLessThan 213 214
+             217:      6(int) Load 8(delta)
+             218:  215(bvec3) GroupNonUniformRotateKHR 34 216 217
+             220:   93(ivec3) Select 218 219 214
+             221:     74(ptr) AccessChain 27(data) 210 38 29
+             222:     12(int) CompositeExtract 220 0
+                              Store 221 222
+             223:     74(ptr) AccessChain 27(data) 210 38 48
+             224:     12(int) CompositeExtract 220 1
+                              Store 223 224
+             225:     74(ptr) AccessChain 27(data) 210 38 63
+             226:     12(int) CompositeExtract 220 2
+                              Store 225 226
+             227:      6(int) Load 8(delta)
+             228:     82(ptr) AccessChain 27(data) 38 38
+             229:   19(ivec4) Load 228
+             232:  231(bvec4) SLessThan 229 230
+             233:      6(int) Load 8(delta)
+             234:  231(bvec4) GroupNonUniformRotateKHR 34 232 233
+             236:   19(ivec4) Select 234 235 230
+             237:     82(ptr) AccessChain 27(data) 227 38
+                              Store 237 236
+             238:      6(int) Load 8(delta)
+             239:     30(ptr) AccessChain 27(data) 13 13 29
+             240:   17(float) Load 239
+             241:      6(int) Load 8(delta)
+             242:   17(float) GroupNonUniformRotateKHR 34 240 241 48
+             243:     30(ptr) AccessChain 27(data) 238 13 29
+                              Store 243 242
+             244:      6(int) Load 8(delta)
+             245:     40(ptr) AccessChain 27(data) 38 13
+             246:   18(fvec4) Load 245
+             247:   39(fvec2) VectorShuffle 246 246 0 1
+             248:      6(int) Load 8(delta)
+             249:   39(fvec2) GroupNonUniformRotateKHR 34 247 248 48
+             250:     30(ptr) AccessChain 27(data) 244 13 29
+             251:   17(float) CompositeExtract 249 0
+                              Store 250 251
+             252:     30(ptr) AccessChain 27(data) 244 13 48
+             253:   17(float) CompositeExtract 249 1
+                              Store 252 253
+             254:      6(int) Load 8(delta)
+             255:     40(ptr) AccessChain 27(data) 52 13
+             256:   18(fvec4) Load 255
+             257:   53(fvec3) VectorShuffle 256 256 0 1 2
+             258:      6(int) Load 8(delta)
+             259:   53(fvec3) GroupNonUniformRotateKHR 34 257 258 48
+             260:     30(ptr) AccessChain 27(data) 254 13 29
+             261:   17(float) CompositeExtract 259 0
+                              Store 260 261
+             262:     30(ptr) AccessChain 27(data) 254 13 48
+             263:   17(float) CompositeExtract 259 1
+                              Store 262 263
+             264:     30(ptr) AccessChain 27(data) 254 13 63
+             265:   17(float) CompositeExtract 259 2
+                              Store 264 265
+             266:      6(int) Load 8(delta)
+             267:     40(ptr) AccessChain 27(data) 67 13
+             268:   18(fvec4) Load 267
+             269:      6(int) Load 8(delta)
+             270:   18(fvec4) GroupNonUniformRotateKHR 34 268 269 48
+             271:     40(ptr) AccessChain 27(data) 266 13
+                              Store 271 270
+             272:      6(int) Load 8(delta)
+             273:     74(ptr) AccessChain 27(data) 13 38 29
+             274:     12(int) Load 273
+             275:      6(int) Load 8(delta)
+             276:     12(int) GroupNonUniformRotateKHR 34 274 275 48
+             277:     74(ptr) AccessChain 27(data) 272 38 29
+                              Store 277 276
+             278:      6(int) Load 8(delta)
+             279:     82(ptr) AccessChain 27(data) 38 38
+             280:   19(ivec4) Load 279
+             281:   81(ivec2) VectorShuffle 280 280 0 1
+             282:      6(int) Load 8(delta)
+             283:   81(ivec2) GroupNonUniformRotateKHR 34 281 282 48
+             284:     74(ptr) AccessChain 27(data) 278 38 29
+             285:     12(int) CompositeExtract 283 0
+                              Store 284 285
+             286:     74(ptr) AccessChain 27(data) 278 38 48
+             287:     12(int) CompositeExtract 283 1
+                              Store 286 287
+             288:      6(int) Load 8(delta)
+             289:     82(ptr) AccessChain 27(data) 52 38
+             290:   19(ivec4) Load 289
+             291:   93(ivec3) VectorShuffle 290 290 0 1 2
+             292:      6(int) Load 8(delta)
+             293:   93(ivec3) GroupNonUniformRotateKHR 34 291 292 48
+             294:     74(ptr) AccessChain 27(data) 288 38 29
+             295:     12(int) CompositeExtract 293 0
+                              Store 294 295
+             296:     74(ptr) AccessChain 27(data) 288 38 48
+             297:     12(int) CompositeExtract 293 1
+                              Store 296 297
+             298:     74(ptr) AccessChain 27(data) 288 38 63
+             299:     12(int) CompositeExtract 293 2
+                              Store 298 299
+             300:      6(int) Load 8(delta)
+             301:     82(ptr) AccessChain 27(data) 67 38
+             302:   19(ivec4) Load 301
+             303:      6(int) Load 8(delta)
+             304:   19(ivec4) GroupNonUniformRotateKHR 34 302 303 48
+             305:     82(ptr) AccessChain 27(data) 300 38
+                              Store 305 304
+             306:      6(int) Load 8(delta)
+             307:     14(ptr) AccessChain 27(data) 13 52 29
+             308:      6(int) Load 307
+             309:      6(int) Load 8(delta)
+             310:      6(int) GroupNonUniformRotateKHR 34 308 309 48
+             311:     14(ptr) AccessChain 27(data) 306 52 29
+                              Store 311 310
+             312:      6(int) Load 8(delta)
+             313:    119(ptr) AccessChain 27(data) 38 52
+             314:   20(ivec4) Load 313
+             315:  118(ivec2) VectorShuffle 314 314 0 1
+             316:      6(int) Load 8(delta)
+             317:  118(ivec2) GroupNonUniformRotateKHR 34 315 316 48
+             318:     14(ptr) AccessChain 27(data) 312 52 29
+             319:      6(int) CompositeExtract 317 0
+                              Store 318 319
+             320:     14(ptr) AccessChain 27(data) 312 52 48
+             321:      6(int) CompositeExtract 317 1
+                              Store 320 321
+             322:      6(int) Load 8(delta)
+             323:    119(ptr) AccessChain 27(data) 52 52
+             324:   20(ivec4) Load 323
+             325:  130(ivec3) VectorShuffle 324 324 0 1 2
+             326:      6(int) Load 8(delta)
+             327:  130(ivec3) GroupNonUniformRotateKHR 34 325 326 48
+             328:     14(ptr) AccessChain 27(data) 322 52 29
+             329:      6(int) CompositeExtract 327 0
+                              Store 328 329
+             330:     14(ptr) AccessChain 27(data) 322 52 48
+             331:      6(int) CompositeExtract 327 1
+                              Store 330 331
+             332:     14(ptr) AccessChain 27(data) 322 52 63
+             333:      6(int) CompositeExtract 327 2
+                              Store 332 333
+             334:      6(int) Load 8(delta)
+             335:    119(ptr) AccessChain 27(data) 67 52
+             336:   20(ivec4) Load 335
+             337:      6(int) Load 8(delta)
+             338:   20(ivec4) GroupNonUniformRotateKHR 34 336 337 48
+             339:    119(ptr) AccessChain 27(data) 334 52
+                              Store 339 338
+             340:      6(int) Load 8(delta)
+             341:    149(ptr) AccessChain 27(data) 13 67 29
+             342:21(float64_t) Load 341
+             343:      6(int) Load 8(delta)
+             344:21(float64_t) GroupNonUniformRotateKHR 34 342 343 48
+             345:    149(ptr) AccessChain 27(data) 340 67 29
+                              Store 345 344
+             346:      6(int) Load 8(delta)
+             347:    157(ptr) AccessChain 27(data) 38 67
+             348: 22(f64vec4) Load 347
+             349:156(f64vec2) VectorShuffle 348 348 0 1
+             350:      6(int) Load 8(delta)
+             351:156(f64vec2) GroupNonUniformRotateKHR 34 349 350 48
+             352:    149(ptr) AccessChain 27(data) 346 67 29
+             353:21(float64_t) CompositeExtract 351 0
+                              Store 352 353
+             354:    149(ptr) AccessChain 27(data) 346 67 48
+             355:21(float64_t) CompositeExtract 351 1
+                              Store 354 355
+             356:      6(int) Load 8(delta)
+             357:    157(ptr) AccessChain 27(data) 52 67
+             358: 22(f64vec4) Load 357
+             359:168(f64vec3) VectorShuffle 358 358 0 1 2
+             360:      6(int) Load 8(delta)
+             361:168(f64vec3) GroupNonUniformRotateKHR 34 359 360 48
+             362:    149(ptr) AccessChain 27(data) 356 67 29
+             363:21(float64_t) CompositeExtract 361 0
+                              Store 362 363
+             364:    149(ptr) AccessChain 27(data) 356 67 48
+             365:21(float64_t) CompositeExtract 361 1
+                              Store 364 365
+             366:    149(ptr) AccessChain 27(data) 356 67 63
+             367:21(float64_t) CompositeExtract 361 2
+                              Store 366 367
+             368:      6(int) Load 8(delta)
+             369:    157(ptr) AccessChain 27(data) 67 67
+             370: 22(f64vec4) Load 369
+             371:      6(int) Load 8(delta)
+             372: 22(f64vec4) GroupNonUniformRotateKHR 34 370 371 48
+             373:    157(ptr) AccessChain 27(data) 368 67
+                              Store 373 372
+             374:      6(int) Load 8(delta)
+             375:     74(ptr) AccessChain 27(data) 13 38 29
+             376:     12(int) Load 375
+             377:   189(bool) SLessThan 376 13
+             378:      6(int) Load 8(delta)
+             379:   189(bool) GroupNonUniformRotateKHR 34 377 378 48
+             380:     12(int) Select 379 38 13
+             381:     74(ptr) AccessChain 27(data) 374 38 29
+                              Store 381 380
+             382:      6(int) Load 8(delta)
+             383:     82(ptr) AccessChain 27(data) 38 38
+             384:   19(ivec4) Load 383
+             385:   81(ivec2) VectorShuffle 384 384 0 1
+             386:  200(bvec2) SLessThan 385 199
+             387:      6(int) Load 8(delta)
+             388:  200(bvec2) GroupNonUniformRotateKHR 34 386 387 48
+             389:   81(ivec2) Select 388 204 199
+             390:     74(ptr) AccessChain 27(data) 382 38 29
+             391:     12(int) CompositeExtract 389 0
+                              Store 390 391
+             392:     74(ptr) AccessChain 27(data) 382 38 48
+             393:     12(int) CompositeExtract 389 1
+                              Store 392 393
+             394:      6(int) Load 8(delta)
+             395:     82(ptr) AccessChain 27(data) 38 38
+             396:   19(ivec4) Load 395
+             397:   93(ivec3) VectorShuffle 396 396 0 1 2
+             398:  215(bvec3) SLessThan 397 214
+             399:      6(int) Load 8(delta)
+             400:  215(bvec3) GroupNonUniformRotateKHR 34 398 399 48
+             401:   93(ivec3) Select 400 219 214
+             402:     74(ptr) AccessChain 27(data) 394 38 29
+             403:     12(int) CompositeExtract 401 0
+                              Store 402 403
+             404:     74(ptr) AccessChain 27(data) 394 38 48
+             405:     12(int) CompositeExtract 401 1
+                              Store 404 405
+             406:     74(ptr) AccessChain 27(data) 394 38 63
+             407:     12(int) CompositeExtract 401 2
+                              Store 406 407
+             408:      6(int) Load 8(delta)
+             409:     82(ptr) AccessChain 27(data) 38 38
+             410:   19(ivec4) Load 409
+             411:  231(bvec4) SLessThan 410 230
+             412:      6(int) Load 8(delta)
+             413:  231(bvec4) GroupNonUniformRotateKHR 34 411 412 48
+             414:   19(ivec4) Select 413 235 230
+             415:     82(ptr) AccessChain 27(data) 408 38
+                              Store 415 414
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.subgroupShuffle.comp.out b/Test/baseResults/spv.subgroupShuffle.comp.out
index d54e8ae..d87039b 100644
--- a/Test/baseResults/spv.subgroupShuffle.comp.out
+++ b/Test/baseResults/spv.subgroupShuffle.comp.out
@@ -32,13 +32,13 @@
                               Decorate 13 RelaxedPrecision
                               Decorate 14 RelaxedPrecision
                               Decorate 16 RelaxedPrecision
+                              Decorate 24(Buffers) Block
                               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) Block
-                              Decorate 27(data) DescriptorSet 0
                               Decorate 27(data) Binding 0
+                              Decorate 27(data) DescriptorSet 0
                               Decorate 419 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.subgroupShuffleRelative.comp.out b/Test/baseResults/spv.subgroupShuffleRelative.comp.out
index 6bae808..b0e8a0d 100644
--- a/Test/baseResults/spv.subgroupShuffleRelative.comp.out
+++ b/Test/baseResults/spv.subgroupShuffleRelative.comp.out
@@ -32,13 +32,13 @@
                               Decorate 13 RelaxedPrecision
                               Decorate 14 RelaxedPrecision
                               Decorate 16 RelaxedPrecision
+                              Decorate 24(Buffers) Block
                               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) Block
-                              Decorate 27(data) DescriptorSet 0
                               Decorate 27(data) Binding 0
+                              Decorate 27(data) DescriptorSet 0
                               Decorate 419 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.subgroupSizeARB.frag.out b/Test/baseResults/spv.subgroupSizeARB.frag.out
index 5eeb0c0..f1befa4 100644
--- a/Test/baseResults/spv.subgroupSizeARB.frag.out
+++ b/Test/baseResults/spv.subgroupSizeARB.frag.out
@@ -17,8 +17,8 @@
                               Name 8  "result"
                               Name 10  "gl_SubGroupSizeARB"
                               Decorate 8(result) Location 0
-                              Decorate 10(gl_SubGroupSizeARB) Flat
                               Decorate 10(gl_SubGroupSizeARB) BuiltIn SubgroupSize
+                              Decorate 10(gl_SubGroupSizeARB) Flat
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
diff --git a/Test/baseResults/spv.subgroupVote.comp.out b/Test/baseResults/spv.subgroupVote.comp.out
index fa0a01f..f49dcbe 100644
--- a/Test/baseResults/spv.subgroupVote.comp.out
+++ b/Test/baseResults/spv.subgroupVote.comp.out
@@ -33,14 +33,14 @@
                               Decorate 13 RelaxedPrecision
                               Decorate 14 RelaxedPrecision
                               Decorate 16 RelaxedPrecision
+                              Decorate 24(Buffers) Block
                               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) Block
-                              Decorate 27(data) DescriptorSet 0
                               Decorate 27(data) Binding 0
+                              Decorate 27(data) DescriptorSet 0
                               Decorate 215 BuiltIn WorkgroupSize
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.subpass.frag.out b/Test/baseResults/spv.subpass.frag.out
index bf49b08..27b4d6b 100644
--- a/Test/baseResults/spv.subpass.frag.out
+++ b/Test/baseResults/spv.subpass.frag.out
@@ -24,24 +24,24 @@
                               Name 61  "usubMS"
                               Decorate 15(icolor) Location 1
                               Decorate 27(color) Location 0
-                              Decorate 30(sub) DescriptorSet 0
                               Decorate 30(sub) Binding 0
+                              Decorate 30(sub) DescriptorSet 0
                               Decorate 30(sub) InputAttachmentIndex 1
-                              Decorate 35(subMS) DescriptorSet 0
                               Decorate 35(subMS) Binding 1
+                              Decorate 35(subMS) DescriptorSet 0
                               Decorate 35(subMS) InputAttachmentIndex 2
-                              Decorate 42(isub) DescriptorSet 0
                               Decorate 42(isub) Binding 2
+                              Decorate 42(isub) DescriptorSet 0
                               Decorate 42(isub) InputAttachmentIndex 3
-                              Decorate 45(isubMS) DescriptorSet 0
                               Decorate 45(isubMS) Binding 3
+                              Decorate 45(isubMS) DescriptorSet 0
                               Decorate 45(isubMS) InputAttachmentIndex 4
                               Decorate 53(ucolor) Location 2
-                              Decorate 56(usub) DescriptorSet 0
                               Decorate 56(usub) Binding 4
+                              Decorate 56(usub) DescriptorSet 0
                               Decorate 56(usub) InputAttachmentIndex 5
-                              Decorate 61(usubMS) DescriptorSet 0
                               Decorate 61(usubMS) Binding 5
+                              Decorate 61(usubMS) DescriptorSet 0
                               Decorate 61(usubMS) InputAttachmentIndex 6
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.switch.frag.out b/Test/baseResults/spv.switch.frag.out
index 4e7db4d..bacf87e 100644
--- a/Test/baseResults/spv.switch.frag.out
+++ b/Test/baseResults/spv.switch.frag.out
@@ -37,14 +37,14 @@
                               Name 246  "param"
                               Name 248  "param"
                               Name 250  "param"
-                              Decorate 15(foo1(vf4;vf4;i1;) RelaxedPrecision
                               Decorate 12(v1) RelaxedPrecision
                               Decorate 13(v2) RelaxedPrecision
                               Decorate 14(i1) RelaxedPrecision
-                              Decorate 20(foo2(vf4;vf4;i1;) RelaxedPrecision
+                              Decorate 15(foo1(vf4;vf4;i1;) RelaxedPrecision
                               Decorate 17(v1) RelaxedPrecision
                               Decorate 18(v2) RelaxedPrecision
                               Decorate 19(i1) RelaxedPrecision
+                              Decorate 20(foo2(vf4;vf4;i1;) RelaxedPrecision
                               Decorate 22 RelaxedPrecision
                               Decorate 27 RelaxedPrecision
                               Decorate 29 RelaxedPrecision
diff --git a/Test/baseResults/spv.terminate.frag.out b/Test/baseResults/spv.terminate.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/spv.test.frag.out b/Test/baseResults/spv.test.frag.out
index c5d6384..e883c03 100644
--- a/Test/baseResults/spv.test.frag.out
+++ b/Test/baseResults/spv.test.frag.out
@@ -21,12 +21,12 @@
                               Name 43  "gl_FragColor"
                               Name 46  "u"
                               Name 49  "blend"
-                              Decorate 16(texSampler2D) DescriptorSet 0
                               Decorate 16(texSampler2D) Binding 0
+                              Decorate 16(texSampler2D) DescriptorSet 0
                               Decorate 20(t) Location 3
                               Decorate 22(scale) Location 1
-                              Decorate 33(texSampler3D) DescriptorSet 0
                               Decorate 33(texSampler3D) Binding 1
+                              Decorate 33(texSampler3D) DescriptorSet 0
                               Decorate 37(coords) Location 4
                               Decorate 43(gl_FragColor) Location 0
                               Decorate 46(u) Location 2
diff --git a/Test/baseResults/spv.texture.frag.out b/Test/baseResults/spv.texture.frag.out
index dc1970a..4c0f5f9 100644
--- a/Test/baseResults/spv.texture.frag.out
+++ b/Test/baseResults/spv.texture.frag.out
@@ -39,19 +39,19 @@
                               Name 297  "blend"
                               Name 303  "scale"
                               Name 304  "t"
-                              Decorate 32(texSampler1D) DescriptorSet 0
                               Decorate 32(texSampler1D) Binding 0
+                              Decorate 32(texSampler1D) DescriptorSet 0
                               Decorate 47(coords2D) Location 4
-                              Decorate 76(texSampler2D) DescriptorSet 0
                               Decorate 76(texSampler2D) Binding 1
-                              Decorate 104(texSampler3D) DescriptorSet 0
+                              Decorate 76(texSampler2D) DescriptorSet 0
                               Decorate 104(texSampler3D) Binding 2
-                              Decorate 130(texSamplerCube) DescriptorSet 0
+                              Decorate 104(texSampler3D) DescriptorSet 0
                               Decorate 130(texSamplerCube) Binding 3
-                              Decorate 145(shadowSampler1D) DescriptorSet 0
+                              Decorate 130(texSamplerCube) DescriptorSet 0
                               Decorate 145(shadowSampler1D) Binding 4
-                              Decorate 164(shadowSampler2D) DescriptorSet 0
+                              Decorate 145(shadowSampler1D) DescriptorSet 0
                               Decorate 164(shadowSampler2D) Binding 5
+                              Decorate 164(shadowSampler2D) DescriptorSet 0
                               Decorate 291(gl_FragColor) Location 0
                               Decorate 294(u) Location 2
                               Decorate 297(blend) Location 0
diff --git a/Test/baseResults/spv.texture.sampler.transform.frag.out b/Test/baseResults/spv.texture.sampler.transform.frag.out
index 4e9534e..b2fe823 100644
--- a/Test/baseResults/spv.texture.sampler.transform.frag.out
+++ b/Test/baseResults/spv.texture.sampler.transform.frag.out
@@ -14,8 +14,8 @@
                               Name 13  "tex"
                               Name 17  "coord"
                               Decorate 9(color) Location 0
-                              Decorate 13(tex) DescriptorSet 0
                               Decorate 13(tex) Binding 0
+                              Decorate 13(tex) DescriptorSet 0
                               Decorate 17(coord) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.texture.vert.out b/Test/baseResults/spv.texture.vert.out
index 35053f3..701cacd 100644
--- a/Test/baseResults/spv.texture.vert.out
+++ b/Test/baseResults/spv.texture.vert.out
@@ -23,19 +23,19 @@
                               Name 106  "shadowSampler1D"
                               Name 118  "shadowSampler2D"
                               Name 148  "gl_Position"
-                              Decorate 29(texSampler1D) DescriptorSet 0
                               Decorate 29(texSampler1D) Binding 0
+                              Decorate 29(texSampler1D) DescriptorSet 0
                               Decorate 39(coords2D) Location 0
-                              Decorate 56(texSampler2D) DescriptorSet 0
                               Decorate 56(texSampler2D) Binding 1
-                              Decorate 80(texSampler3D) DescriptorSet 0
+                              Decorate 56(texSampler2D) DescriptorSet 0
                               Decorate 80(texSampler3D) Binding 2
-                              Decorate 96(texSamplerCube) DescriptorSet 0
+                              Decorate 80(texSampler3D) DescriptorSet 0
                               Decorate 96(texSamplerCube) Binding 3
-                              Decorate 106(shadowSampler1D) DescriptorSet 0
+                              Decorate 96(texSamplerCube) DescriptorSet 0
                               Decorate 106(shadowSampler1D) Binding 4
-                              Decorate 118(shadowSampler2D) DescriptorSet 0
+                              Decorate 106(shadowSampler1D) DescriptorSet 0
                               Decorate 118(shadowSampler2D) Binding 5
+                              Decorate 118(shadowSampler2D) DescriptorSet 0
                               Decorate 148(gl_Position) BuiltIn Position
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.textureBuffer.vert.out b/Test/baseResults/spv.textureBuffer.vert.out
index f5b271f..6cd40d2 100644
--- a/Test/baseResults/spv.textureBuffer.vert.out
+++ b/Test/baseResults/spv.textureBuffer.vert.out
@@ -15,16 +15,16 @@
                               Name 23  "sBuf"
                               Name 32  "utBuf"
                               Name 38  "itBuf"
-                              Decorate 9(tBuf) DescriptorSet 0
                               Decorate 9(tBuf) Binding 0
-                              Decorate 13(s) DescriptorSet 0
+                              Decorate 9(tBuf) DescriptorSet 0
                               Decorate 13(s) Binding 1
-                              Decorate 23(sBuf) DescriptorSet 0
+                              Decorate 13(s) DescriptorSet 0
                               Decorate 23(sBuf) Binding 2
-                              Decorate 32(utBuf) DescriptorSet 0
+                              Decorate 23(sBuf) DescriptorSet 0
                               Decorate 32(utBuf) Binding 3
-                              Decorate 38(itBuf) DescriptorSet 0
+                              Decorate 32(utBuf) DescriptorSet 0
                               Decorate 38(itBuf) Binding 4
+                              Decorate 38(itBuf) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.textureGatherBiasLod.frag.out b/Test/baseResults/spv.textureGatherBiasLod.frag.out
index f47e16a..9fd195f 100644
--- a/Test/baseResults/spv.textureGatherBiasLod.frag.out
+++ b/Test/baseResults/spv.textureGatherBiasLod.frag.out
@@ -30,17 +30,17 @@
                               Name 104  "ResType"
                               Name 176  "lod"
                               Name 296  "fragColor"
-                              Decorate 16(s2D) DescriptorSet 0
                               Decorate 16(s2D) Binding 0
+                              Decorate 16(s2D) DescriptorSet 0
                               Decorate 20(c2) Location 0
                               Decorate 25(bias) Location 4
-                              Decorate 33(s2DArray) DescriptorSet 0
                               Decorate 33(s2DArray) Binding 1
+                              Decorate 33(s2DArray) DescriptorSet 0
                               Decorate 37(c3) Location 1
-                              Decorate 47(sCube) DescriptorSet 0
                               Decorate 47(sCube) Binding 2
-                              Decorate 58(sCubeArray) DescriptorSet 0
+                              Decorate 47(sCube) DescriptorSet 0
                               Decorate 58(sCubeArray) Binding 3
+                              Decorate 58(sCubeArray) DescriptorSet 0
                               Decorate 61(c4) Location 2
                               Decorate 176(lod) Location 3
                               Decorate 296(fragColor) Location 0
diff --git a/Test/baseResults/spv.tpipBlockMatchGatherSAD.frag.out b/Test/baseResults/spv.tpipBlockMatchGatherSAD.frag.out
new file mode 100644
index 0000000..63e4e15
--- /dev/null
+++ b/Test/baseResults/spv.tpipBlockMatchGatherSAD.frag.out
@@ -0,0 +1,126 @@
+spv.tpipBlockMatchGatherSAD.frag
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 72
+
+                              Capability Shader
+                              Capability TextureBlockMatchQCOM
+                              Capability TextureBlockMatch2QCOM
+                              Extension  "SPV_QCOM_image_processing"
+                              Extension  "SPV_QCOM_image_processing2"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 13 41
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_QCOM_image_processing"
+                              SourceExtension  "GL_QCOM_image_processing2"
+                              Name 4  "main"
+                              Name 9  "tgt_coords"
+                              Name 13  "v_texcoord"
+                              Name 26  "ref_coords"
+                              Name 37  "blockSize"
+                              Name 41  "fragColor"
+                              Name 44  "tex2D_src1"
+                              Name 48  "samp"
+                              Name 53  "tex2D_src2"
+                              Name 61  "target_samp"
+                              Name 64  "ref_samp"
+                              Name 71  "tex2DArray_weights"
+                              Decorate 13(v_texcoord) Location 0
+                              Decorate 41(fragColor) Location 0
+                              Decorate 44(tex2D_src1) Binding 1
+                              Decorate 44(tex2D_src1) DescriptorSet 0
+                              Decorate 44(tex2D_src1) DecorationBlockMatchTextureQCOM
+                              Decorate 48(samp) Binding 3
+                              Decorate 48(samp) DescriptorSet 0
+                              Decorate 53(tex2D_src2) Binding 2
+                              Decorate 53(tex2D_src2) DescriptorSet 0
+                              Decorate 53(tex2D_src2) DecorationBlockMatchTextureQCOM
+                              Decorate 61(target_samp) Binding 4
+                              Decorate 61(target_samp) DescriptorSet 0
+                              Decorate 61(target_samp) DecorationBlockMatchTextureQCOM
+                              Decorate 64(ref_samp) Binding 5
+                              Decorate 64(ref_samp) DescriptorSet 0
+                              Decorate 64(ref_samp) DecorationBlockMatchTextureQCOM
+                              Decorate 71(tex2DArray_weights) Binding 0
+                              Decorate 71(tex2DArray_weights) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 2
+               8:             TypePointer Function 7(ivec2)
+              10:             TypeFloat 32
+              11:             TypeVector 10(float) 4
+              12:             TypePointer Input 11(fvec4)
+  13(v_texcoord):     12(ptr) Variable Input
+              14:      6(int) Constant 0
+              15:             TypePointer Input 10(float)
+              19:             TypePointer Function 6(int)
+              21:      6(int) Constant 1
+              27:      6(int) Constant 2
+              32:      6(int) Constant 3
+              38:      6(int) Constant 4
+              39:    7(ivec2) ConstantComposite 38 38
+              40:             TypePointer Output 11(fvec4)
+   41(fragColor):     40(ptr) Variable Output
+              42:             TypeImage 10(float) 2D sampled format:Unknown
+              43:             TypePointer UniformConstant 42
+  44(tex2D_src1):     43(ptr) Variable UniformConstant
+              46:             TypeSampler
+              47:             TypePointer UniformConstant 46
+        48(samp):     47(ptr) Variable UniformConstant
+              50:             TypeSampledImage 42
+  53(tex2D_src2):     43(ptr) Variable UniformConstant
+              60:             TypePointer UniformConstant 50
+ 61(target_samp):     60(ptr) Variable UniformConstant
+    64(ref_samp):     60(ptr) Variable UniformConstant
+              69:             TypeImage 10(float) 2D array sampled format:Unknown
+              70:             TypePointer UniformConstant 69
+71(tex2DArray_weights):     70(ptr) Variable UniformConstant
+         4(main):           2 Function None 3
+               5:             Label
+   9(tgt_coords):      8(ptr) Variable Function
+  26(ref_coords):      8(ptr) Variable Function
+   37(blockSize):      8(ptr) Variable Function
+              16:     15(ptr) AccessChain 13(v_texcoord) 14
+              17:   10(float) Load 16
+              18:      6(int) ConvertFToU 17
+              20:     19(ptr) AccessChain 9(tgt_coords) 14
+                              Store 20 18
+              22:     15(ptr) AccessChain 13(v_texcoord) 21
+              23:   10(float) Load 22
+              24:      6(int) ConvertFToU 23
+              25:     19(ptr) AccessChain 9(tgt_coords) 14
+                              Store 25 24
+              28:     15(ptr) AccessChain 13(v_texcoord) 27
+              29:   10(float) Load 28
+              30:      6(int) ConvertFToU 29
+              31:     19(ptr) AccessChain 26(ref_coords) 14
+                              Store 31 30
+              33:     15(ptr) AccessChain 13(v_texcoord) 32
+              34:   10(float) Load 33
+              35:      6(int) ConvertFToU 34
+              36:     19(ptr) AccessChain 26(ref_coords) 21
+                              Store 36 35
+                              Store 37(blockSize) 39
+              45:          42 Load 44(tex2D_src1)
+              49:          46 Load 48(samp)
+              51:          50 SampledImage 45 49
+              52:    7(ivec2) Load 9(tgt_coords)
+              54:          42 Load 53(tex2D_src2)
+              55:          46 Load 48(samp)
+              56:          50 SampledImage 54 55
+              57:    7(ivec2) Load 26(ref_coords)
+              58:    7(ivec2) Load 37(blockSize)
+              59:   11(fvec4) ImageBlockMatchGatherSADQCOM 51 52 56 57 58
+                              Store 41(fragColor) 59
+              62:          50 Load 61(target_samp)
+              63:    7(ivec2) Load 9(tgt_coords)
+              65:          50 Load 64(ref_samp)
+              66:    7(ivec2) Load 26(ref_coords)
+              67:    7(ivec2) Load 37(blockSize)
+              68:   11(fvec4) ImageBlockMatchGatherSADQCOM 62 63 65 66 67
+                              Store 41(fragColor) 68
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.tpipBlockMatchGatherSSD.frag.out b/Test/baseResults/spv.tpipBlockMatchGatherSSD.frag.out
new file mode 100644
index 0000000..f5aa4cb
--- /dev/null
+++ b/Test/baseResults/spv.tpipBlockMatchGatherSSD.frag.out
@@ -0,0 +1,126 @@
+spv.tpipBlockMatchGatherSSD.frag
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 72
+
+                              Capability Shader
+                              Capability TextureBlockMatchQCOM
+                              Capability TextureBlockMatch2QCOM
+                              Extension  "SPV_QCOM_image_processing"
+                              Extension  "SPV_QCOM_image_processing2"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 13 41
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_QCOM_image_processing"
+                              SourceExtension  "GL_QCOM_image_processing2"
+                              Name 4  "main"
+                              Name 9  "tgt_coords"
+                              Name 13  "v_texcoord"
+                              Name 26  "ref_coords"
+                              Name 37  "blockSize"
+                              Name 41  "fragColor"
+                              Name 44  "tex2D_src1"
+                              Name 48  "samp"
+                              Name 53  "tex2D_src2"
+                              Name 61  "target_samp"
+                              Name 64  "ref_samp"
+                              Name 71  "tex2DArray_weights"
+                              Decorate 13(v_texcoord) Location 0
+                              Decorate 41(fragColor) Location 0
+                              Decorate 44(tex2D_src1) Binding 1
+                              Decorate 44(tex2D_src1) DescriptorSet 0
+                              Decorate 44(tex2D_src1) DecorationBlockMatchTextureQCOM
+                              Decorate 48(samp) Binding 3
+                              Decorate 48(samp) DescriptorSet 0
+                              Decorate 53(tex2D_src2) Binding 2
+                              Decorate 53(tex2D_src2) DescriptorSet 0
+                              Decorate 53(tex2D_src2) DecorationBlockMatchTextureQCOM
+                              Decorate 61(target_samp) Binding 4
+                              Decorate 61(target_samp) DescriptorSet 0
+                              Decorate 61(target_samp) DecorationBlockMatchTextureQCOM
+                              Decorate 64(ref_samp) Binding 5
+                              Decorate 64(ref_samp) DescriptorSet 0
+                              Decorate 64(ref_samp) DecorationBlockMatchTextureQCOM
+                              Decorate 71(tex2DArray_weights) Binding 0
+                              Decorate 71(tex2DArray_weights) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 2
+               8:             TypePointer Function 7(ivec2)
+              10:             TypeFloat 32
+              11:             TypeVector 10(float) 4
+              12:             TypePointer Input 11(fvec4)
+  13(v_texcoord):     12(ptr) Variable Input
+              14:      6(int) Constant 0
+              15:             TypePointer Input 10(float)
+              19:             TypePointer Function 6(int)
+              21:      6(int) Constant 1
+              27:      6(int) Constant 2
+              32:      6(int) Constant 3
+              38:      6(int) Constant 4
+              39:    7(ivec2) ConstantComposite 38 38
+              40:             TypePointer Output 11(fvec4)
+   41(fragColor):     40(ptr) Variable Output
+              42:             TypeImage 10(float) 2D sampled format:Unknown
+              43:             TypePointer UniformConstant 42
+  44(tex2D_src1):     43(ptr) Variable UniformConstant
+              46:             TypeSampler
+              47:             TypePointer UniformConstant 46
+        48(samp):     47(ptr) Variable UniformConstant
+              50:             TypeSampledImage 42
+  53(tex2D_src2):     43(ptr) Variable UniformConstant
+              60:             TypePointer UniformConstant 50
+ 61(target_samp):     60(ptr) Variable UniformConstant
+    64(ref_samp):     60(ptr) Variable UniformConstant
+              69:             TypeImage 10(float) 2D array sampled format:Unknown
+              70:             TypePointer UniformConstant 69
+71(tex2DArray_weights):     70(ptr) Variable UniformConstant
+         4(main):           2 Function None 3
+               5:             Label
+   9(tgt_coords):      8(ptr) Variable Function
+  26(ref_coords):      8(ptr) Variable Function
+   37(blockSize):      8(ptr) Variable Function
+              16:     15(ptr) AccessChain 13(v_texcoord) 14
+              17:   10(float) Load 16
+              18:      6(int) ConvertFToU 17
+              20:     19(ptr) AccessChain 9(tgt_coords) 14
+                              Store 20 18
+              22:     15(ptr) AccessChain 13(v_texcoord) 21
+              23:   10(float) Load 22
+              24:      6(int) ConvertFToU 23
+              25:     19(ptr) AccessChain 9(tgt_coords) 14
+                              Store 25 24
+              28:     15(ptr) AccessChain 13(v_texcoord) 27
+              29:   10(float) Load 28
+              30:      6(int) ConvertFToU 29
+              31:     19(ptr) AccessChain 26(ref_coords) 14
+                              Store 31 30
+              33:     15(ptr) AccessChain 13(v_texcoord) 32
+              34:   10(float) Load 33
+              35:      6(int) ConvertFToU 34
+              36:     19(ptr) AccessChain 26(ref_coords) 21
+                              Store 36 35
+                              Store 37(blockSize) 39
+              45:          42 Load 44(tex2D_src1)
+              49:          46 Load 48(samp)
+              51:          50 SampledImage 45 49
+              52:    7(ivec2) Load 9(tgt_coords)
+              54:          42 Load 53(tex2D_src2)
+              55:          46 Load 48(samp)
+              56:          50 SampledImage 54 55
+              57:    7(ivec2) Load 26(ref_coords)
+              58:    7(ivec2) Load 37(blockSize)
+              59:   11(fvec4) ImageBlockMatchGatherSSDQCOM 51 52 56 57 58
+                              Store 41(fragColor) 59
+              62:          50 Load 61(target_samp)
+              63:    7(ivec2) Load 9(tgt_coords)
+              65:          50 Load 64(ref_samp)
+              66:    7(ivec2) Load 26(ref_coords)
+              67:    7(ivec2) Load 37(blockSize)
+              68:   11(fvec4) ImageBlockMatchGatherSSDQCOM 62 63 65 66 67
+                              Store 41(fragColor) 68
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.tpipBlockMatchSAD.frag.out b/Test/baseResults/spv.tpipBlockMatchSAD.frag.out
index a807d92..eb5f474 100644
--- a/Test/baseResults/spv.tpipBlockMatchSAD.frag.out
+++ b/Test/baseResults/spv.tpipBlockMatchSAD.frag.out
@@ -26,22 +26,22 @@
                               Name 71  "tex2DArray_weights"
                               Decorate 13(v_texcoord) Location 0
                               Decorate 41(fragColor) Location 0
-                              Decorate 44(tex2D_src1) DescriptorSet 0
                               Decorate 44(tex2D_src1) Binding 1
-                              Decorate 48(samp) DescriptorSet 0
-                              Decorate 48(samp) Binding 3
-                              Decorate 53(tex2D_src2) DescriptorSet 0
-                              Decorate 53(tex2D_src2) Binding 2
+                              Decorate 44(tex2D_src1) DescriptorSet 0
                               Decorate 44(tex2D_src1) DecorationBlockMatchTextureQCOM
+                              Decorate 48(samp) Binding 3
+                              Decorate 48(samp) DescriptorSet 0
+                              Decorate 53(tex2D_src2) Binding 2
+                              Decorate 53(tex2D_src2) DescriptorSet 0
                               Decorate 53(tex2D_src2) DecorationBlockMatchTextureQCOM
-                              Decorate 61(target_samp) DescriptorSet 0
                               Decorate 61(target_samp) Binding 4
-                              Decorate 64(ref_samp) DescriptorSet 0
-                              Decorate 64(ref_samp) Binding 5
+                              Decorate 61(target_samp) DescriptorSet 0
                               Decorate 61(target_samp) DecorationBlockMatchTextureQCOM
+                              Decorate 64(ref_samp) Binding 5
+                              Decorate 64(ref_samp) DescriptorSet 0
                               Decorate 64(ref_samp) DecorationBlockMatchTextureQCOM
-                              Decorate 71(tex2DArray_weights) DescriptorSet 0
                               Decorate 71(tex2DArray_weights) Binding 0
+                              Decorate 71(tex2DArray_weights) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
diff --git a/Test/baseResults/spv.tpipBlockMatchSSD.frag.out b/Test/baseResults/spv.tpipBlockMatchSSD.frag.out
index e7ac73b..d758c0b 100644
--- a/Test/baseResults/spv.tpipBlockMatchSSD.frag.out
+++ b/Test/baseResults/spv.tpipBlockMatchSSD.frag.out
@@ -26,22 +26,22 @@
                               Name 71  "tex2DArray_weights"
                               Decorate 13(v_texcoord) Location 0
                               Decorate 41(fragColor) Location 0
-                              Decorate 44(tex2D_src1) DescriptorSet 0
                               Decorate 44(tex2D_src1) Binding 1
-                              Decorate 48(samp) DescriptorSet 0
-                              Decorate 48(samp) Binding 3
-                              Decorate 53(tex2D_src2) DescriptorSet 0
-                              Decorate 53(tex2D_src2) Binding 2
+                              Decorate 44(tex2D_src1) DescriptorSet 0
                               Decorate 44(tex2D_src1) DecorationBlockMatchTextureQCOM
+                              Decorate 48(samp) Binding 3
+                              Decorate 48(samp) DescriptorSet 0
+                              Decorate 53(tex2D_src2) Binding 2
+                              Decorate 53(tex2D_src2) DescriptorSet 0
                               Decorate 53(tex2D_src2) DecorationBlockMatchTextureQCOM
-                              Decorate 61(target_samp) DescriptorSet 0
                               Decorate 61(target_samp) Binding 4
-                              Decorate 64(ref_samp) DescriptorSet 0
-                              Decorate 64(ref_samp) Binding 5
+                              Decorate 61(target_samp) DescriptorSet 0
                               Decorate 61(target_samp) DecorationBlockMatchTextureQCOM
+                              Decorate 64(ref_samp) Binding 5
+                              Decorate 64(ref_samp) DescriptorSet 0
                               Decorate 64(ref_samp) DecorationBlockMatchTextureQCOM
-                              Decorate 71(tex2DArray_weights) DescriptorSet 0
                               Decorate 71(tex2DArray_weights) Binding 0
+                              Decorate 71(tex2DArray_weights) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
diff --git a/Test/baseResults/spv.tpipBlockMatchWindowSAD.frag.out b/Test/baseResults/spv.tpipBlockMatchWindowSAD.frag.out
new file mode 100644
index 0000000..a27c016
--- /dev/null
+++ b/Test/baseResults/spv.tpipBlockMatchWindowSAD.frag.out
@@ -0,0 +1,129 @@
+spv.tpipBlockMatchWindowSAD.frag
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 72
+
+                              Capability Shader
+                              Capability TextureBlockMatchQCOM
+                              Capability TextureBlockMatch2QCOM
+                              Extension  "SPV_QCOM_image_processing"
+                              Extension  "SPV_QCOM_image_processing2"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 13 41
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_QCOM_image_processing"
+                              SourceExtension  "GL_QCOM_image_processing2"
+                              Name 4  "main"
+                              Name 9  "tgt_coords"
+                              Name 13  "v_texcoord"
+                              Name 26  "ref_coords"
+                              Name 37  "blockSize"
+                              Name 41  "fragColor"
+                              Name 44  "tex2D_src1"
+                              Name 48  "samp"
+                              Name 53  "tex2D_src2"
+                              Name 61  "target_samp"
+                              Name 64  "ref_samp"
+                              Name 71  "tex2DArray_weights"
+                              Decorate 13(v_texcoord) Location 0
+                              Decorate 41(fragColor) Location 0
+                              Decorate 44(tex2D_src1) Binding 1
+                              Decorate 44(tex2D_src1) DescriptorSet 0
+                              Decorate 44(tex2D_src1) DecorationBlockMatchTextureQCOM
+                              Decorate 48(samp) Binding 3
+                              Decorate 48(samp) DescriptorSet 0
+                              Decorate 48(samp) DecorationBlockMatchSamplerQCOM
+                              Decorate 53(tex2D_src2) Binding 2
+                              Decorate 53(tex2D_src2) DescriptorSet 0
+                              Decorate 53(tex2D_src2) DecorationBlockMatchTextureQCOM
+                              Decorate 61(target_samp) Binding 4
+                              Decorate 61(target_samp) DescriptorSet 0
+                              Decorate 61(target_samp) DecorationBlockMatchTextureQCOM
+                              Decorate 61(target_samp) DecorationBlockMatchSamplerQCOM
+                              Decorate 64(ref_samp) Binding 5
+                              Decorate 64(ref_samp) DescriptorSet 0
+                              Decorate 64(ref_samp) DecorationBlockMatchTextureQCOM
+                              Decorate 64(ref_samp) DecorationBlockMatchSamplerQCOM
+                              Decorate 71(tex2DArray_weights) Binding 0
+                              Decorate 71(tex2DArray_weights) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 2
+               8:             TypePointer Function 7(ivec2)
+              10:             TypeFloat 32
+              11:             TypeVector 10(float) 4
+              12:             TypePointer Input 11(fvec4)
+  13(v_texcoord):     12(ptr) Variable Input
+              14:      6(int) Constant 0
+              15:             TypePointer Input 10(float)
+              19:             TypePointer Function 6(int)
+              21:      6(int) Constant 1
+              27:      6(int) Constant 2
+              32:      6(int) Constant 3
+              38:      6(int) Constant 4
+              39:    7(ivec2) ConstantComposite 38 38
+              40:             TypePointer Output 11(fvec4)
+   41(fragColor):     40(ptr) Variable Output
+              42:             TypeImage 10(float) 2D sampled format:Unknown
+              43:             TypePointer UniformConstant 42
+  44(tex2D_src1):     43(ptr) Variable UniformConstant
+              46:             TypeSampler
+              47:             TypePointer UniformConstant 46
+        48(samp):     47(ptr) Variable UniformConstant
+              50:             TypeSampledImage 42
+  53(tex2D_src2):     43(ptr) Variable UniformConstant
+              60:             TypePointer UniformConstant 50
+ 61(target_samp):     60(ptr) Variable UniformConstant
+    64(ref_samp):     60(ptr) Variable UniformConstant
+              69:             TypeImage 10(float) 2D array sampled format:Unknown
+              70:             TypePointer UniformConstant 69
+71(tex2DArray_weights):     70(ptr) Variable UniformConstant
+         4(main):           2 Function None 3
+               5:             Label
+   9(tgt_coords):      8(ptr) Variable Function
+  26(ref_coords):      8(ptr) Variable Function
+   37(blockSize):      8(ptr) Variable Function
+              16:     15(ptr) AccessChain 13(v_texcoord) 14
+              17:   10(float) Load 16
+              18:      6(int) ConvertFToU 17
+              20:     19(ptr) AccessChain 9(tgt_coords) 14
+                              Store 20 18
+              22:     15(ptr) AccessChain 13(v_texcoord) 21
+              23:   10(float) Load 22
+              24:      6(int) ConvertFToU 23
+              25:     19(ptr) AccessChain 9(tgt_coords) 14
+                              Store 25 24
+              28:     15(ptr) AccessChain 13(v_texcoord) 27
+              29:   10(float) Load 28
+              30:      6(int) ConvertFToU 29
+              31:     19(ptr) AccessChain 26(ref_coords) 14
+                              Store 31 30
+              33:     15(ptr) AccessChain 13(v_texcoord) 32
+              34:   10(float) Load 33
+              35:      6(int) ConvertFToU 34
+              36:     19(ptr) AccessChain 26(ref_coords) 21
+                              Store 36 35
+                              Store 37(blockSize) 39
+              45:          42 Load 44(tex2D_src1)
+              49:          46 Load 48(samp)
+              51:          50 SampledImage 45 49
+              52:    7(ivec2) Load 9(tgt_coords)
+              54:          42 Load 53(tex2D_src2)
+              55:          46 Load 48(samp)
+              56:          50 SampledImage 54 55
+              57:    7(ivec2) Load 26(ref_coords)
+              58:    7(ivec2) Load 37(blockSize)
+              59:   11(fvec4) ImageBlockMatchWindowSADQCOM 51 52 56 57 58
+                              Store 41(fragColor) 59
+              62:          50 Load 61(target_samp)
+              63:    7(ivec2) Load 9(tgt_coords)
+              65:          50 Load 64(ref_samp)
+              66:    7(ivec2) Load 26(ref_coords)
+              67:    7(ivec2) Load 37(blockSize)
+              68:   11(fvec4) ImageBlockMatchWindowSADQCOM 62 63 65 66 67
+                              Store 41(fragColor) 68
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.tpipBlockMatchWindowSSD.frag.out b/Test/baseResults/spv.tpipBlockMatchWindowSSD.frag.out
new file mode 100644
index 0000000..e22097f
--- /dev/null
+++ b/Test/baseResults/spv.tpipBlockMatchWindowSSD.frag.out
@@ -0,0 +1,129 @@
+spv.tpipBlockMatchWindowSSD.frag
+// Module Version 10000
+// Generated by (magic number): 8000b
+// Id's are bound by 72
+
+                              Capability Shader
+                              Capability TextureBlockMatchQCOM
+                              Capability TextureBlockMatch2QCOM
+                              Extension  "SPV_QCOM_image_processing"
+                              Extension  "SPV_QCOM_image_processing2"
+               1:             ExtInstImport  "GLSL.std.450"
+                              MemoryModel Logical GLSL450
+                              EntryPoint Fragment 4  "main" 13 41
+                              ExecutionMode 4 OriginUpperLeft
+                              Source GLSL 450
+                              SourceExtension  "GL_QCOM_image_processing"
+                              SourceExtension  "GL_QCOM_image_processing2"
+                              Name 4  "main"
+                              Name 9  "tgt_coords"
+                              Name 13  "v_texcoord"
+                              Name 26  "ref_coords"
+                              Name 37  "blockSize"
+                              Name 41  "fragColor"
+                              Name 44  "tex2D_src1"
+                              Name 48  "samp"
+                              Name 53  "tex2D_src2"
+                              Name 61  "target_samp"
+                              Name 64  "ref_samp"
+                              Name 71  "tex2DArray_weights"
+                              Decorate 13(v_texcoord) Location 0
+                              Decorate 41(fragColor) Location 0
+                              Decorate 44(tex2D_src1) Binding 1
+                              Decorate 44(tex2D_src1) DescriptorSet 0
+                              Decorate 44(tex2D_src1) DecorationBlockMatchTextureQCOM
+                              Decorate 48(samp) Binding 3
+                              Decorate 48(samp) DescriptorSet 0
+                              Decorate 48(samp) DecorationBlockMatchSamplerQCOM
+                              Decorate 53(tex2D_src2) Binding 2
+                              Decorate 53(tex2D_src2) DescriptorSet 0
+                              Decorate 53(tex2D_src2) DecorationBlockMatchTextureQCOM
+                              Decorate 61(target_samp) Binding 4
+                              Decorate 61(target_samp) DescriptorSet 0
+                              Decorate 61(target_samp) DecorationBlockMatchTextureQCOM
+                              Decorate 61(target_samp) DecorationBlockMatchSamplerQCOM
+                              Decorate 64(ref_samp) Binding 5
+                              Decorate 64(ref_samp) DescriptorSet 0
+                              Decorate 64(ref_samp) DecorationBlockMatchTextureQCOM
+                              Decorate 64(ref_samp) DecorationBlockMatchSamplerQCOM
+                              Decorate 71(tex2DArray_weights) Binding 0
+                              Decorate 71(tex2DArray_weights) DescriptorSet 0
+               2:             TypeVoid
+               3:             TypeFunction 2
+               6:             TypeInt 32 0
+               7:             TypeVector 6(int) 2
+               8:             TypePointer Function 7(ivec2)
+              10:             TypeFloat 32
+              11:             TypeVector 10(float) 4
+              12:             TypePointer Input 11(fvec4)
+  13(v_texcoord):     12(ptr) Variable Input
+              14:      6(int) Constant 0
+              15:             TypePointer Input 10(float)
+              19:             TypePointer Function 6(int)
+              21:      6(int) Constant 1
+              27:      6(int) Constant 2
+              32:      6(int) Constant 3
+              38:      6(int) Constant 4
+              39:    7(ivec2) ConstantComposite 38 38
+              40:             TypePointer Output 11(fvec4)
+   41(fragColor):     40(ptr) Variable Output
+              42:             TypeImage 10(float) 2D sampled format:Unknown
+              43:             TypePointer UniformConstant 42
+  44(tex2D_src1):     43(ptr) Variable UniformConstant
+              46:             TypeSampler
+              47:             TypePointer UniformConstant 46
+        48(samp):     47(ptr) Variable UniformConstant
+              50:             TypeSampledImage 42
+  53(tex2D_src2):     43(ptr) Variable UniformConstant
+              60:             TypePointer UniformConstant 50
+ 61(target_samp):     60(ptr) Variable UniformConstant
+    64(ref_samp):     60(ptr) Variable UniformConstant
+              69:             TypeImage 10(float) 2D array sampled format:Unknown
+              70:             TypePointer UniformConstant 69
+71(tex2DArray_weights):     70(ptr) Variable UniformConstant
+         4(main):           2 Function None 3
+               5:             Label
+   9(tgt_coords):      8(ptr) Variable Function
+  26(ref_coords):      8(ptr) Variable Function
+   37(blockSize):      8(ptr) Variable Function
+              16:     15(ptr) AccessChain 13(v_texcoord) 14
+              17:   10(float) Load 16
+              18:      6(int) ConvertFToU 17
+              20:     19(ptr) AccessChain 9(tgt_coords) 14
+                              Store 20 18
+              22:     15(ptr) AccessChain 13(v_texcoord) 21
+              23:   10(float) Load 22
+              24:      6(int) ConvertFToU 23
+              25:     19(ptr) AccessChain 9(tgt_coords) 14
+                              Store 25 24
+              28:     15(ptr) AccessChain 13(v_texcoord) 27
+              29:   10(float) Load 28
+              30:      6(int) ConvertFToU 29
+              31:     19(ptr) AccessChain 26(ref_coords) 14
+                              Store 31 30
+              33:     15(ptr) AccessChain 13(v_texcoord) 32
+              34:   10(float) Load 33
+              35:      6(int) ConvertFToU 34
+              36:     19(ptr) AccessChain 26(ref_coords) 21
+                              Store 36 35
+                              Store 37(blockSize) 39
+              45:          42 Load 44(tex2D_src1)
+              49:          46 Load 48(samp)
+              51:          50 SampledImage 45 49
+              52:    7(ivec2) Load 9(tgt_coords)
+              54:          42 Load 53(tex2D_src2)
+              55:          46 Load 48(samp)
+              56:          50 SampledImage 54 55
+              57:    7(ivec2) Load 26(ref_coords)
+              58:    7(ivec2) Load 37(blockSize)
+              59:   11(fvec4) ImageBlockMatchWindowSSDQCOM 51 52 56 57 58
+                              Store 41(fragColor) 59
+              62:          50 Load 61(target_samp)
+              63:    7(ivec2) Load 9(tgt_coords)
+              65:          50 Load 64(ref_samp)
+              66:    7(ivec2) Load 26(ref_coords)
+              67:    7(ivec2) Load 37(blockSize)
+              68:   11(fvec4) ImageBlockMatchWindowSSDQCOM 62 63 65 66 67
+                              Store 41(fragColor) 68
+                              Return
+                              FunctionEnd
diff --git a/Test/baseResults/spv.tpipBoxFilter.frag.out b/Test/baseResults/spv.tpipBoxFilter.frag.out
index 5620a81..46d802c 100644
--- a/Test/baseResults/spv.tpipBoxFilter.frag.out
+++ b/Test/baseResults/spv.tpipBoxFilter.frag.out
@@ -22,17 +22,17 @@
                               Name 41  "tex2DArray_weights"
                               Name 42  "tex2D_src2"
                               Decorate 15(fragColor) Location 0
-                              Decorate 18(tex2D_src1) DescriptorSet 0
                               Decorate 18(tex2D_src1) Binding 1
-                              Decorate 22(samp) DescriptorSet 0
+                              Decorate 18(tex2D_src1) DescriptorSet 0
                               Decorate 22(samp) Binding 3
+                              Decorate 22(samp) DescriptorSet 0
                               Decorate 27(v_texcoord) Location 0
-                              Decorate 33(tex_samp) DescriptorSet 0
                               Decorate 33(tex_samp) Binding 4
-                              Decorate 41(tex2DArray_weights) DescriptorSet 0
+                              Decorate 33(tex_samp) DescriptorSet 0
                               Decorate 41(tex2DArray_weights) Binding 0
-                              Decorate 42(tex2D_src2) DescriptorSet 0
+                              Decorate 41(tex2DArray_weights) DescriptorSet 0
                               Decorate 42(tex2D_src2) Binding 2
+                              Decorate 42(tex2D_src2) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.tpipSampleWeighted.frag.out b/Test/baseResults/spv.tpipSampleWeighted.frag.out
index bf10874..652143c 100644
--- a/Test/baseResults/spv.tpipSampleWeighted.frag.out
+++ b/Test/baseResults/spv.tpipSampleWeighted.frag.out
@@ -22,21 +22,21 @@
                               Name 39  "tex_samp_array"
                               Name 42  "tex2D_src2"
                               Decorate 9(fragColor) Location 0
-                              Decorate 12(tex2D_src1) DescriptorSet 0
                               Decorate 12(tex2D_src1) Binding 1
-                              Decorate 16(samp) DescriptorSet 0
+                              Decorate 12(tex2D_src1) DescriptorSet 0
                               Decorate 16(samp) Binding 3
+                              Decorate 16(samp) DescriptorSet 0
                               Decorate 21(v_texcoord) Location 0
-                              Decorate 27(tex2DArray_weights) DescriptorSet 0
                               Decorate 27(tex2DArray_weights) Binding 0
+                              Decorate 27(tex2DArray_weights) DescriptorSet 0
                               Decorate 27(tex2DArray_weights) DecorationWeightTextureQCOM
-                              Decorate 34(tex_samp) DescriptorSet 0
                               Decorate 34(tex_samp) Binding 4
-                              Decorate 39(tex_samp_array) DescriptorSet 0
+                              Decorate 34(tex_samp) DescriptorSet 0
                               Decorate 39(tex_samp_array) Binding 5
+                              Decorate 39(tex_samp_array) DescriptorSet 0
                               Decorate 39(tex_samp_array) DecorationWeightTextureQCOM
-                              Decorate 42(tex2D_src2) DescriptorSet 0
                               Decorate 42(tex2D_src2) Binding 2
+                              Decorate 42(tex2D_src2) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.tpipTextureArrays.frag.out b/Test/baseResults/spv.tpipTextureArrays.frag.out
index 28b63f5..cb5a62a 100644
--- a/Test/baseResults/spv.tpipTextureArrays.frag.out
+++ b/Test/baseResults/spv.tpipTextureArrays.frag.out
@@ -24,14 +24,14 @@
                               Name 67  "samp"
                               Decorate 13(v_texcoord) Location 0
                               Decorate 46(fragColor) Location 0
-                              Decorate 51(samplers) DescriptorSet 0
                               Decorate 51(samplers) Binding 5
-                              Decorate 60(tex2D_srcs) DescriptorSet 0
-                              Decorate 60(tex2D_srcs) Binding 4
-                              Decorate 67(samp) DescriptorSet 0
-                              Decorate 67(samp) Binding 3
+                              Decorate 51(samplers) DescriptorSet 0
                               Decorate 55 DecorationBlockMatchTextureQCOM
+                              Decorate 60(tex2D_srcs) Binding 4
+                              Decorate 60(tex2D_srcs) DescriptorSet 0
                               Decorate 63 DecorationBlockMatchTextureQCOM
+                              Decorate 67(samp) Binding 3
+                              Decorate 67(samp) DescriptorSet 0
                               Decorate 74 DecorationBlockMatchTextureQCOM
                               Decorate 79 DecorationBlockMatchTextureQCOM
                2:             TypeVoid
diff --git a/Test/baseResults/spv.uint.frag.out b/Test/baseResults/spv.uint.frag.out
index a78acae..8a8f998 100644
--- a/Test/baseResults/spv.uint.frag.out
+++ b/Test/baseResults/spv.uint.frag.out
@@ -59,8 +59,8 @@
                               Decorate 68(c) RelaxedPrecision
                               Decorate 68(c) Location 0
                               Decorate 72(usampler) RelaxedPrecision
-                              Decorate 72(usampler) DescriptorSet 0
                               Decorate 72(usampler) Binding 0
+                              Decorate 72(usampler) DescriptorSet 0
                               Decorate 73 RelaxedPrecision
                               Decorate 77(tc) RelaxedPrecision
                               Decorate 77(tc) Location 2
diff --git a/Test/baseResults/spv.uniformArray.frag.out b/Test/baseResults/spv.uniformArray.frag.out
index 09cd353..26e066a 100644
--- a/Test/baseResults/spv.uniformArray.frag.out
+++ b/Test/baseResults/spv.uniformArray.frag.out
@@ -20,8 +20,8 @@
                               Decorate 25(inColor) Location 0
                               Decorate 43(alpha) Location 7
                               Decorate 54(gl_FragColor) Location 0
-                              Decorate 59(texSampler2D) DescriptorSet 0
                               Decorate 59(texSampler2D) Binding 0
+                              Decorate 59(texSampler2D) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.uniformInitializer.frag.out b/Test/baseResults/spv.uniformInitializer.frag.out
index abebf62..da32af5 100644
--- a/Test/baseResults/spv.uniformInitializer.frag.out
+++ b/Test/baseResults/spv.uniformInitializer.frag.out
@@ -14,8 +14,8 @@
                               Name 14  "in_color"
                               Decorate 9(color) Location 0
                               Decorate 14(in_color) Location 0
-                              Decorate 14(in_color) DescriptorSet 0
                               Decorate 14(in_color) Binding 0
+                              Decorate 14(in_color) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.uniformInitializerStruct.frag.out b/Test/baseResults/spv.uniformInitializerStruct.frag.out
index 058bc34..7b0f733 100644
--- a/Test/baseResults/spv.uniformInitializerStruct.frag.out
+++ b/Test/baseResults/spv.uniformInitializerStruct.frag.out
@@ -19,8 +19,8 @@
                               Name 34  "parts"
                               Decorate 9(color) Location 0
                               Decorate 34(parts) Location 0
-                              Decorate 34(parts) DescriptorSet 0
                               Decorate 34(parts) Binding 0
+                              Decorate 34(parts) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.variableArrayIndex.frag.out b/Test/baseResults/spv.variableArrayIndex.frag.out
index f78119c..ee2c1c6 100644
--- a/Test/baseResults/spv.variableArrayIndex.frag.out
+++ b/Test/baseResults/spv.variableArrayIndex.frag.out
@@ -41,8 +41,8 @@
                               Decorate 36(foo) Flat
                               Decorate 36(foo) Location 1
                               Decorate 54(gl_FragColor) Location 0
-                              Decorate 59(samp2D) DescriptorSet 0
                               Decorate 59(samp2D) Binding 0
+                              Decorate 59(samp2D) DescriptorSet 0
                               Decorate 63(coord) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/spv.varyingArray.frag.out b/Test/baseResults/spv.varyingArray.frag.out
index 9d001bc..d97b7f7 100644
--- a/Test/baseResults/spv.varyingArray.frag.out
+++ b/Test/baseResults/spv.varyingArray.frag.out
@@ -17,8 +17,8 @@
                               Name 39  "alpha"
                               Name 45  "gl_FragColor"
                               Name 48  "foo"
-                              Decorate 13(texSampler2D) DescriptorSet 0
                               Decorate 13(texSampler2D) Binding 0
+                              Decorate 13(texSampler2D) DescriptorSet 0
                               Decorate 19(TexCoord) Location 2
                               Decorate 34(color) Location 0
                               Decorate 39(alpha) Location 1
diff --git a/Test/baseResults/spv.varyingArrayIndirect.frag.out b/Test/baseResults/spv.varyingArrayIndirect.frag.out
index 00135f6..7a44c8f 100644
--- a/Test/baseResults/spv.varyingArrayIndirect.frag.out
+++ b/Test/baseResults/spv.varyingArrayIndirect.frag.out
@@ -19,8 +19,8 @@
                               Name 45  "color"
                               Name 50  "alpha"
                               Name 56  "gl_FragColor"
-                              Decorate 13(texSampler2D) DescriptorSet 0
                               Decorate 13(texSampler2D) Binding 0
+                              Decorate 13(texSampler2D) DescriptorSet 0
                               Decorate 19(userIn) Location 8
                               Decorate 22(b) Flat
                               Decorate 22(b) Location 11
diff --git a/Test/baseResults/spv.viewportArray2.tesc.out b/Test/baseResults/spv.viewportArray2.tesc.out
index f719a97..16e1686 100644
--- a/Test/baseResults/spv.viewportArray2.tesc.out
+++ b/Test/baseResults/spv.viewportArray2.tesc.out
@@ -20,8 +20,8 @@
                               Name 14  "gl_out"
                               Name 16  "gl_InvocationID"
                               Name 22  "gl_Layer"
-                              MemberDecorate 10(gl_PerVertex) 0 BuiltIn ViewportMaskNV
                               Decorate 10(gl_PerVertex) Block
+                              MemberDecorate 10(gl_PerVertex) 0 BuiltIn ViewportMaskNV
                               Decorate 16(gl_InvocationID) BuiltIn InvocationId
                               Decorate 22(gl_Layer) BuiltIn Layer
                               Decorate 22(gl_Layer) ViewportRelativeNV
diff --git a/Test/baseResults/spv.volatileAtomic.comp.out b/Test/baseResults/spv.volatileAtomic.comp.out
index 53673d3..29462a1 100644
--- a/Test/baseResults/spv.volatileAtomic.comp.out
+++ b/Test/baseResults/spv.volatileAtomic.comp.out
@@ -14,12 +14,14 @@
                               MemberName 8(D) 0  "d"
                               Name 10  "d"
                               Decorate 7 ArrayStride 4
+                              Decorate 8(D) BufferBlock
                               MemberDecorate 8(D) 0 Volatile
                               MemberDecorate 8(D) 0 Coherent
                               MemberDecorate 8(D) 0 Offset 0
-                              Decorate 8(D) BufferBlock
-                              Decorate 10(d) DescriptorSet 0
+                              Decorate 10(d) Volatile
+                              Decorate 10(d) Coherent
                               Decorate 10(d) Binding 3
+                              Decorate 10(d) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
diff --git a/Test/baseResults/spv.vulkan110.int16.frag.out b/Test/baseResults/spv.vulkan110.int16.frag.out
index d5c83d5..4e435df 100644
--- a/Test/baseResults/spv.vulkan110.int16.frag.out
+++ b/Test/baseResults/spv.vulkan110.int16.frag.out
@@ -77,10 +77,11 @@
                               Name 532  "block"
                               Name 533  "si16"
                               Name 534  "su16"
-                              MemberDecorate 24(Uniforms) 0 Offset 0
                               Decorate 24(Uniforms) Block
-                              Decorate 26 DescriptorSet 0
+                              MemberDecorate 24(Uniforms) 0 Offset 0
                               Decorate 26 Binding 0
+                              Decorate 26 DescriptorSet 0
+                              Decorate 530(Block) Block
                               MemberDecorate 530(Block) 0 Offset 0
                               MemberDecorate 530(Block) 1 Offset 4
                               MemberDecorate 530(Block) 2 Offset 8
@@ -89,9 +90,8 @@
                               MemberDecorate 530(Block) 5 Offset 28
                               MemberDecorate 530(Block) 6 Offset 32
                               MemberDecorate 530(Block) 7 Offset 40
-                              Decorate 530(Block) Block
-                              Decorate 532(block) DescriptorSet 0
                               Decorate 532(block) Binding 1
+                              Decorate 532(block) DescriptorSet 0
                               Decorate 533(si16) SpecId 100
                               Decorate 534(su16) SpecId 101
                2:             TypeVoid
diff --git a/Test/baseResults/spv.vulkan110.storageBuffer.vert.out b/Test/baseResults/spv.vulkan110.storageBuffer.vert.out
index ab88c58..c9231ea 100644
--- a/Test/baseResults/spv.vulkan110.storageBuffer.vert.out
+++ b/Test/baseResults/spv.vulkan110.storageBuffer.vert.out
@@ -21,19 +21,19 @@
                               Name 22  "bb"
                               MemberName 22(bb) 0  "b"
                               Name 24  "bbi"
+                              Decorate 11(gl_PerVertex) Block
                               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 16(ub) 0 Offset 0
                               Decorate 18(ubi) Binding 0
-                              MemberDecorate 22(bb) 0 Offset 0
+                              Decorate 18(ubi) DescriptorSet 0
                               Decorate 22(bb) Block
-                              Decorate 24(bbi) DescriptorSet 0
+                              MemberDecorate 22(bb) 0 Offset 0
                               Decorate 24(bbi) Binding 1
+                              Decorate 24(bbi) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.xfb.vert.out b/Test/baseResults/spv.xfb.vert.out
index 4283e20..e76e6b3 100644
--- a/Test/baseResults/spv.xfb.vert.out
+++ b/Test/baseResults/spv.xfb.vert.out
@@ -20,23 +20,23 @@
                               Name 14  ""
                               Name 15  "out4"
                               Decorate 8(out1) Location 0
+                              Decorate 8(out1) Offset 12
                               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
+                              MemberDecorate 9(outXfb) 0 Offset 8
                               Decorate 11 Location 1
                               Decorate 11 XfbBuffer 2
                               Decorate 11 XfbStride 32
-                              MemberDecorate 12(outXfb2) 0 Offset 60
                               Decorate 12(outXfb2) Block
+                              MemberDecorate 12(outXfb2) 0 Offset 60
                               Decorate 14 Location 3
                               Decorate 14 XfbBuffer 1
                               Decorate 14 XfbStride 64
                               Decorate 15(out4) Location 4
+                              Decorate 15(out4) Offset 4
                               Decorate 15(out4) XfbBuffer 0
                               Decorate 15(out4) XfbStride 8
-                              Decorate 15(out4) Offset 4
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.xfb2.vert.out b/Test/baseResults/spv.xfb2.vert.out
index b4b09bd..a681fd3 100644
--- a/Test/baseResults/spv.xfb2.vert.out
+++ b/Test/baseResults/spv.xfb2.vert.out
@@ -19,17 +19,17 @@
                               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
+                              MemberDecorate 8(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 8(gl_PerVertex) 0 Offset 16
                               Decorate 10 XfbBuffer 3
                               Decorate 10 XfbStride 32
                               Decorate 14(position) Location 0
+                              Decorate 17(ComponentsBlock) Block
                               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
+                              Decorate 19(components) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.xfb3.vert.out b/Test/baseResults/spv.xfb3.vert.out
index a7e8856..25e031a 100644
--- a/Test/baseResults/spv.xfb3.vert.out
+++ b/Test/baseResults/spv.xfb3.vert.out
@@ -19,17 +19,17 @@
                               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
+                              MemberDecorate 8(gl_PerVertex) 0 BuiltIn Position
+                              MemberDecorate 8(gl_PerVertex) 0 Offset 16
                               Decorate 10 XfbBuffer 3
                               Decorate 10 XfbStride 80
                               Decorate 14(position) Location 0
+                              Decorate 17(ComponentsBlock) Block
                               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
+                              Decorate 19(components) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/spv.xfbOffsetOnBlockMembersAssignment.vert.out b/Test/baseResults/spv.xfbOffsetOnBlockMembersAssignment.vert.out
index eb91100..2311001 100644
--- a/Test/baseResults/spv.xfbOffsetOnBlockMembersAssignment.vert.out
+++ b/Test/baseResults/spv.xfbOffsetOnBlockMembersAssignment.vert.out
@@ -23,17 +23,17 @@
                               Name 27  ""
                               Name 31  "gl_VertexID"
                               Name 32  "gl_InstanceID"
+                              Decorate 8(block2) Block
                               MemberDecorate 8(block2) 0 Offset 0
                               MemberDecorate 8(block2) 1 Offset 4
-                              Decorate 8(block2) Block
                               Decorate 10 Location 5
                               Decorate 10 XfbBuffer 2
                               Decorate 10 XfbStride 20
+                              Decorate 25(gl_PerVertex) Block
                               MemberDecorate 25(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 25(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 25(gl_PerVertex) 2 BuiltIn ClipDistance
                               MemberDecorate 25(gl_PerVertex) 3 BuiltIn CullDistance
-                              Decorate 25(gl_PerVertex) Block
                               Decorate 27 XfbBuffer 0
                               Decorate 27 XfbStride 0
                               Decorate 31(gl_VertexID) BuiltIn VertexId
diff --git a/Test/baseResults/spv.xfbOffsetOnStructMembersAssignment.vert.out b/Test/baseResults/spv.xfbOffsetOnStructMembersAssignment.vert.out
index 467a5ae..c073ebe 100644
--- a/Test/baseResults/spv.xfbOffsetOnStructMembersAssignment.vert.out
+++ b/Test/baseResults/spv.xfbOffsetOnStructMembersAssignment.vert.out
@@ -28,18 +28,18 @@
                               Name 38  "gl_VertexID"
                               Name 39  "gl_InstanceID"
                               Decorate 9(s1) Location 0
+                              Decorate 9(s1) Offset 16
                               Decorate 9(s1) XfbBuffer 2
                               Decorate 9(s1) XfbStride 24
-                              Decorate 9(s1) Offset 16
                               Decorate 21(s2) Location 5
+                              Decorate 21(s2) Offset 8
                               Decorate 21(s2) XfbBuffer 1
                               Decorate 21(s2) XfbStride 28
-                              Decorate 21(s2) Offset 8
+                              Decorate 32(gl_PerVertex) Block
                               MemberDecorate 32(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 32(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 32(gl_PerVertex) 2 BuiltIn ClipDistance
                               MemberDecorate 32(gl_PerVertex) 3 BuiltIn CullDistance
-                              Decorate 32(gl_PerVertex) Block
                               Decorate 34 XfbBuffer 0
                               Decorate 34 XfbStride 0
                               Decorate 38(gl_VertexID) BuiltIn VertexId
diff --git a/Test/baseResults/spv.xfbOverlapOffsetCheckWithBlockAndMember.vert.out b/Test/baseResults/spv.xfbOverlapOffsetCheckWithBlockAndMember.vert.out
index 633558d..b63226e 100644
--- a/Test/baseResults/spv.xfbOverlapOffsetCheckWithBlockAndMember.vert.out
+++ b/Test/baseResults/spv.xfbOverlapOffsetCheckWithBlockAndMember.vert.out
@@ -25,19 +25,19 @@
                               Name 33  ""
                               Name 37  "gl_VertexID"
                               Name 38  "gl_InstanceID"
+                              Decorate 8(block2) Block
                               MemberDecorate 8(block2) 0 Offset 12
                               MemberDecorate 8(block2) 1 Offset 28
                               MemberDecorate 8(block2) 2 Offset 40
                               MemberDecorate 8(block2) 3 Offset 56
-                              Decorate 8(block2) Block
                               Decorate 10 Location 5
                               Decorate 10 XfbBuffer 3
                               Decorate 10 XfbStride 72
+                              Decorate 31(gl_PerVertex) Block
                               MemberDecorate 31(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 31(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 31(gl_PerVertex) 2 BuiltIn ClipDistance
                               MemberDecorate 31(gl_PerVertex) 3 BuiltIn CullDistance
-                              Decorate 31(gl_PerVertex) Block
                               Decorate 33 XfbBuffer 0
                               Decorate 33 XfbStride 0
                               Decorate 37(gl_VertexID) BuiltIn VertexId
diff --git a/Test/baseResults/spv.xfbStrideJustOnce.vert.out b/Test/baseResults/spv.xfbStrideJustOnce.vert.out
index 8bf1f0d..0548aee 100644
--- a/Test/baseResults/spv.xfbStrideJustOnce.vert.out
+++ b/Test/baseResults/spv.xfbStrideJustOnce.vert.out
@@ -27,11 +27,11 @@
                               Decorate 10 Location 5
                               Decorate 10 XfbBuffer 2
                               Decorate 10 XfbStride 20
+                              Decorate 25(gl_PerVertex) Block
                               MemberDecorate 25(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 25(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 25(gl_PerVertex) 2 BuiltIn ClipDistance
                               MemberDecorate 25(gl_PerVertex) 3 BuiltIn CullDistance
-                              Decorate 25(gl_PerVertex) Block
                               Decorate 27 XfbBuffer 0
                               Decorate 27 XfbStride 0
                               Decorate 31(gl_VertexID) BuiltIn VertexId
diff --git a/Test/baseResults/terminate.frag.out b/Test/baseResults/terminate.frag.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/terminate.vert.out b/Test/baseResults/terminate.vert.out
old mode 100755
new mode 100644
diff --git a/Test/baseResults/tes_patch.tese.out b/Test/baseResults/tes_patch.tese.out
new file mode 100644
index 0000000..e53d339
--- /dev/null
+++ b/Test/baseResults/tes_patch.tese.out
@@ -0,0 +1,61 @@
+tes_patch.tese
+ERROR: 0:7: 'location' : the aliases sharing the location 1 must be the same basic type and interpolation qualification
+ERROR: 1 compilation errors.  No code generated.
+
+
+Shader version: 430
+Requested GL_ARB_enhanced_layouts
+input primitive = isolines
+vertex spacing = none
+triangle order = none
+using point mode
+ERROR: node is still EOpNull!
+0:12  Function Definition: main( ( global void)
+0:12    Function Parameters: 
+0:14    Sequence
+0:14      Sequence
+0:14        move second child to first child ( temp 4-component vector of float)
+0:14          'result' ( temp 4-component vector of float)
+0:14          direct index ( temp 4-component vector of float)
+0:14            'tcs_tes' ( in 32-element array of 4-component vector of float)
+0:14            Constant:
+0:14              0 (const int)
+0:18      add second child into first child ( temp 4-component vector of float)
+0:18        'tes_gs' ( out 4-component vector of float)
+0:18        'result' ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'gohan' (layout( location=1 component=0) in 32-element array of 2-component vector of float)
+0:?     'goten' (layout( location=1 component=2) patch in 2-component vector of float)
+0:?     'tcs_tes' ( in 32-element array of 4-component vector of float)
+0:?     'tes_gs' ( out 4-component vector of float)
+
+
+Linked tessellation evaluation stage:
+
+
+Shader version: 430
+Requested GL_ARB_enhanced_layouts
+input primitive = isolines
+vertex spacing = equal_spacing
+triangle order = ccw
+using point mode
+ERROR: node is still EOpNull!
+0:12  Function Definition: main( ( global void)
+0:12    Function Parameters: 
+0:14    Sequence
+0:14      Sequence
+0:14        move second child to first child ( temp 4-component vector of float)
+0:14          'result' ( temp 4-component vector of float)
+0:14          direct index ( temp 4-component vector of float)
+0:14            'tcs_tes' ( in 32-element array of 4-component vector of float)
+0:14            Constant:
+0:14              0 (const int)
+0:18      add second child into first child ( temp 4-component vector of float)
+0:18        'tes_gs' ( out 4-component vector of float)
+0:18        'result' ( temp 4-component vector of float)
+0:?   Linker Objects
+0:?     'gohan' (layout( location=1 component=0) in 32-element array of 2-component vector of float)
+0:?     'goten' (layout( location=1 component=2) patch in 2-component vector of float)
+0:?     'tcs_tes' ( in 32-element array of 4-component vector of float)
+0:?     'tes_gs' ( out 4-component vector of float)
+
diff --git a/Test/baseResults/tokenLength.vert.out b/Test/baseResults/tokenLength.vert.out
index 5f10830..43f3534 100644
--- a/Test/baseResults/tokenLength.vert.out
+++ b/Test/baseResults/tokenLength.vert.out
@@ -16,10 +16,10 @@
 WARNING: 0:40: '#extension' : extension not supported: a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhooooooooooooooooooooooooooooooohhhhhhhhhhhhhhhhh01234
 ERROR: 0:43: '' : name too long 
 ERROR: 0:44: '#extension' : ':' missing after extension name 
-ERROR: 0:47: '#error' : in long non - zero # if  
-ERROR: 0:50: '#error' : in long zero # if  
+ERROR: 0:47: '#error' : in long non - zero if  
+ERROR: 0:50: '#error' : in long zero if  
 ERROR: 0:52: '' : numeric literal too long 
-ERROR: 0:53: '#error' : in too long # if  
+ERROR: 0:53: '#error' : in too long if  
 ERROR: 0:56: 'preprocessor evaluation' : undefined macro in expression not allowed in es profile A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
 ERROR: 0:59: 'preprocessor evaluation' : undefined macro in expression not allowed in es profile A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
 ERROR: 0:62: '' : name too long 
diff --git a/Test/baseResults/validation_fails.txt b/Test/baseResults/validation_fails.txt
new file mode 100644
index 0000000..c8cc6ab
--- /dev/null
+++ b/Test/baseResults/validation_fails.txt
@@ -0,0 +1,72 @@
+Test/baseResults/hlsl.attributeC11.frag.out
+Test/baseResults/hlsl.buffer.frag.out
+Test/baseResults/hlsl.cbuffer-offsets.comp.out
+Test/baseResults/hlsl.constantbuffer.frag.out
+Test/baseResults/hlsl.constructimat.frag.out
+Test/baseResults/hlsl.coverage.frag.out
+Test/baseResults/hlsl.emptystructreturn.frag.out
+Test/baseResults/hlsl.emptystructreturn.tesc.out
+Test/baseResults/hlsl.emptystructreturn.vert.out
+Test/baseResults/hlsl.gatherRGBA.offsetarray.dx10.frag.out
+Test/baseResults/hlsl.gatherRGBA.offset.dx10.frag.out
+Test/baseResults/hlsl.intrinsics.comp.out
+Test/baseResults/hlsl.intrinsics.frag.out
+Test/baseResults/hlsl.intrinsics.vert.out
+Test/baseResults/hlsl.layout.frag.out
+Test/baseResults/hlsl.matNx1.frag.out
+Test/baseResults/hlsl.matrixSwizzle.vert.out
+Test/baseResults/hlsl.matType.bool.frag.out
+Test/baseResults/hlsl.matType.frag.out
+Test/baseResults/hlsl.matType.int.frag.out
+Test/baseResults/hlsl.partialInit.frag.out
+Test/baseResults/hlsl.PointSize.geom.out
+Test/baseResults/hlsl.samplecmp.array.dx10.frag.out
+Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out
+Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out
+Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out
+Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out
+Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out
+Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out
+Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out
+Test/baseResults/hlsl.semantic.geom.out
+Test/baseResults/hlsl.semantic.vert.out
+Test/baseResults/hlsl.structarray.flatten.frag.out
+Test/baseResults/hlsl.structbuffer.append.fn.frag.out
+Test/baseResults/hlsl.structbuffer.atomics.frag.out
+Test/baseResults/hlsl.structbuffer.fn.frag.out
+Test/baseResults/hlsl.struct.frag.out
+Test/baseResults/hlsl.struct.split.assign.frag.out
+Test/baseResults/hlsl.texture.struct.frag.out
+Test/baseResults/hlsl.tristream-append.geom.out
+Test/baseResults/iomap.crossStage.vk.2.vert.out
+Test/baseResults/iomap.mismatchedBufferTypes.vert.out
+Test/baseResults/link.vk.differentPC.0.0.frag.out
+Test/baseResults/link.vk.differentPC.1.0.frag.out
+Test/baseResults/link.vk.pcNamingInvalid.0.0.vert.out
+Test/baseResults/spv.130.frag.out
+Test/baseResults/spv.140.frag.out
+Test/baseResults/spv.1.4.load.bool.array.interface.block.frag.out
+Test/baseResults/spv.400.frag.out
+Test/baseResults/spv.430.vert.out
+Test/baseResults/spv.450.tesc.out
+Test/baseResults/spv.8bit-16bit-construction.frag.out
+Test/baseResults/spv.AofA.frag.out
+Test/baseResults/spv.controlFlowAttributes.frag.out
+Test/baseResults/spv.dataOut.frag.out
+Test/baseResults/spv.float16Fetch.frag.out
+Test/baseResults/spv.float16.frag.out
+Test/baseResults/spv.float64.frag.out
+Test/baseResults/spv.floatFetch.frag.out
+Test/baseResults/spv.functionNestedOpaque.vert.out
+Test/baseResults/spv.imageAtomic64.frag.out
+Test/baseResults/spv.image.frag.out
+Test/baseResults/spv.int64.frag.out
+Test/baseResults/spv.memoryQualifier.frag.out
+Test/baseResults/spv.newTexture.frag.out
+Test/baseResults/spv.paramMemory.420.frag.out
+Test/baseResults/spv.paramMemory.frag.out
+Test/baseResults/spv.queryL.frag.out
+Test/baseResults/spv.separate.frag.out
+Test/baseResults/spv.sparseTextureClamp.frag.out
+Test/baseResults/spv.sparseTexture.frag.out
+Test/baseResults/vk.relaxed.errorcheck.vert.out
diff --git a/Test/baseResults/vk.relaxed.changeSet.vert.out b/Test/baseResults/vk.relaxed.changeSet.vert.out
old mode 100755
new mode 100644
index d7502a3..339112d
--- a/Test/baseResults/vk.relaxed.changeSet.vert.out
+++ b/Test/baseResults/vk.relaxed.changeSet.vert.out
@@ -168,17 +168,17 @@
                               Decorate 11(aColor) Location 2
                               Decorate 15(UV) Location 1
                               Decorate 17(aUV) Location 1
+                              Decorate 22(gl_PerVertex) Block
                               MemberDecorate 22(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 22(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 22(gl_PerVertex) 2 BuiltIn ClipDistance
                               MemberDecorate 22(gl_PerVertex) 3 BuiltIn CullDistance
-                              Decorate 22(gl_PerVertex) Block
-                              MemberDecorate 28(gl_DefaultUniformBlock) 0 ColMajor
-                              MemberDecorate 28(gl_DefaultUniformBlock) 0 Offset 0
-                              MemberDecorate 28(gl_DefaultUniformBlock) 0 MatrixStride 16
                               Decorate 28(gl_DefaultUniformBlock) Block
-                              Decorate 30 DescriptorSet 0
+                              MemberDecorate 28(gl_DefaultUniformBlock) 0 ColMajor
+                              MemberDecorate 28(gl_DefaultUniformBlock) 0 MatrixStride 16
+                              MemberDecorate 28(gl_DefaultUniformBlock) 0 Offset 0
                               Decorate 30 Binding 0
+                              Decorate 30 DescriptorSet 0
                               Decorate 34(aPos) Location 0
                               Decorate 44(gl_VertexIndex) BuiltIn VertexIndex
                               Decorate 45(gl_InstanceIndex) BuiltIn InstanceIndex
@@ -248,8 +248,8 @@
                               Name 20  "UV"
                               Decorate 9(fragColor) Location 0
                               Decorate 11(Color) Location 0
-                              Decorate 16(sTexture) DescriptorSet 1
                               Decorate 16(sTexture) Binding 0
+                              Decorate 16(sTexture) DescriptorSet 1
                               Decorate 20(UV) Location 1
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/vk.relaxed.errorcheck.vert.out b/Test/baseResults/vk.relaxed.errorcheck.vert.out
index 5c6ecf9..81b43f7 100644
--- a/Test/baseResults/vk.relaxed.errorcheck.vert.out
+++ b/Test/baseResults/vk.relaxed.errorcheck.vert.out
@@ -32,29 +32,39 @@
 0:?     'gl_InstanceIndex' ( in int InstanceIndex)
 
 vk.relaxed.errorcheck.frag
+ERROR: 0:11: 'test' :  Redeclaration: already declared as " uniform highp float"
+ERROR: 1 compilation errors.  No code generated.
+
+
 Shader version: 460
 gl_FragCoord origin is upper left
-0:? Sequence
-0:10  Function Definition: foo( ( global highp 4-component vector of float)
-0:10    Function Parameters: 
-0:11    Sequence
-0:11      Branch: Return with expression
-0:11        a: direct index for structure ( uniform highp 4-component vector of float)
-0:11          'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a})
-0:11          Constant:
-0:11            0 (const uint)
-0:14  Function Definition: main( ( global void)
-0:14    Function Parameters: 
-0:15    Sequence
-0:15      move second child to first child ( temp highp 4-component vector of float)
-0:15        'o' ( out highp 4-component vector of float)
-0:15        add ( temp highp 4-component vector of float)
-0:15          'io' (layout( location=0) smooth in highp 4-component vector of float)
-0:15          Function Call: foo( ( global highp 4-component vector of float)
+ERROR: node is still EOpNull!
+0:13  Function Definition: foo( ( global highp 4-component vector of float)
+0:13    Function Parameters: 
+0:14    Sequence
+0:14      Branch: Return with expression
+0:14        add ( temp highp 4-component vector of float)
+0:14          a: direct index for structure ( uniform highp 4-component vector of float)
+0:14            'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp float test})
+0:14            Constant:
+0:14              0 (const uint)
+0:14          Construct vec4 ( temp highp 4-component vector of float)
+0:14            test: direct index for structure ( uniform highp float)
+0:14              'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp float test})
+0:14              Constant:
+0:14                1 (const uint)
+0:17  Function Definition: main( ( global void)
+0:17    Function Parameters: 
+0:18    Sequence
+0:18      move second child to first child ( temp highp 4-component vector of float)
+0:18        'o' ( out highp 4-component vector of float)
+0:18        add ( temp highp 4-component vector of float)
+0:18          'io' (layout( location=0) smooth in highp 4-component vector of float)
+0:18          Function Call: foo( ( global highp 4-component vector of float)
 0:?   Linker Objects
 0:?     'io' (layout( location=0) smooth in highp 4-component vector of float)
 0:?     'o' ( out highp 4-component vector of float)
-0:?     'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a})
+0:?     'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp float test})
 
 
 Linked vertex stage:
@@ -62,8 +72,8 @@
 
 Linked fragment stage:
 
-ERROR: Linking unknown stage stage: Types must match:
-    a: " uniform highp 2-component vector of float" versus " uniform highp 4-component vector of float"
+ERROR: Linking fragment stage: Types must match:
+    a: " uniform highp 2-component vector of float" in stage vertex versus " uniform highp 4-component vector of float" in stage fragment
 
 Shader version: 460
 0:? Sequence
@@ -98,27 +108,33 @@
 0:?     'gl_InstanceIndex' ( in int InstanceIndex)
 Shader version: 460
 gl_FragCoord origin is upper left
-0:? Sequence
-0:10  Function Definition: foo( ( global highp 4-component vector of float)
-0:10    Function Parameters: 
-0:11    Sequence
-0:11      Branch: Return with expression
-0:11        a: direct index for structure ( uniform highp 4-component vector of float)
-0:11          'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a})
-0:11          Constant:
-0:11            0 (const uint)
-0:14  Function Definition: main( ( global void)
-0:14    Function Parameters: 
-0:15    Sequence
-0:15      move second child to first child ( temp highp 4-component vector of float)
-0:15        'o' ( out highp 4-component vector of float)
-0:15        add ( temp highp 4-component vector of float)
-0:15          'io' (layout( location=0) smooth in highp 4-component vector of float)
-0:15          Function Call: foo( ( global highp 4-component vector of float)
+ERROR: node is still EOpNull!
+0:13  Function Definition: foo( ( global highp 4-component vector of float)
+0:13    Function Parameters: 
+0:14    Sequence
+0:14      Branch: Return with expression
+0:14        add ( temp highp 4-component vector of float)
+0:14          a: direct index for structure ( uniform highp 4-component vector of float)
+0:14            'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp float test})
+0:14            Constant:
+0:14              0 (const uint)
+0:14          Construct vec4 ( temp highp 4-component vector of float)
+0:14            test: direct index for structure ( uniform highp float)
+0:14              'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp float test})
+0:14              Constant:
+0:14                1 (const uint)
+0:17  Function Definition: main( ( global void)
+0:17    Function Parameters: 
+0:18    Sequence
+0:18      move second child to first child ( temp highp 4-component vector of float)
+0:18        'o' ( out highp 4-component vector of float)
+0:18        add ( temp highp 4-component vector of float)
+0:18          'io' (layout( location=0) smooth in highp 4-component vector of float)
+0:18          Function Call: foo( ( global highp 4-component vector of float)
 0:?   Linker Objects
 0:?     'io' (layout( location=0) smooth in highp 4-component vector of float)
 0:?     'o' ( out highp 4-component vector of float)
-0:?     'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a})
+0:?     'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp float test})
 
 Validation failed
 SPIR-V is not generated for failed compile or link
diff --git a/Test/baseResults/vk.relaxed.frag.out b/Test/baseResults/vk.relaxed.frag.out
index c88782f..105eced 100644
--- a/Test/baseResults/vk.relaxed.frag.out
+++ b/Test/baseResults/vk.relaxed.frag.out
@@ -5,111 +5,71 @@
 Shader version: 460
 gl_FragCoord origin is upper left
 0:? Sequence
-0:36  Function Definition: bar( ( global highp uint)
-0:36    Function Parameters: 
-0:37    Sequence
-0:37      Sequence
-0:37        move second child to first child ( temp highp uint)
-0:37          'j' ( temp highp uint)
-0:37          Constant:
-0:37            0 (const uint)
-0:38      move second child to first child ( temp highp uint)
-0:38        'j' ( temp highp uint)
-0:38        AtomicAdd ( global highp uint)
-0:38          counter1: direct index for structure ( coherent volatile buffer highp uint)
-0:38            'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
-0:38            Constant:
-0:38              0 (const uint)
-0:38          Constant:
-0:38            1 (const uint)
-0:39      move second child to first child ( temp highp uint)
-0:39        'j' ( temp highp uint)
-0:39        subtract ( temp highp uint)
-0:39          AtomicAdd ( global highp uint)
-0:39            counter1: direct index for structure ( coherent volatile buffer highp uint)
-0:39              'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
-0:39              Constant:
-0:39                0 (const uint)
-0:39            Constant:
-0:39              4294967295 (const uint)
-0:39          Constant:
-0:39            1 (const uint)
-0:40      move second child to first child ( temp highp uint)
-0:40        'j' ( temp highp uint)
-0:40        counter1: direct index for structure ( coherent volatile buffer highp uint)
-0:40          'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
-0:40          Constant:
-0:40            0 (const uint)
-0:42      move second child to first child ( temp highp uint)
-0:42        'j' ( temp highp uint)
-0:42        AtomicAdd ( global highp uint)
-0:42          counter1: direct index for structure ( coherent volatile buffer highp uint)
-0:42            'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
-0:42            Constant:
-0:42              0 (const uint)
-0:42          Constant:
-0:42            1 (const uint)
-0:43      move second child to first child ( temp highp uint)
-0:43        'j' ( temp highp uint)
-0:43        AtomicAdd ( global highp uint)
-0:43          counter1: direct index for structure ( coherent volatile buffer highp uint)
-0:43            'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
-0:43            Constant:
-0:43              0 (const uint)
-0:43          Constant:
-0:43            4294967295 (const uint)
-0:44      move second child to first child ( temp highp uint)
-0:44        'j' ( temp highp uint)
-0:44        AtomicSubtract ( global highp uint)
-0:44          counter1: direct index for structure ( coherent volatile buffer highp uint)
-0:44            'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
-0:44            Constant:
-0:44              0 (const uint)
+0:43  Function Definition: bar( ( global highp uint)
+0:43    Function Parameters: 
+0:44    Sequence
+0:44      Sequence
+0:44        move second child to first child ( temp highp uint)
+0:44          'j' ( temp highp uint)
 0:44          Constant:
-0:44            1 (const uint)
+0:44            0 (const uint)
+0:45      move second child to first child ( temp highp uint)
+0:45        'j' ( temp highp uint)
+0:45        AtomicAdd ( global highp uint)
+0:45          counter1: direct index for structure ( coherent volatile buffer highp uint)
+0:45            'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
+0:45            Constant:
+0:45              0 (const uint)
+0:45          Constant:
+0:45            1 (const uint)
 0:46      move second child to first child ( temp highp uint)
 0:46        'j' ( temp highp uint)
-0:46        AtomicMin ( global highp uint)
-0:46          counter1: direct index for structure ( coherent volatile buffer highp uint)
-0:46            'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
+0:46        subtract ( temp highp uint)
+0:46          AtomicAdd ( global highp uint)
+0:46            counter1: direct index for structure ( coherent volatile buffer highp uint)
+0:46              'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
+0:46              Constant:
+0:46                0 (const uint)
 0:46            Constant:
-0:46              0 (const uint)
-0:46          'j' ( temp highp uint)
+0:46              4294967295 (const uint)
+0:46          Constant:
+0:46            1 (const uint)
 0:47      move second child to first child ( temp highp uint)
 0:47        'j' ( temp highp uint)
-0:47        AtomicMax ( global highp uint)
-0:47          counter1: direct index for structure ( coherent volatile buffer highp uint)
-0:47            'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
-0:47            Constant:
-0:47              0 (const uint)
-0:47          'j' ( temp highp uint)
-0:48      move second child to first child ( temp highp uint)
-0:48        'j' ( temp highp uint)
-0:48        AtomicAnd ( global highp uint)
-0:48          counter1: direct index for structure ( coherent volatile buffer highp uint)
-0:48            'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
-0:48            Constant:
-0:48              0 (const uint)
-0:48          'j' ( temp highp uint)
+0:47        counter1: direct index for structure ( coherent volatile buffer highp uint)
+0:47          'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
+0:47          Constant:
+0:47            0 (const uint)
+0:49      move second child to first child ( temp highp uint)
+0:49        'j' ( temp highp uint)
+0:49        AtomicAdd ( global highp uint)
+0:49          counter1: direct index for structure ( coherent volatile buffer highp uint)
+0:49            'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
+0:49            Constant:
+0:49              0 (const uint)
+0:49          Constant:
+0:49            1 (const uint)
 0:50      move second child to first child ( temp highp uint)
 0:50        'j' ( temp highp uint)
-0:50        AtomicOr ( global highp uint)
+0:50        AtomicAdd ( global highp uint)
 0:50          counter1: direct index for structure ( coherent volatile buffer highp uint)
 0:50            'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
 0:50            Constant:
 0:50              0 (const uint)
-0:50          'j' ( temp highp uint)
+0:50          Constant:
+0:50            4294967295 (const uint)
 0:51      move second child to first child ( temp highp uint)
 0:51        'j' ( temp highp uint)
-0:51        AtomicXor ( global highp uint)
+0:51        AtomicSubtract ( global highp uint)
 0:51          counter1: direct index for structure ( coherent volatile buffer highp uint)
 0:51            'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
 0:51            Constant:
 0:51              0 (const uint)
-0:51          'j' ( temp highp uint)
+0:51          Constant:
+0:51            1 (const uint)
 0:53      move second child to first child ( temp highp uint)
 0:53        'j' ( temp highp uint)
-0:53        AtomicExchange ( global highp uint)
+0:53        AtomicMin ( global highp uint)
 0:53          counter1: direct index for structure ( coherent volatile buffer highp uint)
 0:53            'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
 0:53            Constant:
@@ -117,158 +77,254 @@
 0:53          'j' ( temp highp uint)
 0:54      move second child to first child ( temp highp uint)
 0:54        'j' ( temp highp uint)
-0:54        AtomicCompSwap ( global highp uint)
+0:54        AtomicMax ( global highp uint)
 0:54          counter1: direct index for structure ( coherent volatile buffer highp uint)
 0:54            'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
 0:54            Constant:
 0:54              0 (const uint)
-0:54          Constant:
-0:54            0 (const uint)
 0:54          'j' ( temp highp uint)
-0:56      AtomicAdd ( global highp uint)
-0:56        counter2: direct index for structure ( coherent volatile buffer highp uint)
-0:56          'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
-0:56          Constant:
-0:56            1 (const uint)
-0:56        Constant:
-0:56          1 (const uint)
-0:57      AtomicAdd ( global highp uint)
-0:57        counter3: direct index for structure ( coherent volatile buffer highp uint)
-0:57          'anon@3' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3})
-0:57          Constant:
-0:57            0 (const uint)
-0:57        Constant:
-0:57          1 (const uint)
-0:59      MemoryBarrierBuffer ( global void)
-0:61      Branch: Return with expression
+0:55      move second child to first child ( temp highp uint)
+0:55        'j' ( temp highp uint)
+0:55        AtomicAnd ( global highp uint)
+0:55          counter1: direct index for structure ( coherent volatile buffer highp uint)
+0:55            'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
+0:55            Constant:
+0:55              0 (const uint)
+0:55          'j' ( temp highp uint)
+0:57      move second child to first child ( temp highp uint)
+0:57        'j' ( temp highp uint)
+0:57        AtomicOr ( global highp uint)
+0:57          counter1: direct index for structure ( coherent volatile buffer highp uint)
+0:57            'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
+0:57            Constant:
+0:57              0 (const uint)
+0:57          'j' ( temp highp uint)
+0:58      move second child to first child ( temp highp uint)
+0:58        'j' ( temp highp uint)
+0:58        AtomicXor ( global highp uint)
+0:58          counter1: direct index for structure ( coherent volatile buffer highp uint)
+0:58            'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
+0:58            Constant:
+0:58              0 (const uint)
+0:58          'j' ( temp highp uint)
+0:60      move second child to first child ( temp highp uint)
+0:60        'j' ( temp highp uint)
+0:60        AtomicExchange ( global highp uint)
+0:60          counter1: direct index for structure ( coherent volatile buffer highp uint)
+0:60            'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
+0:60            Constant:
+0:60              0 (const uint)
+0:60          'j' ( temp highp uint)
+0:61      move second child to first child ( temp highp uint)
 0:61        'j' ( temp highp uint)
-0:64  Function Definition: foo( ( global highp 4-component vector of float)
-0:64    Function Parameters: 
-0:65    Sequence
-0:65      Sequence
-0:65        move second child to first child ( temp highp float)
-0:65          'f' ( temp highp float)
-0:65          add ( temp highp float)
-0:65            add ( temp highp float)
-0:65              add ( temp highp float)
-0:65                j: direct index for structure (layout( column_major std140) uniform highp float)
-0:65                  'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp float j, layout( column_major std140) uniform highp 4-component vector of float k})
-0:65                  Constant:
-0:65                    0 (const uint)
-0:65                j: direct index for structure (layout( column_major std430) buffer highp float)
-0:65                  'bufferInstance' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float j, layout( column_major std430) buffer highp 4-component vector of float k})
-0:65                  Constant:
-0:65                    0 (const int)
-0:65              y: direct index for structure ( global highp float)
-0:65                structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z})
-0:65                  'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp 2-component vector of float b,  uniform highp 2-component vector of float c,  uniform 10-element array of highp 4-component vector of float d,  uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z} structUniform})
-0:65                  Constant:
-0:65                    4 (const uint)
-0:65                Constant:
-0:65                  1 (const int)
-0:65            Convert uint to float ( temp highp float)
-0:65              z: direct index for structure ( global highp uint)
-0:65                structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z})
-0:65                  'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp 2-component vector of float b,  uniform highp 2-component vector of float c,  uniform 10-element array of highp 4-component vector of float d,  uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z} structUniform})
-0:65                  Constant:
-0:65                    4 (const uint)
-0:65                Constant:
-0:65                  2 (const int)
-0:66      Sequence
-0:66        move second child to first child ( temp highp 2-component vector of float)
-0:66          'v2' ( temp highp 2-component vector of float)
-0:66          add ( temp highp 2-component vector of float)
-0:66            add ( temp highp 2-component vector of float)
-0:66              b: direct index for structure ( uniform highp 2-component vector of float)
-0:66                'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp 2-component vector of float b,  uniform highp 2-component vector of float c,  uniform 10-element array of highp 4-component vector of float d,  uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z} structUniform})
-0:66                Constant:
-0:66                  1 (const uint)
-0:66              c: direct index for structure ( uniform highp 2-component vector of float)
-0:66                'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp 2-component vector of float b,  uniform highp 2-component vector of float c,  uniform 10-element array of highp 4-component vector of float d,  uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z} structUniform})
-0:66                Constant:
-0:66                  2 (const uint)
-0:66            x: direct index for structure ( global highp 2-component vector of float)
-0:66              structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z})
-0:66                'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp 2-component vector of float b,  uniform highp 2-component vector of float c,  uniform 10-element array of highp 4-component vector of float d,  uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z} structUniform})
-0:66                Constant:
-0:66                  4 (const uint)
-0:66              Constant:
-0:66                0 (const int)
-0:67      Sequence
-0:67        move second child to first child ( temp highp 4-component vector of float)
-0:67          'v4' ( temp highp 4-component vector of float)
-0:67          add ( temp highp 4-component vector of float)
-0:67            add ( temp highp 4-component vector of float)
-0:67              add ( temp highp 4-component vector of float)
-0:67                add ( temp highp 4-component vector of float)
-0:67                  add ( temp highp 4-component vector of float)
-0:67                    add ( temp highp 4-component vector of float)
-0:67                      a: direct index for structure ( uniform highp 4-component vector of float)
-0:67                        'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp 2-component vector of float b,  uniform highp 2-component vector of float c,  uniform 10-element array of highp 4-component vector of float d,  uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z} structUniform})
-0:67                        Constant:
-0:67                          0 (const uint)
-0:67                      direct index ( temp highp 4-component vector of float)
-0:67                        d: direct index for structure ( uniform 10-element array of highp 4-component vector of float)
-0:67                          'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp 2-component vector of float b,  uniform highp 2-component vector of float c,  uniform 10-element array of highp 4-component vector of float d,  uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z} structUniform})
-0:67                          Constant:
-0:67                            3 (const uint)
-0:67                        Constant:
-0:67                          0 (const int)
-0:67                    direct index ( temp highp 4-component vector of float)
-0:67                      d: direct index for structure ( uniform 10-element array of highp 4-component vector of float)
-0:67                        'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp 2-component vector of float b,  uniform highp 2-component vector of float c,  uniform 10-element array of highp 4-component vector of float d,  uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z} structUniform})
-0:67                        Constant:
-0:67                          3 (const uint)
-0:67                      Constant:
-0:67                        1 (const int)
-0:67                  direct index ( temp highp 4-component vector of float)
-0:67                    d: direct index for structure ( uniform 10-element array of highp 4-component vector of float)
-0:67                      'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp 2-component vector of float b,  uniform highp 2-component vector of float c,  uniform 10-element array of highp 4-component vector of float d,  uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z} structUniform})
-0:67                      Constant:
-0:67                        3 (const uint)
-0:67                    Constant:
-0:67                      2 (const int)
-0:67                k: direct index for structure (layout( column_major std140) uniform highp 4-component vector of float)
-0:67                  'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp float j, layout( column_major std140) uniform highp 4-component vector of float k})
-0:67                  Constant:
-0:67                    1 (const uint)
-0:67              k: direct index for structure (layout( column_major std430) buffer highp 4-component vector of float)
-0:67                'bufferInstance' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float j, layout( column_major std430) buffer highp 4-component vector of float k})
-0:67                Constant:
-0:67                  1 (const int)
-0:67            texture ( global highp 4-component vector of float)
-0:67              't1' ( uniform highp sampler2D)
-0:67              Constant:
-0:67                0.000000
-0:67                0.000000
+0:61        AtomicCompSwap ( global highp uint)
+0:61          counter1: direct index for structure ( coherent volatile buffer highp uint)
+0:61            'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
+0:61            Constant:
+0:61              0 (const uint)
+0:61          Constant:
+0:61            0 (const uint)
+0:61          'j' ( temp highp uint)
+0:63      AtomicAdd ( global highp uint)
+0:63        counter2: direct index for structure ( coherent volatile buffer highp uint)
+0:63          'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
+0:63          Constant:
+0:63            1 (const uint)
+0:63        Constant:
+0:63          1 (const uint)
+0:64      AtomicAdd ( global highp uint)
+0:64        counter3: direct index for structure ( coherent volatile buffer highp uint)
+0:64          'anon@3' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3})
+0:64          Constant:
+0:64            0 (const uint)
+0:64        Constant:
+0:64          1 (const uint)
+0:66      MemoryBarrierBuffer ( global void)
 0:68      Branch: Return with expression
-0:68        component-wise multiply ( temp highp 4-component vector of float)
-0:68          component-wise multiply ( temp highp 4-component vector of float)
-0:68            Construct vec4 ( temp highp 4-component vector of float)
-0:68              'f' ( temp highp float)
-0:68            Construct vec4 ( temp highp 4-component vector of float)
-0:68              'v2' ( temp highp 2-component vector of float)
-0:68              Constant:
-0:68                1.000000
-0:68              Constant:
-0:68                1.000000
-0:68          'v4' ( temp highp 4-component vector of float)
-0:71  Function Definition: main( ( global void)
+0:68        'j' ( temp highp uint)
+0:71  Function Definition: foo( ( global highp 4-component vector of float)
 0:71    Function Parameters: 
 0:72    Sequence
 0:72      Sequence
 0:72        move second child to first child ( temp highp float)
-0:72          'j' ( temp highp float)
-0:72          Convert uint to float ( temp highp float)
-0:72            Function Call: bar( ( global highp uint)
-0:73      move second child to first child ( temp highp 4-component vector of float)
-0:73        'o' ( out highp 4-component vector of float)
-0:73        vector-scale ( temp highp 4-component vector of float)
-0:73          'j' ( temp highp float)
-0:73          Function Call: foo( ( global highp 4-component vector of float)
+0:72          'f' ( temp highp float)
+0:72          add ( temp highp float)
+0:72            add ( temp highp float)
+0:72              add ( temp highp float)
+0:72                j: direct index for structure (layout( column_major std140) uniform highp float)
+0:72                  'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp float j, layout( column_major std140) uniform highp 4-component vector of float k})
+0:72                  Constant:
+0:72                    0 (const uint)
+0:72                j: direct index for structure (layout( column_major std430) buffer highp float)
+0:72                  'bufferInstance' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float j, layout( column_major std430) buffer highp 4-component vector of float k})
+0:72                  Constant:
+0:72                    0 (const int)
+0:72              y: direct index for structure ( global highp float)
+0:72                structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z,  global highp int /*t0*/,  global structure{ global 4-element array of highp int /*tn*/} samplers})
+0:72                  'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp 2-component vector of float b,  uniform highp 2-component vector of float c,  uniform 10-element array of highp 4-component vector of float d,  uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z,  global highp int /*t0*/,  global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform})
+0:72                  Constant:
+0:72                    4 (const uint)
+0:72                Constant:
+0:72                  1 (const int)
+0:72            Convert uint to float ( temp highp float)
+0:72              z: direct index for structure ( global highp uint)
+0:72                structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z,  global highp int /*t0*/,  global structure{ global 4-element array of highp int /*tn*/} samplers})
+0:72                  'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp 2-component vector of float b,  uniform highp 2-component vector of float c,  uniform 10-element array of highp 4-component vector of float d,  uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z,  global highp int /*t0*/,  global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform})
+0:72                  Constant:
+0:72                    4 (const uint)
+0:72                Constant:
+0:72                  2 (const int)
+0:73      Sequence
+0:73        move second child to first child ( temp highp 2-component vector of float)
+0:73          'v2' ( temp highp 2-component vector of float)
+0:73          add ( temp highp 2-component vector of float)
+0:73            add ( temp highp 2-component vector of float)
+0:73              b: direct index for structure ( uniform highp 2-component vector of float)
+0:73                'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp 2-component vector of float b,  uniform highp 2-component vector of float c,  uniform 10-element array of highp 4-component vector of float d,  uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z,  global highp int /*t0*/,  global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform})
+0:73                Constant:
+0:73                  1 (const uint)
+0:73              c: direct index for structure ( uniform highp 2-component vector of float)
+0:73                'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp 2-component vector of float b,  uniform highp 2-component vector of float c,  uniform 10-element array of highp 4-component vector of float d,  uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z,  global highp int /*t0*/,  global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform})
+0:73                Constant:
+0:73                  2 (const uint)
+0:73            x: direct index for structure ( global highp 2-component vector of float)
+0:73              structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z,  global highp int /*t0*/,  global structure{ global 4-element array of highp int /*tn*/} samplers})
+0:73                'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp 2-component vector of float b,  uniform highp 2-component vector of float c,  uniform 10-element array of highp 4-component vector of float d,  uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z,  global highp int /*t0*/,  global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform})
+0:73                Constant:
+0:73                  4 (const uint)
+0:73              Constant:
+0:73                0 (const int)
+0:74      Sequence
+0:74        move second child to first child ( temp highp 4-component vector of float)
+0:74          'v4' ( temp highp 4-component vector of float)
+0:74          add ( temp highp 4-component vector of float)
+0:74            add ( temp highp 4-component vector of float)
+0:74              add ( temp highp 4-component vector of float)
+0:74                add ( temp highp 4-component vector of float)
+0:74                  add ( temp highp 4-component vector of float)
+0:74                    add ( temp highp 4-component vector of float)
+0:74                      add ( temp highp 4-component vector of float)
+0:74                        a: direct index for structure ( uniform highp 4-component vector of float)
+0:74                          'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp 2-component vector of float b,  uniform highp 2-component vector of float c,  uniform 10-element array of highp 4-component vector of float d,  uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z,  global highp int /*t0*/,  global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform})
+0:74                          Constant:
+0:74                            0 (const uint)
+0:74                        direct index ( temp highp 4-component vector of float)
+0:74                          d: direct index for structure ( uniform 10-element array of highp 4-component vector of float)
+0:74                            'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp 2-component vector of float b,  uniform highp 2-component vector of float c,  uniform 10-element array of highp 4-component vector of float d,  uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z,  global highp int /*t0*/,  global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform})
+0:74                            Constant:
+0:74                              3 (const uint)
+0:74                          Constant:
+0:74                            0 (const int)
+0:74                      direct index ( temp highp 4-component vector of float)
+0:74                        d: direct index for structure ( uniform 10-element array of highp 4-component vector of float)
+0:74                          'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp 2-component vector of float b,  uniform highp 2-component vector of float c,  uniform 10-element array of highp 4-component vector of float d,  uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z,  global highp int /*t0*/,  global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform})
+0:74                          Constant:
+0:74                            3 (const uint)
+0:74                        Constant:
+0:74                          1 (const int)
+0:74                    direct index ( temp highp 4-component vector of float)
+0:74                      d: direct index for structure ( uniform 10-element array of highp 4-component vector of float)
+0:74                        'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp 2-component vector of float b,  uniform highp 2-component vector of float c,  uniform 10-element array of highp 4-component vector of float d,  uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z,  global highp int /*t0*/,  global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform})
+0:74                        Constant:
+0:74                          3 (const uint)
+0:74                      Constant:
+0:74                        2 (const int)
+0:74                  k: direct index for structure (layout( column_major std140) uniform highp 4-component vector of float)
+0:74                    'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp float j, layout( column_major std140) uniform highp 4-component vector of float k})
+0:74                    Constant:
+0:74                      1 (const uint)
+0:74                k: direct index for structure (layout( column_major std430) buffer highp 4-component vector of float)
+0:74                  'bufferInstance' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float j, layout( column_major std430) buffer highp 4-component vector of float k})
+0:74                  Constant:
+0:74                    1 (const int)
+0:74              texture ( global highp 4-component vector of float)
+0:74                't1' ( uniform highp sampler2D)
+0:74                Constant:
+0:74                  0.000000
+0:74                  0.000000
+0:74            texture ( global highp 4-component vector of float)
+0:?               'structUniform.t0' ( uniform highp sampler2D)
+0:74              Constant:
+0:74                0.000000
+0:74                0.000000
+0:75      Branch: Return with expression
+0:75        component-wise multiply ( temp highp 4-component vector of float)
+0:75          component-wise multiply ( temp highp 4-component vector of float)
+0:75            Construct vec4 ( temp highp 4-component vector of float)
+0:75              'f' ( temp highp float)
+0:75            Construct vec4 ( temp highp 4-component vector of float)
+0:75              'v2' ( temp highp 2-component vector of float)
+0:75              Constant:
+0:75                1.000000
+0:75              Constant:
+0:75                1.000000
+0:75          'v4' ( temp highp 4-component vector of float)
+0:78  Function Definition: baz(struct-SamplerArray-s21[4]1;s21;s21;s21;s21; ( global highp 4-component vector of float)
+0:78    Function Parameters: 
+0:78      'samplers' ( in structure{ global 4-element array of highp int /*tn*/})
+0:78      'samplers.tn[0]' ( in highp sampler2D)
+0:78      'samplers.tn[1]' ( in highp sampler2D)
+0:78      'samplers.tn[2]' ( in highp sampler2D)
+0:78      'samplers.tn[3]' ( in highp sampler2D)
+0:79    Sequence
+0:79      Branch: Return with expression
+0:79        add ( temp highp 4-component vector of float)
+0:79          add ( temp highp 4-component vector of float)
+0:79            add ( temp highp 4-component vector of float)
+0:79              texture ( global highp 4-component vector of float)
+0:79                'samplers.tn[0]' ( in highp sampler2D)
+0:79                Constant:
+0:79                  0.000000
+0:79                  0.000000
+0:79              texture ( global highp 4-component vector of float)
+0:79                'samplers.tn[1]' ( in highp sampler2D)
+0:79                Constant:
+0:79                  0.000000
+0:79                  0.000000
+0:79            texture ( global highp 4-component vector of float)
+0:79              'samplers.tn[2]' ( in highp sampler2D)
+0:79              Constant:
+0:79                0.000000
+0:79                0.000000
+0:79          texture ( global highp 4-component vector of float)
+0:79            'samplers.tn[3]' ( in highp sampler2D)
+0:79            Constant:
+0:79              0.000000
+0:79              0.000000
+0:82  Function Definition: main( ( global void)
+0:82    Function Parameters: 
+0:83    Sequence
+0:83      Sequence
+0:83        move second child to first child ( temp highp float)
+0:83          'j' ( temp highp float)
+0:83          Convert uint to float ( temp highp float)
+0:83            Function Call: bar( ( global highp uint)
+0:84      move second child to first child ( temp highp 4-component vector of float)
+0:84        'o' ( out highp 4-component vector of float)
+0:84        add ( temp highp 4-component vector of float)
+0:84          vector-scale ( temp highp 4-component vector of float)
+0:84            'j' ( temp highp float)
+0:84            Function Call: foo( ( global highp 4-component vector of float)
+0:84          Function Call: baz(struct-SamplerArray-s21[4]1;s21;s21;s21;s21; ( global highp 4-component vector of float)
+0:84            samplers: direct index for structure ( global structure{ global 4-element array of highp int /*tn*/})
+0:84              structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z,  global highp int /*t0*/,  global structure{ global 4-element array of highp int /*tn*/} samplers})
+0:84                'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp 2-component vector of float b,  uniform highp 2-component vector of float c,  uniform 10-element array of highp 4-component vector of float d,  uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z,  global highp int /*t0*/,  global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform})
+0:84                Constant:
+0:84                  4 (const uint)
+0:84              Constant:
+0:84                4 (const int)
+0:84            'structUniform.samplers.tn[0]' ( uniform highp sampler2D)
+0:84            'structUniform.samplers.tn[1]' ( uniform highp sampler2D)
+0:84            'structUniform.samplers.tn[2]' ( uniform highp sampler2D)
+0:84            'structUniform.samplers.tn[3]' ( uniform highp sampler2D)
 0:?   Linker Objects
 0:?     'o' ( out highp 4-component vector of float)
-0:?     'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp 2-component vector of float b,  uniform highp 2-component vector of float c,  uniform 10-element array of highp 4-component vector of float d,  uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z} structUniform})
+0:?     'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp 2-component vector of float b,  uniform highp 2-component vector of float c,  uniform 10-element array of highp 4-component vector of float d,  uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z,  global highp int /*t0*/,  global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform})
+0:?     'structUniform.t0' ( uniform highp sampler2D)
+0:?     'structUniform.samplers.tn[0]' ( uniform highp sampler2D)
+0:?     'structUniform.samplers.tn[1]' ( uniform highp sampler2D)
+0:?     'structUniform.samplers.tn[2]' ( uniform highp sampler2D)
+0:?     'structUniform.samplers.tn[3]' ( uniform highp sampler2D)
 0:?     't1' ( uniform highp sampler2D)
 0:?     'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp float j, layout( column_major std140) uniform highp 4-component vector of float k})
 0:?     'bufferInstance' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float j, layout( column_major std430) buffer highp 4-component vector of float k})
@@ -282,111 +338,71 @@
 Shader version: 460
 gl_FragCoord origin is upper left
 0:? Sequence
-0:36  Function Definition: bar( ( global highp uint)
-0:36    Function Parameters: 
-0:37    Sequence
-0:37      Sequence
-0:37        move second child to first child ( temp highp uint)
-0:37          'j' ( temp highp uint)
-0:37          Constant:
-0:37            0 (const uint)
-0:38      move second child to first child ( temp highp uint)
-0:38        'j' ( temp highp uint)
-0:38        AtomicAdd ( global highp uint)
-0:38          counter1: direct index for structure ( coherent volatile buffer highp uint)
-0:38            'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
-0:38            Constant:
-0:38              0 (const uint)
-0:38          Constant:
-0:38            1 (const uint)
-0:39      move second child to first child ( temp highp uint)
-0:39        'j' ( temp highp uint)
-0:39        subtract ( temp highp uint)
-0:39          AtomicAdd ( global highp uint)
-0:39            counter1: direct index for structure ( coherent volatile buffer highp uint)
-0:39              'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
-0:39              Constant:
-0:39                0 (const uint)
-0:39            Constant:
-0:39              4294967295 (const uint)
-0:39          Constant:
-0:39            1 (const uint)
-0:40      move second child to first child ( temp highp uint)
-0:40        'j' ( temp highp uint)
-0:40        counter1: direct index for structure ( coherent volatile buffer highp uint)
-0:40          'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
-0:40          Constant:
-0:40            0 (const uint)
-0:42      move second child to first child ( temp highp uint)
-0:42        'j' ( temp highp uint)
-0:42        AtomicAdd ( global highp uint)
-0:42          counter1: direct index for structure ( coherent volatile buffer highp uint)
-0:42            'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
-0:42            Constant:
-0:42              0 (const uint)
-0:42          Constant:
-0:42            1 (const uint)
-0:43      move second child to first child ( temp highp uint)
-0:43        'j' ( temp highp uint)
-0:43        AtomicAdd ( global highp uint)
-0:43          counter1: direct index for structure ( coherent volatile buffer highp uint)
-0:43            'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
-0:43            Constant:
-0:43              0 (const uint)
-0:43          Constant:
-0:43            4294967295 (const uint)
-0:44      move second child to first child ( temp highp uint)
-0:44        'j' ( temp highp uint)
-0:44        AtomicSubtract ( global highp uint)
-0:44          counter1: direct index for structure ( coherent volatile buffer highp uint)
-0:44            'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
-0:44            Constant:
-0:44              0 (const uint)
+0:43  Function Definition: bar( ( global highp uint)
+0:43    Function Parameters: 
+0:44    Sequence
+0:44      Sequence
+0:44        move second child to first child ( temp highp uint)
+0:44          'j' ( temp highp uint)
 0:44          Constant:
-0:44            1 (const uint)
+0:44            0 (const uint)
+0:45      move second child to first child ( temp highp uint)
+0:45        'j' ( temp highp uint)
+0:45        AtomicAdd ( global highp uint)
+0:45          counter1: direct index for structure ( coherent volatile buffer highp uint)
+0:45            'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
+0:45            Constant:
+0:45              0 (const uint)
+0:45          Constant:
+0:45            1 (const uint)
 0:46      move second child to first child ( temp highp uint)
 0:46        'j' ( temp highp uint)
-0:46        AtomicMin ( global highp uint)
-0:46          counter1: direct index for structure ( coherent volatile buffer highp uint)
-0:46            'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
+0:46        subtract ( temp highp uint)
+0:46          AtomicAdd ( global highp uint)
+0:46            counter1: direct index for structure ( coherent volatile buffer highp uint)
+0:46              'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
+0:46              Constant:
+0:46                0 (const uint)
 0:46            Constant:
-0:46              0 (const uint)
-0:46          'j' ( temp highp uint)
+0:46              4294967295 (const uint)
+0:46          Constant:
+0:46            1 (const uint)
 0:47      move second child to first child ( temp highp uint)
 0:47        'j' ( temp highp uint)
-0:47        AtomicMax ( global highp uint)
-0:47          counter1: direct index for structure ( coherent volatile buffer highp uint)
-0:47            'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
-0:47            Constant:
-0:47              0 (const uint)
-0:47          'j' ( temp highp uint)
-0:48      move second child to first child ( temp highp uint)
-0:48        'j' ( temp highp uint)
-0:48        AtomicAnd ( global highp uint)
-0:48          counter1: direct index for structure ( coherent volatile buffer highp uint)
-0:48            'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
-0:48            Constant:
-0:48              0 (const uint)
-0:48          'j' ( temp highp uint)
+0:47        counter1: direct index for structure ( coherent volatile buffer highp uint)
+0:47          'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
+0:47          Constant:
+0:47            0 (const uint)
+0:49      move second child to first child ( temp highp uint)
+0:49        'j' ( temp highp uint)
+0:49        AtomicAdd ( global highp uint)
+0:49          counter1: direct index for structure ( coherent volatile buffer highp uint)
+0:49            'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
+0:49            Constant:
+0:49              0 (const uint)
+0:49          Constant:
+0:49            1 (const uint)
 0:50      move second child to first child ( temp highp uint)
 0:50        'j' ( temp highp uint)
-0:50        AtomicOr ( global highp uint)
+0:50        AtomicAdd ( global highp uint)
 0:50          counter1: direct index for structure ( coherent volatile buffer highp uint)
 0:50            'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
 0:50            Constant:
 0:50              0 (const uint)
-0:50          'j' ( temp highp uint)
+0:50          Constant:
+0:50            4294967295 (const uint)
 0:51      move second child to first child ( temp highp uint)
 0:51        'j' ( temp highp uint)
-0:51        AtomicXor ( global highp uint)
+0:51        AtomicSubtract ( global highp uint)
 0:51          counter1: direct index for structure ( coherent volatile buffer highp uint)
 0:51            'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
 0:51            Constant:
 0:51              0 (const uint)
-0:51          'j' ( temp highp uint)
+0:51          Constant:
+0:51            1 (const uint)
 0:53      move second child to first child ( temp highp uint)
 0:53        'j' ( temp highp uint)
-0:53        AtomicExchange ( global highp uint)
+0:53        AtomicMin ( global highp uint)
 0:53          counter1: direct index for structure ( coherent volatile buffer highp uint)
 0:53            'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
 0:53            Constant:
@@ -394,158 +410,254 @@
 0:53          'j' ( temp highp uint)
 0:54      move second child to first child ( temp highp uint)
 0:54        'j' ( temp highp uint)
-0:54        AtomicCompSwap ( global highp uint)
+0:54        AtomicMax ( global highp uint)
 0:54          counter1: direct index for structure ( coherent volatile buffer highp uint)
 0:54            'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
 0:54            Constant:
 0:54              0 (const uint)
-0:54          Constant:
-0:54            0 (const uint)
 0:54          'j' ( temp highp uint)
-0:56      AtomicAdd ( global highp uint)
-0:56        counter2: direct index for structure ( coherent volatile buffer highp uint)
-0:56          'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
-0:56          Constant:
-0:56            1 (const uint)
-0:56        Constant:
-0:56          1 (const uint)
-0:57      AtomicAdd ( global highp uint)
-0:57        counter3: direct index for structure ( coherent volatile buffer highp uint)
-0:57          'anon@3' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3})
-0:57          Constant:
-0:57            0 (const uint)
-0:57        Constant:
-0:57          1 (const uint)
-0:59      MemoryBarrierBuffer ( global void)
-0:61      Branch: Return with expression
+0:55      move second child to first child ( temp highp uint)
+0:55        'j' ( temp highp uint)
+0:55        AtomicAnd ( global highp uint)
+0:55          counter1: direct index for structure ( coherent volatile buffer highp uint)
+0:55            'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
+0:55            Constant:
+0:55              0 (const uint)
+0:55          'j' ( temp highp uint)
+0:57      move second child to first child ( temp highp uint)
+0:57        'j' ( temp highp uint)
+0:57        AtomicOr ( global highp uint)
+0:57          counter1: direct index for structure ( coherent volatile buffer highp uint)
+0:57            'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
+0:57            Constant:
+0:57              0 (const uint)
+0:57          'j' ( temp highp uint)
+0:58      move second child to first child ( temp highp uint)
+0:58        'j' ( temp highp uint)
+0:58        AtomicXor ( global highp uint)
+0:58          counter1: direct index for structure ( coherent volatile buffer highp uint)
+0:58            'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
+0:58            Constant:
+0:58              0 (const uint)
+0:58          'j' ( temp highp uint)
+0:60      move second child to first child ( temp highp uint)
+0:60        'j' ( temp highp uint)
+0:60        AtomicExchange ( global highp uint)
+0:60          counter1: direct index for structure ( coherent volatile buffer highp uint)
+0:60            'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
+0:60            Constant:
+0:60              0 (const uint)
+0:60          'j' ( temp highp uint)
+0:61      move second child to first child ( temp highp uint)
 0:61        'j' ( temp highp uint)
-0:64  Function Definition: foo( ( global highp 4-component vector of float)
-0:64    Function Parameters: 
-0:65    Sequence
-0:65      Sequence
-0:65        move second child to first child ( temp highp float)
-0:65          'f' ( temp highp float)
-0:65          add ( temp highp float)
-0:65            add ( temp highp float)
-0:65              add ( temp highp float)
-0:65                j: direct index for structure (layout( column_major std140) uniform highp float)
-0:65                  'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp float j, layout( column_major std140) uniform highp 4-component vector of float k})
-0:65                  Constant:
-0:65                    0 (const uint)
-0:65                j: direct index for structure (layout( column_major std430) buffer highp float)
-0:65                  'bufferInstance' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float j, layout( column_major std430) buffer highp 4-component vector of float k})
-0:65                  Constant:
-0:65                    0 (const int)
-0:65              y: direct index for structure ( global highp float)
-0:65                structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z})
-0:65                  'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp 2-component vector of float b,  uniform highp 2-component vector of float c,  uniform 10-element array of highp 4-component vector of float d,  uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z} structUniform})
-0:65                  Constant:
-0:65                    4 (const uint)
-0:65                Constant:
-0:65                  1 (const int)
-0:65            Convert uint to float ( temp highp float)
-0:65              z: direct index for structure ( global highp uint)
-0:65                structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z})
-0:65                  'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp 2-component vector of float b,  uniform highp 2-component vector of float c,  uniform 10-element array of highp 4-component vector of float d,  uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z} structUniform})
-0:65                  Constant:
-0:65                    4 (const uint)
-0:65                Constant:
-0:65                  2 (const int)
-0:66      Sequence
-0:66        move second child to first child ( temp highp 2-component vector of float)
-0:66          'v2' ( temp highp 2-component vector of float)
-0:66          add ( temp highp 2-component vector of float)
-0:66            add ( temp highp 2-component vector of float)
-0:66              b: direct index for structure ( uniform highp 2-component vector of float)
-0:66                'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp 2-component vector of float b,  uniform highp 2-component vector of float c,  uniform 10-element array of highp 4-component vector of float d,  uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z} structUniform})
-0:66                Constant:
-0:66                  1 (const uint)
-0:66              c: direct index for structure ( uniform highp 2-component vector of float)
-0:66                'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp 2-component vector of float b,  uniform highp 2-component vector of float c,  uniform 10-element array of highp 4-component vector of float d,  uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z} structUniform})
-0:66                Constant:
-0:66                  2 (const uint)
-0:66            x: direct index for structure ( global highp 2-component vector of float)
-0:66              structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z})
-0:66                'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp 2-component vector of float b,  uniform highp 2-component vector of float c,  uniform 10-element array of highp 4-component vector of float d,  uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z} structUniform})
-0:66                Constant:
-0:66                  4 (const uint)
-0:66              Constant:
-0:66                0 (const int)
-0:67      Sequence
-0:67        move second child to first child ( temp highp 4-component vector of float)
-0:67          'v4' ( temp highp 4-component vector of float)
-0:67          add ( temp highp 4-component vector of float)
-0:67            add ( temp highp 4-component vector of float)
-0:67              add ( temp highp 4-component vector of float)
-0:67                add ( temp highp 4-component vector of float)
-0:67                  add ( temp highp 4-component vector of float)
-0:67                    add ( temp highp 4-component vector of float)
-0:67                      a: direct index for structure ( uniform highp 4-component vector of float)
-0:67                        'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp 2-component vector of float b,  uniform highp 2-component vector of float c,  uniform 10-element array of highp 4-component vector of float d,  uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z} structUniform})
-0:67                        Constant:
-0:67                          0 (const uint)
-0:67                      direct index ( temp highp 4-component vector of float)
-0:67                        d: direct index for structure ( uniform 10-element array of highp 4-component vector of float)
-0:67                          'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp 2-component vector of float b,  uniform highp 2-component vector of float c,  uniform 10-element array of highp 4-component vector of float d,  uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z} structUniform})
-0:67                          Constant:
-0:67                            3 (const uint)
-0:67                        Constant:
-0:67                          0 (const int)
-0:67                    direct index ( temp highp 4-component vector of float)
-0:67                      d: direct index for structure ( uniform 10-element array of highp 4-component vector of float)
-0:67                        'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp 2-component vector of float b,  uniform highp 2-component vector of float c,  uniform 10-element array of highp 4-component vector of float d,  uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z} structUniform})
-0:67                        Constant:
-0:67                          3 (const uint)
-0:67                      Constant:
-0:67                        1 (const int)
-0:67                  direct index ( temp highp 4-component vector of float)
-0:67                    d: direct index for structure ( uniform 10-element array of highp 4-component vector of float)
-0:67                      'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp 2-component vector of float b,  uniform highp 2-component vector of float c,  uniform 10-element array of highp 4-component vector of float d,  uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z} structUniform})
-0:67                      Constant:
-0:67                        3 (const uint)
-0:67                    Constant:
-0:67                      2 (const int)
-0:67                k: direct index for structure (layout( column_major std140) uniform highp 4-component vector of float)
-0:67                  'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp float j, layout( column_major std140) uniform highp 4-component vector of float k})
-0:67                  Constant:
-0:67                    1 (const uint)
-0:67              k: direct index for structure (layout( column_major std430) buffer highp 4-component vector of float)
-0:67                'bufferInstance' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float j, layout( column_major std430) buffer highp 4-component vector of float k})
-0:67                Constant:
-0:67                  1 (const int)
-0:67            texture ( global highp 4-component vector of float)
-0:67              't1' ( uniform highp sampler2D)
-0:67              Constant:
-0:67                0.000000
-0:67                0.000000
+0:61        AtomicCompSwap ( global highp uint)
+0:61          counter1: direct index for structure ( coherent volatile buffer highp uint)
+0:61            'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
+0:61            Constant:
+0:61              0 (const uint)
+0:61          Constant:
+0:61            0 (const uint)
+0:61          'j' ( temp highp uint)
+0:63      AtomicAdd ( global highp uint)
+0:63        counter2: direct index for structure ( coherent volatile buffer highp uint)
+0:63          'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1,  coherent volatile buffer highp uint counter2})
+0:63          Constant:
+0:63            1 (const uint)
+0:63        Constant:
+0:63          1 (const uint)
+0:64      AtomicAdd ( global highp uint)
+0:64        counter3: direct index for structure ( coherent volatile buffer highp uint)
+0:64          'anon@3' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3})
+0:64          Constant:
+0:64            0 (const uint)
+0:64        Constant:
+0:64          1 (const uint)
+0:66      MemoryBarrierBuffer ( global void)
 0:68      Branch: Return with expression
-0:68        component-wise multiply ( temp highp 4-component vector of float)
-0:68          component-wise multiply ( temp highp 4-component vector of float)
-0:68            Construct vec4 ( temp highp 4-component vector of float)
-0:68              'f' ( temp highp float)
-0:68            Construct vec4 ( temp highp 4-component vector of float)
-0:68              'v2' ( temp highp 2-component vector of float)
-0:68              Constant:
-0:68                1.000000
-0:68              Constant:
-0:68                1.000000
-0:68          'v4' ( temp highp 4-component vector of float)
-0:71  Function Definition: main( ( global void)
+0:68        'j' ( temp highp uint)
+0:71  Function Definition: foo( ( global highp 4-component vector of float)
 0:71    Function Parameters: 
 0:72    Sequence
 0:72      Sequence
 0:72        move second child to first child ( temp highp float)
-0:72          'j' ( temp highp float)
-0:72          Convert uint to float ( temp highp float)
-0:72            Function Call: bar( ( global highp uint)
-0:73      move second child to first child ( temp highp 4-component vector of float)
-0:73        'o' ( out highp 4-component vector of float)
-0:73        vector-scale ( temp highp 4-component vector of float)
-0:73          'j' ( temp highp float)
-0:73          Function Call: foo( ( global highp 4-component vector of float)
+0:72          'f' ( temp highp float)
+0:72          add ( temp highp float)
+0:72            add ( temp highp float)
+0:72              add ( temp highp float)
+0:72                j: direct index for structure (layout( column_major std140) uniform highp float)
+0:72                  'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp float j, layout( column_major std140) uniform highp 4-component vector of float k})
+0:72                  Constant:
+0:72                    0 (const uint)
+0:72                j: direct index for structure (layout( column_major std430) buffer highp float)
+0:72                  'bufferInstance' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float j, layout( column_major std430) buffer highp 4-component vector of float k})
+0:72                  Constant:
+0:72                    0 (const int)
+0:72              y: direct index for structure ( global highp float)
+0:72                structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z,  global highp int /*t0*/,  global structure{ global 4-element array of highp int /*tn*/} samplers})
+0:72                  'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp 2-component vector of float b,  uniform highp 2-component vector of float c,  uniform 10-element array of highp 4-component vector of float d,  uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z,  global highp int /*t0*/,  global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform})
+0:72                  Constant:
+0:72                    4 (const uint)
+0:72                Constant:
+0:72                  1 (const int)
+0:72            Convert uint to float ( temp highp float)
+0:72              z: direct index for structure ( global highp uint)
+0:72                structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z,  global highp int /*t0*/,  global structure{ global 4-element array of highp int /*tn*/} samplers})
+0:72                  'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp 2-component vector of float b,  uniform highp 2-component vector of float c,  uniform 10-element array of highp 4-component vector of float d,  uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z,  global highp int /*t0*/,  global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform})
+0:72                  Constant:
+0:72                    4 (const uint)
+0:72                Constant:
+0:72                  2 (const int)
+0:73      Sequence
+0:73        move second child to first child ( temp highp 2-component vector of float)
+0:73          'v2' ( temp highp 2-component vector of float)
+0:73          add ( temp highp 2-component vector of float)
+0:73            add ( temp highp 2-component vector of float)
+0:73              b: direct index for structure ( uniform highp 2-component vector of float)
+0:73                'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp 2-component vector of float b,  uniform highp 2-component vector of float c,  uniform 10-element array of highp 4-component vector of float d,  uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z,  global highp int /*t0*/,  global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform})
+0:73                Constant:
+0:73                  1 (const uint)
+0:73              c: direct index for structure ( uniform highp 2-component vector of float)
+0:73                'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp 2-component vector of float b,  uniform highp 2-component vector of float c,  uniform 10-element array of highp 4-component vector of float d,  uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z,  global highp int /*t0*/,  global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform})
+0:73                Constant:
+0:73                  2 (const uint)
+0:73            x: direct index for structure ( global highp 2-component vector of float)
+0:73              structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z,  global highp int /*t0*/,  global structure{ global 4-element array of highp int /*tn*/} samplers})
+0:73                'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp 2-component vector of float b,  uniform highp 2-component vector of float c,  uniform 10-element array of highp 4-component vector of float d,  uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z,  global highp int /*t0*/,  global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform})
+0:73                Constant:
+0:73                  4 (const uint)
+0:73              Constant:
+0:73                0 (const int)
+0:74      Sequence
+0:74        move second child to first child ( temp highp 4-component vector of float)
+0:74          'v4' ( temp highp 4-component vector of float)
+0:74          add ( temp highp 4-component vector of float)
+0:74            add ( temp highp 4-component vector of float)
+0:74              add ( temp highp 4-component vector of float)
+0:74                add ( temp highp 4-component vector of float)
+0:74                  add ( temp highp 4-component vector of float)
+0:74                    add ( temp highp 4-component vector of float)
+0:74                      add ( temp highp 4-component vector of float)
+0:74                        a: direct index for structure ( uniform highp 4-component vector of float)
+0:74                          'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp 2-component vector of float b,  uniform highp 2-component vector of float c,  uniform 10-element array of highp 4-component vector of float d,  uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z,  global highp int /*t0*/,  global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform})
+0:74                          Constant:
+0:74                            0 (const uint)
+0:74                        direct index ( temp highp 4-component vector of float)
+0:74                          d: direct index for structure ( uniform 10-element array of highp 4-component vector of float)
+0:74                            'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp 2-component vector of float b,  uniform highp 2-component vector of float c,  uniform 10-element array of highp 4-component vector of float d,  uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z,  global highp int /*t0*/,  global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform})
+0:74                            Constant:
+0:74                              3 (const uint)
+0:74                          Constant:
+0:74                            0 (const int)
+0:74                      direct index ( temp highp 4-component vector of float)
+0:74                        d: direct index for structure ( uniform 10-element array of highp 4-component vector of float)
+0:74                          'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp 2-component vector of float b,  uniform highp 2-component vector of float c,  uniform 10-element array of highp 4-component vector of float d,  uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z,  global highp int /*t0*/,  global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform})
+0:74                          Constant:
+0:74                            3 (const uint)
+0:74                        Constant:
+0:74                          1 (const int)
+0:74                    direct index ( temp highp 4-component vector of float)
+0:74                      d: direct index for structure ( uniform 10-element array of highp 4-component vector of float)
+0:74                        'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp 2-component vector of float b,  uniform highp 2-component vector of float c,  uniform 10-element array of highp 4-component vector of float d,  uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z,  global highp int /*t0*/,  global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform})
+0:74                        Constant:
+0:74                          3 (const uint)
+0:74                      Constant:
+0:74                        2 (const int)
+0:74                  k: direct index for structure (layout( column_major std140) uniform highp 4-component vector of float)
+0:74                    'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp float j, layout( column_major std140) uniform highp 4-component vector of float k})
+0:74                    Constant:
+0:74                      1 (const uint)
+0:74                k: direct index for structure (layout( column_major std430) buffer highp 4-component vector of float)
+0:74                  'bufferInstance' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float j, layout( column_major std430) buffer highp 4-component vector of float k})
+0:74                  Constant:
+0:74                    1 (const int)
+0:74              texture ( global highp 4-component vector of float)
+0:74                't1' ( uniform highp sampler2D)
+0:74                Constant:
+0:74                  0.000000
+0:74                  0.000000
+0:74            texture ( global highp 4-component vector of float)
+0:?               'structUniform.t0' ( uniform highp sampler2D)
+0:74              Constant:
+0:74                0.000000
+0:74                0.000000
+0:75      Branch: Return with expression
+0:75        component-wise multiply ( temp highp 4-component vector of float)
+0:75          component-wise multiply ( temp highp 4-component vector of float)
+0:75            Construct vec4 ( temp highp 4-component vector of float)
+0:75              'f' ( temp highp float)
+0:75            Construct vec4 ( temp highp 4-component vector of float)
+0:75              'v2' ( temp highp 2-component vector of float)
+0:75              Constant:
+0:75                1.000000
+0:75              Constant:
+0:75                1.000000
+0:75          'v4' ( temp highp 4-component vector of float)
+0:78  Function Definition: baz(struct-SamplerArray-s21[4]1;s21;s21;s21;s21; ( global highp 4-component vector of float)
+0:78    Function Parameters: 
+0:78      'samplers' ( in structure{ global 4-element array of highp int /*tn*/})
+0:78      'samplers.tn[0]' ( in highp sampler2D)
+0:78      'samplers.tn[1]' ( in highp sampler2D)
+0:78      'samplers.tn[2]' ( in highp sampler2D)
+0:78      'samplers.tn[3]' ( in highp sampler2D)
+0:79    Sequence
+0:79      Branch: Return with expression
+0:79        add ( temp highp 4-component vector of float)
+0:79          add ( temp highp 4-component vector of float)
+0:79            add ( temp highp 4-component vector of float)
+0:79              texture ( global highp 4-component vector of float)
+0:79                'samplers.tn[0]' ( in highp sampler2D)
+0:79                Constant:
+0:79                  0.000000
+0:79                  0.000000
+0:79              texture ( global highp 4-component vector of float)
+0:79                'samplers.tn[1]' ( in highp sampler2D)
+0:79                Constant:
+0:79                  0.000000
+0:79                  0.000000
+0:79            texture ( global highp 4-component vector of float)
+0:79              'samplers.tn[2]' ( in highp sampler2D)
+0:79              Constant:
+0:79                0.000000
+0:79                0.000000
+0:79          texture ( global highp 4-component vector of float)
+0:79            'samplers.tn[3]' ( in highp sampler2D)
+0:79            Constant:
+0:79              0.000000
+0:79              0.000000
+0:82  Function Definition: main( ( global void)
+0:82    Function Parameters: 
+0:83    Sequence
+0:83      Sequence
+0:83        move second child to first child ( temp highp float)
+0:83          'j' ( temp highp float)
+0:83          Convert uint to float ( temp highp float)
+0:83            Function Call: bar( ( global highp uint)
+0:84      move second child to first child ( temp highp 4-component vector of float)
+0:84        'o' ( out highp 4-component vector of float)
+0:84        add ( temp highp 4-component vector of float)
+0:84          vector-scale ( temp highp 4-component vector of float)
+0:84            'j' ( temp highp float)
+0:84            Function Call: foo( ( global highp 4-component vector of float)
+0:84          Function Call: baz(struct-SamplerArray-s21[4]1;s21;s21;s21;s21; ( global highp 4-component vector of float)
+0:84            samplers: direct index for structure ( global structure{ global 4-element array of highp int /*tn*/})
+0:84              structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z,  global highp int /*t0*/,  global structure{ global 4-element array of highp int /*tn*/} samplers})
+0:84                'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp 2-component vector of float b,  uniform highp 2-component vector of float c,  uniform 10-element array of highp 4-component vector of float d,  uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z,  global highp int /*t0*/,  global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform})
+0:84                Constant:
+0:84                  4 (const uint)
+0:84              Constant:
+0:84                4 (const int)
+0:84            'structUniform.samplers.tn[0]' ( uniform highp sampler2D)
+0:84            'structUniform.samplers.tn[1]' ( uniform highp sampler2D)
+0:84            'structUniform.samplers.tn[2]' ( uniform highp sampler2D)
+0:84            'structUniform.samplers.tn[3]' ( uniform highp sampler2D)
 0:?   Linker Objects
 0:?     'o' ( out highp 4-component vector of float)
-0:?     'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp 2-component vector of float b,  uniform highp 2-component vector of float c,  uniform 10-element array of highp 4-component vector of float d,  uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z} structUniform})
+0:?     'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a,  uniform highp 2-component vector of float b,  uniform highp 2-component vector of float c,  uniform 10-element array of highp 4-component vector of float d,  uniform structure{ global highp 2-component vector of float x,  global highp float y,  global highp uint z,  global highp int /*t0*/,  global structure{ global 4-element array of highp int /*tn*/} samplers} structUniform})
+0:?     'structUniform.t0' ( uniform highp sampler2D)
+0:?     'structUniform.samplers.tn[0]' ( uniform highp sampler2D)
+0:?     'structUniform.samplers.tn[1]' ( uniform highp sampler2D)
+0:?     'structUniform.samplers.tn[2]' ( uniform highp sampler2D)
+0:?     'structUniform.samplers.tn[3]' ( uniform highp sampler2D)
 0:?     't1' ( uniform highp sampler2D)
 0:?     'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp float j, layout( column_major std140) uniform highp 4-component vector of float k})
 0:?     'bufferInstance' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float j, layout( column_major std430) buffer highp 4-component vector of float k})
@@ -554,93 +666,122 @@
 
 // Module Version 10000
 // Generated by (magic number): 8000b
-// Id's are bound by 163
+// Id's are bound by 216
 
                               Capability Shader
                1:             ExtInstImport  "GLSL.std.450"
                               MemoryModel Logical GLSL450
-                              EntryPoint Fragment 4  "main" 159
+                              EntryPoint Fragment 4  "main" 190
                               ExecutionMode 4 OriginUpperLeft
                               Source GLSL 460
                               Name 4  "main"
                               Name 8  "bar("
                               Name 13  "foo("
-                              Name 16  "j"
-                              Name 18  "gl_AtomicCounterBlock_0"
-                              MemberName 18(gl_AtomicCounterBlock_0) 0  "counter1"
-                              MemberName 18(gl_AtomicCounterBlock_0) 1  "counter2"
-                              Name 20  ""
-                              Name 63  "gl_AtomicCounterBlock_1"
-                              MemberName 63(gl_AtomicCounterBlock_1) 0  "counter3"
-                              Name 65  ""
-                              Name 73  "f"
-                              Name 74  "UniformBlock"
-                              MemberName 74(UniformBlock) 0  "j"
-                              MemberName 74(UniformBlock) 1  "k"
-                              Name 76  ""
-                              Name 80  "BufferBlock"
-                              MemberName 80(BufferBlock) 0  "j"
-                              MemberName 80(BufferBlock) 1  "k"
-                              Name 82  "bufferInstance"
-                              Name 89  "e"
-                              MemberName 89(e) 0  "x"
-                              MemberName 89(e) 1  "y"
-                              MemberName 89(e) 2  "z"
-                              Name 90  "gl_DefaultUniformBlock"
-                              MemberName 90(gl_DefaultUniformBlock) 0  "a"
-                              MemberName 90(gl_DefaultUniformBlock) 1  "b"
-                              MemberName 90(gl_DefaultUniformBlock) 2  "c"
-                              MemberName 90(gl_DefaultUniformBlock) 3  "d"
-                              MemberName 90(gl_DefaultUniformBlock) 4  "structUniform"
-                              Name 92  ""
-                              Name 103  "v2"
-                              Name 114  "v4"
-                              Name 137  "t1"
-                              Name 155  "j"
-                              Name 159  "o"
-                              MemberDecorate 18(gl_AtomicCounterBlock_0) 0 Coherent
-                              MemberDecorate 18(gl_AtomicCounterBlock_0) 0 Volatile
-                              MemberDecorate 18(gl_AtomicCounterBlock_0) 0 Coherent
-                              MemberDecorate 18(gl_AtomicCounterBlock_0) 0 Offset 0
-                              MemberDecorate 18(gl_AtomicCounterBlock_0) 1 Coherent
-                              MemberDecorate 18(gl_AtomicCounterBlock_0) 1 Volatile
-                              MemberDecorate 18(gl_AtomicCounterBlock_0) 1 Coherent
-                              MemberDecorate 18(gl_AtomicCounterBlock_0) 1 Offset 4
-                              Decorate 18(gl_AtomicCounterBlock_0) BufferBlock
-                              Decorate 20 DescriptorSet 0
-                              Decorate 20 Binding 4
-                              MemberDecorate 63(gl_AtomicCounterBlock_1) 0 Coherent
-                              MemberDecorate 63(gl_AtomicCounterBlock_1) 0 Volatile
-                              MemberDecorate 63(gl_AtomicCounterBlock_1) 0 Coherent
-                              MemberDecorate 63(gl_AtomicCounterBlock_1) 0 Offset 0
-                              Decorate 63(gl_AtomicCounterBlock_1) BufferBlock
-                              Decorate 65 DescriptorSet 0
-                              Decorate 65 Binding 5
-                              MemberDecorate 74(UniformBlock) 0 Offset 0
-                              MemberDecorate 74(UniformBlock) 1 Offset 16
-                              Decorate 74(UniformBlock) Block
-                              Decorate 76 DescriptorSet 0
-                              Decorate 76 Binding 2
-                              MemberDecorate 80(BufferBlock) 0 Offset 0
-                              MemberDecorate 80(BufferBlock) 1 Offset 16
-                              Decorate 80(BufferBlock) BufferBlock
-                              Decorate 82(bufferInstance) DescriptorSet 0
-                              Decorate 82(bufferInstance) Binding 3
-                              Decorate 88 ArrayStride 16
-                              MemberDecorate 89(e) 0 Offset 0
-                              MemberDecorate 89(e) 1 Offset 8
-                              MemberDecorate 89(e) 2 Offset 12
-                              MemberDecorate 90(gl_DefaultUniformBlock) 0 Offset 0
-                              MemberDecorate 90(gl_DefaultUniformBlock) 1 Offset 16
-                              MemberDecorate 90(gl_DefaultUniformBlock) 2 Offset 24
-                              MemberDecorate 90(gl_DefaultUniformBlock) 3 Offset 32
-                              MemberDecorate 90(gl_DefaultUniformBlock) 4 Offset 192
-                              Decorate 90(gl_DefaultUniformBlock) Block
-                              Decorate 92 DescriptorSet 0
-                              Decorate 92 Binding 0
-                              Decorate 137(t1) DescriptorSet 0
-                              Decorate 137(t1) Binding 1
-                              Decorate 159(o) Location 0
+                              Name 18  "SamplerArray"
+                              MemberName 18(SamplerArray) 0  "/*tn*/"
+                              Name 29  "baz(struct-SamplerArray-s21[4]1;s21;s21;s21;s21;"
+                              Name 24  "samplers"
+                              Name 25  "samplers.tn[0]"
+                              Name 26  "samplers.tn[1]"
+                              Name 27  "samplers.tn[2]"
+                              Name 28  "samplers.tn[3]"
+                              Name 32  "j"
+                              Name 34  "gl_AtomicCounterBlock_0"
+                              MemberName 34(gl_AtomicCounterBlock_0) 0  "counter1"
+                              MemberName 34(gl_AtomicCounterBlock_0) 1  "counter2"
+                              Name 36  ""
+                              Name 78  "gl_AtomicCounterBlock_1"
+                              MemberName 78(gl_AtomicCounterBlock_1) 0  "counter3"
+                              Name 80  ""
+                              Name 88  "f"
+                              Name 89  "UniformBlock"
+                              MemberName 89(UniformBlock) 0  "j"
+                              MemberName 89(UniformBlock) 1  "k"
+                              Name 91  ""
+                              Name 95  "BufferBlock"
+                              MemberName 95(BufferBlock) 0  "j"
+                              MemberName 95(BufferBlock) 1  "k"
+                              Name 97  "bufferInstance"
+                              Name 105  "SamplerArray"
+                              MemberName 105(SamplerArray) 0  "/*tn*/"
+                              Name 106  "e"
+                              MemberName 106(e) 0  "x"
+                              MemberName 106(e) 1  "y"
+                              MemberName 106(e) 2  "z"
+                              MemberName 106(e) 3  "/*t0*/"
+                              MemberName 106(e) 4  "samplers"
+                              Name 107  "gl_DefaultUniformBlock"
+                              MemberName 107(gl_DefaultUniformBlock) 0  "a"
+                              MemberName 107(gl_DefaultUniformBlock) 1  "b"
+                              MemberName 107(gl_DefaultUniformBlock) 2  "c"
+                              MemberName 107(gl_DefaultUniformBlock) 3  "d"
+                              MemberName 107(gl_DefaultUniformBlock) 4  "structUniform"
+                              Name 109  ""
+                              Name 120  "v2"
+                              Name 131  "v4"
+                              Name 151  "t1"
+                              Name 157  "structUniform.t0"
+                              Name 186  "j"
+                              Name 190  "o"
+                              Name 194  "structUniform.samplers.tn[0]"
+                              Name 195  "structUniform.samplers.tn[1]"
+                              Name 196  "structUniform.samplers.tn[2]"
+                              Name 197  "structUniform.samplers.tn[3]"
+                              Name 198  "param"
+                              Decorate 34(gl_AtomicCounterBlock_0) BufferBlock
+                              MemberDecorate 34(gl_AtomicCounterBlock_0) 0 Volatile
+                              MemberDecorate 34(gl_AtomicCounterBlock_0) 0 Coherent
+                              MemberDecorate 34(gl_AtomicCounterBlock_0) 0 Offset 0
+                              MemberDecorate 34(gl_AtomicCounterBlock_0) 1 Volatile
+                              MemberDecorate 34(gl_AtomicCounterBlock_0) 1 Coherent
+                              MemberDecorate 34(gl_AtomicCounterBlock_0) 1 Offset 4
+                              Decorate 36 Binding 9
+                              Decorate 36 DescriptorSet 0
+                              Decorate 78(gl_AtomicCounterBlock_1) BufferBlock
+                              MemberDecorate 78(gl_AtomicCounterBlock_1) 0 Volatile
+                              MemberDecorate 78(gl_AtomicCounterBlock_1) 0 Coherent
+                              MemberDecorate 78(gl_AtomicCounterBlock_1) 0 Offset 0
+                              Decorate 80 Binding 10
+                              Decorate 80 DescriptorSet 0
+                              Decorate 89(UniformBlock) Block
+                              MemberDecorate 89(UniformBlock) 0 Offset 0
+                              MemberDecorate 89(UniformBlock) 1 Offset 16
+                              Decorate 91 Binding 7
+                              Decorate 91 DescriptorSet 0
+                              Decorate 95(BufferBlock) BufferBlock
+                              MemberDecorate 95(BufferBlock) 0 Offset 0
+                              MemberDecorate 95(BufferBlock) 1 Offset 16
+                              Decorate 97(bufferInstance) Binding 8
+                              Decorate 97(bufferInstance) DescriptorSet 0
+                              Decorate 103 ArrayStride 16
+                              Decorate 104 ArrayStride 16
+                              MemberDecorate 105(SamplerArray) 0 Offset 0
+                              MemberDecorate 106(e) 0 Offset 0
+                              MemberDecorate 106(e) 1 Offset 8
+                              MemberDecorate 106(e) 2 Offset 12
+                              MemberDecorate 106(e) 3 Offset 16
+                              MemberDecorate 106(e) 4 Offset 32
+                              Decorate 107(gl_DefaultUniformBlock) Block
+                              MemberDecorate 107(gl_DefaultUniformBlock) 0 Offset 0
+                              MemberDecorate 107(gl_DefaultUniformBlock) 1 Offset 16
+                              MemberDecorate 107(gl_DefaultUniformBlock) 2 Offset 24
+                              MemberDecorate 107(gl_DefaultUniformBlock) 3 Offset 32
+                              MemberDecorate 107(gl_DefaultUniformBlock) 4 Offset 192
+                              Decorate 109 Binding 0
+                              Decorate 109 DescriptorSet 0
+                              Decorate 151(t1) Binding 6
+                              Decorate 151(t1) DescriptorSet 0
+                              Decorate 157(structUniform.t0) Binding 1
+                              Decorate 157(structUniform.t0) DescriptorSet 0
+                              Decorate 190(o) Location 0
+                              Decorate 194(structUniform.samplers.tn[0]) Binding 2
+                              Decorate 194(structUniform.samplers.tn[0]) DescriptorSet 0
+                              Decorate 195(structUniform.samplers.tn[1]) Binding 3
+                              Decorate 195(structUniform.samplers.tn[1]) DescriptorSet 0
+                              Decorate 196(structUniform.samplers.tn[2]) Binding 4
+                              Decorate 196(structUniform.samplers.tn[2]) DescriptorSet 0
+                              Decorate 197(structUniform.samplers.tn[3]) Binding 5
+                              Decorate 197(structUniform.samplers.tn[3]) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeInt 32 0
@@ -648,179 +789,236 @@
               10:             TypeFloat 32
               11:             TypeVector 10(float) 4
               12:             TypeFunction 11(fvec4)
-              15:             TypePointer Function 6(int)
-              17:      6(int) Constant 0
-18(gl_AtomicCounterBlock_0):             TypeStruct 6(int) 6(int)
-              19:             TypePointer Uniform 18(gl_AtomicCounterBlock_0)
-              20:     19(ptr) Variable Uniform
-              21:             TypeInt 32 1
-              22:     21(int) Constant 0
-              23:             TypePointer Uniform 6(int)
-              25:      6(int) Constant 1
-              28:      6(int) Constant 4294967295
-              60:     21(int) Constant 1
-63(gl_AtomicCounterBlock_1):             TypeStruct 6(int)
-              64:             TypePointer Uniform 63(gl_AtomicCounterBlock_1)
-              65:     64(ptr) Variable Uniform
-              68:      6(int) Constant 72
-              72:             TypePointer Function 10(float)
-74(UniformBlock):             TypeStruct 10(float) 11(fvec4)
-              75:             TypePointer Uniform 74(UniformBlock)
-              76:     75(ptr) Variable Uniform
-              77:             TypePointer Uniform 10(float)
- 80(BufferBlock):             TypeStruct 10(float) 11(fvec4)
-              81:             TypePointer Uniform 80(BufferBlock)
-82(bufferInstance):     81(ptr) Variable Uniform
-              86:             TypeVector 10(float) 2
-              87:      6(int) Constant 10
-              88:             TypeArray 11(fvec4) 87
-           89(e):             TypeStruct 86(fvec2) 10(float) 6(int)
-90(gl_DefaultUniformBlock):             TypeStruct 11(fvec4) 86(fvec2) 86(fvec2) 88 89(e)
-              91:             TypePointer Uniform 90(gl_DefaultUniformBlock)
-              92:     91(ptr) Variable Uniform
-              93:     21(int) Constant 4
-              97:     21(int) Constant 2
-             102:             TypePointer Function 86(fvec2)
-             104:             TypePointer Uniform 86(fvec2)
-             113:             TypePointer Function 11(fvec4)
-             115:             TypePointer Uniform 11(fvec4)
-             118:     21(int) Constant 3
-             134:             TypeImage 10(float) 2D sampled format:Unknown
-             135:             TypeSampledImage 134
-             136:             TypePointer UniformConstant 135
-         137(t1):    136(ptr) Variable UniformConstant
-             139:   10(float) Constant 0
-             140:   86(fvec2) ConstantComposite 139 139
-             146:   10(float) Constant 1065353216
-             158:             TypePointer Output 11(fvec4)
-          159(o):    158(ptr) Variable Output
+              15:             TypeInt 32 1
+              16:      6(int) Constant 4
+              17:             TypeArray 15(int) 16
+18(SamplerArray):             TypeStruct 17
+              19:             TypePointer Function 18(SamplerArray)
+              20:             TypeImage 10(float) 2D sampled format:Unknown
+              21:             TypeSampledImage 20
+              22:             TypePointer UniformConstant 21
+              23:             TypeFunction 11(fvec4) 19(ptr) 22(ptr) 22(ptr) 22(ptr) 22(ptr)
+              31:             TypePointer Function 6(int)
+              33:      6(int) Constant 0
+34(gl_AtomicCounterBlock_0):             TypeStruct 6(int) 6(int)
+              35:             TypePointer Uniform 34(gl_AtomicCounterBlock_0)
+              36:     35(ptr) Variable Uniform
+              37:     15(int) Constant 0
+              38:             TypePointer Uniform 6(int)
+              40:      6(int) Constant 1
+              43:      6(int) Constant 4294967295
+              75:     15(int) Constant 1
+78(gl_AtomicCounterBlock_1):             TypeStruct 6(int)
+              79:             TypePointer Uniform 78(gl_AtomicCounterBlock_1)
+              80:     79(ptr) Variable Uniform
+              83:      6(int) Constant 72
+              87:             TypePointer Function 10(float)
+89(UniformBlock):             TypeStruct 10(float) 11(fvec4)
+              90:             TypePointer Uniform 89(UniformBlock)
+              91:     90(ptr) Variable Uniform
+              92:             TypePointer Uniform 10(float)
+ 95(BufferBlock):             TypeStruct 10(float) 11(fvec4)
+              96:             TypePointer Uniform 95(BufferBlock)
+97(bufferInstance):     96(ptr) Variable Uniform
+             101:             TypeVector 10(float) 2
+             102:      6(int) Constant 10
+             103:             TypeArray 11(fvec4) 102
+             104:             TypeArray 15(int) 16
+105(SamplerArray):             TypeStruct 104
+          106(e):             TypeStruct 101(fvec2) 10(float) 6(int) 15(int) 105(SamplerArray)
+107(gl_DefaultUniformBlock):             TypeStruct 11(fvec4) 101(fvec2) 101(fvec2) 103 106(e)
+             108:             TypePointer Uniform 107(gl_DefaultUniformBlock)
+             109:    108(ptr) Variable Uniform
+             110:     15(int) Constant 4
+             114:     15(int) Constant 2
+             119:             TypePointer Function 101(fvec2)
+             121:             TypePointer Uniform 101(fvec2)
+             130:             TypePointer Function 11(fvec4)
+             132:             TypePointer Uniform 11(fvec4)
+             135:     15(int) Constant 3
+         151(t1):     22(ptr) Variable UniformConstant
+             153:   10(float) Constant 0
+             154:  101(fvec2) ConstantComposite 153 153
+157(structUniform.t0):     22(ptr) Variable UniformConstant
+             164:   10(float) Constant 1065353216
+             189:             TypePointer Output 11(fvec4)
+          190(o):    189(ptr) Variable Output
+194(structUniform.samplers.tn[0]):     22(ptr) Variable UniformConstant
+195(structUniform.samplers.tn[1]):     22(ptr) Variable UniformConstant
+196(structUniform.samplers.tn[2]):     22(ptr) Variable UniformConstant
+197(structUniform.samplers.tn[3]):     22(ptr) Variable UniformConstant
+             199:             TypePointer Uniform 105(SamplerArray)
+             203:             TypePointer Function 17
+             206:             TypePointer Function 15(int)
          4(main):           2 Function None 3
                5:             Label
-          155(j):     72(ptr) Variable Function
-             156:      6(int) FunctionCall 8(bar()
-             157:   10(float) ConvertUToF 156
-                              Store 155(j) 157
-             160:   10(float) Load 155(j)
-             161:   11(fvec4) FunctionCall 13(foo()
-             162:   11(fvec4) VectorTimesScalar 161 160
-                              Store 159(o) 162
+          186(j):     87(ptr) Variable Function
+      198(param):     19(ptr) Variable Function
+             187:      6(int) FunctionCall 8(bar()
+             188:   10(float) ConvertUToF 187
+                              Store 186(j) 188
+             191:   10(float) Load 186(j)
+             192:   11(fvec4) FunctionCall 13(foo()
+             193:   11(fvec4) VectorTimesScalar 192 191
+             200:    199(ptr) AccessChain 109 110 110
+             201:105(SamplerArray) Load 200
+             202:         104 CompositeExtract 201 0
+             204:    203(ptr) AccessChain 198(param) 37
+             205:     15(int) CompositeExtract 202 0
+             207:    206(ptr) AccessChain 204 37
+                              Store 207 205
+             208:     15(int) CompositeExtract 202 1
+             209:    206(ptr) AccessChain 204 75
+                              Store 209 208
+             210:     15(int) CompositeExtract 202 2
+             211:    206(ptr) AccessChain 204 114
+                              Store 211 210
+             212:     15(int) CompositeExtract 202 3
+             213:    206(ptr) AccessChain 204 135
+                              Store 213 212
+             214:   11(fvec4) FunctionCall 29(baz(struct-SamplerArray-s21[4]1;s21;s21;s21;s21;) 198(param) 194(structUniform.samplers.tn[0]) 195(structUniform.samplers.tn[1]) 196(structUniform.samplers.tn[2]) 197(structUniform.samplers.tn[3])
+             215:   11(fvec4) FAdd 193 214
+                              Store 190(o) 215
                               Return
                               FunctionEnd
          8(bar():      6(int) Function None 7
                9:             Label
-           16(j):     15(ptr) Variable Function
-                              Store 16(j) 17
-              24:     23(ptr) AccessChain 20 22
-              26:      6(int) AtomicIAdd 24 25 17 25
-                              Store 16(j) 26
-              27:     23(ptr) AccessChain 20 22
-              29:      6(int) AtomicIAdd 27 25 17 28
-              30:      6(int) ISub 29 25
-                              Store 16(j) 30
-              31:     23(ptr) AccessChain 20 22
-              32:      6(int) Load 31
-                              Store 16(j) 32
-              33:     23(ptr) AccessChain 20 22
-              34:      6(int) AtomicIAdd 33 25 17 25
-                              Store 16(j) 34
-              35:     23(ptr) AccessChain 20 22
-              36:      6(int) AtomicIAdd 35 25 17 28
-                              Store 16(j) 36
-              37:     23(ptr) AccessChain 20 22
-              38:      6(int) AtomicISub 37 25 17 25
-                              Store 16(j) 38
-              39:     23(ptr) AccessChain 20 22
-              40:      6(int) Load 16(j)
-              41:      6(int) AtomicUMin 39 25 17 40
-                              Store 16(j) 41
-              42:     23(ptr) AccessChain 20 22
-              43:      6(int) Load 16(j)
-              44:      6(int) AtomicUMax 42 25 17 43
-                              Store 16(j) 44
-              45:     23(ptr) AccessChain 20 22
-              46:      6(int) Load 16(j)
-              47:      6(int) AtomicAnd 45 25 17 46
-                              Store 16(j) 47
-              48:     23(ptr) AccessChain 20 22
-              49:      6(int) Load 16(j)
-              50:      6(int) AtomicOr 48 25 17 49
-                              Store 16(j) 50
-              51:     23(ptr) AccessChain 20 22
-              52:      6(int) Load 16(j)
-              53:      6(int) AtomicXor 51 25 17 52
-                              Store 16(j) 53
-              54:     23(ptr) AccessChain 20 22
-              55:      6(int) Load 16(j)
-              56:      6(int) AtomicExchange 54 25 17 55
-                              Store 16(j) 56
-              57:     23(ptr) AccessChain 20 22
-              58:      6(int) Load 16(j)
-              59:      6(int) AtomicCompareExchange 57 25 17 17 58 17
-                              Store 16(j) 59
-              61:     23(ptr) AccessChain 20 60
-              62:      6(int) AtomicIAdd 61 25 17 25
-              66:     23(ptr) AccessChain 65 22
-              67:      6(int) AtomicIAdd 66 25 17 25
-                              MemoryBarrier 25 68
-              69:      6(int) Load 16(j)
-                              ReturnValue 69
+           32(j):     31(ptr) Variable Function
+                              Store 32(j) 33
+              39:     38(ptr) AccessChain 36 37
+              41:      6(int) AtomicIAdd 39 40 33 40
+                              Store 32(j) 41
+              42:     38(ptr) AccessChain 36 37
+              44:      6(int) AtomicIAdd 42 40 33 43
+              45:      6(int) ISub 44 40
+                              Store 32(j) 45
+              46:     38(ptr) AccessChain 36 37
+              47:      6(int) Load 46
+                              Store 32(j) 47
+              48:     38(ptr) AccessChain 36 37
+              49:      6(int) AtomicIAdd 48 40 33 40
+                              Store 32(j) 49
+              50:     38(ptr) AccessChain 36 37
+              51:      6(int) AtomicIAdd 50 40 33 43
+                              Store 32(j) 51
+              52:     38(ptr) AccessChain 36 37
+              53:      6(int) AtomicISub 52 40 33 40
+                              Store 32(j) 53
+              54:     38(ptr) AccessChain 36 37
+              55:      6(int) Load 32(j)
+              56:      6(int) AtomicUMin 54 40 33 55
+                              Store 32(j) 56
+              57:     38(ptr) AccessChain 36 37
+              58:      6(int) Load 32(j)
+              59:      6(int) AtomicUMax 57 40 33 58
+                              Store 32(j) 59
+              60:     38(ptr) AccessChain 36 37
+              61:      6(int) Load 32(j)
+              62:      6(int) AtomicAnd 60 40 33 61
+                              Store 32(j) 62
+              63:     38(ptr) AccessChain 36 37
+              64:      6(int) Load 32(j)
+              65:      6(int) AtomicOr 63 40 33 64
+                              Store 32(j) 65
+              66:     38(ptr) AccessChain 36 37
+              67:      6(int) Load 32(j)
+              68:      6(int) AtomicXor 66 40 33 67
+                              Store 32(j) 68
+              69:     38(ptr) AccessChain 36 37
+              70:      6(int) Load 32(j)
+              71:      6(int) AtomicExchange 69 40 33 70
+                              Store 32(j) 71
+              72:     38(ptr) AccessChain 36 37
+              73:      6(int) Load 32(j)
+              74:      6(int) AtomicCompareExchange 72 40 33 33 73 33
+                              Store 32(j) 74
+              76:     38(ptr) AccessChain 36 75
+              77:      6(int) AtomicIAdd 76 40 33 40
+              81:     38(ptr) AccessChain 80 37
+              82:      6(int) AtomicIAdd 81 40 33 40
+                              MemoryBarrier 40 83
+              84:      6(int) Load 32(j)
+                              ReturnValue 84
                               FunctionEnd
         13(foo():   11(fvec4) Function None 12
               14:             Label
-           73(f):     72(ptr) Variable Function
-         103(v2):    102(ptr) Variable Function
-         114(v4):    113(ptr) Variable Function
-              78:     77(ptr) AccessChain 76 22
-              79:   10(float) Load 78
-              83:     77(ptr) AccessChain 82(bufferInstance) 22
-              84:   10(float) Load 83
-              85:   10(float) FAdd 79 84
-              94:     77(ptr) AccessChain 92 93 60
-              95:   10(float) Load 94
-              96:   10(float) FAdd 85 95
-              98:     23(ptr) AccessChain 92 93 97
-              99:      6(int) Load 98
-             100:   10(float) ConvertUToF 99
-             101:   10(float) FAdd 96 100
-                              Store 73(f) 101
-             105:    104(ptr) AccessChain 92 60
-             106:   86(fvec2) Load 105
-             107:    104(ptr) AccessChain 92 97
-             108:   86(fvec2) Load 107
-             109:   86(fvec2) FAdd 106 108
-             110:    104(ptr) AccessChain 92 93 22
-             111:   86(fvec2) Load 110
-             112:   86(fvec2) FAdd 109 111
-                              Store 103(v2) 112
-             116:    115(ptr) AccessChain 92 22
-             117:   11(fvec4) Load 116
-             119:    115(ptr) AccessChain 92 118 22
-             120:   11(fvec4) Load 119
-             121:   11(fvec4) FAdd 117 120
-             122:    115(ptr) AccessChain 92 118 60
-             123:   11(fvec4) Load 122
-             124:   11(fvec4) FAdd 121 123
-             125:    115(ptr) AccessChain 92 118 97
-             126:   11(fvec4) Load 125
-             127:   11(fvec4) FAdd 124 126
-             128:    115(ptr) AccessChain 76 60
-             129:   11(fvec4) Load 128
-             130:   11(fvec4) FAdd 127 129
-             131:    115(ptr) AccessChain 82(bufferInstance) 60
-             132:   11(fvec4) Load 131
-             133:   11(fvec4) FAdd 130 132
-             138:         135 Load 137(t1)
-             141:   11(fvec4) ImageSampleImplicitLod 138 140
-             142:   11(fvec4) FAdd 133 141
-                              Store 114(v4) 142
-             143:   10(float) Load 73(f)
-             144:   11(fvec4) CompositeConstruct 143 143 143 143
-             145:   86(fvec2) Load 103(v2)
-             147:   10(float) CompositeExtract 145 0
-             148:   10(float) CompositeExtract 145 1
-             149:   11(fvec4) CompositeConstruct 147 148 146 146
-             150:   11(fvec4) FMul 144 149
-             151:   11(fvec4) Load 114(v4)
-             152:   11(fvec4) FMul 150 151
-                              ReturnValue 152
+           88(f):     87(ptr) Variable Function
+         120(v2):    119(ptr) Variable Function
+         131(v4):    130(ptr) Variable Function
+              93:     92(ptr) AccessChain 91 37
+              94:   10(float) Load 93
+              98:     92(ptr) AccessChain 97(bufferInstance) 37
+              99:   10(float) Load 98
+             100:   10(float) FAdd 94 99
+             111:     92(ptr) AccessChain 109 110 75
+             112:   10(float) Load 111
+             113:   10(float) FAdd 100 112
+             115:     38(ptr) AccessChain 109 110 114
+             116:      6(int) Load 115
+             117:   10(float) ConvertUToF 116
+             118:   10(float) FAdd 113 117
+                              Store 88(f) 118
+             122:    121(ptr) AccessChain 109 75
+             123:  101(fvec2) Load 122
+             124:    121(ptr) AccessChain 109 114
+             125:  101(fvec2) Load 124
+             126:  101(fvec2) FAdd 123 125
+             127:    121(ptr) AccessChain 109 110 37
+             128:  101(fvec2) Load 127
+             129:  101(fvec2) FAdd 126 128
+                              Store 120(v2) 129
+             133:    132(ptr) AccessChain 109 37
+             134:   11(fvec4) Load 133
+             136:    132(ptr) AccessChain 109 135 37
+             137:   11(fvec4) Load 136
+             138:   11(fvec4) FAdd 134 137
+             139:    132(ptr) AccessChain 109 135 75
+             140:   11(fvec4) Load 139
+             141:   11(fvec4) FAdd 138 140
+             142:    132(ptr) AccessChain 109 135 114
+             143:   11(fvec4) Load 142
+             144:   11(fvec4) FAdd 141 143
+             145:    132(ptr) AccessChain 91 75
+             146:   11(fvec4) Load 145
+             147:   11(fvec4) FAdd 144 146
+             148:    132(ptr) AccessChain 97(bufferInstance) 75
+             149:   11(fvec4) Load 148
+             150:   11(fvec4) FAdd 147 149
+             152:          21 Load 151(t1)
+             155:   11(fvec4) ImageSampleImplicitLod 152 154
+             156:   11(fvec4) FAdd 150 155
+             158:          21 Load 157(structUniform.t0)
+             159:   11(fvec4) ImageSampleImplicitLod 158 154
+             160:   11(fvec4) FAdd 156 159
+                              Store 131(v4) 160
+             161:   10(float) Load 88(f)
+             162:   11(fvec4) CompositeConstruct 161 161 161 161
+             163:  101(fvec2) Load 120(v2)
+             165:   10(float) CompositeExtract 163 0
+             166:   10(float) CompositeExtract 163 1
+             167:   11(fvec4) CompositeConstruct 165 166 164 164
+             168:   11(fvec4) FMul 162 167
+             169:   11(fvec4) Load 131(v4)
+             170:   11(fvec4) FMul 168 169
+                              ReturnValue 170
+                              FunctionEnd
+29(baz(struct-SamplerArray-s21[4]1;s21;s21;s21;s21;):   11(fvec4) Function None 23
+    24(samplers):     19(ptr) FunctionParameter
+25(samplers.tn[0]):     22(ptr) FunctionParameter
+26(samplers.tn[1]):     22(ptr) FunctionParameter
+27(samplers.tn[2]):     22(ptr) FunctionParameter
+28(samplers.tn[3]):     22(ptr) FunctionParameter
+              30:             Label
+             173:          21 Load 25(samplers.tn[0])
+             174:   11(fvec4) ImageSampleImplicitLod 173 154
+             175:          21 Load 26(samplers.tn[1])
+             176:   11(fvec4) ImageSampleImplicitLod 175 154
+             177:   11(fvec4) FAdd 174 176
+             178:          21 Load 27(samplers.tn[2])
+             179:   11(fvec4) ImageSampleImplicitLod 178 154
+             180:   11(fvec4) FAdd 177 179
+             181:          21 Load 28(samplers.tn[3])
+             182:   11(fvec4) ImageSampleImplicitLod 181 154
+             183:   11(fvec4) FAdd 180 182
+                              ReturnValue 183
                               FunctionEnd
diff --git a/Test/baseResults/vk.relaxed.link1.frag.out b/Test/baseResults/vk.relaxed.link1.frag.out
index 1e67646..7b114a7 100644
--- a/Test/baseResults/vk.relaxed.link1.frag.out
+++ b/Test/baseResults/vk.relaxed.link1.frag.out
@@ -378,30 +378,27 @@
                               Name 68  "o"
                               Name 72  "j"
                               Name 79  "v"
-                              MemberDecorate 16(gl_AtomicCounterBlock_0) 0 Coherent
+                              Decorate 16(gl_AtomicCounterBlock_0) BufferBlock
                               MemberDecorate 16(gl_AtomicCounterBlock_0) 0 Volatile
                               MemberDecorate 16(gl_AtomicCounterBlock_0) 0 Coherent
                               MemberDecorate 16(gl_AtomicCounterBlock_0) 0 Offset 0
-                              MemberDecorate 16(gl_AtomicCounterBlock_0) 1 Coherent
                               MemberDecorate 16(gl_AtomicCounterBlock_0) 1 Volatile
                               MemberDecorate 16(gl_AtomicCounterBlock_0) 1 Coherent
                               MemberDecorate 16(gl_AtomicCounterBlock_0) 1 Offset 4
-                              MemberDecorate 16(gl_AtomicCounterBlock_0) 2 Coherent
                               MemberDecorate 16(gl_AtomicCounterBlock_0) 2 Volatile
                               MemberDecorate 16(gl_AtomicCounterBlock_0) 2 Coherent
                               MemberDecorate 16(gl_AtomicCounterBlock_0) 2 Offset 8
-                              Decorate 16(gl_AtomicCounterBlock_0) BufferBlock
-                              Decorate 18 DescriptorSet 0
                               Decorate 18 Binding 1
+                              Decorate 18 DescriptorSet 0
+                              Decorate 35(gl_DefaultUniformBlock) Block
                               MemberDecorate 35(gl_DefaultUniformBlock) 0 Offset 0
                               MemberDecorate 35(gl_DefaultUniformBlock) 1 Offset 16
                               MemberDecorate 35(gl_DefaultUniformBlock) 2 Offset 24
                               MemberDecorate 35(gl_DefaultUniformBlock) 3 Offset 32
                               MemberDecorate 35(gl_DefaultUniformBlock) 4 Offset 48
                               MemberDecorate 35(gl_DefaultUniformBlock) 5 Offset 64
-                              Decorate 35(gl_DefaultUniformBlock) Block
-                              Decorate 37 DescriptorSet 0
                               Decorate 37 Binding 0
+                              Decorate 37 DescriptorSet 0
                               Decorate 68(o) Location 0
                2:             TypeVoid
                3:             TypeFunction 2
diff --git a/Test/baseResults/vk.relaxed.stagelink.0.0.vert.out b/Test/baseResults/vk.relaxed.stagelink.0.0.vert.out
old mode 100755
new mode 100644
index 37532ed..5ab08ae
--- a/Test/baseResults/vk.relaxed.stagelink.0.0.vert.out
+++ b/Test/baseResults/vk.relaxed.stagelink.0.0.vert.out
@@ -7325,71 +7325,72 @@
                               Name 934  "mTD3DImageOutputs"
                               Name 938  "mTDCubeImageOutputs"
                               Decorate 207(uv) Location 3
+                              Decorate 214(Vertex) Block
                               MemberDecorate 214(Vertex) 3 Flat
                               MemberDecorate 214(Vertex) 4 Flat
-                              Decorate 214(Vertex) Block
                               Decorate 216(oVert) Location 0
                               Decorate 226(P) Location 0
+                              Decorate 236(gl_PerVertex) Block
                               MemberDecorate 236(gl_PerVertex) 0 BuiltIn Position
                               MemberDecorate 236(gl_PerVertex) 1 BuiltIn PointSize
                               MemberDecorate 236(gl_PerVertex) 2 BuiltIn ClipDistance
                               MemberDecorate 236(gl_PerVertex) 3 BuiltIn CullDistance
-                              Decorate 236(gl_PerVertex) Block
                               Decorate 256(Cd) Location 2
                               MemberDecorate 269(TDMatrix) 0 ColMajor
-                              MemberDecorate 269(TDMatrix) 0 Offset 0
                               MemberDecorate 269(TDMatrix) 0 MatrixStride 16
+                              MemberDecorate 269(TDMatrix) 0 Offset 0
                               MemberDecorate 269(TDMatrix) 1 ColMajor
-                              MemberDecorate 269(TDMatrix) 1 Offset 64
                               MemberDecorate 269(TDMatrix) 1 MatrixStride 16
+                              MemberDecorate 269(TDMatrix) 1 Offset 64
                               MemberDecorate 269(TDMatrix) 2 ColMajor
-                              MemberDecorate 269(TDMatrix) 2 Offset 128
                               MemberDecorate 269(TDMatrix) 2 MatrixStride 16
+                              MemberDecorate 269(TDMatrix) 2 Offset 128
                               MemberDecorate 269(TDMatrix) 3 ColMajor
-                              MemberDecorate 269(TDMatrix) 3 Offset 192
                               MemberDecorate 269(TDMatrix) 3 MatrixStride 16
+                              MemberDecorate 269(TDMatrix) 3 Offset 192
                               MemberDecorate 269(TDMatrix) 4 ColMajor
-                              MemberDecorate 269(TDMatrix) 4 Offset 256
                               MemberDecorate 269(TDMatrix) 4 MatrixStride 16
+                              MemberDecorate 269(TDMatrix) 4 Offset 256
                               MemberDecorate 269(TDMatrix) 5 ColMajor
-                              MemberDecorate 269(TDMatrix) 5 Offset 320
                               MemberDecorate 269(TDMatrix) 5 MatrixStride 16
+                              MemberDecorate 269(TDMatrix) 5 Offset 320
                               MemberDecorate 269(TDMatrix) 6 ColMajor
-                              MemberDecorate 269(TDMatrix) 6 Offset 384
                               MemberDecorate 269(TDMatrix) 6 MatrixStride 16
+                              MemberDecorate 269(TDMatrix) 6 Offset 384
                               MemberDecorate 269(TDMatrix) 7 ColMajor
-                              MemberDecorate 269(TDMatrix) 7 Offset 448
                               MemberDecorate 269(TDMatrix) 7 MatrixStride 16
+                              MemberDecorate 269(TDMatrix) 7 Offset 448
                               MemberDecorate 269(TDMatrix) 8 ColMajor
-                              MemberDecorate 269(TDMatrix) 8 Offset 512
                               MemberDecorate 269(TDMatrix) 8 MatrixStride 16
+                              MemberDecorate 269(TDMatrix) 8 Offset 512
                               MemberDecorate 269(TDMatrix) 9 ColMajor
-                              MemberDecorate 269(TDMatrix) 9 Offset 576
                               MemberDecorate 269(TDMatrix) 9 MatrixStride 16
+                              MemberDecorate 269(TDMatrix) 9 Offset 576
                               MemberDecorate 269(TDMatrix) 10 ColMajor
-                              MemberDecorate 269(TDMatrix) 10 Offset 640
                               MemberDecorate 269(TDMatrix) 10 MatrixStride 16
+                              MemberDecorate 269(TDMatrix) 10 Offset 640
                               MemberDecorate 269(TDMatrix) 11 ColMajor
-                              MemberDecorate 269(TDMatrix) 11 Offset 704
                               MemberDecorate 269(TDMatrix) 11 MatrixStride 16
+                              MemberDecorate 269(TDMatrix) 11 Offset 704
                               MemberDecorate 269(TDMatrix) 12 ColMajor
-                              MemberDecorate 269(TDMatrix) 12 Offset 768
                               MemberDecorate 269(TDMatrix) 12 MatrixStride 16
+                              MemberDecorate 269(TDMatrix) 12 Offset 768
                               MemberDecorate 269(TDMatrix) 13 ColMajor
-                              MemberDecorate 269(TDMatrix) 13 Offset 832
                               MemberDecorate 269(TDMatrix) 13 MatrixStride 16
+                              MemberDecorate 269(TDMatrix) 13 Offset 832
                               MemberDecorate 269(TDMatrix) 14 ColMajor
-                              MemberDecorate 269(TDMatrix) 14 Offset 880
                               MemberDecorate 269(TDMatrix) 14 MatrixStride 16
+                              MemberDecorate 269(TDMatrix) 14 Offset 880
                               MemberDecorate 269(TDMatrix) 15 ColMajor
-                              MemberDecorate 269(TDMatrix) 15 Offset 928
                               MemberDecorate 269(TDMatrix) 15 MatrixStride 16
+                              MemberDecorate 269(TDMatrix) 15 Offset 928
                               Decorate 270 ArrayStride 976
-                              MemberDecorate 271(TDMatricesBlock) 0 Offset 0
                               Decorate 271(TDMatricesBlock) Block
-                              Decorate 273 DescriptorSet 0
+                              MemberDecorate 271(TDMatricesBlock) 0 Offset 0
                               Decorate 273 Binding 1
+                              Decorate 273 DescriptorSet 0
                               Decorate 297(gl_InstanceIndex) BuiltIn InstanceIndex
+                              Decorate 299(gl_DefaultUniformBlock) Block
                               MemberDecorate 299(gl_DefaultUniformBlock) 0 Offset 0
                               MemberDecorate 299(gl_DefaultUniformBlock) 1 Offset 4
                               MemberDecorate 299(gl_DefaultUniformBlock) 2 Offset 8
@@ -7398,34 +7399,33 @@
                               MemberDecorate 299(gl_DefaultUniformBlock) 5 Offset 32
                               MemberDecorate 299(gl_DefaultUniformBlock) 6 Offset 48
                               MemberDecorate 299(gl_DefaultUniformBlock) 7 Offset 64
-                              Decorate 299(gl_DefaultUniformBlock) Block
-                              Decorate 301 DescriptorSet 0
                               Decorate 301 Binding 0
-                              Decorate 371(sTDInstanceTexCoord) DescriptorSet 0
+                              Decorate 301 DescriptorSet 0
                               Decorate 371(sTDInstanceTexCoord) Binding 16
-                              Decorate 400(sTDInstanceT) DescriptorSet 0
+                              Decorate 371(sTDInstanceTexCoord) DescriptorSet 0
                               Decorate 400(sTDInstanceT) Binding 15
-                              Decorate 665(sTDInstanceColor) DescriptorSet 0
+                              Decorate 400(sTDInstanceT) DescriptorSet 0
                               Decorate 665(sTDInstanceColor) Binding 17
+                              Decorate 665(sTDInstanceColor) DescriptorSet 0
                               MemberDecorate 896(TDCameraInfo) 0 Offset 0
                               MemberDecorate 896(TDCameraInfo) 1 Offset 16
                               MemberDecorate 896(TDCameraInfo) 2 Offset 32
                               MemberDecorate 896(TDCameraInfo) 3 Offset 48
                               Decorate 897 ArrayStride 64
-                              MemberDecorate 898(TDCameraInfoBlock) 0 Offset 0
                               Decorate 898(TDCameraInfoBlock) Block
-                              Decorate 900 DescriptorSet 0
+                              MemberDecorate 898(TDCameraInfoBlock) 0 Offset 0
                               Decorate 900 Binding 0
+                              Decorate 900 DescriptorSet 0
                               MemberDecorate 901(TDGeneral) 0 Offset 0
                               MemberDecorate 901(TDGeneral) 1 Offset 16
                               MemberDecorate 901(TDGeneral) 2 Offset 32
                               MemberDecorate 901(TDGeneral) 3 Offset 48
                               MemberDecorate 901(TDGeneral) 4 Offset 64
                               MemberDecorate 901(TDGeneral) 5 Offset 80
-                              MemberDecorate 902(TDGeneralBlock) 0 Offset 0
                               Decorate 902(TDGeneralBlock) Block
-                              Decorate 904 DescriptorSet 0
+                              MemberDecorate 902(TDGeneralBlock) 0 Offset 0
                               Decorate 904 Binding 0
+                              Decorate 904 DescriptorSet 0
                               Decorate 905(N) Location 1
                               Decorate 906(gl_VertexIndex) BuiltIn VertexIndex
                               MemberDecorate 907(TDLight) 0 Offset 0
@@ -7437,44 +7437,46 @@
                               MemberDecorate 907(TDLight) 6 Offset 96
                               MemberDecorate 907(TDLight) 7 Offset 112
                               MemberDecorate 907(TDLight) 8 ColMajor
-                              MemberDecorate 907(TDLight) 8 Offset 128
                               MemberDecorate 907(TDLight) 8 MatrixStride 16
+                              MemberDecorate 907(TDLight) 8 Offset 128
                               MemberDecorate 907(TDLight) 9 ColMajor
-                              MemberDecorate 907(TDLight) 9 Offset 192
                               MemberDecorate 907(TDLight) 9 MatrixStride 16
+                              MemberDecorate 907(TDLight) 9 Offset 192
                               MemberDecorate 907(TDLight) 10 Offset 256
                               MemberDecorate 907(TDLight) 11 ColMajor
-                              MemberDecorate 907(TDLight) 11 Offset 272
                               MemberDecorate 907(TDLight) 11 MatrixStride 16
+                              MemberDecorate 907(TDLight) 11 Offset 272
                               Decorate 908 ArrayStride 336
-                              MemberDecorate 909(TDLightBlock) 0 Offset 0
                               Decorate 909(TDLightBlock) Block
-                              Decorate 911 DescriptorSet 0
+                              MemberDecorate 909(TDLightBlock) 0 Offset 0
                               Decorate 911 Binding 0
+                              Decorate 911 DescriptorSet 0
                               MemberDecorate 912(TDEnvLight) 0 Offset 0
                               MemberDecorate 912(TDEnvLight) 1 ColMajor
-                              MemberDecorate 912(TDEnvLight) 1 Offset 16
                               MemberDecorate 912(TDEnvLight) 1 MatrixStride 16
+                              MemberDecorate 912(TDEnvLight) 1 Offset 16
                               Decorate 913 ArrayStride 64
-                              MemberDecorate 914(TDEnvLightBlock) 0 Offset 0
                               Decorate 914(TDEnvLightBlock) Block
-                              Decorate 916 DescriptorSet 0
+                              MemberDecorate 914(TDEnvLightBlock) 0 Offset 0
                               Decorate 916 Binding 0
+                              Decorate 916 DescriptorSet 0
                               Decorate 918 ArrayStride 16
+                              Decorate 919(TDEnvLightBuffer) BufferBlock
                               MemberDecorate 919(TDEnvLightBuffer) 0 Restrict
                               MemberDecorate 919(TDEnvLightBuffer) 0 NonWritable
                               MemberDecorate 919(TDEnvLightBuffer) 0 Offset 0
-                              Decorate 919(TDEnvLightBuffer) BufferBlock
-                              Decorate 922(uTDEnvLightBuffers) DescriptorSet 0
+                              Decorate 922(uTDEnvLightBuffers) Restrict
+                              Decorate 922(uTDEnvLightBuffers) NonWritable
                               Decorate 922(uTDEnvLightBuffers) Binding 0
-                              Decorate 926(mTD2DImageOutputs) DescriptorSet 0
+                              Decorate 922(uTDEnvLightBuffers) DescriptorSet 0
                               Decorate 926(mTD2DImageOutputs) Binding 0
-                              Decorate 930(mTD2DArrayImageOutputs) DescriptorSet 0
+                              Decorate 926(mTD2DImageOutputs) DescriptorSet 0
                               Decorate 930(mTD2DArrayImageOutputs) Binding 0
-                              Decorate 934(mTD3DImageOutputs) DescriptorSet 0
+                              Decorate 930(mTD2DArrayImageOutputs) DescriptorSet 0
                               Decorate 934(mTD3DImageOutputs) Binding 0
-                              Decorate 938(mTDCubeImageOutputs) DescriptorSet 0
+                              Decorate 934(mTD3DImageOutputs) DescriptorSet 0
                               Decorate 938(mTDCubeImageOutputs) Binding 0
+                              Decorate 938(mTDCubeImageOutputs) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
@@ -8999,12 +9001,13 @@
                               Name 1293  "TDEnvLightBuffer"
                               MemberName 1293(TDEnvLightBuffer) 0  "shCoeffs"
                               Name 1296  "uTDEnvLightBuffers"
+                              Decorate 334(Vertex) Block
                               MemberDecorate 334(Vertex) 3 Flat
                               MemberDecorate 334(Vertex) 4 Flat
-                              Decorate 334(Vertex) Block
                               Decorate 336(iVert) Location 0
-                              Decorate 363(sColorMap) DescriptorSet 0
                               Decorate 363(sColorMap) Binding 2
+                              Decorate 363(sColorMap) DescriptorSet 0
+                              Decorate 374(gl_DefaultUniformBlock) Block
                               MemberDecorate 374(gl_DefaultUniformBlock) 0 Offset 0
                               MemberDecorate 374(gl_DefaultUniformBlock) 1 Offset 4
                               MemberDecorate 374(gl_DefaultUniformBlock) 2 Offset 8
@@ -9013,102 +9016,101 @@
                               MemberDecorate 374(gl_DefaultUniformBlock) 5 Offset 32
                               MemberDecorate 374(gl_DefaultUniformBlock) 6 Offset 48
                               MemberDecorate 374(gl_DefaultUniformBlock) 7 Offset 64
-                              Decorate 374(gl_DefaultUniformBlock) Block
-                              Decorate 376 DescriptorSet 0
                               Decorate 376 Binding 0
+                              Decorate 376 DescriptorSet 0
                               Decorate 429(oFragColor) Location 0
-                              Decorate 456(sTDNoiseMap) DescriptorSet 0
                               Decorate 456(sTDNoiseMap) Binding 3
+                              Decorate 456(sTDNoiseMap) DescriptorSet 0
                               Decorate 458(gl_FragCoord) BuiltIn FragCoord
                               Decorate 485(gl_FrontFacing) BuiltIn FrontFacing
-                              Decorate 931(sTDInstanceTexCoord) DescriptorSet 0
                               Decorate 931(sTDInstanceTexCoord) Binding 16
-                              Decorate 958(sTDInstanceT) DescriptorSet 0
+                              Decorate 931(sTDInstanceTexCoord) DescriptorSet 0
                               Decorate 958(sTDInstanceT) Binding 15
-                              Decorate 1219(sTDInstanceColor) DescriptorSet 0
+                              Decorate 958(sTDInstanceT) DescriptorSet 0
                               Decorate 1219(sTDInstanceColor) Binding 17
+                              Decorate 1219(sTDInstanceColor) DescriptorSet 0
                               MemberDecorate 1253(TDMatrix) 0 ColMajor
-                              MemberDecorate 1253(TDMatrix) 0 Offset 0
                               MemberDecorate 1253(TDMatrix) 0 MatrixStride 16
+                              MemberDecorate 1253(TDMatrix) 0 Offset 0
                               MemberDecorate 1253(TDMatrix) 1 ColMajor
-                              MemberDecorate 1253(TDMatrix) 1 Offset 64
                               MemberDecorate 1253(TDMatrix) 1 MatrixStride 16
+                              MemberDecorate 1253(TDMatrix) 1 Offset 64
                               MemberDecorate 1253(TDMatrix) 2 ColMajor
-                              MemberDecorate 1253(TDMatrix) 2 Offset 128
                               MemberDecorate 1253(TDMatrix) 2 MatrixStride 16
+                              MemberDecorate 1253(TDMatrix) 2 Offset 128
                               MemberDecorate 1253(TDMatrix) 3 ColMajor
-                              MemberDecorate 1253(TDMatrix) 3 Offset 192
                               MemberDecorate 1253(TDMatrix) 3 MatrixStride 16
+                              MemberDecorate 1253(TDMatrix) 3 Offset 192
                               MemberDecorate 1253(TDMatrix) 4 ColMajor
-                              MemberDecorate 1253(TDMatrix) 4 Offset 256
                               MemberDecorate 1253(TDMatrix) 4 MatrixStride 16
+                              MemberDecorate 1253(TDMatrix) 4 Offset 256
                               MemberDecorate 1253(TDMatrix) 5 ColMajor
-                              MemberDecorate 1253(TDMatrix) 5 Offset 320
                               MemberDecorate 1253(TDMatrix) 5 MatrixStride 16
+                              MemberDecorate 1253(TDMatrix) 5 Offset 320
                               MemberDecorate 1253(TDMatrix) 6 ColMajor
-                              MemberDecorate 1253(TDMatrix) 6 Offset 384
                               MemberDecorate 1253(TDMatrix) 6 MatrixStride 16
+                              MemberDecorate 1253(TDMatrix) 6 Offset 384
                               MemberDecorate 1253(TDMatrix) 7 ColMajor
-                              MemberDecorate 1253(TDMatrix) 7 Offset 448
                               MemberDecorate 1253(TDMatrix) 7 MatrixStride 16
+                              MemberDecorate 1253(TDMatrix) 7 Offset 448
                               MemberDecorate 1253(TDMatrix) 8 ColMajor
-                              MemberDecorate 1253(TDMatrix) 8 Offset 512
                               MemberDecorate 1253(TDMatrix) 8 MatrixStride 16
+                              MemberDecorate 1253(TDMatrix) 8 Offset 512
                               MemberDecorate 1253(TDMatrix) 9 ColMajor
-                              MemberDecorate 1253(TDMatrix) 9 Offset 576
                               MemberDecorate 1253(TDMatrix) 9 MatrixStride 16
+                              MemberDecorate 1253(TDMatrix) 9 Offset 576
                               MemberDecorate 1253(TDMatrix) 10 ColMajor
-                              MemberDecorate 1253(TDMatrix) 10 Offset 640
                               MemberDecorate 1253(TDMatrix) 10 MatrixStride 16
+                              MemberDecorate 1253(TDMatrix) 10 Offset 640
                               MemberDecorate 1253(TDMatrix) 11 ColMajor
-                              MemberDecorate 1253(TDMatrix) 11 Offset 704
                               MemberDecorate 1253(TDMatrix) 11 MatrixStride 16
+                              MemberDecorate 1253(TDMatrix) 11 Offset 704
                               MemberDecorate 1253(TDMatrix) 12 ColMajor
-                              MemberDecorate 1253(TDMatrix) 12 Offset 768
                               MemberDecorate 1253(TDMatrix) 12 MatrixStride 16
+                              MemberDecorate 1253(TDMatrix) 12 Offset 768
                               MemberDecorate 1253(TDMatrix) 13 ColMajor
-                              MemberDecorate 1253(TDMatrix) 13 Offset 832
                               MemberDecorate 1253(TDMatrix) 13 MatrixStride 16
+                              MemberDecorate 1253(TDMatrix) 13 Offset 832
                               MemberDecorate 1253(TDMatrix) 14 ColMajor
-                              MemberDecorate 1253(TDMatrix) 14 Offset 880
                               MemberDecorate 1253(TDMatrix) 14 MatrixStride 16
+                              MemberDecorate 1253(TDMatrix) 14 Offset 880
                               MemberDecorate 1253(TDMatrix) 15 ColMajor
-                              MemberDecorate 1253(TDMatrix) 15 Offset 928
                               MemberDecorate 1253(TDMatrix) 15 MatrixStride 16
+                              MemberDecorate 1253(TDMatrix) 15 Offset 928
                               Decorate 1254 ArrayStride 976
-                              MemberDecorate 1255(TDMatricesBlock) 0 Offset 0
                               Decorate 1255(TDMatricesBlock) Block
-                              Decorate 1257 DescriptorSet 0
+                              MemberDecorate 1255(TDMatricesBlock) 0 Offset 0
                               Decorate 1257 Binding 1
+                              Decorate 1257 DescriptorSet 0
                               MemberDecorate 1258(TDCameraInfo) 0 Offset 0
                               MemberDecorate 1258(TDCameraInfo) 1 Offset 16
                               MemberDecorate 1258(TDCameraInfo) 2 Offset 32
                               MemberDecorate 1258(TDCameraInfo) 3 Offset 48
                               Decorate 1259 ArrayStride 64
-                              MemberDecorate 1260(TDCameraInfoBlock) 0 Offset 0
                               Decorate 1260(TDCameraInfoBlock) Block
-                              Decorate 1262 DescriptorSet 0
+                              MemberDecorate 1260(TDCameraInfoBlock) 0 Offset 0
                               Decorate 1262 Binding 0
+                              Decorate 1262 DescriptorSet 0
                               MemberDecorate 1263(TDGeneral) 0 Offset 0
                               MemberDecorate 1263(TDGeneral) 1 Offset 16
                               MemberDecorate 1263(TDGeneral) 2 Offset 32
                               MemberDecorate 1263(TDGeneral) 3 Offset 48
                               MemberDecorate 1263(TDGeneral) 4 Offset 64
                               MemberDecorate 1263(TDGeneral) 5 Offset 80
-                              MemberDecorate 1264(TDGeneralBlock) 0 Offset 0
                               Decorate 1264(TDGeneralBlock) Block
-                              Decorate 1266 DescriptorSet 0
+                              MemberDecorate 1264(TDGeneralBlock) 0 Offset 0
                               Decorate 1266 Binding 0
-                              Decorate 1270(sTDSineLookup) DescriptorSet 0
+                              Decorate 1266 DescriptorSet 0
                               Decorate 1270(sTDSineLookup) Binding 0
-                              Decorate 1271(sTDWhite2D) DescriptorSet 0
+                              Decorate 1270(sTDSineLookup) DescriptorSet 0
                               Decorate 1271(sTDWhite2D) Binding 0
-                              Decorate 1275(sTDWhite3D) DescriptorSet 0
+                              Decorate 1271(sTDWhite2D) DescriptorSet 0
                               Decorate 1275(sTDWhite3D) Binding 0
-                              Decorate 1276(sTDWhite2DArray) DescriptorSet 0
+                              Decorate 1275(sTDWhite3D) DescriptorSet 0
                               Decorate 1276(sTDWhite2DArray) Binding 0
-                              Decorate 1280(sTDWhiteCube) DescriptorSet 0
+                              Decorate 1276(sTDWhite2DArray) DescriptorSet 0
                               Decorate 1280(sTDWhiteCube) Binding 0
+                              Decorate 1280(sTDWhiteCube) DescriptorSet 0
                               MemberDecorate 1281(TDLight) 0 Offset 0
                               MemberDecorate 1281(TDLight) 1 Offset 16
                               MemberDecorate 1281(TDLight) 2 Offset 32
@@ -9118,36 +9120,38 @@
                               MemberDecorate 1281(TDLight) 6 Offset 96
                               MemberDecorate 1281(TDLight) 7 Offset 112
                               MemberDecorate 1281(TDLight) 8 ColMajor
-                              MemberDecorate 1281(TDLight) 8 Offset 128
                               MemberDecorate 1281(TDLight) 8 MatrixStride 16
+                              MemberDecorate 1281(TDLight) 8 Offset 128
                               MemberDecorate 1281(TDLight) 9 ColMajor
-                              MemberDecorate 1281(TDLight) 9 Offset 192
                               MemberDecorate 1281(TDLight) 9 MatrixStride 16
+                              MemberDecorate 1281(TDLight) 9 Offset 192
                               MemberDecorate 1281(TDLight) 10 Offset 256
                               MemberDecorate 1281(TDLight) 11 ColMajor
-                              MemberDecorate 1281(TDLight) 11 Offset 272
                               MemberDecorate 1281(TDLight) 11 MatrixStride 16
+                              MemberDecorate 1281(TDLight) 11 Offset 272
                               Decorate 1282 ArrayStride 336
-                              MemberDecorate 1283(TDLightBlock) 0 Offset 0
                               Decorate 1283(TDLightBlock) Block
-                              Decorate 1285 DescriptorSet 0
+                              MemberDecorate 1283(TDLightBlock) 0 Offset 0
                               Decorate 1285 Binding 0
+                              Decorate 1285 DescriptorSet 0
                               MemberDecorate 1286(TDEnvLight) 0 Offset 0
                               MemberDecorate 1286(TDEnvLight) 1 ColMajor
-                              MemberDecorate 1286(TDEnvLight) 1 Offset 16
                               MemberDecorate 1286(TDEnvLight) 1 MatrixStride 16
+                              MemberDecorate 1286(TDEnvLight) 1 Offset 16
                               Decorate 1287 ArrayStride 64
-                              MemberDecorate 1288(TDEnvLightBlock) 0 Offset 0
                               Decorate 1288(TDEnvLightBlock) Block
-                              Decorate 1290 DescriptorSet 0
+                              MemberDecorate 1288(TDEnvLightBlock) 0 Offset 0
                               Decorate 1290 Binding 0
+                              Decorate 1290 DescriptorSet 0
                               Decorate 1292 ArrayStride 16
+                              Decorate 1293(TDEnvLightBuffer) BufferBlock
                               MemberDecorate 1293(TDEnvLightBuffer) 0 Restrict
                               MemberDecorate 1293(TDEnvLightBuffer) 0 NonWritable
                               MemberDecorate 1293(TDEnvLightBuffer) 0 Offset 0
-                              Decorate 1293(TDEnvLightBuffer) BufferBlock
-                              Decorate 1296(uTDEnvLightBuffers) DescriptorSet 0
+                              Decorate 1296(uTDEnvLightBuffers) Restrict
+                              Decorate 1296(uTDEnvLightBuffers) NonWritable
                               Decorate 1296(uTDEnvLightBuffers) Binding 0
+                              Decorate 1296(uTDEnvLightBuffers) DescriptorSet 0
                2:             TypeVoid
                3:             TypeFunction 2
                6:             TypeFloat 32
diff --git a/Test/baseResults/vk.relaxed.stagelink.vert.out b/Test/baseResults/vk.relaxed.stagelink.vert.out
index 47e1b4f..99da541 100644
--- a/Test/baseResults/vk.relaxed.stagelink.vert.out
+++ b/Test/baseResults/vk.relaxed.stagelink.vert.out
@@ -465,22 +465,20 @@
                               Name 72  "gl_VertexIndex"
                               Name 82  "gl_InstanceIndex"
                               Name 90  "io"
-                              MemberDecorate 14(gl_AtomicCounterBlock_0) 0 Coherent
+                              Decorate 14(gl_AtomicCounterBlock_0) BufferBlock
                               MemberDecorate 14(gl_AtomicCounterBlock_0) 0 Volatile
                               MemberDecorate 14(gl_AtomicCounterBlock_0) 0 Coherent
                               MemberDecorate 14(gl_AtomicCounterBlock_0) 0 Offset 0
-                              MemberDecorate 14(gl_AtomicCounterBlock_0) 1 Coherent
                               MemberDecorate 14(gl_AtomicCounterBlock_0) 1 Volatile
                               MemberDecorate 14(gl_AtomicCounterBlock_0) 1 Coherent
                               MemberDecorate 14(gl_AtomicCounterBlock_0) 1 Offset 4
-                              MemberDecorate 14(gl_AtomicCounterBlock_0) 2 Coherent
                               MemberDecorate 14(gl_AtomicCounterBlock_0) 2 Volatile
                               MemberDecorate 14(gl_AtomicCounterBlock_0) 2 Coherent
                               MemberDecorate 14(gl_AtomicCounterBlock_0) 2 Offset 8
-                              Decorate 14(gl_AtomicCounterBlock_0) BufferBlock
-                              Decorate 16 DescriptorSet 0
                               Decorate 16 Binding 1
+                              Decorate 16 DescriptorSet 0
                               Decorate 34 ArrayStride 16
+                              Decorate 35(gl_DefaultUniformBlock) Block
                               MemberDecorate 35(gl_DefaultUniformBlock) 0 Offset 0
                               MemberDecorate 35(gl_DefaultUniformBlock) 1 Offset 16
                               MemberDecorate 35(gl_DefaultUniformBlock) 2 Offset 24
@@ -488,9 +486,8 @@
                               MemberDecorate 35(gl_DefaultUniformBlock) 4 Offset 48
                               MemberDecorate 35(gl_DefaultUniformBlock) 5 Offset 64
                               MemberDecorate 35(gl_DefaultUniformBlock) 6 Offset 128
-                              Decorate 35(gl_DefaultUniformBlock) Block
-                              Decorate 37 DescriptorSet 0
                               Decorate 37 Binding 0
+                              Decorate 37 DescriptorSet 0
                               Decorate 72(gl_VertexIndex) BuiltIn VertexIndex
                               Decorate 82(gl_InstanceIndex) BuiltIn InstanceIndex
                               Decorate 90(io) Location 0
@@ -622,22 +619,20 @@
                               Name 37  ""
                               Name 68  "o"
                               Name 70  "io"
-                              MemberDecorate 14(gl_AtomicCounterBlock_0) 0 Coherent
+                              Decorate 14(gl_AtomicCounterBlock_0) BufferBlock
                               MemberDecorate 14(gl_AtomicCounterBlock_0) 0 Volatile
                               MemberDecorate 14(gl_AtomicCounterBlock_0) 0 Coherent
                               MemberDecorate 14(gl_AtomicCounterBlock_0) 0 Offset 0
-                              MemberDecorate 14(gl_AtomicCounterBlock_0) 1 Coherent
                               MemberDecorate 14(gl_AtomicCounterBlock_0) 1 Volatile
                               MemberDecorate 14(gl_AtomicCounterBlock_0) 1 Coherent
                               MemberDecorate 14(gl_AtomicCounterBlock_0) 1 Offset 4
-                              MemberDecorate 14(gl_AtomicCounterBlock_0) 2 Coherent
                               MemberDecorate 14(gl_AtomicCounterBlock_0) 2 Volatile
                               MemberDecorate 14(gl_AtomicCounterBlock_0) 2 Coherent
                               MemberDecorate 14(gl_AtomicCounterBlock_0) 2 Offset 8
-                              Decorate 14(gl_AtomicCounterBlock_0) BufferBlock
-                              Decorate 16 DescriptorSet 0
                               Decorate 16 Binding 1
+                              Decorate 16 DescriptorSet 0
                               Decorate 34 ArrayStride 16
+                              Decorate 35(gl_DefaultUniformBlock) Block
                               MemberDecorate 35(gl_DefaultUniformBlock) 0 Offset 0
                               MemberDecorate 35(gl_DefaultUniformBlock) 1 Offset 16
                               MemberDecorate 35(gl_DefaultUniformBlock) 2 Offset 24
@@ -645,9 +640,8 @@
                               MemberDecorate 35(gl_DefaultUniformBlock) 4 Offset 48
                               MemberDecorate 35(gl_DefaultUniformBlock) 5 Offset 64
                               MemberDecorate 35(gl_DefaultUniformBlock) 6 Offset 128
-                              Decorate 35(gl_DefaultUniformBlock) Block
-                              Decorate 37 DescriptorSet 0
                               Decorate 37 Binding 0
+                              Decorate 37 DescriptorSet 0
                               Decorate 68(o) Location 0
                               Decorate 70(io) Location 0
                2:             TypeVoid
diff --git a/Test/error-column.vert b/Test/error-column.vert
new file mode 100644
index 0000000..2ed97e7
--- /dev/null
+++ b/Test/error-column.vert
@@ -0,0 +1,27 @@
+#version 450 core
+
+layout (location = 0) in vec3 aPos;
+layout (location = 1) in vec2 aTexCoords;
+
+layout (binding = 0) uniform block {
+    const mat4 model;
+    const mat4 view;
+    const mat4 projection;
+};
+
+layout (location = 0) out Vertex
+{
+    vec3 color;
+    vec3 worldSpacePos;
+    vec3 worldSpaceNorm;
+    const vec2 texCoord1;
+    flat int cameraIndex;
+    float ii;
+} vs_out;
+
+void main()
+{
+    gl_Position = projection * view * model * vec4(Pos, 1.0);  
+    vs_out.texCoord1 = aTexCoords;
+}
+
diff --git a/Test/gl_MaxSamples_32.conf b/Test/gl_MaxSamples_32.conf
new file mode 100644
index 0000000..a1baaf5
--- /dev/null
+++ b/Test/gl_MaxSamples_32.conf
@@ -0,0 +1,111 @@
+MaxLights 32
+MaxClipPlanes 6
+MaxTextureUnits 32
+MaxTextureCoords 32
+MaxVertexAttribs 64
+MaxVertexUniformComponents 4096
+MaxVaryingFloats 64
+MaxVertexTextureImageUnits 32
+MaxCombinedTextureImageUnits 80
+MaxTextureImageUnits 32
+MaxFragmentUniformComponents 4096
+MaxDrawBuffers 32
+MaxVertexUniformVectors 128
+MaxVaryingVectors 8
+MaxFragmentUniformVectors 16
+MaxVertexOutputVectors 16
+MaxFragmentInputVectors 15
+MinProgramTexelOffset -8
+MaxProgramTexelOffset 7
+MaxClipDistances 8
+MaxComputeWorkGroupCountX 65535
+MaxComputeWorkGroupCountY 65535
+MaxComputeWorkGroupCountZ 65535
+MaxComputeWorkGroupSizeX 1024
+MaxComputeWorkGroupSizeY 1024
+MaxComputeWorkGroupSizeZ 64
+MaxComputeUniformComponents 1024
+MaxComputeTextureImageUnits 16
+MaxComputeImageUniforms 8
+MaxComputeAtomicCounters 8
+MaxComputeAtomicCounterBuffers 1
+MaxVaryingComponents 60
+MaxVertexOutputComponents 64
+MaxGeometryInputComponents 64
+MaxGeometryOutputComponents 128
+MaxFragmentInputComponents 128
+MaxImageUnits 8
+MaxCombinedImageUnitsAndFragmentOutputs 8
+MaxCombinedShaderOutputResources 8
+MaxImageSamples 0
+MaxVertexImageUniforms 0
+MaxTessControlImageUniforms 0
+MaxTessEvaluationImageUniforms 0
+MaxGeometryImageUniforms 0
+MaxFragmentImageUniforms 8
+MaxCombinedImageUniforms 8
+MaxGeometryTextureImageUnits 16
+MaxGeometryOutputVertices 256
+MaxGeometryTotalOutputComponents 1024
+MaxGeometryUniformComponents 1024
+MaxGeometryVaryingComponents 64
+MaxTessControlInputComponents 128
+MaxTessControlOutputComponents 128
+MaxTessControlTextureImageUnits 16
+MaxTessControlUniformComponents 1024
+MaxTessControlTotalOutputComponents 4096
+MaxTessEvaluationInputComponents 128
+MaxTessEvaluationOutputComponents 128
+MaxTessEvaluationTextureImageUnits 16
+MaxTessEvaluationUniformComponents 1024
+MaxTessPatchComponents 120
+MaxPatchVertices 32
+MaxTessGenLevel 64
+MaxViewports 16
+MaxVertexAtomicCounters 0
+MaxTessControlAtomicCounters 0
+MaxTessEvaluationAtomicCounters 0
+MaxGeometryAtomicCounters 0
+MaxFragmentAtomicCounters 8
+MaxCombinedAtomicCounters 8
+MaxAtomicCounterBindings 1
+MaxVertexAtomicCounterBuffers 0
+MaxTessControlAtomicCounterBuffers 0
+MaxTessEvaluationAtomicCounterBuffers 0
+MaxGeometryAtomicCounterBuffers 0
+MaxFragmentAtomicCounterBuffers 1
+MaxCombinedAtomicCounterBuffers 1
+MaxAtomicCounterBufferSize 16384
+MaxTransformFeedbackBuffers 4
+MaxTransformFeedbackInterleavedComponents 64
+MaxCullDistances 8
+MaxCombinedClipAndCullDistances 8
+MaxSamples 32
+MaxMeshOutputVerticesNV 256
+MaxMeshOutputPrimitivesNV 512
+MaxMeshWorkGroupSizeX_NV 32
+MaxMeshWorkGroupSizeY_NV 1
+MaxMeshWorkGroupSizeZ_NV 1
+MaxTaskWorkGroupSizeX_NV 32
+MaxTaskWorkGroupSizeY_NV 1
+MaxTaskWorkGroupSizeZ_NV 1
+MaxMeshViewCountNV 4
+MaxMeshOutputVerticesEXT 256
+MaxMeshOutputPrimitivesEXT 256
+MaxMeshWorkGroupSizeX_EXT 128
+MaxMeshWorkGroupSizeY_EXT 128
+MaxMeshWorkGroupSizeZ_EXT 128
+MaxTaskWorkGroupSizeX_EXT 128
+MaxTaskWorkGroupSizeY_EXT 128
+MaxTaskWorkGroupSizeZ_EXT 128
+MaxMeshViewCountEXT 4
+MaxDualSourceDrawBuffersEXT 1
+nonInductiveForLoops 1
+whileLoops 1
+doWhileLoops 1
+generalUniformIndexing 1
+generalAttributeMatrixVectorIndexing 1
+generalVaryingIndexing 1
+generalSamplerIndexing 1
+generalVariableIndexing 1
+generalConstantMatrixVectorIndexing 1
\ No newline at end of file
diff --git a/Test/gl_MaxSamples_64.conf b/Test/gl_MaxSamples_64.conf
new file mode 100644
index 0000000..dcab319
--- /dev/null
+++ b/Test/gl_MaxSamples_64.conf
@@ -0,0 +1,111 @@
+MaxLights 32
+MaxClipPlanes 6
+MaxTextureUnits 32
+MaxTextureCoords 32
+MaxVertexAttribs 64
+MaxVertexUniformComponents 4096
+MaxVaryingFloats 64
+MaxVertexTextureImageUnits 32
+MaxCombinedTextureImageUnits 80
+MaxTextureImageUnits 32
+MaxFragmentUniformComponents 4096
+MaxDrawBuffers 32
+MaxVertexUniformVectors 128
+MaxVaryingVectors 8
+MaxFragmentUniformVectors 16
+MaxVertexOutputVectors 16
+MaxFragmentInputVectors 15
+MinProgramTexelOffset -8
+MaxProgramTexelOffset 7
+MaxClipDistances 8
+MaxComputeWorkGroupCountX 65535
+MaxComputeWorkGroupCountY 65535
+MaxComputeWorkGroupCountZ 65535
+MaxComputeWorkGroupSizeX 1024
+MaxComputeWorkGroupSizeY 1024
+MaxComputeWorkGroupSizeZ 64
+MaxComputeUniformComponents 1024
+MaxComputeTextureImageUnits 16
+MaxComputeImageUniforms 8
+MaxComputeAtomicCounters 8
+MaxComputeAtomicCounterBuffers 1
+MaxVaryingComponents 60
+MaxVertexOutputComponents 64
+MaxGeometryInputComponents 64
+MaxGeometryOutputComponents 128
+MaxFragmentInputComponents 128
+MaxImageUnits 8
+MaxCombinedImageUnitsAndFragmentOutputs 8
+MaxCombinedShaderOutputResources 8
+MaxImageSamples 0
+MaxVertexImageUniforms 0
+MaxTessControlImageUniforms 0
+MaxTessEvaluationImageUniforms 0
+MaxGeometryImageUniforms 0
+MaxFragmentImageUniforms 8
+MaxCombinedImageUniforms 8
+MaxGeometryTextureImageUnits 16
+MaxGeometryOutputVertices 256
+MaxGeometryTotalOutputComponents 1024
+MaxGeometryUniformComponents 1024
+MaxGeometryVaryingComponents 64
+MaxTessControlInputComponents 128
+MaxTessControlOutputComponents 128
+MaxTessControlTextureImageUnits 16
+MaxTessControlUniformComponents 1024
+MaxTessControlTotalOutputComponents 4096
+MaxTessEvaluationInputComponents 128
+MaxTessEvaluationOutputComponents 128
+MaxTessEvaluationTextureImageUnits 16
+MaxTessEvaluationUniformComponents 1024
+MaxTessPatchComponents 120
+MaxPatchVertices 32
+MaxTessGenLevel 64
+MaxViewports 16
+MaxVertexAtomicCounters 0
+MaxTessControlAtomicCounters 0
+MaxTessEvaluationAtomicCounters 0
+MaxGeometryAtomicCounters 0
+MaxFragmentAtomicCounters 8
+MaxCombinedAtomicCounters 8
+MaxAtomicCounterBindings 1
+MaxVertexAtomicCounterBuffers 0
+MaxTessControlAtomicCounterBuffers 0
+MaxTessEvaluationAtomicCounterBuffers 0
+MaxGeometryAtomicCounterBuffers 0
+MaxFragmentAtomicCounterBuffers 1
+MaxCombinedAtomicCounterBuffers 1
+MaxAtomicCounterBufferSize 16384
+MaxTransformFeedbackBuffers 4
+MaxTransformFeedbackInterleavedComponents 64
+MaxCullDistances 8
+MaxCombinedClipAndCullDistances 8
+MaxSamples 64
+MaxMeshOutputVerticesNV 256
+MaxMeshOutputPrimitivesNV 512
+MaxMeshWorkGroupSizeX_NV 32
+MaxMeshWorkGroupSizeY_NV 1
+MaxMeshWorkGroupSizeZ_NV 1
+MaxTaskWorkGroupSizeX_NV 32
+MaxTaskWorkGroupSizeY_NV 1
+MaxTaskWorkGroupSizeZ_NV 1
+MaxMeshViewCountNV 4
+MaxMeshOutputVerticesEXT 256
+MaxMeshOutputPrimitivesEXT 256
+MaxMeshWorkGroupSizeX_EXT 128
+MaxMeshWorkGroupSizeY_EXT 128
+MaxMeshWorkGroupSizeZ_EXT 128
+MaxTaskWorkGroupSizeX_EXT 128
+MaxTaskWorkGroupSizeY_EXT 128
+MaxTaskWorkGroupSizeZ_EXT 128
+MaxMeshViewCountEXT 4
+MaxDualSourceDrawBuffersEXT 1
+nonInductiveForLoops 1
+whileLoops 1
+doWhileLoops 1
+generalUniformIndexing 1
+generalAttributeMatrixVectorIndexing 1
+generalVaryingIndexing 1
+generalSamplerIndexing 1
+generalVariableIndexing 1
+generalConstantMatrixVectorIndexing 1
\ No newline at end of file
diff --git a/Test/gl_samplemask_array_size.frag b/Test/gl_samplemask_array_size.frag
new file mode 100644
index 0000000..52ef849
--- /dev/null
+++ b/Test/gl_samplemask_array_size.frag
@@ -0,0 +1,10 @@
+#version 320 es

+

+layout(location = 0) out mediump vec4 fragColor;

+void main (void)

+{

+       for (int i = 0; i < gl_SampleMask.length(); ++i)

+              gl_SampleMask[i] = int(0xAAAAAAAA);

+

+       fragColor = vec4(0.0, 1.0, 0.0, 1.0);

+}
\ No newline at end of file
diff --git a/Test/glsl.450.subgroupRotate.comp b/Test/glsl.450.subgroupRotate.comp
new file mode 100644
index 0000000..7f8c007
--- /dev/null
+++ b/Test/glsl.450.subgroupRotate.comp
@@ -0,0 +1,73 @@
+#version 450
+
+#extension GL_KHR_shader_subgroup_rotate: enable
+
+layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in;
+
+readonly buffer roblock
+{
+    uint delta;
+} ro;
+
+layout(binding = 0) buffer Buffers
+{
+    vec4  f4;
+    ivec4 i4;
+    uvec4 u4;
+    dvec4 d4;
+} data[4];
+
+void main()
+{
+    uint delta = ro.delta;
+
+    data[delta].f4.x   = subgroupRotate(data[0].f4.x,    delta);
+    data[delta].f4.xy  = subgroupRotate(data[1].f4.xy,   delta);
+    data[delta].f4.xyz = subgroupRotate(data[2].f4.xyz,  delta);
+    data[delta].f4     = subgroupRotate(data[3].f4,      delta);
+
+    data[delta].i4.x   = subgroupRotate(data[0].i4.x,    delta);
+    data[delta].i4.xy  = subgroupRotate(data[1].i4.xy,   delta);
+    data[delta].i4.xyz = subgroupRotate(data[2].i4.xyz,  delta);
+    data[delta].i4     = subgroupRotate(data[3].i4,      delta);
+
+    data[delta].u4.x   = subgroupRotate(data[0].u4.x,    delta);
+    data[delta].u4.xy  = subgroupRotate(data[1].u4.xy,   delta);
+    data[delta].u4.xyz = subgroupRotate(data[2].u4.xyz,  delta);
+    data[delta].u4     = subgroupRotate(data[3].u4,      delta);
+
+    data[delta].d4.x   = subgroupRotate(data[0].d4.x,    delta);
+    data[delta].d4.xy  = subgroupRotate(data[1].d4.xy,   delta);
+    data[delta].d4.xyz = subgroupRotate(data[2].d4.xyz,  delta);
+    data[delta].d4     = subgroupRotate(data[3].d4,      delta);
+
+    data[delta].i4.x   =   int(subgroupRotate(data[0].i4.x < 0,                   delta));
+    data[delta].i4.xy  = ivec2(subgroupRotate(lessThan(data[1].i4.xy, ivec2(0)),  delta));
+    data[delta].i4.xyz = ivec3(subgroupRotate(lessThan(data[1].i4.xyz, ivec3(0)), delta));
+    data[delta].i4     = ivec4(subgroupRotate(lessThan(data[1].i4, ivec4(0)),     delta));
+
+    data[delta].f4.x   = subgroupClusteredRotate(data[0].f4.x,    delta, 1);
+    data[delta].f4.xy  = subgroupClusteredRotate(data[1].f4.xy,   delta, 1);
+    data[delta].f4.xyz = subgroupClusteredRotate(data[2].f4.xyz,  delta, 1);
+    data[delta].f4     = subgroupClusteredRotate(data[3].f4,      delta, 1);
+
+    data[delta].i4.x   = subgroupClusteredRotate(data[0].i4.x,    delta, 1);
+    data[delta].i4.xy  = subgroupClusteredRotate(data[1].i4.xy,   delta, 1);
+    data[delta].i4.xyz = subgroupClusteredRotate(data[2].i4.xyz,  delta, 1);
+    data[delta].i4     = subgroupClusteredRotate(data[3].i4,      delta, 1);
+
+    data[delta].u4.x   = subgroupClusteredRotate(data[0].u4.x,    delta, 1);
+    data[delta].u4.xy  = subgroupClusteredRotate(data[1].u4.xy,   delta, 1);
+    data[delta].u4.xyz = subgroupClusteredRotate(data[2].u4.xyz,  delta, 1);
+    data[delta].u4     = subgroupClusteredRotate(data[3].u4,      delta, 1);
+
+    data[delta].d4.x   = subgroupClusteredRotate(data[0].d4.x,    delta, 1);
+    data[delta].d4.xy  = subgroupClusteredRotate(data[1].d4.xy,   delta, 1);
+    data[delta].d4.xyz = subgroupClusteredRotate(data[2].d4.xyz,  delta, 1);
+    data[delta].d4     = subgroupClusteredRotate(data[3].d4,      delta, 1);
+
+    data[delta].i4.x   =   int(subgroupClusteredRotate(data[0].i4.x < 0,                   delta, 1));
+    data[delta].i4.xy  = ivec2(subgroupClusteredRotate(lessThan(data[1].i4.xy, ivec2(0)),  delta, 1));
+    data[delta].i4.xyz = ivec3(subgroupClusteredRotate(lessThan(data[1].i4.xyz, ivec3(0)), delta, 1));
+    data[delta].i4     = ivec4(subgroupClusteredRotate(lessThan(data[1].i4, ivec4(0)),     delta, 1));
+}
diff --git a/Test/glsl.es320.subgroupRotate.comp b/Test/glsl.es320.subgroupRotate.comp
new file mode 100644
index 0000000..c59a84b
--- /dev/null
+++ b/Test/glsl.es320.subgroupRotate.comp
@@ -0,0 +1,62 @@
+#version 320 es
+
+#extension GL_KHR_shader_subgroup_rotate: enable
+
+layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in;
+
+readonly buffer roblock
+{
+    uint delta;
+} ro;
+
+layout(binding = 0) buffer Buffers
+{
+    vec4  f4;
+    ivec4 i4;
+    uvec4 u4;
+} data[4];
+
+void main()
+{
+    uint delta = ro.delta;
+
+    data[0].f4.x   = subgroupRotate(data[0].f4.x,    delta);
+    data[0].f4.xy  = subgroupRotate(data[1].f4.xy,   delta);
+    data[0].f4.xyz = subgroupRotate(data[2].f4.xyz,  delta);
+    data[0].f4     = subgroupRotate(data[3].f4,      delta);
+
+    data[0].i4.x   = subgroupRotate(data[0].i4.x,    delta);
+    data[0].i4.xy  = subgroupRotate(data[1].i4.xy,   delta);
+    data[0].i4.xyz = subgroupRotate(data[2].i4.xyz,  delta);
+    data[0].i4     = subgroupRotate(data[3].i4,      delta);
+
+    data[1].u4.x   = subgroupRotate(data[0].u4.x,    delta);
+    data[1].u4.xy  = subgroupRotate(data[1].u4.xy,   delta);
+    data[1].u4.xyz = subgroupRotate(data[2].u4.xyz,  delta);
+    data[1].u4     = subgroupRotate(data[3].u4,      delta);
+
+    data[1].i4.x   =   int(subgroupRotate(data[0].i4.x < 0,                   delta));
+    data[1].i4.xy  = ivec2(subgroupRotate(lessThan(data[1].i4.xy, ivec2(0)),  delta));
+    data[1].i4.xyz = ivec3(subgroupRotate(lessThan(data[1].i4.xyz, ivec3(0)), delta));
+    data[1].i4     = ivec4(subgroupRotate(lessThan(data[1].i4, ivec4(0)),     delta));
+
+    data[2].f4.x   = subgroupClusteredRotate(data[0].f4.x,    delta, 1u);
+    data[2].f4.xy  = subgroupClusteredRotate(data[1].f4.xy,   delta, 1u);
+    data[2].f4.xyz = subgroupClusteredRotate(data[2].f4.xyz,  delta, 1u);
+    data[2].f4     = subgroupClusteredRotate(data[3].f4,      delta, 1u);
+
+    data[2].i4.x   = subgroupClusteredRotate(data[0].i4.x,    delta, 1u);
+    data[2].i4.xy  = subgroupClusteredRotate(data[1].i4.xy,   delta, 1u);
+    data[2].i4.xyz = subgroupClusteredRotate(data[2].i4.xyz,  delta, 1u);
+    data[2].i4     = subgroupClusteredRotate(data[3].i4,      delta, 1u);
+
+    data[3].u4.x   = subgroupClusteredRotate(data[0].u4.x,    delta, 1u);
+    data[3].u4.xy  = subgroupClusteredRotate(data[1].u4.xy,   delta, 1u);
+    data[3].u4.xyz = subgroupClusteredRotate(data[2].u4.xyz,  delta, 1u);
+    data[3].u4     = subgroupClusteredRotate(data[3].u4,      delta, 1u);
+
+    data[3].i4.x   =   int(subgroupClusteredRotate(data[0].i4.x < 0,                   delta, 1u));
+    data[3].i4.xy  = ivec2(subgroupClusteredRotate(lessThan(data[1].i4.xy, ivec2(0)),  delta, 1u));
+    data[3].i4.xyz = ivec3(subgroupClusteredRotate(lessThan(data[1].i4.xyz, ivec3(0)), delta, 1u));
+    data[3].i4     = ivec4(subgroupClusteredRotate(lessThan(data[1].i4, ivec4(0)),     delta, 1u));
+}
diff --git a/Test/glsl.interpOp.error.frag b/Test/glsl.interpOp.error.frag
new file mode 100644
index 0000000..7d46f2e
--- /dev/null
+++ b/Test/glsl.interpOp.error.frag
@@ -0,0 +1,73 @@
+#version 320 es
+
+struct S
+{
+    highp float a;
+    highp float b;
+};
+layout(location = 0) in S v_var;
+
+layout(location = 2) in highp float v;
+
+struct S0 {
+    highp vec4 s_v;
+};
+
+layout(location = 3) in FIn {
+    highp float x;
+    highp vec4 xyz[1];
+    S0 s0;
+};
+
+layout(location = 7) in highp float z[1];
+
+layout(location = 8) in highp vec4 w;
+
+layout(location = 0) out mediump vec4 fragColor;
+void main (void)
+{
+    // Centroid
+    {
+        // valid
+        fragColor = vec4(interpolateAtCentroid(v));
+        fragColor = vec4(interpolateAtCentroid(x));
+        fragColor = vec4(interpolateAtCentroid(z[0]));
+        fragColor = interpolateAtCentroid(w);
+        fragColor = interpolateAtCentroid(xyz[0]);
+
+        //// invalid
+        fragColor = vec4(interpolateAtCentroid(v_var.a));
+        fragColor = vec4(interpolateAtCentroid(w.x));
+        fragColor = vec4(interpolateAtCentroid(s0.s_v));
+    }
+
+    // Sample
+    {
+        // valid
+        fragColor = vec4(interpolateAtSample(v, 0));
+        fragColor = vec4(interpolateAtSample(x, 0));
+        fragColor = vec4(interpolateAtSample(z[0], 0));
+        fragColor = interpolateAtSample(w, 0);
+        fragColor = interpolateAtSample(xyz[0], 0);
+
+        // invalid
+        fragColor = vec4(interpolateAtSample(v_var.a, 0));
+        fragColor = vec4(interpolateAtSample(w.x, 0));
+        fragColor = vec4(interpolateAtSample(s0.s_v, 0));
+    }
+
+    // Offset
+    {
+        // valid
+        fragColor = vec4(interpolateAtOffset(v,    vec2(0)));
+        fragColor = vec4(interpolateAtOffset(x,    vec2(0)));
+        fragColor = vec4(interpolateAtOffset(z[0], vec2(0)));
+        fragColor = interpolateAtOffset(w,         vec2(0));
+        fragColor = interpolateAtOffset(xyz[0],    vec2(0));
+
+        // invalid
+        fragColor = vec4(interpolateAtOffset(v_var.a, vec2(0)));
+        fragColor = vec4(interpolateAtOffset(w.x,     vec2(0)));
+        fragColor = vec4(interpolateAtOffset(s0.s_v, vec2(0)));
+    }
+}
diff --git a/Test/hlsl.buffer-offsets.comp b/Test/hlsl.buffer-offsets.comp
new file mode 100644
index 0000000..13e4052
--- /dev/null
+++ b/Test/hlsl.buffer-offsets.comp
@@ -0,0 +1,13 @@
+// See https://github.com/KhronosGroup/glslang/issues/3668
+
+struct GfxIterationData {
+    float mIntegrationTrafo[24];
+    float mWind[3];
+    uint mIsTurning;
+};
+
+StructuredBuffer<GfxIterationData> bIterData : register(t2);
+
+void main()
+{
+}
diff --git a/Test/hlsl.cbuffer-offsets.comp b/Test/hlsl.cbuffer-offsets.comp
new file mode 100644
index 0000000..de88d81
--- /dev/null
+++ b/Test/hlsl.cbuffer-offsets.comp
@@ -0,0 +1,44 @@
+// Correct offsets obtained from "HLSL Constant Buffer Visualizer"
+// https://maraneshi.github.io/HLSL-ConstantBufferLayoutVisualizer/
+
+cbuffer CB {
+    float f1;
+    float3 f3a3[3];
+    float f2;
+    float f3;
+
+    float1x1 m11;
+    float1x2 m12;
+    float2x1 m21;
+    float2x2 m22;
+
+    float3x3 m33;
+    float f4;
+
+    float3x4 m34;
+    float f5;
+
+    float4x3 m43;
+    float f6;
+
+    row_major float1x1 rm11;
+    row_major float1x2 rm12;
+    row_major float2x1 rm21;
+    row_major float2x2 rm22;
+
+    row_major float3x3 rm33;
+    float f7;
+
+    row_major float3x4 rm34;
+    float f8;
+
+    row_major float4x3 rm43;
+    float f9;
+
+    float f1a3[3];
+    float f10;
+};
+
+void main()
+{
+}
diff --git a/Test/hlsl.entry-inout.vert b/Test/hlsl.entry-inout.vert
new file mode 100644
index 0000000..859b030
--- /dev/null
+++ b/Test/hlsl.entry-inout.vert
@@ -0,0 +1 @@
+void main(inout float4 pos : SV_Position, inout float2 uv : TEXCOORD0) {}
diff --git a/Test/hlsl.inf.vert b/Test/hlsl.inf.vert
index d57b837..b73f24e 100644
--- a/Test/hlsl.inf.vert
+++ b/Test/hlsl.inf.vert
@@ -5,7 +5,12 @@
     float f3 = +1.#INF;

     float f4 = f2 * 1.#INF + 1.#INF;

     const float f5 = -1.#INF;

-    const float f6 = f5 * 0.0f;

+    // An infinity times zero is a NaN.

+    // In IEEE 754, the sign of a NaN is significant only for

+    // abs, copy, negate, or copySign.  Use abs(.) here to

+    // set the sign bit to zero. Otherwise, some platforms will

+    // have a 1 sign bit and others will have a 0 sign bit.

+    const float f6 = abs(f5 * 0.0f);

 

     return (float4)(f1 + f2 + f3 + f4 + f5 + f6);

-}
\ No newline at end of file
+}

diff --git a/Test/hlsl.multiView.frag b/Test/hlsl.multiView.frag
new file mode 100644
index 0000000..79e388d
--- /dev/null
+++ b/Test/hlsl.multiView.frag
@@ -0,0 +1,5 @@
+
+float4 main(uint ViewIndex : SV_ViewID)
+{
+    return float4(ViewIndex, 0.0f, 0.0f, 0.0f);
+}
diff --git a/Test/hlsl.swizzle.vec1.comp b/Test/hlsl.swizzle.vec1.comp
new file mode 100644
index 0000000..1ee454c
--- /dev/null
+++ b/Test/hlsl.swizzle.vec1.comp
@@ -0,0 +1,8 @@
+void main()
+{
+    float1 f1;
+    f1.x = 0.5;
+
+    // This is not implemented
+    // f1.xx = float2(0.6, 0.7);
+}
diff --git a/Test/index_outside_sample_mask_range.frag b/Test/index_outside_sample_mask_range.frag
new file mode 100644
index 0000000..7a59e1b
--- /dev/null
+++ b/Test/index_outside_sample_mask_range.frag
@@ -0,0 +1,8 @@
+#version 320 es 

+layout (location = 0) out mediump vec4 fs_color; 

+void main() 

+{ 

+	const highp int invalidIndex = (gl_MaxSamples + 31) / 32; 

+	highp int invalidValue = gl_SampleMask[invalidIndex]; 

+	fs_color = vec4(1.0f, 0.0f, 0.0f, 1.0f); 

+} 

diff --git a/Test/iomap.crossStage.vk.2.frag b/Test/iomap.crossStage.vk.2.frag
new file mode 100644
index 0000000..e34a9a9
--- /dev/null
+++ b/Test/iomap.crossStage.vk.2.frag
@@ -0,0 +1,24 @@
+#version 460

+

+in vec4 unsetColor;

+in vec4 colorOut;

+out vec4 fragColor;

+

+in Vertex

+{

+	vec2 val;

+} iVert;

+

+in Vertex2

+{

+	vec2 val2;

+};

+

+in vec4 vv2Val;

+

+void main()

+{

+    fragColor = colorOut + unsetColor * vec4(iVert.val.xxyy) * vec4(val2.xxyy) * 

+				vv2Val;

+}

+

diff --git a/Test/iomap.crossStage.vk.2.geom b/Test/iomap.crossStage.vk.2.geom
new file mode 100644
index 0000000..11e7b9a
--- /dev/null
+++ b/Test/iomap.crossStage.vk.2.geom
@@ -0,0 +1,32 @@
+#version 460

+

+layout(points) in;

+layout(triangle_strip, max_vertices=3) out;

+

+// Not written by vertex shader

+in vec4 vgo1[];

+

+in vec4 color[];

+

+out vec4 colorOut;

+

+in VV

+{

+	vec4 val;

+} vv[];

+

+out VV2

+{

+	vec4 vv2Val;

+};

+

+void main()

+{

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

+        colorOut = color[i] * vv[i].val;

+		vv2Val = vec4(1.0);

+        EmitVertex();

+    }

+    EndPrimitive();

+}

+

diff --git a/Test/iomap.crossStage.vk.2.vert b/Test/iomap.crossStage.vk.2.vert
new file mode 100644
index 0000000..8788ec2
--- /dev/null
+++ b/Test/iomap.crossStage.vk.2.vert
@@ -0,0 +1,14 @@
+#version 460

+

+out VV

+{

+	vec4 val;

+};

+out vec4 color;

+void main()

+{

+	val = vec4(0.5);

+    color = vec4(1.0);

+    gl_Position = vec4(1.0);

+}

+

diff --git a/Test/iomap.mismatchedBufferTypes.frag b/Test/iomap.mismatchedBufferTypes.frag
new file mode 100644
index 0000000..c061136
--- /dev/null
+++ b/Test/iomap.mismatchedBufferTypes.frag
@@ -0,0 +1,10 @@
+#version 460
+
+// GLSL spec: Hence, the types, initializers, and any location specifiers of all statically used uniform
+// variables with the same name must match across all shaders that are linked into a single program
+uniform crossStageBlock {
+    float a;
+    // 2nd member from vert absent in frag
+} blockname;
+
+void main() {}
\ No newline at end of file
diff --git a/Test/iomap.mismatchedBufferTypes.vert b/Test/iomap.mismatchedBufferTypes.vert
new file mode 100644
index 0000000..7dbea8a
--- /dev/null
+++ b/Test/iomap.mismatchedBufferTypes.vert
@@ -0,0 +1,10 @@
+#version 460
+
+// GLSL spec: Hence, the types, initializers, and any location specifiers of all statically used uniform
+// variables with the same name must match across all shaders that are linked into a single program
+uniform crossStageBlock {
+    float a;
+    float b; // not present in frag
+} blockname;
+
+void main() {}
\ No newline at end of file
diff --git a/Test/link.crossStageOptimization.frag b/Test/link.crossStageOptimization.frag
new file mode 100644
index 0000000..af7c2c4
--- /dev/null
+++ b/Test/link.crossStageOptimization.frag
@@ -0,0 +1,24 @@
+#version 440

+

+layout(location = 0) in vec4 a0; // accessed

+layout(location = 1) in vec4 a1; // not accessed

+layout(location = 2) in vec4 a2; // accessed

+layout(location = 3) in vec4 a3; // not accessed

+

+layout(location = 0) out vec4 oColor;

+

+void main()

+{

+    vec4 temp = vec4(1.0);

+    if (true)

+    {

+        temp *= a0;

+        temp *= a2;

+    }

+    if (false)

+    {

+        temp *= a1;

+        temp *= a3;

+    }

+    oColor = temp;

+}

diff --git a/Test/link.crossStageOptimization.vert b/Test/link.crossStageOptimization.vert
new file mode 100644
index 0000000..159c133
--- /dev/null
+++ b/Test/link.crossStageOptimization.vert
@@ -0,0 +1,41 @@
+#version 440

+

+layout(std140) uniform AccessedUniformBlock

+{

+    vec4 a;

+    vec4 b;

+};

+

+layout(std140) uniform NotAccessedUniformBlock

+{

+    vec4 c;

+    vec4 d;

+};

+

+layout(std430) buffer AccessedStorageBlock

+{

+    float e[512];

+};

+

+layout(std430) buffer NotAccessedStorageBlock

+{

+    float f[512];

+};

+

+uniform sampler2D uSampler0; // accessed

+uniform sampler2D uSampler1; // not accessed

+

+layout(location = 0) out vec4 a0; // accessed

+layout(location = 1) out vec4 a1; // not accessed

+layout(location = 2) out vec4 a2; // accessed

+layout(location = 3) out vec4 a3; // not accessed

+

+void main()

+{

+    a0 = a + vec4(e[0]) + texture(uSampler0, vec2(0.5, 0.5));

+    a1 = c + vec4(f[1]) + texture(uSampler1, vec2(0.5, 0.5));

+    a2 = b + vec4(e[0]) + texture(uSampler0, vec2(0.5, 0.5));

+    a3 = d + vec4(f[1]) + texture(uSampler1, vec2(0.5, 0.5));

+

+    gl_Position = vec4(1.0, 1.0, 1.0, 1.0);

+}

diff --git a/Test/link.vk.inconsistentGLPerVertex.0.geom b/Test/link.vk.inconsistentGLPerVertex.0.geom
old mode 100755
new mode 100644
diff --git a/Test/link.vk.inconsistentGLPerVertex.0.vert b/Test/link.vk.inconsistentGLPerVertex.0.vert
old mode 100755
new mode 100644
diff --git a/Test/location_aliasing.tesc b/Test/location_aliasing.tesc
new file mode 100644
index 0000000..6243965
--- /dev/null
+++ b/Test/location_aliasing.tesc
@@ -0,0 +1,15 @@
+#version 430 core

+#extension GL_ARB_enhanced_layouts : require

+

+layout(vertices = 1) out;

+

+layout (location = 1, component = 0)  in  double gohan[];

+layout (location = 1, component = 2)  in  float goten[];

+

+

+in  vec4 vs_tcs[];

+out vec4 tcs_tes[];

+

+void main()

+{

+}
\ No newline at end of file
diff --git a/Test/location_aliasing1.frag b/Test/location_aliasing1.frag
new file mode 100644
index 0000000..c8c7d26
--- /dev/null
+++ b/Test/location_aliasing1.frag
@@ -0,0 +1,10 @@
+#version 430 core

+#extension GL_ARB_enhanced_layouts : require

+

+

+layout (location = 1, component = 0)  in smooth float in1;

+layout (location = 1, component = 2)  in flat float in2;

+

+void main()

+{

+}
\ No newline at end of file
diff --git a/Test/matrixCompMult.vert b/Test/matrixCompMult.vert
new file mode 100644
index 0000000..cccdbbc
--- /dev/null
+++ b/Test/matrixCompMult.vert
@@ -0,0 +1,32 @@
+#version 460

+precision highp float;

+precision highp int;

+out float o1;

+void main()

+{

+	const mat2 cval = matrixCompMult(mat2(1.0), mat2(1.0));

+	const mat3 cval1 = matrixCompMult(mat3(1.0), mat3(1.0));

+	const mat4 cval2 = matrixCompMult(mat4(1.0), mat4(1.0));

+	const mat2x3 cval3 = matrixCompMult(mat2x3(1.0), mat2x3(1.0));

+	const mat2x4 cval4 = matrixCompMult(mat2x4(1.0), mat2x4(1.0));

+	const mat3x2 cval5 = matrixCompMult(mat3x2(1.0), mat3x2(1.0));

+	const mat3x4 cval6 = matrixCompMult(mat3x4(1.0), mat3x4(1.0));

+	const mat4x2 cval7 = matrixCompMult(mat4x2(1.0), mat4x2(1.0));

+    const mat4x3 cval8 = matrixCompMult(mat4x3(1.0), mat4x3(1.0));

+	const dmat2 cval9 = matrixCompMult(dmat2(1.0), dmat2(1.0));

+	const dmat3 cval10 = matrixCompMult(dmat3(1.0), dmat3(1.0));

+	const dmat4 cval11 = matrixCompMult(dmat4(1.0), dmat4(1.0));

+	const dmat2x3 cval12 = matrixCompMult(dmat2x3(1.0), dmat2x3(1.0));

+	const dmat2x4 cval13 = matrixCompMult(dmat2x4(1.0), dmat2x4(1.0));

+	const dmat3x2 cval14 = matrixCompMult(dmat3x2(1.0), dmat3x2(1.0));

+	const dmat3x4 cval15 = matrixCompMult(dmat3x4(1.0), dmat3x4(1.0));

+	const dmat4x2 cval16 = matrixCompMult(dmat4x2(1.0), dmat4x2(1.0));

+    const dmat4x3 cval17 = matrixCompMult(dmat4x3(1.0), dmat4x3(1.0));

+	

+	o1 = float(cval[0][0] + cval1[0][0] + cval2[0][0] + cval3[0][0] + 

+	     cval4[0][0] + cval5[0][0] + cval6[0][0] + cval7[0][0] + 

+		 cval8[0][0] + cval9[0][0] + cval10[0][0] + cval11[0][0] + 

+		 cval12[0][0] + cval13[0][0] + cval14[0][0] + cval15[0][0] + 

+		 cval16[0][0] + cval17[0][0]);

+}

+

diff --git a/Test/overflow_underflow_toinf_0.frag b/Test/overflow_underflow_toinf_0.frag
new file mode 100644
index 0000000..0b1d1b9
--- /dev/null
+++ b/Test/overflow_underflow_toinf_0.frag
@@ -0,0 +1,13 @@
+#version 320 es

+precision highp float;

+out vec4 my_FragColor;

+void main()

+{

+    // GLSL ES 3.00.6 section 4.1.4 Floats:

+    // "A value with a magnitude too small to be represented as a mantissa and exponent is converted to zero."

+    // 1.0e-50 is small enough that it can't even be stored as subnormal.

+    float correct = (1.0e-50 == 0.0) ? 1.0 : 0.0;

+    float correct1 = isinf(1.0e40) ? 1.0 : 0.0;

+    vec4 foo = vec4(1.0e-50, -1.0e-50, 1.0e50, -1.0e50);

+    my_FragColor = vec4(0.0, correct, correct1, 1.0);

+}

diff --git a/Test/positive_infinity.frag b/Test/positive_infinity.frag
new file mode 100644
index 0000000..9c00e38
--- /dev/null
+++ b/Test/positive_infinity.frag
@@ -0,0 +1,11 @@
+#version 300 es

+precision highp float;

+out vec4 my_FragColor;

+void main()

+{

+    // Out-of-range floats should overflow to infinity

+    // GLSL ES 3.00.6 section 4.1.4 Floats:

+    // "If the value of the floating point number is too large (small) to be stored as a single precision value, it is converted to positive (negative) infinity"

+    float correct = isinf(1.0e2147483649) ? 1.0 : 0.0;

+    my_FragColor = vec4(0.0, correct, 0.0, 1.0);

+}

diff --git a/Test/preprocess.arb_shading_language_include.vert b/Test/preprocess.arb_shading_language_include.vert
new file mode 100644
index 0000000..9920951
--- /dev/null
+++ b/Test/preprocess.arb_shading_language_include.vert
@@ -0,0 +1,14 @@
+#version 150
+
+#extension GL_ARB_shading_language_include : enable
+
+#define float4 vec4
+
+#include "bar.h"
+
+out vec4 color;
+
+void main()
+{
+    color = i1 + vec4(1.0);
+}
diff --git a/Test/preprocess.inactive_stringify.vert b/Test/preprocess.inactive_stringify.vert
new file mode 100755
index 0000000..8f3a942
--- /dev/null
+++ b/Test/preprocess.inactive_stringify.vert
@@ -0,0 +1,28 @@
+#version 460

+

+// This tests that the preprocessor error

+// "error: '#' : (#) can be preceded in its line only by spaces or horizontal tab"

+// isn't enforced when inactive (e.g. inside #if 0)

+

+#if 0

+#define STRINGIFY(X) #X

+#endif

+

+#define C 0

+

+#if 1

+#ifdef A

+#elif defined B

+#elif C

+// OK, since preprocessor evaluates to inactive

+#define STRINGIFY(X) #X

+#endif

+#endif

+

+// OK in comments

+// #define STRINGIFY(X) #X

+

+void main()

+{

+    gl_Position = vec4(1.0);

+}
\ No newline at end of file
diff --git a/Test/preprocess.include_directive_missing_extension.vert b/Test/preprocess.include_directive_missing_extension.vert
new file mode 100644
index 0000000..dbe5b94
--- /dev/null
+++ b/Test/preprocess.include_directive_missing_extension.vert
@@ -0,0 +1,6 @@
+#version 150
+
+#include "bar.h"
+
+void main() {}
+
diff --git a/Test/ps_sample.frag b/Test/ps_sample.frag
new file mode 100644
index 0000000..040eb35
--- /dev/null
+++ b/Test/ps_sample.frag
@@ -0,0 +1,17 @@
+#version 430 core

+#extension GL_ARB_enhanced_layouts : require

+

+layout (location = 1, component = 0)  flat in uint gohan;

+layout (location = 1, component = 2) sample flat in uvec2 goten;

+

+in  vec4 gs_fs;

+out vec4 fs_out;

+

+void main()

+{

+    vec4 result = gs_fs;

+

+

+

+    fs_out = result;

+}

diff --git a/Test/ps_uint_int.frag b/Test/ps_uint_int.frag
new file mode 100644
index 0000000..7ffaf57
--- /dev/null
+++ b/Test/ps_uint_int.frag
@@ -0,0 +1,7 @@
+#version 450

+  

+layout(location=0, component=0) flat in uint u;

+layout(location=0, component=1) flat in int i;

+

+void main() {

+}

diff --git a/Test/runtests b/Test/runtests
index e7e1d33..cc4134f 100755
--- a/Test/runtests
+++ b/Test/runtests
@@ -10,15 +10,15 @@
 EXE=${2:-../build/install/bin/glslang}
 REMAPEXE=${3:-../build/install/bin/spirv-remap}
 HASERROR=0
-mkdir -p $TARGETDIR
+mkdir -p "$TARGETDIR"
 
-LIBPATH="$(cd "$(dirname "$(dirname $EXE)")" && pwd)/lib"
+LIBPATH="$(cd "$(dirname "$(dirname "$EXE")")" && pwd)/lib"
 if [ -d "${LIBPATH}" ]; then
     export LD_LIBRARY_PATH="${LIBPATH}:${LD_LIBRARY_PATH}" 
 fi
 
 function run {
-    $EXE "$@"
+    "$EXE" "$@"
     result=$?
     case "$result" in
     [0-6]) # Valid success and error codes
@@ -35,8 +35,8 @@
     while read t; do
         echo Running $t...
         b=`basename $t`
-        run -i -l $t > $TARGETDIR/$b.out
-        diff -b $BASEDIR/$b.out $TARGETDIR/$b.out || HASERROR=1
+        run -i -l $t > "$TARGETDIR/$b.out"
+        diff -b $BASEDIR/$b.out "$TARGETDIR/$b.out" || HASERROR=1
     done < localtestlist
 fi
 
@@ -46,60 +46,64 @@
 # special tests
 #
 
-run badMacroArgs.frag > $TARGETDIR/badMacroArgs.frag.out
-diff -b $BASEDIR/badMacroArgs.frag.out $TARGETDIR/badMacroArgs.frag.out || HASERROR=1
+run badMacroArgs.frag > "$TARGETDIR/badMacroArgs.frag.out"
+diff -b $BASEDIR/badMacroArgs.frag.out "$TARGETDIR/badMacroArgs.frag.out" || HASERROR=1
 
+run gl_samplemask_array_size.frag gl_MaxSamples_32.conf -i > "$TARGETDIR/gl_samplemask_array_size_32.frag.out"
+diff -b $BASEDIR/gl_samplemask_array_size_32.frag.out "$TARGETDIR/gl_samplemask_array_size_32.frag.out" || HASERROR=1
+run gl_samplemask_array_size.frag gl_MaxSamples_64.conf -i > "$TARGETDIR/gl_samplemask_array_size_64.frag.out"
+diff -b $BASEDIR/gl_samplemask_array_size_64.frag.out "$TARGETDIR/gl_samplemask_array_size_64.frag.out" || HASERROR=1
 #
 # reflection tests
 #
 echo Running reflection...
-run -l -q -C reflection.vert > $TARGETDIR/reflection.vert.out
-diff -b $BASEDIR/reflection.vert.out $TARGETDIR/reflection.vert.out || HASERROR=1
-run -l -q -C --reflect-strict-array-suffix --reflect-basic-array-suffix --reflect-intermediate-io --reflect-separate-buffers --reflect-all-block-variables --reflect-unwrap-io-blocks --reflect-all-io-variables --reflect-shared-std140-ubo --reflect-shared-std140-ssbo reflection.options.vert > $TARGETDIR/reflection.options.vert.out
-diff -b $BASEDIR/reflection.options.vert.out $TARGETDIR/reflection.options.vert.out || HASERROR=1
-run -l -q -C reflection.frag > $TARGETDIR/reflection.frag.out
-diff -b $BASEDIR/reflection.frag.out $TARGETDIR/reflection.frag.out || HASERROR=1
-run -l -q -C --reflect-strict-array-suffix --reflect-basic-array-suffix --reflect-intermediate-io --reflect-separate-buffers --reflect-all-block-variables --reflect-unwrap-io-blocks --reflect-all-io-variables --reflect-shared-std140-ubo --reflect-shared-std140-ssbo reflection.frag > $TARGETDIR/reflection.options.frag.out
-diff -b $BASEDIR/reflection.options.frag.out $TARGETDIR/reflection.options.frag.out || HASERROR=1
-run -l -q -C --reflect-strict-array-suffix --reflect-basic-array-suffix --reflect-intermediate-io --reflect-separate-buffers --reflect-all-block-variables --reflect-unwrap-io-blocks --reflect-all-io-variables --reflect-shared-std140-ubo --reflect-shared-std140-ssbo reflection.options.geom > $TARGETDIR/reflection.options.geom.out
-diff -b $BASEDIR/reflection.options.geom.out $TARGETDIR/reflection.options.geom.out || HASERROR=1
-run -l -q -C reflection.linked.vert reflection.linked.frag > $TARGETDIR/reflection.linked.out
-diff -b $BASEDIR/reflection.linked.out $TARGETDIR/reflection.linked.out || HASERROR=1
-run -l -q -C --reflect-strict-array-suffix --reflect-basic-array-suffix --reflect-intermediate-io --reflect-separate-buffers --reflect-all-block-variables --reflect-unwrap-io-blocks --reflect-all-io-variables --reflect-shared-std140-ubo --reflect-shared-std140-ssbo reflection.linked.vert reflection.linked.frag > $TARGETDIR/reflection.linked.options.out
-diff -b $BASEDIR/reflection.linked.options.out $TARGETDIR/reflection.linked.options.out || HASERROR=1
-run -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
-run -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
-run -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
+run -l -q -C reflection.vert > "$TARGETDIR/reflection.vert.out"
+diff -b $BASEDIR/reflection.vert.out "$TARGETDIR/reflection.vert.out" || HASERROR=1
+run -l -q -C --reflect-strict-array-suffix --reflect-basic-array-suffix --reflect-intermediate-io --reflect-separate-buffers --reflect-all-block-variables --reflect-unwrap-io-blocks --reflect-all-io-variables --reflect-shared-std140-ubo --reflect-shared-std140-ssbo reflection.options.vert > "$TARGETDIR/reflection.options.vert.out"
+diff -b $BASEDIR/reflection.options.vert.out "$TARGETDIR/reflection.options.vert.out" || HASERROR=1
+run -l -q -C reflection.frag > "$TARGETDIR/reflection.frag.out"
+diff -b $BASEDIR/reflection.frag.out "$TARGETDIR/reflection.frag.out" || HASERROR=1
+run -l -q -C --reflect-strict-array-suffix --reflect-basic-array-suffix --reflect-intermediate-io --reflect-separate-buffers --reflect-all-block-variables --reflect-unwrap-io-blocks --reflect-all-io-variables --reflect-shared-std140-ubo --reflect-shared-std140-ssbo reflection.frag > "$TARGETDIR/reflection.options.frag.out"
+diff -b $BASEDIR/reflection.options.frag.out "$TARGETDIR/reflection.options.frag.out" || HASERROR=1
+run -l -q -C --reflect-strict-array-suffix --reflect-basic-array-suffix --reflect-intermediate-io --reflect-separate-buffers --reflect-all-block-variables --reflect-unwrap-io-blocks --reflect-all-io-variables --reflect-shared-std140-ubo --reflect-shared-std140-ssbo reflection.options.geom > "$TARGETDIR/reflection.options.geom.out"
+diff -b $BASEDIR/reflection.options.geom.out "$TARGETDIR/reflection.options.geom.out" || HASERROR=1
+run -l -q -C reflection.linked.vert reflection.linked.frag > "$TARGETDIR/reflection.linked.out"
+diff -b $BASEDIR/reflection.linked.out "$TARGETDIR/reflection.linked.out" || HASERROR=1
+run -l -q -C --reflect-strict-array-suffix --reflect-basic-array-suffix --reflect-intermediate-io --reflect-separate-buffers --reflect-all-block-variables --reflect-unwrap-io-blocks --reflect-all-io-variables --reflect-shared-std140-ubo --reflect-shared-std140-ssbo reflection.linked.vert reflection.linked.frag > "$TARGETDIR/reflection.linked.options.out"
+diff -b $BASEDIR/reflection.linked.options.out "$TARGETDIR/reflection.linked.options.out" || HASERROR=1
+run -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
+run -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
+run -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
 
 #
 # multi-threaded test
 #
 echo Comparing single thread to multithread for all tests in current directory...
-run -i -C *.vert *.geom *.frag *.tesc *.tese *.comp > $TARGETDIR/singleThread.out
-run -i -C *.vert *.geom *.frag *.tesc *.tese *.comp -t > $TARGETDIR/multiThread.out
-diff $TARGETDIR/singleThread.out $TARGETDIR/multiThread.out || HASERROR=1
+run -i -C *.vert *.geom *.frag *.tesc *.tese *.comp > "$TARGETDIR/singleThread.out"
+run -i -C *.vert *.geom *.frag *.tesc *.tese *.comp -t > "$TARGETDIR/multiThread.out"
+diff "$TARGETDIR/singleThread.out" "$TARGETDIR/multiThread.out" || HASERROR=1
 if [ $HASERROR -eq 0 ]
 then
-    rm $TARGETDIR/singleThread.out
-    rm $TARGETDIR/multiThread.out
+    rm "$TARGETDIR/singleThread.out"
+    rm "$TARGETDIR/multiThread.out"
 fi
 
 #
 # entry point renaming tests
 #
 echo Running entry-point renaming tests
-run -i -H -V -D -Od --entry-point 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
+run -i -H -V -D -Od --entry-point 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
-run -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
+run -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 ]
 then
@@ -112,108 +116,108 @@
 # Testing -S and compound suffixes
 #
 echo Running explicit stage test and compound suffix tests
-run -Od -i -S vert nosuffix > $TARGETDIR/nosuffix.out
-diff -b $BASEDIR/nosuffix.out $TARGETDIR/nosuffix.out || HASERROR=1
-run -Od -i compoundsuffix.vert.glsl > $TARGETDIR/compoundsuffix.vert.glsl
-diff -b $BASEDIR/compoundsuffix.vert.glsl $TARGETDIR/compoundsuffix.vert.glsl || HASERROR=1
-run -Od -e main -H compoundsuffix.frag.hlsl > $TARGETDIR/compoundsuffix.frag.hlsl
-diff -b $BASEDIR/compoundsuffix.frag.hlsl $TARGETDIR/compoundsuffix.frag.hlsl || HASERROR=1
+run -Od -i -S vert nosuffix > "$TARGETDIR/nosuffix.out"
+diff -b $BASEDIR/nosuffix.out "$TARGETDIR/nosuffix.out" || HASERROR=1
+run -Od -i compoundsuffix.vert.glsl > "$TARGETDIR/compoundsuffix.vert.glsl"
+diff -b $BASEDIR/compoundsuffix.vert.glsl "$TARGETDIR/compoundsuffix.vert.glsl" || HASERROR=1
+run -Od -e main -H compoundsuffix.frag.hlsl > "$TARGETDIR/compoundsuffix.frag.hlsl"
+diff -b $BASEDIR/compoundsuffix.frag.hlsl "$TARGETDIR/compoundsuffix.frag.hlsl" || HASERROR=1
 
 #
 # Testing --hlsl-offsets
 #
 echo Running hlsl offsets
-run -i --hlsl-offsets -H spv.hlslOffsets.vert > $TARGETDIR/spv.hlslOffsets.vert.out
-diff -b $BASEDIR/spv.hlslOffsets.vert.out $TARGETDIR/spv.hlslOffsets.vert.out || HASERROR=1
+run -i --hlsl-offsets -H spv.hlslOffsets.vert > "$TARGETDIR/spv.hlslOffsets.vert.out"
+diff -b $BASEDIR/spv.hlslOffsets.vert.out "$TARGETDIR/spv.hlslOffsets.vert.out" || HASERROR=1
 
 echo Running hlsl offsets
-run -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
+run -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
-run -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
+run -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
 
-run -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
+run -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
 
-run -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
+run -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'
-run -e main --hlsl-iomap --ssb 10 1 15 2 --stb 20 --stb 25 2 --stb 70 6 --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
+run -e main --hlsl-iomap --ssb 10 1 15 2 --stb 20 --stb 25 2 --stb 70 6 --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
 
 #
 # Testing location error
 #
 echo Testing SPV no location
-run -V -C spv.noLocation.vert > $TARGETDIR/spv.noLocation.vert.out
-diff -b $BASEDIR/spv.noLocation.vert.out $TARGETDIR/spv.noLocation.vert.out || HASERROR=1
-run -G -H --aml spv.noBuiltInLoc.vert > $TARGETDIR/spv.noBuiltInLoc.vert.out
-diff -b $BASEDIR/spv.noBuiltInLoc.vert.out $TARGETDIR/spv.noBuiltInLoc.vert.out || HASERROR=1
-run -G spv.looseUniformNoLoc.vert > $TARGETDIR/spv.looseUniformNoLoc.vert.out
-diff -b $BASEDIR/spv.looseUniformNoLoc.vert.out $TARGETDIR/spv.looseUniformNoLoc.vert.out || HASERROR=1
+run -V -C spv.noLocation.vert > "$TARGETDIR/spv.noLocation.vert.out"
+diff -b $BASEDIR/spv.noLocation.vert.out "$TARGETDIR/spv.noLocation.vert.out" || HASERROR=1
+run -G -H --aml spv.noBuiltInLoc.vert > "$TARGETDIR/spv.noBuiltInLoc.vert.out"
+diff -b $BASEDIR/spv.noBuiltInLoc.vert.out "$TARGETDIR/spv.noBuiltInLoc.vert.out" || HASERROR=1
+run -G spv.looseUniformNoLoc.vert > "$TARGETDIR/spv.looseUniformNoLoc.vert.out"
+diff -b $BASEDIR/spv.looseUniformNoLoc.vert.out "$TARGETDIR/spv.looseUniformNoLoc.vert.out" || HASERROR=1
 
 #
 # Testing debug information
 #
 echo Testing SPV Debug Information
 run -g --relaxed-errors --suppress-warnings --aml --amb --hlsl-offsets --nsf --spirv-val \
-     -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
+     -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
 run -g -Od --target-env vulkan1.1 --relaxed-errors --suppress-warnings --aml --amb --hlsl-offsets --nsf --spirv-val \
-     -V -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
+     -V -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
 run -g -D -Od -e newMain -g --amb --aml --fua --hlsl-iomap --nsf --spirv-val --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
+     --sep origMain -H -Od spv.hlslDebugInfo.vert --rsb vert t0 0 0 > "$TARGETDIR/spv.hlslDebugInfo.frag.out"
+diff -b $BASEDIR/spv.hlslDebugInfo.frag.out "$TARGETDIR/spv.hlslDebugInfo.frag.out" || HASERROR=1
 
 #
 # Testing Includer
 #
 echo Testing Includer
-run -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
-run -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
-run -l -i include.vert > $TARGETDIR/include.vert.out
-diff -b $BASEDIR/include.vert.out $TARGETDIR/include.vert.out || HASERROR=1
-run -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
-run -D -Od -e MainPs -H -Od -g hlsl.pp.line3.frag > $TARGETDIR/hlsl.pp.line3.frag.out
-diff -b $BASEDIR/hlsl.pp.line3.frag.out $TARGETDIR/hlsl.pp.line3.frag.out || HASERROR=1
+run -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
+run -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
+run -l -i include.vert > "$TARGETDIR/include.vert.out"
+diff -b $BASEDIR/include.vert.out "$TARGETDIR/include.vert.out" || HASERROR=1
+run -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
+run -D -Od -e MainPs -H -Od -g hlsl.pp.line3.frag > "$TARGETDIR/hlsl.pp.line3.frag.out"
+diff -b $BASEDIR/hlsl.pp.line3.frag.out "$TARGETDIR/hlsl.pp.line3.frag.out" || HASERROR=1
 
 #
 # Testing --depfile
 #
 
 echo "Testing --depfile"
-run -D -Od -e main -H --depfile $TARGETDIR/hlsl.include.vert.d.out -Od ../Test/hlsl.include.vert > $TARGETDIR/hlsl.include.vert.out
-diff -b $BASEDIR/hlsl.include.vert.d.out $TARGETDIR/hlsl.include.vert.d.out || HASERROR=1
-run -D -Od -e main -H --depfile $TARGETDIR/hlsl.dashI.vert.d.out -Od -Iinc1/path1 -Iinc1/path2 hlsl.dashI.vert > $TARGETDIR/hlsl.dashI.vert.out
-diff -b $BASEDIR/hlsl.dashI.vert.d.out $TARGETDIR/hlsl.dashI.vert.d.out || HASERROR=1
+run -D -Od -e main -H --depfile "$TARGETDIR/hlsl.include.vert.d.out" -Od ../Test/hlsl.include.vert > "$TARGETDIR/hlsl.include.vert.out"
+diff -b $BASEDIR/hlsl.include.vert.d.out "$TARGETDIR/hlsl.include.vert.d.out" || HASERROR=1
+run -D -Od -e main -H --depfile "$TARGETDIR/hlsl.dashI.vert.d.out" -Od -Iinc1/path1 -Iinc1/path2 hlsl.dashI.vert > "$TARGETDIR/hlsl.dashI.vert.out"
+diff -b $BASEDIR/hlsl.dashI.vert.d.out "$TARGETDIR/hlsl.dashI.vert.d.out" || HASERROR=1
 
 #
 # Testing -D, -U and -P
 #
 echo "Testing -D, -U and -P"
-run -DUNDEFED -UIN_SHADER -DFOO=200 -i -l --U UNDEFED --define-macro MUL=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
-run -D -Od -e main -V -i -DUNDEFED -UIN_SHADER --D FOO=200 --undef-macro UNDEFED -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
-run -P"#define TEST1" -i -l --preamble-text "#define TEST2" --p "#define TEST3" glsl.-P.frag > $TARGETDIR/glsl.-P.frag.out
-diff -b $BASEDIR/glsl.-P.frag.out $TARGETDIR/glsl.-P.frag.out || HASERROR=1
-run -i -l --preamble-text "vec4 getColor() { return vec4(1.0); }" glsl.-P.function.frag > $TARGETDIR/glsl.-P.function.frag.out
-diff -b $BASEDIR/glsl.-P.function.frag.out $TARGETDIR/glsl.-P.function.frag.out || HASERROR=1
-run -i -l --preamble-text "#extension GL_GOOGLE_include_directive : require" -I. glsl.-P.include.frag > $TARGETDIR/glsl.-P.include.frag.out
-diff -b $BASEDIR/glsl.-P.include.frag.out $TARGETDIR/glsl.-P.include.frag.out || HASERROR=1
+run -DUNDEFED -UIN_SHADER -DFOO=200 -i -l --U UNDEFED --define-macro MUL=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
+run -D -Od -e main -V -i -DUNDEFED -UIN_SHADER --D FOO=200 --undef-macro UNDEFED -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
+run -P"#define TEST1" -i -l --preamble-text "#define TEST2" --p "#define TEST3" glsl.-P.frag > "$TARGETDIR/glsl.-P.frag.out"
+diff -b $BASEDIR/glsl.-P.frag.out "$TARGETDIR/glsl.-P.frag.out" || HASERROR=1
+run -i -l --preamble-text "vec4 getColor() { return vec4(1.0); }" glsl.-P.function.frag > "$TARGETDIR/glsl.-P.function.frag.out"
+diff -b $BASEDIR/glsl.-P.function.frag.out "$TARGETDIR/glsl.-P.function.frag.out" || HASERROR=1
+run -i -l --preamble-text "#extension GL_GOOGLE_include_directive : require" -I. glsl.-P.include.frag > "$TARGETDIR/glsl.-P.include.frag.out"
+diff -b $BASEDIR/glsl.-P.include.frag.out "$TARGETDIR/glsl.-P.include.frag.out" || HASERROR=1
 
 #
 # Test --client and --target-env
@@ -233,116 +237,137 @@
 # Testing GLSL entry point rename
 #
 echo "Testing GLSL entry point rename"
-run -H -e foo --source-entrypoint main glsl.entryPointRename.vert > $TARGETDIR/glsl.entryPointRename.vert.out
-diff -b $BASEDIR/glsl.entryPointRename.vert.out $TARGETDIR/glsl.entryPointRename.vert.out || HASERROR=1
-run -H -e foo --source-entrypoint bar glsl.entryPointRename.vert > $TARGETDIR/glsl.entryPointRename.vert.bad.out
-diff -b $BASEDIR/glsl.entryPointRename.vert.bad.out $TARGETDIR/glsl.entryPointRename.vert.bad.out || HASERROR=1
-run -H -e foo --source-entrypoint main glsl.entryPointRename2.vert > $TARGETDIR/glsl.entryPointRename2.vert.out
-diff -b $BASEDIR/glsl.entryPointRename2.vert.out $TARGETDIR/glsl.entryPointRename2.vert.out || HASERROR=1
+run -H -e foo --source-entrypoint main glsl.entryPointRename.vert > "$TARGETDIR/glsl.entryPointRename.vert.out"
+diff -b $BASEDIR/glsl.entryPointRename.vert.out "$TARGETDIR/glsl.entryPointRename.vert.out" || HASERROR=1
+run -H -e foo --source-entrypoint bar glsl.entryPointRename.vert > "$TARGETDIR/glsl.entryPointRename.vert.bad.out"
+diff -b $BASEDIR/glsl.entryPointRename.vert.bad.out "$TARGETDIR/glsl.entryPointRename.vert.bad.out" || HASERROR=1
+run -H -e foo --source-entrypoint main glsl.entryPointRename2.vert > "$TARGETDIR/glsl.entryPointRename2.vert.out"
+diff -b $BASEDIR/glsl.entryPointRename2.vert.out "$TARGETDIR/glsl.entryPointRename2.vert.out" || HASERROR=1
 
 #
 # Testing remapper error handling
 #
 echo "Testing remapper error handling"
-$REMAPEXE --do-everything -i remap.invalid-spirv-1.spv -o $TARGETDIR > $TARGETDIR/remap.invalid-spirv-1.out && HASERROR=1
-diff -b $BASEDIR/remap.invalid-spirv-1.out $TARGETDIR/remap.invalid-spirv-1.out || HASERROR=1
-$REMAPEXE --do-everything -i remap.invalid-spirv-2.spv -o $TARGETDIR > $TARGETDIR/remap.invalid-spirv-2.out && HASERROR=1
-diff -b $BASEDIR/remap.invalid-spirv-2.out $TARGETDIR/remap.invalid-spirv-2.out || HASERROR=1
+"$REMAPEXE" --do-everything -i remap.invalid-spirv-1.spv -o "$TARGETDIR" > "$TARGETDIR/remap.invalid-spirv-1.out" && HASERROR=1
+diff -b $BASEDIR/remap.invalid-spirv-1.out "$TARGETDIR/remap.invalid-spirv-1.out" || HASERROR=1
+"$REMAPEXE" --do-everything -i remap.invalid-spirv-2.spv -o "$TARGETDIR" > "$TARGETDIR/remap.invalid-spirv-2.out" && HASERROR=1
+diff -b $BASEDIR/remap.invalid-spirv-2.out "$TARGETDIR/remap.invalid-spirv-2.out" || HASERROR=1
 
 #
 # Testing position Y inversion
 #
 echo "Testing position Y inversion"
-run -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
-run -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
-run -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
+run -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
+run -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
+run -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 position W reciprocal
 #
 echo "Testing position W reciprocal"
-run -H -e main -V -D -Od -H -i --hlsl-dx-position-w hlsl.w-recip.frag > $TARGETDIR/hlsl.w-recip.frag.out
-diff -b $BASEDIR/hlsl.w-recip.frag.out $TARGETDIR/hlsl.w-recip.frag.out || HASERROR=1
-run -H -e main -V -D -Od -H -i --hlsl-dx-position-w hlsl.w-recip2.frag > $TARGETDIR/hlsl.w-recip2.frag.out
-diff -b $BASEDIR/hlsl.w-recip2.frag.out $TARGETDIR/hlsl.w-recip2.frag.out || HASERROR=1
+run -H -e main -V -D -Od -H -i --hlsl-dx-position-w hlsl.w-recip.frag > "$TARGETDIR/hlsl.w-recip.frag.out"
+diff -b $BASEDIR/hlsl.w-recip.frag.out "$TARGETDIR/hlsl.w-recip.frag.out" || HASERROR=1
+run -H -e main -V -D -Od -H -i --hlsl-dx-position-w hlsl.w-recip2.frag > "$TARGETDIR/hlsl.w-recip2.frag.out"
+diff -b $BASEDIR/hlsl.w-recip2.frag.out "$TARGETDIR/hlsl.w-recip2.frag.out" || HASERROR=1
 
 #
 # Testing hlsl_functionality1
 #
 echo "Testing hlsl_functionality1"
 run -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
+    "$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
 run -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
+    "$TARGETDIR/hlsl.noSemantic.functionality1.comp.out"
+diff -b $BASEDIR/hlsl.noSemantic.functionality1.comp.out "$TARGETDIR/hlsl.noSemantic.functionality1.comp.out" || HASERROR=1
 
 #
 # Testing HLSL-specific PP feature expansion
 #
 echo "Testing HLSL-specific PP feature expansion"
-run -D -E hlsl.pp.expand.frag > $TARGETDIR/hlsl.pp.expand.frag.out 2> $TARGETDIR/hlsl.pp.expand.frag.err
-diff -b $BASEDIR/hlsl.pp.expand.frag.out $TARGETDIR/hlsl.pp.expand.frag.out || HASERROR=1
-diff -b $BASEDIR/hlsl.pp.expand.frag.err $TARGETDIR/hlsl.pp.expand.frag.err || HASERROR=1
+run -D -E hlsl.pp.expand.frag > "$TARGETDIR/hlsl.pp.expand.frag.out" 2> "$TARGETDIR/hlsl.pp.expand.frag.err"
+diff -b $BASEDIR/hlsl.pp.expand.frag.out "$TARGETDIR/hlsl.pp.expand.frag.out" || HASERROR=1
+diff -b $BASEDIR/hlsl.pp.expand.frag.err "$TARGETDIR/hlsl.pp.expand.frag.err" || HASERROR=1
 
 #
 # Test --nan-clamp
 #
 echo "Testing nan-clamp"
-run --nan-clamp -H --aml --amb spv.400.frag > $TARGETDIR/spv.400.frag.nanclamp.out
-diff -b $BASEDIR/spv.400.frag.nanclamp.out $TARGETDIR/spv.400.frag.nanclamp.out || HASERROR=1
+run --nan-clamp -H --aml --amb spv.400.frag > "$TARGETDIR/spv.400.frag.nanclamp.out"
+diff -b $BASEDIR/spv.400.frag.nanclamp.out "$TARGETDIR/spv.400.frag.nanclamp.out" || HASERROR=1
 
 #
 # Test --auto-sampled-textures
 #
 echo "Testing auto-sampled-textures"
-run --auto-sampled-textures -H -Od -e MainPs -D -S frag hlsl.autosampledtextures.frag > $TARGETDIR/hlsl.autosampledtextures.frag.out
-diff -b $BASEDIR/hlsl.autosampledtextures.frag.out $TARGETDIR/hlsl.autosampledtextures.frag.out || HASERROR=1
-run --auto-sampled-textures -H -Od -S frag glsl.autosampledtextures.frag > $TARGETDIR/glsl.autosampledtextures.frag.out
-diff -b $BASEDIR/glsl.autosampledtextures.frag.out $TARGETDIR/glsl.autosampledtextures.frag.out || HASERROR=1
+run --auto-sampled-textures -H -Od -e MainPs -D -S frag hlsl.autosampledtextures.frag > "$TARGETDIR/hlsl.autosampledtextures.frag.out"
+diff -b $BASEDIR/hlsl.autosampledtextures.frag.out "$TARGETDIR/hlsl.autosampledtextures.frag.out" || HASERROR=1
+run --auto-sampled-textures -H -Od -S frag glsl.autosampledtextures.frag > "$TARGETDIR/glsl.autosampledtextures.frag.out"
+diff -b $BASEDIR/glsl.autosampledtextures.frag.out "$TARGETDIR/glsl.autosampledtextures.frag.out" || HASERROR=1
 
 # Test --glsl-version
 #
 echo "Testing --glsl-version"
-run --glsl-version 410 -V -S vert glsl.versionOverride.vert > $TARGETDIR/glsl.versionOverride.vert.out
-diff -b $BASEDIR/glsl.versionOverride.vert.out $TARGETDIR/glsl.versionOverride.vert.out || HASERROR=1
-run --glsl-version 420 -V -S frag glsl.versionOverride.frag > $TARGETDIR/glsl.versionOverride.frag.out
-diff -b $BASEDIR/glsl.versionOverride.frag.out $TARGETDIR/glsl.versionOverride.frag.out || HASERROR=1
-run --glsl-version 430 -V -S geom glsl.versionOverride.geom > $TARGETDIR/glsl.versionOverride.geom.out
-diff -b $BASEDIR/glsl.versionOverride.geom.out $TARGETDIR/glsl.versionOverride.geom.out || HASERROR=1
-run --glsl-version 440 -V -S tesc glsl.versionOverride.tesc > $TARGETDIR/glsl.versionOverride.tesc.out
-diff -b $BASEDIR/glsl.versionOverride.tesc.out $TARGETDIR/glsl.versionOverride.tesc.out || HASERROR=1
-run --glsl-version 450 -V -S tese glsl.versionOverride.tese > $TARGETDIR/glsl.versionOverride.tese.out
-diff -b $BASEDIR/glsl.versionOverride.tese.out $TARGETDIR/glsl.versionOverride.tese.out || HASERROR=1
-run --glsl-version 460 -V -S comp glsl.versionOverride.comp > $TARGETDIR/glsl.versionOverride.comp.out
-diff -b $BASEDIR/glsl.versionOverride.comp.out $TARGETDIR/glsl.versionOverride.comp.out || HASERROR=1
+run --glsl-version 410 -V -S vert glsl.versionOverride.vert > "$TARGETDIR/glsl.versionOverride.vert.out"
+diff -b $BASEDIR/glsl.versionOverride.vert.out "$TARGETDIR/glsl.versionOverride.vert.out" || HASERROR=1
+run --glsl-version 420 -V -S frag glsl.versionOverride.frag > "$TARGETDIR/glsl.versionOverride.frag.out"
+diff -b $BASEDIR/glsl.versionOverride.frag.out "$TARGETDIR/glsl.versionOverride.frag.out" || HASERROR=1
+run --glsl-version 430 -V -S geom glsl.versionOverride.geom > "$TARGETDIR/glsl.versionOverride.geom.out"
+diff -b $BASEDIR/glsl.versionOverride.geom.out "$TARGETDIR/glsl.versionOverride.geom.out" || HASERROR=1
+run --glsl-version 440 -V -S tesc glsl.versionOverride.tesc > "$TARGETDIR/glsl.versionOverride.tesc.out"
+diff -b $BASEDIR/glsl.versionOverride.tesc.out "$TARGETDIR/glsl.versionOverride.tesc.out" || HASERROR=1
+run --glsl-version 450 -V -S tese glsl.versionOverride.tese > "$TARGETDIR/glsl.versionOverride.tese.out"
+diff -b $BASEDIR/glsl.versionOverride.tese.out "$TARGETDIR/glsl.versionOverride.tese.out" || HASERROR=1
+run --glsl-version 460 -V -S comp glsl.versionOverride.comp > "$TARGETDIR/glsl.versionOverride.comp.out"
+diff -b $BASEDIR/glsl.versionOverride.comp.out "$TARGETDIR/glsl.versionOverride.comp.out" || HASERROR=1
 
 #
 # Test --enhanced-msgs
 #
 
 echo "Testing enhanced-msgs"
-run --enhanced-msgs -V --target-env vulkan1.2 --amb --aml enhanced.0.frag > $TARGETDIR/enhanced.0.frag.out
-diff -b $BASEDIR/enhanced.0.frag.out $TARGETDIR/enhanced.0.frag.out || HASERROR=1
-run --enhanced-msgs -V --target-env vulkan1.2 --amb --aml enhanced.1.frag > $TARGETDIR/enhanced.1.frag.out
-diff -b $BASEDIR/enhanced.1.frag.out $TARGETDIR/enhanced.1.frag.out || HASERROR=1
-run --enhanced-msgs -V --target-env vulkan1.2 --amb --aml enhanced.2.frag > $TARGETDIR/enhanced.2.frag.out
-diff -b $BASEDIR/enhanced.2.frag.out $TARGETDIR/enhanced.2.frag.out || HASERROR=1
-run --enhanced-msgs -V --target-env vulkan1.2 --amb --aml enhanced.3.vert enhanced.3.frag > $TARGETDIR/enhanced.3.link.out
-diff -b $BASEDIR/enhanced.3.link.out $TARGETDIR/enhanced.3.link.out || HASERROR=1
-run --enhanced-msgs -V --target-env vulkan1.2 --amb --aml enhanced.4.vert enhanced.4.frag > $TARGETDIR/enhanced.4.link.out
-diff -b $BASEDIR/enhanced.4.link.out $TARGETDIR/enhanced.4.link.out || HASERROR=1
-run --enhanced-msgs -V --target-env vulkan1.2 --amb --aml enhanced.5.vert enhanced.5.frag > $TARGETDIR/enhanced.5.link.out
-diff -b $BASEDIR/enhanced.5.link.out $TARGETDIR/enhanced.5.link.out || HASERROR=1
-run --enhanced-msgs -V --target-env vulkan1.2 --amb --aml enhanced.6.vert enhanced.6.frag > $TARGETDIR/enhanced.6.link.out
-diff -b $BASEDIR/enhanced.6.link.out $TARGETDIR/enhanced.6.link.out || HASERROR=1
-run --enhanced-msgs -V --target-env vulkan1.2 --amb --aml enhanced.7.vert enhanced.7.frag > $TARGETDIR/enhanced.7.link.out
-diff -b $BASEDIR/enhanced.7.link.out $TARGETDIR/enhanced.7.link.out || HASERROR=1
-run --enhanced-msgs -V --target-env vulkan1.2 --amb --aml spv.textureError.frag > $TARGETDIR/spv.textureError.frag.out
-diff -b $BASEDIR/spv.textureError.frag.out $TARGETDIR/spv.textureError.frag.out || HASERROR=1
+run --enhanced-msgs -V --target-env vulkan1.2 --amb --aml enhanced.0.frag > "$TARGETDIR/enhanced.0.frag.out"
+diff -b $BASEDIR/enhanced.0.frag.out "$TARGETDIR/enhanced.0.frag.out" || HASERROR=1
+run --enhanced-msgs -V --target-env vulkan1.2 --amb --aml enhanced.1.frag > "$TARGETDIR/enhanced.1.frag.out"
+diff -b $BASEDIR/enhanced.1.frag.out "$TARGETDIR/enhanced.1.frag.out" || HASERROR=1
+run --enhanced-msgs -V --target-env vulkan1.2 --amb --aml enhanced.2.frag > "$TARGETDIR/enhanced.2.frag.out"
+diff -b $BASEDIR/enhanced.2.frag.out "$TARGETDIR/enhanced.2.frag.out" || HASERROR=1
+run --enhanced-msgs -V --target-env vulkan1.2 --amb --aml enhanced.3.vert enhanced.3.frag > "$TARGETDIR/enhanced.3.link.out"
+diff -b $BASEDIR/enhanced.3.link.out "$TARGETDIR/enhanced.3.link.out" || HASERROR=1
+run --enhanced-msgs -V --target-env vulkan1.2 --amb --aml enhanced.4.vert enhanced.4.frag > "$TARGETDIR/enhanced.4.link.out"
+diff -b $BASEDIR/enhanced.4.link.out "$TARGETDIR/enhanced.4.link.out" || HASERROR=1
+run --enhanced-msgs -V --target-env vulkan1.2 --amb --aml enhanced.5.vert enhanced.5.frag > "$TARGETDIR/enhanced.5.link.out"
+diff -b $BASEDIR/enhanced.5.link.out "$TARGETDIR/enhanced.5.link.out" || HASERROR=1
+run --enhanced-msgs -V --target-env vulkan1.2 --amb --aml enhanced.6.vert enhanced.6.frag > "$TARGETDIR/enhanced.6.link.out"
+diff -b $BASEDIR/enhanced.6.link.out "$TARGETDIR/enhanced.6.link.out" || HASERROR=1
+run --enhanced-msgs -V --target-env vulkan1.2 --amb --aml enhanced.7.vert enhanced.7.frag > "$TARGETDIR/enhanced.7.link.out"
+diff -b $BASEDIR/enhanced.7.link.out "$TARGETDIR/enhanced.7.link.out" || HASERROR=1
+run --enhanced-msgs -V --target-env vulkan1.2 --amb --aml spv.textureError.frag > "$TARGETDIR/spv.textureError.frag.out"
+diff -b $BASEDIR/spv.textureError.frag.out "$TARGETDIR/spv.textureError.frag.out" || HASERROR=1
+
+#
+# Test error column
+#
+echo "Testing error-column"
+run --error-column -C -V error-column.vert > "$TARGETDIR/error-column.vert.out"
+diff -b $BASEDIR/error-column.vert.out $TARGETDIR/error-column.vert.out || HASERROR=1
+
+#
+# Test UTF8BOM
+#
+echo "Testing UTF8BOM"
+run --glsl-version 410 -V -S vert UTF8BOM.vert > $TARGETDIR/UTF8BOM.vert.out
+diff -b $BASEDIR/UTF8BOM.vert.out $TARGETDIR/UTF8BOM.vert.out || HASERROR=1
+
+#
+# Test LTO
+#
+echo "Testing link-time optimization"
+run -V -H --amb --aml -l --lto link.crossStageOptimization.vert link.crossStageOptimization.frag > "$TARGETDIR/link.crossStageOptimization.out"
+diff -b $BASEDIR/link.crossStageOptimization.out "$TARGETDIR/link.crossStageOptimization.out" || HASERROR=1
 
 #
 # Final checking
diff --git a/Test/spv.1.6.quad.frag b/Test/spv.1.6.quad.frag
new file mode 100644
index 0000000..24f72de
--- /dev/null
+++ b/Test/spv.1.6.quad.frag
@@ -0,0 +1,21 @@
+#version 460 core
+#extension GL_KHR_shader_subgroup_basic: require
+#extension GL_EXT_shader_quad_control: require
+#extension GL_KHR_shader_subgroup_vote: require
+
+layout (full_quads) in;
+layout (quad_derivatives) in;
+
+flat in int iInput;
+
+out int bOut;
+
+
+void main(){
+    bool bTemp = false;
+
+    // EXT_shader_quad_control required begin
+    bTemp  = bTemp || subgroupQuadAll(iInput > 0);                      // GL_KHR_shader_subgroup_vote
+    bTemp  = bTemp || subgroupQuadAny(iInput > 0);                      // GL_KHR_shader_subgroup_vote
+    bOut = bTemp == true ? 1 : 0;
+}
\ No newline at end of file
diff --git a/Test/spv.16bitstorage-int.frag b/Test/spv.16bitstorage-int.frag
index 57be67e..7252bfe 100644
--- a/Test/spv.16bitstorage-int.frag
+++ b/Test/spv.16bitstorage-int.frag
@@ -86,5 +86,8 @@
     b2.o = b2.p.x;

     b2.p = i16vec2(ivec2(1, 2));

     b2.o = int16_t(3);

+    b2.o = int16_t(b1.a);

+    b2.p = i16vec2(b1.b);

+    b2.q = i16vec3(b1.c);

 }

 

diff --git a/Test/spv.16bitstorage-uint.frag b/Test/spv.16bitstorage-uint.frag
index aeecd04..104aaf5 100644
--- a/Test/spv.16bitstorage-uint.frag
+++ b/Test/spv.16bitstorage-uint.frag
@@ -86,5 +86,8 @@
     b2.o = b2.p.x;

     b2.p = u16vec2(uvec2(1, 2));

     b2.o = uint16_t(3u);

+    b2.o = uint16_t(b1.a);

+    b2.p = u16vec2(b1.b);

+    b2.q = u16vec3(b1.c);

 }

 

diff --git a/Test/spv.16bitstorage.frag b/Test/spv.16bitstorage.frag
index b821be1..032629b 100644
--- a/Test/spv.16bitstorage.frag
+++ b/Test/spv.16bitstorage.frag
@@ -86,5 +86,8 @@
     b2.o = b2.p.x;

     b2.p = f16vec2(vec2(1.0, 2.0));

     b2.o = float16_t(3.0);

+    b2.o = float16_t(b1.a);

+    b2.p = f16vec2(b1.b);

+    b2.q = f16vec3(b1.c);

 }

 

diff --git a/Test/spv.8bitstorage-int.frag b/Test/spv.8bitstorage-int.frag
index 93203c3..09d95b9 100644
--- a/Test/spv.8bitstorage-int.frag
+++ b/Test/spv.8bitstorage-int.frag
@@ -86,5 +86,8 @@
     b2.o = b2.p.x;

     b2.p = i8vec2(ivec2(1, 2));

     b2.o = int8_t(3);

+    b2.o = int8_t(b1.a);

+    b2.p = i8vec2(b1.b);

+    b2.q = i8vec3(b1.c);

 }

 

diff --git a/Test/spv.8bitstorage-uint.frag b/Test/spv.8bitstorage-uint.frag
index 574d088..3a3b181 100644
--- a/Test/spv.8bitstorage-uint.frag
+++ b/Test/spv.8bitstorage-uint.frag
@@ -86,5 +86,8 @@
     b2.o = b2.p.x;

     b2.p = u8vec2(uvec2(1, 2));

     b2.o = uint8_t(3u);

+    b2.o = uint8_t(b1.a);

+    b2.p = u8vec2(b1.b);

+    b2.q = u8vec3(b1.c);

 }

 

diff --git a/Test/spv.bufferhandle_Error.frag b/Test/spv.bufferhandle_Error.frag
index 034e054..4e2fc79 100644
--- a/Test/spv.bufferhandle_Error.frag
+++ b/Test/spv.bufferhandle_Error.frag
@@ -17,11 +17,15 @@
 

 layout(buffer_reference) buffer bufType6 { int x[]; };

 

+layout(buffer_reference, std140, buffer_reference_align = 16) buffer bufType7;

+layout(buffer_reference) buffer bufType7 { int x[]; };

+

 buffer bufType4 {

     bufType1 b1;

     bufType2 b2;

     bufType3 b3;

     bufType6 b6;

+    bufType7 b7;

 } b4;

 

 void f()

diff --git a/Test/spv.computeShaderDerivativesSpec.comp b/Test/spv.computeShaderDerivativesSpec.comp
new file mode 100644
index 0000000..dd452d3
--- /dev/null
+++ b/Test/spv.computeShaderDerivativesSpec.comp
@@ -0,0 +1,8 @@
+#version 450
+#extension GL_NV_compute_shader_derivatives : require
+
+layout (local_size_x_id = 0, local_size_y_id = 1) in;

+layout(derivative_group_quadsNV) in;
+
+void main(){
+}
diff --git a/Test/spv.computeShaderDerivativesSpec2.comp b/Test/spv.computeShaderDerivativesSpec2.comp
new file mode 100644
index 0000000..48310ef
--- /dev/null
+++ b/Test/spv.computeShaderDerivativesSpec2.comp
@@ -0,0 +1,8 @@
+#version 320 es
+#extension GL_NV_compute_shader_derivatives : require
+
+layout (local_size_x_id = 0, local_size_y_id = 1) in;

+layout(derivative_group_linearNV) in;
+
+void main(){
+}
diff --git a/Test/spv.coopmat2_constructor.comp b/Test/spv.coopmat2_constructor.comp
new file mode 100644
index 0000000..3bd1830
--- /dev/null
+++ b/Test/spv.coopmat2_constructor.comp
@@ -0,0 +1,77 @@
+#version 450 core
+#extension GL_KHR_memory_scope_semantics : enable
+#extension GL_KHR_cooperative_matrix : enable
+#extension GL_EXT_shader_explicit_arithmetic_types : enable
+#extension GL_NV_cooperative_matrix2 : enable

+
+layout (local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
+

+buffer BufType {

+   float16_t x[];

+} Buf;
+

+uint32_t addr(const in uint32_t x, const in uint32_t y) {

+    return y*64+x;

+}

+

+uint32_t foo() { return 124; }

+

+float16_t relu(const in uint32_t row, const in uint32_t col, const in float16_t x) { return max(x, float16_t(0)); }

+
+float16_t add(const in uint32_t row, const in uint32_t col, const in float16_t x, const in float16_t y) { return x+y; }

+

+float16_t combineSum(const in float16_t a, const in float16_t b) { return a + b; }

+float16_t combineMax(const in float16_t a, const in float16_t b) { return max(a, b); }

+

+layout(constant_id = 0) const uint32_t Dim = 32;

+

+void main()
+{

+    coopmat<float16_t, gl_ScopeWorkgroup, 64, 32, gl_MatrixUseA> A;

+    coopmat<float16_t, gl_ScopeWorkgroup, 64, 32, gl_MatrixUseB> B;

+    coopmat<float16_t, gl_ScopeWorkgroup, 64, 32, gl_MatrixUseAccumulator> Acc;

+

+    A = coopmat<float16_t, gl_ScopeWorkgroup, 64, 32, gl_MatrixUseA>(Acc);
+    B = coopmat<float16_t, gl_ScopeWorkgroup, 64, 32, gl_MatrixUseB>(Acc);

+

+    coopmat<float16_t, gl_ScopeWorkgroup, 32, 64, gl_MatrixUseB> tr;

+

+    coopMatTransposeNV(tr, Acc);

+

+    coopMatReduceNV(Acc, Acc, gl_CooperativeMatrixReduceRowNV, combineSum);

+    coopMatReduceNV(Acc, Acc, gl_CooperativeMatrixReduceColumnNV, combineSum);

+    coopMatReduceNV(Acc, Acc, gl_CooperativeMatrixReduceRowAndColumnNV, combineSum);

+

+    coopmat<float16_t, gl_ScopeWorkgroup, 32, 16, gl_MatrixUseAccumulator> Acc2x2;

+    coopMatReduceNV(Acc2x2, Acc, gl_CooperativeMatrixReduce2x2NV, combineMax);

+

+    //coopMatLoadTensorNV(A, Buf.x, foo(), addr);

+    //coopMatStoreTensorNV(A, Buf.x, foo(), addr);

+

+    coopMatPerElementNV(Acc, Acc, relu);

+    coopMatPerElementNV(Acc, Acc, add, float16_t(1.0));

+

+    coopmat<float16_t, gl_ScopeWorkgroup, 64, 32, gl_MatrixUseAccumulator> Accf16;

+    coopmat<float32_t, gl_ScopeWorkgroup, 64, 32, gl_MatrixUseAccumulator> Accf32;

+    coopmat<uint32_t, gl_ScopeWorkgroup, 64, 32, gl_MatrixUseAccumulator> Accu32;

+    coopmat<int32_t, gl_ScopeWorkgroup, 64, 32, gl_MatrixUseAccumulator> Accs32;

+

+    coopmat<uint8_t, gl_ScopeWorkgroup, 64, 32, gl_MatrixUseA>(Accu32);

+    coopmat<int8_t, gl_ScopeWorkgroup, 64, 32, gl_MatrixUseA>(Accu32);

+    coopmat<float16_t, gl_ScopeWorkgroup, 64, 32, gl_MatrixUseA>(Accu32);

+

+    coopmat<uint8_t, gl_ScopeWorkgroup, 64, 32, gl_MatrixUseA>(Accs32);

+    coopmat<int8_t, gl_ScopeWorkgroup, 64, 32, gl_MatrixUseA>(Accs32);

+    coopmat<float16_t, gl_ScopeWorkgroup, 64, 32, gl_MatrixUseA>(Accs32);

+

+    coopmat<uint8_t, gl_ScopeWorkgroup, 64, 32, gl_MatrixUseA>(Accf16);

+    coopmat<int8_t, gl_ScopeWorkgroup, 64, 32, gl_MatrixUseA>(Accf16);

+    coopmat<float16_t, gl_ScopeWorkgroup, 64, 32, gl_MatrixUseA>(Accf16);

+

+    coopmat<uint8_t, gl_ScopeWorkgroup, 64, 32, gl_MatrixUseA>(Accf32);

+    coopmat<int8_t, gl_ScopeWorkgroup, 64, 32, gl_MatrixUseA>(Accf32);

+    coopmat<float16_t, gl_ScopeWorkgroup, 64, 32, gl_MatrixUseA>(Accf32);

+

+    coopmat<float, gl_ScopeWorkgroup, Dim, Dim, gl_MatrixUseAccumulator> li, mijm1;

+    mijm1 = coopmat<float, gl_ScopeWorkgroup, Dim, Dim, gl_MatrixUseAccumulator>(-1.0/0.0);

+}
diff --git a/Test/spv.coopmat2_error.comp b/Test/spv.coopmat2_error.comp
new file mode 100644
index 0000000..5376225
--- /dev/null
+++ b/Test/spv.coopmat2_error.comp
@@ -0,0 +1,79 @@
+#version 450 core
+#extension GL_KHR_memory_scope_semantics : enable
+#extension GL_KHR_cooperative_matrix : enable
+#extension GL_EXT_shader_explicit_arithmetic_types : enable
+#extension GL_NV_cooperative_matrix2 : enable

+#extension GL_EXT_buffer_reference : enable

+
+layout (local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
+

+buffer BufType {

+   float16_t x[];

+} Buf;
+

+layout(buffer_reference, std430, buffer_reference_align = 2) buffer fp16Buf {

+    float16_t f;

+};

+

+

+float16_t decode0(const in fp16Buf b, const in uint32_t blockCoords[2], const in uint32_t coordInBlock[2]) { return b.f; }

+float16_t decode1(const fp16Buf b, const in uint32_t blockCoords[2], const in uint32_t coordInBlock[2]) { return b.f; }

+float16_t decode2(in fp16Buf b, const in uint32_t blockCoords[2], const in uint32_t coordInBlock[2]) { return b.f; }

+float16_t decode3(fp16Buf b, const in uint32_t blockCoords[2], const in uint32_t coordInBlock[2]) { return b.f; }

+float16_t decode4(const in fp16Buf b, const uint32_t blockCoords[2], const in uint32_t coordInBlock[2]) { return b.f; }

+float16_t decode5(const in fp16Buf b, in uint32_t blockCoords[2], const in uint32_t coordInBlock[2]) { return b.f; }

+float16_t decode6(const in fp16Buf b, uint32_t blockCoords[2], const in uint32_t coordInBlock[2]) { return b.f; }

+float16_t decode7(const in fp16Buf b, const in uint32_t blockCoords[2], const uint32_t coordInBlock[2]) { return b.f; }

+float16_t decode8(const in fp16Buf b, const in uint32_t blockCoords[2], in uint32_t coordInBlock[2]) { return b.f; }

+float16_t decode9(const in fp16Buf b, const in uint32_t blockCoords[2], uint32_t coordInBlock[2]) { return b.f; }

+float16_t decode10(const in uint32_t b, const in uint16_t blockCoords[2], const in uint16_t coordInBlock[2]) { return float16_t(0); }

+float16_t decode11(const in fp16Buf b, const in uint32_t blockCoords, const in uint32_t coordInBlock) { return float16_t(0); }

+

+struct S {

+   f16vec2 x;

+};

+

+float16_t combineSum(const in float16_t a, const in float16_t b) { return a + b; }

+float16_t combineSum2(float16_t a, float16_t b) { return a + b; }

+

+layout(constant_id = 0) const uint32_t Clamp = gl_CooperativeMatrixClampModeConstantNV;

+

+float16_t relu(const in uint32_t row, const in uint32_t col, const in float16_t x) { return max(x, float16_t(0)); }

+float16_t add(const in uint32_t row, const in uint32_t col, const in float16_t x, const in float16_t y) { return x+y; }

+float32_t perelemf32(const in uint32_t row, const in uint32_t col, const in float16_t x) { return float32_t(x); }

+

+void main()
+{

+    coopmat<float16_t, gl_ScopeWorkgroup, 64, 32, gl_MatrixUseAccumulator> A;

+

+    tensorLayoutNV<2> t = createTensorLayoutNV(2);

+

+    coopMatLoadTensorNV(A, Buf.x, 0, t, decode0);

+    coopMatLoadTensorNV(A, Buf.x, 0, t, decode1);

+    coopMatLoadTensorNV(A, Buf.x, 0, t, decode2);

+    coopMatLoadTensorNV(A, Buf.x, 0, t, decode3);

+    coopMatLoadTensorNV(A, Buf.x, 0, t, decode4);

+    coopMatLoadTensorNV(A, Buf.x, 0, t, decode5);

+    coopMatLoadTensorNV(A, Buf.x, 0, t, decode6);

+    coopMatLoadTensorNV(A, Buf.x, 0, t, decode7);

+    coopMatLoadTensorNV(A, Buf.x, 0, t, decode8);

+    coopMatLoadTensorNV(A, Buf.x, 0, t, decode9);

+    coopMatLoadTensorNV(A, Buf.x, 0, t, decode10);

+    coopMatLoadTensorNV(A, Buf.x, 0, t, decode11);

+

+    coopmat<float32_t, gl_ScopeWorkgroup, 64, 32, gl_MatrixUseAccumulator> Af32;

+

+    coopMatReduceNV(A, A, gl_CooperativeMatrixReduceRowNV, combineSum);

+    coopMatReduceNV(A, A, gl_CooperativeMatrixReduceRowNV, combineSum2);

+    coopMatReduceNV(Af32, Af32, gl_CooperativeMatrixReduceRowNV, combineSum);

+

+    coopMatPerElementNV(A, A, relu);

+    coopMatPerElementNV(A, A, add, float16_t(1.0));

+    coopMatPerElementNV(A, A, add, coopmat<float16_t, gl_ScopeWorkgroup, 64, 32, gl_MatrixUseAccumulator>(1.0));

+    coopMatPerElementNV(A, A, add, float32_t(1.0));

+    coopMatPerElementNV(A, A, add, coopmat<float32_t, gl_ScopeWorkgroup, 64, 32, gl_MatrixUseAccumulator>(1.0));

+    coopMatPerElementNV(A, A, add);

+    coopMatPerElementNV(A, A, add, float16_t(1.0), float16_t(1.0));

+    coopMatPerElementNV(Af32, A, perelemf32);

+    coopMatPerElementNV(Af32, A, relu);

+}
diff --git a/Test/spv.coopmat2_tensor.comp b/Test/spv.coopmat2_tensor.comp
new file mode 100644
index 0000000..2b6aa97
--- /dev/null
+++ b/Test/spv.coopmat2_tensor.comp
@@ -0,0 +1,66 @@
+#version 450 core
+#extension GL_KHR_memory_scope_semantics : enable
+#extension GL_KHR_cooperative_matrix : enable
+#extension GL_EXT_shader_explicit_arithmetic_types : enable
+#extension GL_NV_cooperative_matrix2 : enable

+#extension GL_EXT_buffer_reference : enable

+
+layout (local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
+

+buffer BufType {

+   float16_t x[];

+} Buf;
+

+layout(buffer_reference, std430, buffer_reference_align = 2) buffer fp16Buf {

+    float16_t f;

+};

+

+

+float16_t decode(const in fp16Buf b, const in uint32_t blockCoords[2], const in uint32_t coordInBlock[2])

+{

+    return b.f;

+}

+

+struct S {

+   f16vec2 x;

+};

+

+

+layout(std430, binding  = 0) buffer SBuf {

+    S s[];

+} sbuf;

+

+layout(constant_id = 0) const uint32_t Clamp = gl_CooperativeMatrixClampModeConstantNV;

+

+void main()
+{

+    coopmat<float16_t, gl_ScopeWorkgroup, 64, 32, gl_MatrixUseA> A;

+

+    tensorLayoutNV<2> t = createTensorLayoutNV(2);

+    tensorLayoutNV<3, 1> t2 = createTensorLayoutNV(3, 1);

+

+    t = setTensorLayoutBlockSizeNV(t, 4, 8);

+    t = setTensorLayoutDimensionNV(t, 256, 512);

+    t = sliceTensorLayoutNV(t, 128, 32, 256, 32);

+

+    tensorViewNV<5> v = createTensorViewNV(5);

+    v = setTensorViewDimensionsNV(v, 10, 11, 12, 13, 14);

+    v = setTensorViewStrideNV(v, 10, 11, 12, 13, 15);

+    v = setTensorViewClipNV(v, 0, 16, 0, 16);

+

+    tensorViewNV<5, true> v2 = createTensorViewNV(5, true);

+    tensorViewNV<2, true, 1, 0> v3 = createTensorViewNV(2, true, 1, 0);

+

+    coopMatLoadTensorNV(A, Buf.x, 0, t);

+    coopMatStoreTensorNV(A, Buf.x, 0, t);

+

+    coopMatLoadTensorNV(A, Buf.x, 0, t, v);

+    coopMatStoreTensorNV(A, Buf.x, 0, t, v);

+

+    coopMatLoadTensorNV(A, Buf.x, 0, t, decode);

+    coopMatLoadTensorNV(A, Buf.x, 0, t, v, decode);

+

+    coopMatLoadTensorNV(A, sbuf.s, 1, t, v, decode);

+

+    tensorLayoutNV<2, Clamp> tc = createTensorLayoutNV(2, Clamp);

+}
diff --git a/Test/spv.coopmat_armlayout.comp b/Test/spv.coopmat_armlayout.comp
new file mode 100644
index 0000000..b63ea5e
--- /dev/null
+++ b/Test/spv.coopmat_armlayout.comp
@@ -0,0 +1,121 @@
+#version 450 core
+#extension GL_KHR_memory_scope_semantics : enable
+#extension GL_KHR_cooperative_matrix : enable
+#extension GL_EXT_shader_explicit_arithmetic_types : enable
+#extension GL_EXT_buffer_reference : enable
+
+layout (local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
+
+const int X = 8;
+layout(constant_id = 0) const int Y = 2;
+const int Z = X*Y;
+
+coopmat<float16_t, gl_ScopeSubgroup, Z, 8, gl_MatrixUseAccumulator> mC;
+coopmat<float16_t, gl_ScopeSubgroup, Z, 8, gl_MatrixUseAccumulator> mC2[3];
+
+layout(constant_id = 1) const float F = 3.0;
+
+const coopmat<float, gl_ScopeSubgroup, Z, 8, gl_MatrixUseAccumulator> mD = coopmat<float, gl_ScopeSubgroup, Z, 8, gl_MatrixUseAccumulator>(0.0);
+const coopmat<float16_t, gl_ScopeSubgroup, 8, 8, gl_MatrixUseAccumulator> mD2 = coopmat<float16_t, gl_ScopeSubgroup, 8, 8, gl_MatrixUseAccumulator>(1);
+
+struct S { int a; int b; int c; };
+
+const S s = S(12, 23, 34);
+
+layout(set = 0, binding = 0, buffer_reference) coherent buffer Block {
+    float y[1024*1024];
+    float x[];
+} block;
+
+layout(set = 0, binding = 0) coherent buffer Block16 {
+    float16_t y[1024*1024];
+    float16_t x[];
+
+    Block b;
+} block16;
+
+coopmat<float16_t, gl_ScopeSubgroup, 8, 8, gl_MatrixUseAccumulator> f16(coopmat<float16_t, gl_ScopeSubgroup, 8, 8, gl_MatrixUseAccumulator> m) { return -m; }
+coopmat<float, gl_ScopeSubgroup, 8, 8, gl_MatrixUseAccumulator> f32(coopmat<float, gl_ScopeSubgroup, 8, 8, gl_MatrixUseAccumulator> m) { return -m; }
+
+layout(constant_id = 2) const int SC = 1;
+coopmat<float16_t, gl_ScopeSubgroup, SC, SC, gl_MatrixUseAccumulator> scm[SC][SC];
+
+// sized for coopmat<float16_t, gl_ScopeSubgroup, 16, 16, gl_MatrixUseAccumulator>
+shared uvec4 shmatrix[16*16*2/16];
+
+void main()
+{
+    coopmat<float, gl_ScopeSubgroup, 16, (2>1?8:4), gl_MatrixUseAccumulator> m = coopmat<float, gl_ScopeSubgroup, 16, (2>1?8:4), gl_MatrixUseAccumulator>(0.0);
+
+    m = m + m;
+    m = m - m;
+    m = -m;
+    m = 2.0*m;
+    m = m*2.0;
+
+    coopmat<float16_t, gl_ScopeSubgroup, 16, 8, gl_MatrixUseAccumulator> m2 = coopmat<float16_t, gl_ScopeSubgroup, 16, 8, gl_MatrixUseAccumulator>(m);
+
+    float x = m[1];
+    m[0] = x;
+
+    coopMatLoad(m, block.x, 16, 128, gl_CooperativeMatrixLayoutRowBlockedInterleavedARM);
+    coopMatStore(m, block.x, 16, 128, gl_CooperativeMatrixLayoutRowBlockedInterleavedARM);
+    coopMatLoad(m2, block16.x, 16, 128, gl_CooperativeMatrixLayoutRowBlockedInterleavedARM);
+    coopMatStore(m2, block16.x, 16, 128, gl_CooperativeMatrixLayoutRowBlockedInterleavedARM);
+    coopMatLoad(m, block16.b.x, 16, 128, gl_CooperativeMatrixLayoutRowBlockedInterleavedARM);
+    coopMatStore(m, block16.b.x, 16, 128, gl_CooperativeMatrixLayoutRowBlockedInterleavedARM);
+
+    coopmat<float16_t, gl_ScopeSubgroup, 16, 8, gl_MatrixUseA> A;
+    coopmat<float16_t, gl_ScopeSubgroup, 8, 8, gl_MatrixUseB> B;
+    coopmat<float, gl_ScopeSubgroup, 16, 8, gl_MatrixUseAccumulator> C;
+    coopmat<float, gl_ScopeSubgroup, 16, 8, gl_MatrixUseAccumulator> D;
+    D = coopMatMulAdd(A, B, C);
+
+    int l = D.length();
+
+    coopmat<float16_t, gl_ScopeSubgroup, 8, 8, gl_MatrixUseAccumulator> E;
+
+    coopmat<float16_t, gl_ScopeSubgroup, Z, Z, gl_MatrixUseAccumulator> F = coopmat<float16_t, gl_ScopeSubgroup, Z, Z, gl_MatrixUseAccumulator>(0.0);
+
+    coopmat<float, gl_ScopeSubgroup, 16, (2>1?8:4), gl_MatrixUseAccumulator> a[5];
+    a[3][0] = 1.0;
+
+    float md1 = mD[1];
+
+    md1 += (m += m)[1234];
+
+    mC2[1] = mC2[2];
+
+    coopMatLoad(m, block.y, 16, 128, gl_CooperativeMatrixLayoutRowBlockedInterleavedARM);
+    coopMatStore(m, block.y, 16, 128, gl_CooperativeMatrixLayoutRowBlockedInterleavedARM);
+    coopMatLoad(m2, block16.y, 16, 128, gl_CooperativeMatrixLayoutRowBlockedInterleavedARM);
+    coopMatStore(m2, block16.y, 16, 128, gl_CooperativeMatrixLayoutRowBlockedInterleavedARM);
+
+    coopmat<float16_t, gl_ScopeSubgroup, 8, 8, gl_MatrixUseAccumulator> p1;
+    coopmat<float, gl_ScopeSubgroup, 8, 8, gl_MatrixUseAccumulator> p2;
+
+    p1 = f16(p1);
+    p2 = f32(p2);
+
+    p1 = coopmat<float16_t, gl_ScopeSubgroup, 8, 8, gl_MatrixUseAccumulator>(0.0);
+    p2 = coopmat<float, gl_ScopeSubgroup, 8, 8, gl_MatrixUseAccumulator>(0.0);
+
+    p1 /= p1;
+
+    p1 *= float16_t(2.0);
+    p2 *= 4.0;
+
+    coopmat<float16_t, gl_ScopeSubgroup, 16, 8, gl_MatrixUseAccumulator> ms;
+    coopMatLoad(ms, shmatrix, 1, 2, gl_CooperativeMatrixLayoutRowBlockedInterleavedARM);
+    coopMatStore(ms, shmatrix, 1, 2, gl_CooperativeMatrixLayoutRowBlockedInterleavedARM);
+
+    coopmat<int8_t, gl_ScopeSubgroup, 8, 8, gl_MatrixUseA> ms8A;
+    coopmat<int8_t, gl_ScopeSubgroup, 8, 8, gl_MatrixUseB> ms8B;
+    coopmat<int8_t, gl_ScopeSubgroup, 8, 8, gl_MatrixUseAccumulator> ms8C;
+    coopMatMulAdd(ms8A, ms8B, ms8C);
+    coopMatMulAdd(ms8A, ms8B, ms8C, 0);
+    coopMatMulAdd(ms8A, ms8B, ms8C, gl_MatrixOperandsSaturatingAccumulation);
+
+    coopmat<int16_t, gl_ScopeSubgroup, 8, 8, gl_MatrixUseA> m16;
+    coopMatStore(m16, shmatrix, 1, 2, gl_CooperativeMatrixLayoutRowBlockedInterleavedARM);
+}
diff --git a/Test/spv.debugInfo.frag b/Test/spv.debugInfo.frag
index 31b6334..5bcf87f 100644
--- a/Test/spv.debugInfo.frag
+++ b/Test/spv.debugInfo.frag
@@ -1,83 +1,83 @@
-#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;

-}

-

-float testBranch(float x, float y)

-{

-    float result = 0;

-    bool b = x > 0;

-

-    // branch with load

-    if (b) {

-        result += 1;

-    }

-    else {

-        result -= 1;

-    }

-

-    // branch with expression

-    if (x > y) {

-        result += x - y;

-    }

-

-    // selection with load

-    result += b ?

-        1 : -1;

-

-    // selection with expression

-    result += x < y ? 

-        y : 

-        float(b);

-

-    return result;

-}

-

-void main()

-{

-    outv = foo(s);

-    outv += testBranch(inv.x, inv.y);

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

+#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;
+}
+
+float testBranch(float x, float y)
+{
+    float result = 0;
+    bool b = x > 0;
+
+    // branch with load
+    if (b) {
+        result += 1;
+    }
+    else {
+        result -= 1;
+    }
+
+    // branch with expression
+    if (x > y) {
+        result += x - y;
+    }
+
+    // selection with load
+    result += b ?
+        1 : -1;
+
+    // selection with expression
+    result += x < y ? 
+        y : 
+        float(b);
+
+    return result;
+}
+
+void main()
+{
+    outv = foo(s);
+    outv += testBranch(inv.x, inv.y);
+    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);
 }
\ No newline at end of file
diff --git a/Test/spv.debuginfo.coopmatKHR.comp b/Test/spv.debuginfo.coopmatKHR.comp
new file mode 100644
index 0000000..dceffce
--- /dev/null
+++ b/Test/spv.debuginfo.coopmatKHR.comp
@@ -0,0 +1,87 @@
+/*
+ * Copyright (c) 2019-2024, NVIDIA CORPORATION. All rights reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is 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 Software.
+ *
+ * THE SOFTWARE IS 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 SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+#version 450 core
+#pragma use_vulkan_memory_model
+#extension GL_EXT_scalar_block_layout : enable
+#extension GL_KHR_memory_scope_semantics : enable
+#extension GL_KHR_cooperative_matrix : enable
+#extension GL_EXT_shader_explicit_arithmetic_types_float16 : enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int8 : enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int32 : enable
+#extension GL_EXT_buffer_reference : enable
+#extension GL_EXT_control_flow_attributes : enable
+
+layout(constant_id = 0) const uint lM = 1;
+layout(constant_id = 1) const uint lN = 1;
+layout(constant_id = 2) const uint lK = 1;
+layout(constant_id = 3) const uint TILE_M = 1;
+layout(constant_id = 4) const uint TILE_N = 1;
+layout(constant_id = 5) const uint TILE_K = 1;
+layout(constant_id = 6) const uint K = 1;
+
+#define A_BITS 16
+#define A_TYPE float16_t
+#define C_BITS 16
+#define C_TYPE float16_t
+
+buffer Output { C_TYPE x[]; } outputO;
+
+shared uvec4 Ash[128];
+shared uvec4 Bsh[128];
+
+const uint C_ROWS = 2;
+const uint C_COLS = 2;
+coopmat<C_TYPE, gl_ScopeSubgroup, lM, lN, gl_MatrixUseAccumulator> result[C_ROWS][C_COLS];
+
+void main()
+{
+    [[unroll]] for (uint i = 0; i < C_ROWS; ++i) {
+        [[unroll]] for (uint j = 0; j < C_COLS; ++j) {
+            result[i][j] = coopmat<C_TYPE, gl_ScopeSubgroup, lM, lN, gl_MatrixUseAccumulator>(0.0);
+        }
+    }
+
+    for (uint chunkK = 0; chunkK < K; chunkK += TILE_K) {
+        [[unroll]] for (uint k = 0; k < TILE_K / lK; ++k)
+        {
+            coopmat<A_TYPE, gl_ScopeSubgroup, lM, lK, gl_MatrixUseA> matA[C_ROWS];
+            [[unroll]] for (uint i = 0; i < C_ROWS; ++i) {
+                coopMatLoad(matA[i], Ash, 0, 0, gl_CooperativeMatrixLayoutRowMajor);
+            }
+
+            coopmat<A_TYPE, gl_ScopeSubgroup, lK, lN, gl_MatrixUseB> matB;
+            [[unroll]] for (uint j = 0; j < C_COLS; ++j) {
+                coopMatLoad(matB, Bsh, 0, 0, gl_CooperativeMatrixLayoutRowMajor);
+
+                [[unroll]] for (uint i = 0; i < C_ROWS; ++i) {
+                    result[i][j] = coopMatMulAdd(matA[i], matB, result[i][j]);
+                }
+            }
+        }
+    }
+
+    [[unroll]] for (uint i = 0; i < C_ROWS; ++i) {
+        [[unroll]] for (uint j = 0; j < C_COLS; ++j) {
+            coopMatStore(result[i][j], outputO.x, 0, 0, gl_CooperativeMatrixLayoutRowMajor);
+        }
+    }
+}
diff --git a/Test/spv.debuginfo.implicit_br.glsl.frag b/Test/spv.debuginfo.implicit_br.glsl.frag
new file mode 100644
index 0000000..2451b77
--- /dev/null
+++ b/Test/spv.debuginfo.implicit_br.glsl.frag
@@ -0,0 +1,60 @@
+#version 460
+
+out int outx;
+int counter = 0;
+
+void test_if() {
+    if (false) {
+        counter += 1;
+    }
+}
+
+void test_ifelse() {
+    if (false) {
+        counter += 1;
+    }
+    else {
+        counter += 2;
+    }
+}
+
+void test_if_compound() {
+    if (false) {
+        if (false) {
+            counter += 1;
+        }
+    }
+}
+
+void test_if_compound2() {
+    if (false) {
+        if (false) {
+            counter += 1;
+        }
+
+        counter += 2;
+    }
+}
+
+void test_switch() {
+    switch (0) {
+    case 0:
+        counter += 1;
+        // implict fallthrough
+    case 1:
+        counter += 2;
+        break;
+    default:
+        counter += 3;
+        // implicit break
+    }
+}
+
+void main() {
+    test_if();
+    test_ifelse();
+    test_if_compound();
+    test_if_compound2();
+    test_switch();
+    outx = counter;
+}
\ No newline at end of file
diff --git a/Test/spv.debuginfo.include.glsl.frag b/Test/spv.debuginfo.include.glsl.frag
new file mode 100644
index 0000000..f2c95a3
--- /dev/null
+++ b/Test/spv.debuginfo.include.glsl.frag
@@ -0,0 +1,12 @@
+#version 450
+
+#extension GL_GOOGLE_include_directive : require
+#include "spv.debuginfo.include.glsl.h"
+
+vec4 mainFileFunction(vec4 v) {
+	return -v;
+}
+
+void main() {
+	headerOut = headerFunction(mainFileFunction(headerUboItem));
+}
\ No newline at end of file
diff --git a/Test/spv.debuginfo.include.glsl.h b/Test/spv.debuginfo.include.glsl.h
new file mode 100644
index 0000000..51df846
--- /dev/null
+++ b/Test/spv.debuginfo.include.glsl.h
@@ -0,0 +1,10 @@
+
+out vec4 headerOut;
+
+uniform UBO {
+	vec4 headerUboItem;
+};
+
+vec4 headerFunction(vec4 a) {
+	return -a;
+}
\ No newline at end of file
diff --git a/Test/spv.debuginfo.multiline.glsl.frag b/Test/spv.debuginfo.multiline.glsl.frag
new file mode 100644
index 0000000..8ed0700
--- /dev/null
+++ b/Test/spv.debuginfo.multiline.glsl.frag
@@ -0,0 +1,25 @@
+#version 460
+
+in float inx;
+out float outx;
+
+float add(float x, float y, float z) {
+    return 
+        x
+        +
+        y
+        +
+        z
+    ;
+}
+
+void main() {
+    outx
+        =
+        add(
+            inx+1,
+            inx+2,
+            inx+3
+        )
+    ;
+}
\ No newline at end of file
diff --git a/Test/spv.debuginfo.rt_types.glsl.rgen b/Test/spv.debuginfo.rt_types.glsl.rgen
new file mode 100644
index 0000000..8d5638f
--- /dev/null
+++ b/Test/spv.debuginfo.rt_types.glsl.rgen
@@ -0,0 +1,23 @@
+#version 460
+#extension GL_NV_ray_tracing : enable
+#extension GL_EXT_ray_query : enable
+layout(binding = 0, set = 0) uniform accelerationStructureEXT acc0;
+
+layout(shaderRecordNV) buffer block
+{
+	vec3 dir;
+	vec3 origin;
+};
+
+void main()
+{
+    rayQueryEXT localRayQuery;
+    uint rayFlags = gl_RayFlagsOpaqueEXT | gl_RayFlagsSkipClosestHitShaderEXT;
+    float tMin = 0.f;
+    float tMax = 1000.f;
+    rayQueryInitializeEXT(localRayQuery, acc0, rayFlags, 0xFF , origin, tMin, dir, tMax);
+    if (!rayQueryProceedEXT(localRayQuery))
+    {
+        rayQueryTerminateEXT(localRayQuery);
+    }
+}
diff --git a/Test/spv.debuginfo.scalar_types.glsl.frag b/Test/spv.debuginfo.scalar_types.glsl.frag
index 36595ea..f385f02 100644
--- a/Test/spv.debuginfo.scalar_types.glsl.frag
+++ b/Test/spv.debuginfo.scalar_types.glsl.frag
@@ -1,55 +1,55 @@
-/*

-The MIT License (MIT)

-

-Copyright (c) 2023 NVIDIA CORPORATION.

-

-Permission is hereby granted, free of charge, to any person obtaining a copy

-of this software and associated documentation files (the "Software"), to deal

-in the Software without restriction, including without limitation the rights

-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell

-copies of the Software, and to permit persons to whom the Software is

-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 Software.

-

-THE SOFTWARE IS 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 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE

-SOFTWARE.

-*/

-

-#version 460

-

-#extension GL_EXT_shader_explicit_arithmetic_types : require

-

-bool VAR_bool;

-int VAR_int;

-uint VAR_uint;

-float VAR_float;

-double VAR_double;

-int8_t VAR_int8_t;

-uint8_t VAR_uint8_t;

-int16_t VAR_int16_t;

-uint16_t VAR_uint16_t;

-int64_t VAR_int64_t;

-uint64_t VAR_uint64_t;

-float16_t VAR_float16_t;

-

-void main() {

-    VAR_bool = bool(0);

-    VAR_int = int(0);

-    VAR_uint = uint(0);

-    VAR_float = float(0);

-    VAR_double = double(0);

-    VAR_int8_t = int8_t(0);

-    VAR_uint8_t = uint8_t(0);

-    VAR_int16_t = int16_t(0);

-    VAR_uint16_t = uint16_t(0);

-    VAR_int64_t = int64_t(0);

-    VAR_uint64_t = uint64_t(0);

-    VAR_float16_t = float16_t(0);

+/*
+The MIT License (MIT)
+
+Copyright (c) 2023 NVIDIA CORPORATION.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+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 Software.
+
+THE SOFTWARE IS 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 SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+*/
+
+#version 460
+
+#extension GL_EXT_shader_explicit_arithmetic_types : require
+
+bool VAR_bool;
+int VAR_int;
+uint VAR_uint;
+float VAR_float;
+double VAR_double;
+int8_t VAR_int8_t;
+uint8_t VAR_uint8_t;
+int16_t VAR_int16_t;
+uint16_t VAR_uint16_t;
+int64_t VAR_int64_t;
+uint64_t VAR_uint64_t;
+float16_t VAR_float16_t;
+
+void main() {
+    VAR_bool = bool(0);
+    VAR_int = int(0);
+    VAR_uint = uint(0);
+    VAR_float = float(0);
+    VAR_double = double(0);
+    VAR_int8_t = int8_t(0);
+    VAR_uint8_t = uint8_t(0);
+    VAR_int16_t = int16_t(0);
+    VAR_uint16_t = uint16_t(0);
+    VAR_int64_t = int64_t(0);
+    VAR_uint64_t = uint64_t(0);
+    VAR_float16_t = float16_t(0);
 }
\ No newline at end of file
diff --git a/Test/spv.expect_assume.assumeEXT.comp b/Test/spv.expect_assume.assumeEXT.comp
new file mode 100644
index 0000000..165debc
--- /dev/null
+++ b/Test/spv.expect_assume.assumeEXT.comp
@@ -0,0 +1,13 @@
+#version 450
+
+#extension GL_EXT_expect_assume: enable
+
+layout (local_size_x = 8) in;
+
+readonly buffer roblock {
+  int i;
+} ro;
+
+void main() {
+  assumeEXT(ro.i > 42);
+}
diff --git a/Test/spv.expect_assume.expectEXT.comp b/Test/spv.expect_assume.expectEXT.comp
new file mode 100644
index 0000000..a157a5f
--- /dev/null
+++ b/Test/spv.expect_assume.expectEXT.comp
@@ -0,0 +1,43 @@
+#version 450
+
+#extension GL_EXT_expect_assume: enable
+
+layout (local_size_x = 8) in;
+
+readonly buffer roblock {
+  bool b;
+  bvec2 bv2;
+  bvec3 bv3;
+  bvec4 bv4;
+  int i;
+  ivec2 iv2;
+  ivec3 iv3;
+  ivec4 iv4;
+  uint ui;
+  uvec2 uv2;
+  uvec3 uv3;
+  uvec4 uv4;
+} ro;
+
+void main() {
+  int x = 0;
+
+  if (expectEXT(ro.b, true) == true ||
+      expectEXT(ro.bv2, bvec2(true, false)) == bvec2(true, false) ||
+      expectEXT(ro.bv3, bvec3(true, false, true)) == bvec3(true, false, true) ||
+      expectEXT(ro.bv4, bvec4(false, true, false, true)) == bvec4(false, true, false, true)) {
+    x++;
+  }
+  if (expectEXT(ro.i, 10) == 10 ||
+      expectEXT(ro.iv2, ivec2(11, -22)) == ivec2(11, -22) ||
+      expectEXT(ro.iv3, ivec3(11, -22, 33)) == ivec3(11, -22, 33) ||
+      expectEXT(ro.iv4, ivec4(11, -22, 33, 44)) == ivec4(11, -22, 33, 44)) {
+    x++;
+  }
+  if (expectEXT(ro.ui, 10) == 10 ||
+      expectEXT(ro.uv2, uvec2(11, 22)) == uvec2(11, 22) ||
+      expectEXT(ro.uv3, uvec3(11, 22, 33)) == uvec3(11, 22, 33) ||
+      expectEXT(ro.uv4, uvec4(11, 22, 33, 44)) == uvec4(11, 22, 33, 44)) {
+    x++;
+  }
+}
diff --git a/Test/spv.expect_assume.expectEXT.exttypes.comp b/Test/spv.expect_assume.expectEXT.exttypes.comp
new file mode 100644
index 0000000..d637fb7
--- /dev/null
+++ b/Test/spv.expect_assume.expectEXT.exttypes.comp
@@ -0,0 +1,101 @@
+#version 450
+
+#extension GL_EXT_expect_assume: enable
+#extension GL_EXT_shader_explicit_arithmetic_types: enable
+
+layout (local_size_x = 8) in;
+
+readonly buffer roblock {
+  int8_t i8;
+  i8vec2 i8v2;
+  i8vec3 i8v3;
+  i8vec4 i8v4;
+  uint8_t u8;
+  u8vec2 u8v2;
+  u8vec3 u8v3;
+  u8vec4 u8v4;
+  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;
+  int64_t i64;
+  i64vec2 i64v2;
+  i64vec3 i64v3;
+  i64vec4 i64v4;
+  uint64_t u64;
+  u64vec2 u64v2;
+  u64vec3 u64v3;
+  u64vec4 u64v4;
+} ro;
+
+void main() {
+  int x = 0;
+
+  // 8-bit
+  if (expectEXT(ro.i8, 10) == 10 ||
+      expectEXT(ro.i8v2, i8vec2(11, -22)) == i8vec2(11, -22) ||
+      expectEXT(ro.i8v3, i8vec3(11, -22, 33)) == i8vec3(11, -22, 33) ||
+      expectEXT(ro.i8v4, i8vec4(11, -22, 33, 44)) == i8vec4(11, -22, 33, 44)) {
+    x++;
+  }
+  if (expectEXT(ro.u8, 10) == 10 ||
+      expectEXT(ro.u8v2, u8vec2(11, 22)) == u8vec2(11, 22) ||
+      expectEXT(ro.u8v3, u8vec3(11, 22, 33)) == u8vec3(11, 22, 33) ||
+      expectEXT(ro.u8v4, u8vec4(11, 22, 33, 44)) == u8vec4(11, 22, 33, 44)) {
+    x++;
+  }
+
+  // 16-bit
+  if (expectEXT(ro.i16, 10) == 10 ||
+      expectEXT(ro.i16v2, i16vec2(11, -22)) == i16vec2(11, -22) ||
+      expectEXT(ro.i16v3, i16vec3(11, -22, 33)) == i16vec3(11, -22, 33) ||
+      expectEXT(ro.i16v4, i16vec4(11, -22, 33, 44)) == i16vec4(11, -22, 33, 44)) {
+    x++;
+  }
+  if (expectEXT(ro.u16, 10) == 10 ||
+      expectEXT(ro.u16v2, u16vec2(11, 22)) == u16vec2(11, 22) ||
+      expectEXT(ro.u16v3, u16vec3(11, 22, 33)) == u16vec3(11, 22, 33) ||
+      expectEXT(ro.u16v4, u16vec4(11, 22, 33, 44)) == u16vec4(11, 22, 33, 44)) {
+    x++;
+  }
+
+  // 32-bit
+  if (expectEXT(ro.i32, 10) == 10 ||
+      expectEXT(ro.i32v2, i32vec2(11, -22)) == i32vec2(11, -22) ||
+      expectEXT(ro.i32v3, i32vec3(11, -22, 33)) == i32vec3(11, -22, 33) ||
+      expectEXT(ro.i32v4, i32vec4(11, -22, 33, 44)) == i32vec4(11, -22, 33, 44)) {
+    x++;
+  }
+  if (expectEXT(ro.u32, 10) == 10 ||
+      expectEXT(ro.u32v2, u32vec2(11, 22)) == u32vec2(11, 22) ||
+      expectEXT(ro.u32v3, u32vec3(11, 22, 33)) == u32vec3(11, 22, 33) ||
+      expectEXT(ro.u32v4, u32vec4(11, 22, 33, 44)) == u32vec4(11, 22, 33, 44)) {
+    x++;
+  }
+
+  // 64-bit
+  if (expectEXT(ro.i64, 10) == 10 ||
+      expectEXT(ro.i64v2, i64vec2(11, -22)) == i64vec2(11, -22) ||
+      expectEXT(ro.i64v3, i64vec3(11, -22, 33)) == i64vec3(11, -22, 33) ||
+      expectEXT(ro.i64v4, i64vec4(11, -22, 33, 44)) == i64vec4(11, -22, 33, 44)) {
+    x++;
+  }
+  if (expectEXT(ro.u64, 10) == 10 ||
+      expectEXT(ro.u64v2, u64vec2(11, 22)) == u64vec2(11, 22) ||
+      expectEXT(ro.u64v3, u64vec3(11, 22, 33)) == u64vec3(11, 22, 33) ||
+      expectEXT(ro.u64v4, u64vec4(11, 22, 33, 44)) == u64vec4(11, 22, 33, 44)) {
+    x++;
+  }
+}
diff --git a/Test/spv.ext.AnyHitShader.rahit b/Test/spv.ext.AnyHitShader.rahit
old mode 100755
new mode 100644
diff --git a/Test/spv.ext.ClosestHitShader.rchit b/Test/spv.ext.ClosestHitShader.rchit
old mode 100755
new mode 100644
diff --git a/Test/spv.intrinsicsDebugBreak.frag b/Test/spv.intrinsicsDebugBreak.frag
new file mode 100644
index 0000000..861f20e
--- /dev/null
+++ b/Test/spv.intrinsicsDebugBreak.frag
@@ -0,0 +1,9 @@
+#version 460

+#extension GL_EXT_spirv_intrinsics : enable

+

+spirv_instruction (extensions = ["SPV_KHR_non_semantic_info"], set = "NonSemantic.DebugBreak", id = 1)

+void debugBreak();

+

+void main() {

+  debugBreak();

+}

diff --git a/Test/spv.intrinsicsInteractWithCoopMat.comp b/Test/spv.intrinsicsInteractWithCoopMat.comp
new file mode 100644
index 0000000..90ff0fb
--- /dev/null
+++ b/Test/spv.intrinsicsInteractWithCoopMat.comp
@@ -0,0 +1,20 @@
+#version 450 core

+#pragma use_vulkan_memory_model

+

+#extension GL_KHR_memory_scope_semantics : enable

+#extension GL_KHR_cooperative_matrix : enable

+#extension GL_EXT_spirv_intrinsics : enable

+

+layout(local_size_x = 32, local_size_y = 1, local_size_z = 1) in;

+

+layout(set=0, binding=0, std430) buffer Buf { uvec4 x[]; } buf;

+

+#define ELT_SIZE 16

+#define half spirv_type(capabilities=[9], id = 22, 16)

+

+coopmat<half, gl_ScopeSubgroup, 16, 16, gl_MatrixUseA> A;

+

+void main() {

+  coopMatLoad(A, buf.x, 0, ELT_SIZE / 8, 0);

+  coopMatStore(A, buf.x, 64, 4, 0);

+}

diff --git a/Test/spv.maximalReconvergence.vert b/Test/spv.maximalReconvergence.vert
new file mode 100644
index 0000000..e152f4e
--- /dev/null
+++ b/Test/spv.maximalReconvergence.vert
@@ -0,0 +1,7 @@
+#version 460

+

+#extension GL_EXT_maximal_reconvergence : enable

+

+[[random(4)]] void main() [[maximally_reconverges]]

+{

+}

diff --git a/Test/spv.multiple.var.same.const.frag b/Test/spv.multiple.var.same.const.frag
new file mode 100644
index 0000000..ead9a3c
--- /dev/null
+++ b/Test/spv.multiple.var.same.const.frag
@@ -0,0 +1,6 @@
+#version 320 es
+precision mediump float;
+const float var0 = 1e-6;
+const float var1 = 1e-6;
+void main(){}
+
diff --git a/Test/spv.nv.hitobject-errors.rgen b/Test/spv.nv.hitobject-errors.rgen
new file mode 100644
index 0000000..9744ccf
--- /dev/null
+++ b/Test/spv.nv.hitobject-errors.rgen
@@ -0,0 +1,24 @@
+#version 460

+#extension GL_EXT_ray_tracing : enable

+#extension GL_NV_shader_invocation_reorder : enable

+ 

+

+hitObjectNV hObjGlob;                     // OK

+uniform hitObjectNV uHitObj;              // ERROR

+

+layout(location=0) in hitObjectNV hobjIn; // ERROR

+out hitObjectNV hobjOut;                  // ERROR

+

+struct hObjWrapper{

+    hitObjectNV objField;

+    vec3 v;

+};

+

+void foo(hitObjectNV hObjArg) {}           // OK

+

+void main()

+{

+    hObjWrapper wrapper;                   // ERROR

+    hitObjectNV localHitObj;               // OK

+    foo(localHitObj);                      // OK

+}

diff --git a/Test/spv.nvAtomicFp16Vec.frag b/Test/spv.nvAtomicFp16Vec.frag
new file mode 100644
index 0000000..de18b1b
--- /dev/null
+++ b/Test/spv.nvAtomicFp16Vec.frag
@@ -0,0 +1,113 @@
+#version 430

+

+#extension GL_NV_shader_atomic_fp16_vector : enable

+#extension GL_EXT_shader_explicit_arithmetic_types_float16 : enable

+

+layout(binding = 0) buffer Buffer

+{

+    f16vec2 dataf16v2;

+    f16vec4 dataf16v4;

+

+    f16vec2 resf16v2;

+    f16vec4 resf16v4;

+

+}buf;

+

+layout(binding = 0, rg16f) volatile coherent uniform image1D        fimage1D;

+layout(binding = 1, rg16f) volatile coherent uniform image1DArray   fimage1DArray;

+layout(binding = 2, rg16f) volatile coherent uniform image2D        fimage2D;

+layout(binding = 3, rg16f) volatile coherent uniform image2DArray   fimage2DArray;

+layout(binding = 5, rg16f) volatile coherent uniform imageCube      fimageCube;

+layout(binding = 6, rg16f) volatile coherent uniform imageCubeArray fimageCubeArray;

+layout(binding = 9, rg16f) volatile coherent uniform image3D        fimage3D;

+

+layout(binding = 10, rgba16f) volatile coherent uniform image1D       fimage1Dv4;

+layout(binding = 11, rgba16f) volatile coherent uniform image1DArray   fimage1DArrayv4;

+layout(binding = 12, rgba16f) volatile coherent uniform image2D        fimage2Dv4;

+layout(binding = 13, rgba16f) volatile coherent uniform image2DArray   fimage2DArrayv4;

+layout(binding = 15, rgba16f) volatile coherent uniform imageCube      fimageCubev4;

+layout(binding = 16, rgba16f) volatile coherent uniform imageCubeArray fimageCubeArrayv4;

+layout(binding = 19, rgba16f) volatile coherent uniform image3D        fimage3Dv4;

+

+void main()

+{

+    // atomic* functions supported with f16vec2

+    buf.resf16v2 = atomicAdd(buf.dataf16v2, f16vec2(3));

+    buf.resf16v2 += atomicMin(buf.dataf16v2, f16vec2(3));

+    buf.resf16v2 += atomicMax(buf.dataf16v2, f16vec2(3));

+    buf.resf16v2 += atomicExchange(buf.dataf16v2, f16vec2(3));

+

+    // atomic* functions supported with f16vec4

+    buf.resf16v4 = atomicAdd(buf.dataf16v4, f16vec4(3));

+    buf.resf16v4 += atomicMin(buf.dataf16v4, f16vec4(3));

+    buf.resf16v4 += atomicMax(buf.dataf16v4, f16vec4(3));

+    buf.resf16v4 += atomicExchange(buf.dataf16v4, f16vec4(3));

+

+    // imageAtomic* functions supported with f16vec2 and only format supported is rg16f

+    f16vec2 constVec2 = f16vec2(2.0);

+    buf.resf16v2 += imageAtomicAdd(fimage1D, int(0), constVec2);

+    buf.resf16v2 += imageAtomicAdd(fimage1DArray, ivec2(0,0), constVec2);

+    buf.resf16v2 += imageAtomicAdd(fimage2D, ivec2(0,0), constVec2);

+    buf.resf16v2 += imageAtomicAdd(fimage2DArray, ivec3(0,0, 0), constVec2);

+    buf.resf16v2 += imageAtomicAdd(fimageCube, ivec3(0,0,0), constVec2);

+    buf.resf16v2 += imageAtomicAdd(fimageCubeArray, ivec3(0,0,0), constVec2);

+    buf.resf16v2 += imageAtomicAdd(fimage3D, ivec3(0,0,0), constVec2);

+

+    buf.resf16v2 += imageAtomicMin(fimage1D, int(0), constVec2);

+    buf.resf16v2 += imageAtomicMin(fimage1DArray, ivec2(0,0), constVec2);

+    buf.resf16v2 += imageAtomicMin(fimage2D, ivec2(0,0), constVec2);

+    buf.resf16v2 += imageAtomicMin(fimage2DArray, ivec3(0,0, 0), constVec2);

+    buf.resf16v2 += imageAtomicMin(fimageCube, ivec3(0,0,0), constVec2);

+    buf.resf16v2 += imageAtomicMin(fimageCubeArray, ivec3(0,0,0), constVec2);

+    buf.resf16v2 += imageAtomicMin(fimage3D, ivec3(0,0,0), constVec2);

+

+    buf.resf16v2 += imageAtomicMax(fimage1D, int(0), constVec2);

+    buf.resf16v2 += imageAtomicMax(fimage1DArray, ivec2(0,0), constVec2);

+    buf.resf16v2 += imageAtomicMax(fimage2D, ivec2(0,0), constVec2);

+    buf.resf16v2 += imageAtomicMax(fimage2DArray, ivec3(0,0, 0), constVec2);

+    buf.resf16v2 += imageAtomicMax(fimageCube, ivec3(0,0,0), constVec2);

+    buf.resf16v2 += imageAtomicMax(fimageCubeArray, ivec3(0,0,0), constVec2);

+    buf.resf16v2 += imageAtomicMax(fimage3D, ivec3(0,0,0), constVec2);

+

+    buf.resf16v2 += imageAtomicExchange(fimage1D, int(0), constVec2);

+    buf.resf16v2 += imageAtomicExchange(fimage1DArray, ivec2(0,0), constVec2);

+    buf.resf16v2 += imageAtomicExchange(fimage2D, ivec2(0,0), constVec2);

+    buf.resf16v2 += imageAtomicExchange(fimage2DArray, ivec3(0,0, 0), constVec2);

+    buf.resf16v2 += imageAtomicExchange(fimageCube, ivec3(0,0,0), constVec2);

+    buf.resf16v2 += imageAtomicExchange(fimageCubeArray, ivec3(0,0,0), constVec2);

+    buf.resf16v2 += imageAtomicExchange(fimage3D, ivec3(0,0,0), constVec2);

+

+    // imageAtomic* functions supported with f16vec4 and only format supported is rgba16f

+    f16vec4 constVec4 = f16vec4(2.0);

+    buf.resf16v4 += imageAtomicAdd(fimage1Dv4, int(0), constVec4);

+    buf.resf16v4 += imageAtomicAdd(fimage1DArrayv4, ivec2(0,0), constVec4);

+    buf.resf16v4 += imageAtomicAdd(fimage2Dv4, ivec2(0,0), constVec4);

+    buf.resf16v4 += imageAtomicAdd(fimage2DArrayv4, ivec3(0,0, 0), constVec4);

+    buf.resf16v4 += imageAtomicAdd(fimageCubev4, ivec3(0,0,0), constVec4);

+    buf.resf16v4 += imageAtomicAdd(fimageCubeArrayv4, ivec3(0,0,0), constVec4);

+    buf.resf16v4 += imageAtomicAdd(fimage3Dv4, ivec3(0,0,0), constVec4);

+

+    buf.resf16v4 += imageAtomicMin(fimage1Dv4, int(0), constVec4);

+    buf.resf16v4 += imageAtomicMin(fimage1DArrayv4, ivec2(0,0), constVec4);

+    buf.resf16v4 += imageAtomicMin(fimage2Dv4, ivec2(0,0), constVec4);

+    buf.resf16v4 += imageAtomicMin(fimage2DArrayv4, ivec3(0,0, 0), constVec4);

+    buf.resf16v4 += imageAtomicMin(fimageCubev4, ivec3(0,0,0), constVec4);

+    buf.resf16v4 += imageAtomicMin(fimageCubeArrayv4, ivec3(0,0,0), constVec4);

+    buf.resf16v4 += imageAtomicMin(fimage3Dv4, ivec3(0,0,0), constVec4);

+

+    buf.resf16v4 += imageAtomicMax(fimage1Dv4, int(0), constVec4);

+    buf.resf16v4 += imageAtomicMax(fimage1DArrayv4, ivec2(0,0), constVec4);

+    buf.resf16v4 += imageAtomicMax(fimage2Dv4, ivec2(0,0), constVec4);

+    buf.resf16v4 += imageAtomicMax(fimage2DArrayv4, ivec3(0,0, 0), constVec4);

+    buf.resf16v4 += imageAtomicMax(fimageCubev4, ivec3(0,0,0), constVec4);

+    buf.resf16v4 += imageAtomicMax(fimageCubeArrayv4, ivec3(0,0,0), constVec4);

+    buf.resf16v4 += imageAtomicMax(fimage3Dv4, ivec3(0,0,0), constVec4);

+

+    buf.resf16v4 += imageAtomicExchange(fimage1Dv4, int(0), constVec4);

+    buf.resf16v4 += imageAtomicExchange(fimage1DArrayv4, ivec2(0,0), constVec4);

+    buf.resf16v4 += imageAtomicExchange(fimage2Dv4, ivec2(0,0), constVec4);

+    buf.resf16v4 += imageAtomicExchange(fimage2DArrayv4, ivec3(0,0, 0), constVec4);

+    buf.resf16v4 += imageAtomicExchange(fimageCubev4, ivec3(0,0,0), constVec4);

+    buf.resf16v4 += imageAtomicExchange(fimageCubeArrayv4, ivec3(0,0,0), constVec4);

+    buf.resf16v4 += imageAtomicExchange(fimage3Dv4, ivec3(0,0,0), constVec4);

+}
diff --git a/Test/spv.replicate.comp b/Test/spv.replicate.comp
new file mode 100644
index 0000000..ac2018f
--- /dev/null
+++ b/Test/spv.replicate.comp
@@ -0,0 +1,43 @@
+#version 450 core
+#extension GL_KHR_memory_scope_semantics : enable
+#extension GL_KHR_cooperative_matrix : enable

+#extension GL_EXT_spec_constant_composites : enable
+
+#pragma use_replicated_composites
+

+layout (local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+

+const int csix = 6;

+struct S { int a; int b; int c; };

+struct SS { S s1; S s2; };
+const S cs = S(csix, csix, csix);
+const SS css = SS(cs, cs);

+

+const float spec_float = 3;

+const vec4 cv = vec4(spec_float);
+const mat4 cm = mat4(cv,cv,cv,cv);
+
+const int cfive = 5;
+const int carr[3] = {cfive, cfive, cfive};
+const int carr2[3][3] = {carr, carr, carr};
+

+const coopmat<float, gl_ScopeSubgroup, 16, 16, gl_MatrixUseA> ccoop = coopmat<float, gl_ScopeSubgroup, 16, 16, gl_MatrixUseA>(spec_float);

+

+void main()
+{
+    coopmat<float, gl_ScopeSubgroup, 16, 16, gl_MatrixUseA> coop = coopmat<float, gl_ScopeSubgroup, 16, 16, gl_MatrixUseA>(1.0);
+
+    float a = 2.0;
+    vec4 v = vec4(a);
+    v = cv;
+    mat4 m = mat4(v,v,v,v);
+
+    int five = 5;
+    int six = 6;
+    int arr[3] = {five, five, five};
+    int arr2[3][3] = {arr, arr, arr};
+    arr2 = carr2;
+
+    S s2 = S(six, six, six);
+    SS ss = SS(s2, s2);
+}
diff --git a/Test/spv.replicatespec.comp b/Test/spv.replicatespec.comp
new file mode 100644
index 0000000..e4bc8c0
--- /dev/null
+++ b/Test/spv.replicatespec.comp
@@ -0,0 +1,43 @@
+#version 450 core
+#extension GL_KHR_memory_scope_semantics : enable
+#extension GL_KHR_cooperative_matrix : enable

+#extension GL_EXT_spec_constant_composites : enable
+
+#pragma use_replicated_composites
+

+layout (local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+

+layout(constant_id = 1) const int csix = 6;

+struct S { int a; int b; int c; };

+struct SS { S s1; S s2; };
+const S cs = S(csix, csix, csix);
+const SS css = SS(cs, cs);

+

+layout(constant_id = 2) const float spec_float = 3;

+const vec4 cv = vec4(spec_float);
+const mat4 cm = mat4(cv,cv,cv,cv);
+
+layout(constant_id = 0) const int cfive = 5;
+const int carr[3] = {cfive, cfive, cfive};
+const int carr2[3][3] = {carr, carr, carr};
+

+const coopmat<float, gl_ScopeSubgroup, 16, 16, gl_MatrixUseA> ccoop = coopmat<float, gl_ScopeSubgroup, 16, 16, gl_MatrixUseA>(spec_float);

+

+void main()
+{
+    coopmat<float, gl_ScopeSubgroup, 16, 16, gl_MatrixUseA> coop = coopmat<float, gl_ScopeSubgroup, 16, 16, gl_MatrixUseA>(1.0);
+
+    float a = 2.0;
+    vec4 v = vec4(a);
+    v = cv;
+    mat4 m = mat4(v,v,v,v);
+
+    int five = 5;
+    int six = 6;
+    int arr[3] = {five, five, five};
+    int arr2[3][3] = {arr, arr, arr};
+    arr2 = carr2;
+
+    S s2 = S(six, six, six);
+    SS ss = SS(s2, s2);
+}
diff --git a/Test/spv.sampledImageBlock.frag b/Test/spv.sampledImageBlock.frag
new file mode 100644
index 0000000..19b1133
--- /dev/null
+++ b/Test/spv.sampledImageBlock.frag
@@ -0,0 +1,21 @@
+#version 450
+
+layout(set = 0, binding = 0) uniform texture2D tex0;
+layout(set = 0, binding = 1) uniform sampler samp0;
+layout(set = 0, binding = 2) uniform ParamBuffer {
+    int cond;
+} paramBuffer;
+
+layout(location = 0) out vec4 fragColor;
+layout(location = 0) in flat ivec2 texCoord;
+
+void main() {
+    // get input
+
+    const vec4 texel = texelFetch(sampler2D(tex0, samp0),
+            paramBuffer.cond == 0 ? texCoord.xy : texCoord.yx,
+            0);
+
+    fragColor = vec4(texel.xyz, 1.0);
+
+}
diff --git a/Test/spv.specConstantComposite2.vert b/Test/spv.specConstantComposite2.vert
new file mode 100644
index 0000000..d9d07a3
--- /dev/null
+++ b/Test/spv.specConstantComposite2.vert
@@ -0,0 +1,98 @@
+#version 450
+
+// constant_id specified scalar spec constants
+layout(constant_id = 200) const int spec_int = 3;
+layout(constant_id = 201) const float spec_float = 3.14;
+layout(constant_id = 202) const
+    double spec_double = 3.1415926535897932384626433832795;
+layout(constant_id = 203) const bool spec_bool = true;
+
+// const float cast_spec_float = float(spec_float);
+
+// Flat struct
+struct flat_struct {
+    int i;
+    float f;
+    double d;
+    bool b;
+};
+
+// Nesting struct
+struct nesting_struct {
+    flat_struct nested;
+    vec4 v;
+    int i;
+};
+
+// Expect OpSpecConstantComposite
+// Flat struct initializer
+//const flat_struct spec_flat_struct_all_spec = {spec_int, spec_float,
+//                                               spec_double, spec_bool};
+//const flat_struct spec_flat_struct_partial_spec = {30, 30.14, spec_double,
+//                                                   spec_bool};
+
+// Nesting struct initializer
+//const nesting_struct nesting_struct_ctor = {
+//    {spec_int, spec_float, spec_double, false},
+//    vec4(0.1, 0.1, 0.1, 0.1),
+//    spec_int};
+
+// Vector constructor
+//const vec4 spec_vec4_all_spec =
+//    vec4(spec_float, spec_float, spec_float, spec_float);
+//const vec4 spec_vec4_partial_spec =
+//    vec4(spec_float, spec_float, 300.14, 300.14);
+//const vec4 spec_vec4_from_one_scalar = vec4(spec_float);
+
+// Matrix constructor
+//const mat2x3 spec_mat2x3 = mat2x3(spec_float, spec_float, spec_float, 1.1, 2.2, 3.3);
+//const mat2x3 spec_mat2x3_from_one_scalar = mat2x3(spec_float);
+
+// Struct nesting constructor
+//const nesting_struct spec_nesting_struct_all_spec = {
+//    spec_flat_struct_all_spec, spec_vec4_all_spec, spec_int};
+//const nesting_struct spec_nesting_struct_partial_spec = {
+//    spec_flat_struct_partial_spec, spec_vec4_partial_spec, 3000};
+
+//const float spec_float_array[5] = {spec_float, spec_float, 1.0, 2.0, 3.0};
+//const int spec_int_array[5] = {spec_int, spec_int, 1, 2, 30};
+
+// global_vec4_array_with_spec_length is not a spec constant, but its array
+// size is. When calling global_vec4_array_with_spec_length.length(), A
+// TIntermSymbol Node should be returned, instead of a TIntermConstantUnion
+// node which represents a known constant value.
+in vec4 global_vec4_array_with_spec_length[spec_int];
+
+out vec4 color;
+
+void refer_primary_spec_const() {
+    if (spec_bool) color *= spec_int;
+}
+
+void refer_composite_spec_const() {
+    //color += spec_vec4_all_spec;
+    //color -= spec_vec4_partial_spec;
+}
+
+void refer_copmosite_dot_dereference() {
+    //color *= spec_nesting_struct_all_spec.i;
+    //color += spec_vec4_all_spec.x;
+}
+
+void refer_composite_bracket_dereference() {
+    //color -= spec_float_array[1];
+    //color /= spec_int_array[spec_int_array[spec_int]];
+}
+
+int refer_spec_const_array_length() {
+    int len = global_vec4_array_with_spec_length.length();
+    return len;
+}
+
+void declare_spec_const_in_func() {
+    //const nesting_struct spec_const_declared_in_func = {
+    //    spec_flat_struct_partial_spec, spec_vec4_partial_spec, 10};
+    //color /= spec_const_declared_in_func.i;
+}
+
+void main() {}
diff --git a/Test/spv.specConstantOp.float16.comp b/Test/spv.specConstantOp.float16.comp
new file mode 100644
index 0000000..c3db60c
--- /dev/null
+++ b/Test/spv.specConstantOp.float16.comp
@@ -0,0 +1,18 @@
+#version 450
+#extension GL_EXT_shader_explicit_arithmetic_types_float16 : require
+
+// Produce an OpSpecConstantOp with 8 bit integer type
+
+layout(constant_id = 0) const float c = 8;
+
+layout(binding=0) writeonly restrict buffer S {
+    float16_t p_out[];
+};
+
+void main()
+{
+    p_out[0] = float16_t(c);
+}
+
+
+
diff --git a/Test/spv.specConstantOp.int16.comp b/Test/spv.specConstantOp.int16.comp
new file mode 100644
index 0000000..c507843
--- /dev/null
+++ b/Test/spv.specConstantOp.int16.comp
@@ -0,0 +1,16 @@
+#version 450
+#extension GL_EXT_shader_explicit_arithmetic_types_int16 : require
+
+// Produce an OpSpecConstantOp with 16 bit integer type
+
+layout(constant_id = 0) const int c = 8;
+
+layout(binding=0) writeonly restrict buffer S {
+    uint16_t p_out[];
+};
+
+void main()
+{
+    p_out[0] = uint16_t(c);
+}
+
diff --git a/Test/spv.specConstantOp.int8.comp b/Test/spv.specConstantOp.int8.comp
new file mode 100644
index 0000000..5988210
--- /dev/null
+++ b/Test/spv.specConstantOp.int8.comp
@@ -0,0 +1,17 @@
+#version 450
+#extension GL_EXT_shader_explicit_arithmetic_types_int8 : require
+
+// Produce an OpSpecConstantOp with 8 bit integer type
+
+layout(constant_id = 0) const int c = 8;
+
+layout(binding=0) writeonly restrict buffer S {
+    uint8_t p_out[];
+};
+
+void main()
+{
+    p_out[0] = uint8_t(c);
+}
+
+
diff --git a/Test/spv.subgroupExtendedTypesRotate.comp b/Test/spv.subgroupExtendedTypesRotate.comp
new file mode 100644
index 0000000..a83335f
--- /dev/null
+++ b/Test/spv.subgroupExtendedTypesRotate.comp
@@ -0,0 +1,100 @@
+#version 450
+
+#extension GL_KHR_shader_subgroup_rotate: enable
+#extension GL_EXT_shader_subgroup_extended_types_int8: enable
+#extension GL_EXT_shader_subgroup_extended_types_int16: enable
+#extension GL_EXT_shader_subgroup_extended_types_int64: enable
+#extension GL_EXT_shader_subgroup_extended_types_float16: enable
+
+layout (local_size_x = 8) in;
+
+readonly buffer roblock
+{
+    uint delta;
+} ro;
+
+layout(binding = 0) buffer Buffers
+{
+    i8vec4 i8;
+    u8vec4 u8;
+    i16vec4 i16;
+    u16vec4 u16;
+    i64vec4 i64;
+    u64vec4 u64;
+    f16vec4 f16;
+} data[4];
+
+void main()
+{
+    uint delta = ro.delta;
+
+    data[delta].i8.x   = subgroupRotate(data[0].i8.x,    delta);
+    data[delta].i8.xy  = subgroupRotate(data[1].i8.xy,   delta);
+    data[delta].i8.xyz = subgroupRotate(data[2].i8.xyz,  delta);
+    data[delta].i8     = subgroupRotate(data[3].i8,      delta);
+
+    data[delta].i8.x   = subgroupClusteredRotate(data[0].i8.x,    delta, 1);
+    data[delta].i8.xy  = subgroupClusteredRotate(data[1].i8.xy,   delta, 1);
+    data[delta].i8.xyz = subgroupClusteredRotate(data[2].i8.xyz,  delta, 1);
+    data[delta].i8     = subgroupClusteredRotate(data[3].i8,      delta, 1);
+
+    data[delta].u8.x   = subgroupRotate(data[0].u8.x,    delta);
+    data[delta].u8.xy  = subgroupRotate(data[1].u8.xy,   delta);
+    data[delta].u8.xyz = subgroupRotate(data[2].u8.xyz,  delta);
+    data[delta].u8     = subgroupRotate(data[3].u8,      delta);
+
+    data[delta].u8.x   = subgroupClusteredRotate(data[0].u8.x,    delta, 1);
+    data[delta].u8.xy  = subgroupClusteredRotate(data[1].u8.xy,   delta, 1);
+    data[delta].u8.xyz = subgroupClusteredRotate(data[2].u8.xyz,  delta, 1);
+    data[delta].u8     = subgroupClusteredRotate(data[3].u8,      delta, 1);
+
+    data[delta].i16.x   = subgroupRotate(data[0].i16.x,    delta);
+    data[delta].i16.xy  = subgroupRotate(data[1].i16.xy,   delta);
+    data[delta].i16.xyz = subgroupRotate(data[2].i16.xyz,  delta);
+    data[delta].i16     = subgroupRotate(data[3].i16,      delta);
+
+    data[delta].i16.x   = subgroupClusteredRotate(data[0].i16.x,    delta, 1);
+    data[delta].i16.xy  = subgroupClusteredRotate(data[1].i16.xy,   delta, 1);
+    data[delta].i16.xyz = subgroupClusteredRotate(data[2].i16.xyz,  delta, 1);
+    data[delta].i16     = subgroupClusteredRotate(data[3].i16,      delta, 1);
+
+    data[delta].u16.x   = subgroupRotate(data[0].u16.x,    delta);
+    data[delta].u16.xy  = subgroupRotate(data[1].u16.xy,   delta);
+    data[delta].u16.xyz = subgroupRotate(data[2].u16.xyz,  delta);
+    data[delta].u16     = subgroupRotate(data[3].u16,      delta);
+
+    data[delta].u16.x   = subgroupClusteredRotate(data[0].u16.x,    delta, 1);
+    data[delta].u16.xy  = subgroupClusteredRotate(data[1].u16.xy,   delta, 1);
+    data[delta].u16.xyz = subgroupClusteredRotate(data[2].u16.xyz,  delta, 1);
+    data[delta].u16     = subgroupClusteredRotate(data[3].u16,      delta, 1);
+
+    data[delta].i64.x   = subgroupRotate(data[0].i64.x,    delta);
+    data[delta].i64.xy  = subgroupRotate(data[1].i64.xy,   delta);
+    data[delta].i64.xyz = subgroupRotate(data[2].i64.xyz,  delta);
+    data[delta].i64     = subgroupRotate(data[3].i64,      delta);
+
+    data[delta].i64.x   = subgroupClusteredRotate(data[0].i64.x,    delta, 1);
+    data[delta].i64.xy  = subgroupClusteredRotate(data[1].i64.xy,   delta, 1);
+    data[delta].i64.xyz = subgroupClusteredRotate(data[2].i64.xyz,  delta, 1);
+    data[delta].i64     = subgroupClusteredRotate(data[3].i64,      delta, 1);
+
+    data[delta].u64.x   = subgroupRotate(data[0].u64.x,    delta);
+    data[delta].u64.xy  = subgroupRotate(data[1].u64.xy,   delta);
+    data[delta].u64.xyz = subgroupRotate(data[2].u64.xyz,  delta);
+    data[delta].u64     = subgroupRotate(data[3].u64,      delta);
+
+    data[delta].u64.x   = subgroupClusteredRotate(data[0].u64.x,    delta, 1);
+    data[delta].u64.xy  = subgroupClusteredRotate(data[1].u64.xy,   delta, 1);
+    data[delta].u64.xyz = subgroupClusteredRotate(data[2].u64.xyz,  delta, 1);
+    data[delta].u64     = subgroupClusteredRotate(data[3].u64,      delta, 1);
+
+    data[delta].f16.x   = subgroupRotate(data[0].f16.x,    delta);
+    data[delta].f16.xy  = subgroupRotate(data[1].f16.xy,   delta);
+    data[delta].f16.xyz = subgroupRotate(data[2].f16.xyz,  delta);
+    data[delta].f16     = subgroupRotate(data[3].f16,      delta);
+
+    data[delta].f16.x   = subgroupClusteredRotate(data[0].f16.x,    delta, 1);
+    data[delta].f16.xy  = subgroupClusteredRotate(data[1].f16.xy,   delta, 1);
+    data[delta].f16.xyz = subgroupClusteredRotate(data[2].f16.xyz,  delta, 1);
+    data[delta].f16     = subgroupClusteredRotate(data[3].f16,      delta, 1);
+}
diff --git a/Test/spv.subgroupExtendedTypesRotateNeg.comp b/Test/spv.subgroupExtendedTypesRotateNeg.comp
new file mode 100644
index 0000000..01ea7e9
--- /dev/null
+++ b/Test/spv.subgroupExtendedTypesRotateNeg.comp
@@ -0,0 +1,100 @@
+#version 450
+
+#extension GL_KHR_shader_subgroup_rotate: enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int8: enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int16: enable
+#extension GL_EXT_shader_explicit_arithmetic_types_int64: enable
+#extension GL_EXT_shader_explicit_arithmetic_types_float16: enable
+
+layout (local_size_x = 8) in;
+
+readonly buffer roblock
+{
+    uint delta;
+} ro;
+
+layout(binding = 0) buffer Buffers
+{
+    i8vec4 i8;
+    u8vec4 u8;
+    i16vec4 i16;
+    u16vec4 u16;
+    i64vec4 i64;
+    u64vec4 u64;
+    f16vec4 f16;
+} data[4];
+
+void main()
+{
+    uint delta = ro.delta;
+
+    data[delta].i8.x   = subgroupRotate(data[0].i8.x,    delta);
+    data[delta].i8.xy  = subgroupRotate(data[1].i8.xy,   delta);
+    data[delta].i8.xyz = subgroupRotate(data[2].i8.xyz,  delta);
+    data[delta].i8     = subgroupRotate(data[3].i8,      delta);
+
+    data[delta].i8.x   = subgroupClusteredRotate(data[0].i8.x,    delta, 1);
+    data[delta].i8.xy  = subgroupClusteredRotate(data[1].i8.xy,   delta, 1);
+    data[delta].i8.xyz = subgroupClusteredRotate(data[2].i8.xyz,  delta, 1);
+    data[delta].i8     = subgroupClusteredRotate(data[3].i8,      delta, 1);
+
+    data[delta].u8.x   = subgroupRotate(data[0].u8.x,    delta);
+    data[delta].u8.xy  = subgroupRotate(data[1].u8.xy,   delta);
+    data[delta].u8.xyz = subgroupRotate(data[2].u8.xyz,  delta);
+    data[delta].u8     = subgroupRotate(data[3].u8,      delta);
+
+    data[delta].u8.x   = subgroupClusteredRotate(data[0].u8.x,    delta, 1);
+    data[delta].u8.xy  = subgroupClusteredRotate(data[1].u8.xy,   delta, 1);
+    data[delta].u8.xyz = subgroupClusteredRotate(data[2].u8.xyz,  delta, 1);
+    data[delta].u8     = subgroupClusteredRotate(data[3].u8,      delta, 1);
+
+    data[delta].i16.x   = subgroupRotate(data[0].i16.x,    delta);
+    data[delta].i16.xy  = subgroupRotate(data[1].i16.xy,   delta);
+    data[delta].i16.xyz = subgroupRotate(data[2].i16.xyz,  delta);
+    data[delta].i16     = subgroupRotate(data[3].i16,      delta);
+
+    data[delta].i16.x   = subgroupClusteredRotate(data[0].i16.x,    delta, 1);
+    data[delta].i16.xy  = subgroupClusteredRotate(data[1].i16.xy,   delta, 1);
+    data[delta].i16.xyz = subgroupClusteredRotate(data[2].i16.xyz,  delta, 1);
+    data[delta].i16     = subgroupClusteredRotate(data[3].i16,      delta, 1);
+
+    data[delta].u16.x   = subgroupRotate(data[0].u16.x,    delta);
+    data[delta].u16.xy  = subgroupRotate(data[1].u16.xy,   delta);
+    data[delta].u16.xyz = subgroupRotate(data[2].u16.xyz,  delta);
+    data[delta].u16     = subgroupRotate(data[3].u16,      delta);
+
+    data[delta].u16.x   = subgroupClusteredRotate(data[0].u16.x,    delta, 1);
+    data[delta].u16.xy  = subgroupClusteredRotate(data[1].u16.xy,   delta, 1);
+    data[delta].u16.xyz = subgroupClusteredRotate(data[2].u16.xyz,  delta, 1);
+    data[delta].u16     = subgroupClusteredRotate(data[3].u16,      delta, 1);
+
+    data[delta].i64.x   = subgroupRotate(data[0].i64.x,    delta);
+    data[delta].i64.xy  = subgroupRotate(data[1].i64.xy,   delta);
+    data[delta].i64.xyz = subgroupRotate(data[2].i64.xyz,  delta);
+    data[delta].i64     = subgroupRotate(data[3].i64,      delta);
+
+    data[delta].i64.x   = subgroupClusteredRotate(data[0].i64.x,    delta, 1);
+    data[delta].i64.xy  = subgroupClusteredRotate(data[1].i64.xy,   delta, 1);
+    data[delta].i64.xyz = subgroupClusteredRotate(data[2].i64.xyz,  delta, 1);
+    data[delta].i64     = subgroupClusteredRotate(data[3].i64,      delta, 1);
+
+    data[delta].u64.x   = subgroupRotate(data[0].u64.x,    delta);
+    data[delta].u64.xy  = subgroupRotate(data[1].u64.xy,   delta);
+    data[delta].u64.xyz = subgroupRotate(data[2].u64.xyz,  delta);
+    data[delta].u64     = subgroupRotate(data[3].u64,      delta);
+
+    data[delta].u64.x   = subgroupClusteredRotate(data[0].u64.x,    delta, 1);
+    data[delta].u64.xy  = subgroupClusteredRotate(data[1].u64.xy,   delta, 1);
+    data[delta].u64.xyz = subgroupClusteredRotate(data[2].u64.xyz,  delta, 1);
+    data[delta].u64     = subgroupClusteredRotate(data[3].u64,      delta, 1);
+
+    data[delta].f16.x   = subgroupRotate(data[0].f16.x,    delta);
+    data[delta].f16.xy  = subgroupRotate(data[1].f16.xy,   delta);
+    data[delta].f16.xyz = subgroupRotate(data[2].f16.xyz,  delta);
+    data[delta].f16     = subgroupRotate(data[3].f16,      delta);
+
+    data[delta].f16.x   = subgroupClusteredRotate(data[0].f16.x,    delta, 1);
+    data[delta].f16.xy  = subgroupClusteredRotate(data[1].f16.xy,   delta, 1);
+    data[delta].f16.xyz = subgroupClusteredRotate(data[2].f16.xyz,  delta, 1);
+    data[delta].f16     = subgroupClusteredRotate(data[3].f16,      delta, 1);
+}
diff --git a/Test/spv.subgroupRotate.comp b/Test/spv.subgroupRotate.comp
new file mode 100644
index 0000000..7f8c007
--- /dev/null
+++ b/Test/spv.subgroupRotate.comp
@@ -0,0 +1,73 @@
+#version 450
+
+#extension GL_KHR_shader_subgroup_rotate: enable
+
+layout (local_size_x = 8, local_size_y = 8, local_size_z = 1) in;
+
+readonly buffer roblock
+{
+    uint delta;
+} ro;
+
+layout(binding = 0) buffer Buffers
+{
+    vec4  f4;
+    ivec4 i4;
+    uvec4 u4;
+    dvec4 d4;
+} data[4];
+
+void main()
+{
+    uint delta = ro.delta;
+
+    data[delta].f4.x   = subgroupRotate(data[0].f4.x,    delta);
+    data[delta].f4.xy  = subgroupRotate(data[1].f4.xy,   delta);
+    data[delta].f4.xyz = subgroupRotate(data[2].f4.xyz,  delta);
+    data[delta].f4     = subgroupRotate(data[3].f4,      delta);
+
+    data[delta].i4.x   = subgroupRotate(data[0].i4.x,    delta);
+    data[delta].i4.xy  = subgroupRotate(data[1].i4.xy,   delta);
+    data[delta].i4.xyz = subgroupRotate(data[2].i4.xyz,  delta);
+    data[delta].i4     = subgroupRotate(data[3].i4,      delta);
+
+    data[delta].u4.x   = subgroupRotate(data[0].u4.x,    delta);
+    data[delta].u4.xy  = subgroupRotate(data[1].u4.xy,   delta);
+    data[delta].u4.xyz = subgroupRotate(data[2].u4.xyz,  delta);
+    data[delta].u4     = subgroupRotate(data[3].u4,      delta);
+
+    data[delta].d4.x   = subgroupRotate(data[0].d4.x,    delta);
+    data[delta].d4.xy  = subgroupRotate(data[1].d4.xy,   delta);
+    data[delta].d4.xyz = subgroupRotate(data[2].d4.xyz,  delta);
+    data[delta].d4     = subgroupRotate(data[3].d4,      delta);
+
+    data[delta].i4.x   =   int(subgroupRotate(data[0].i4.x < 0,                   delta));
+    data[delta].i4.xy  = ivec2(subgroupRotate(lessThan(data[1].i4.xy, ivec2(0)),  delta));
+    data[delta].i4.xyz = ivec3(subgroupRotate(lessThan(data[1].i4.xyz, ivec3(0)), delta));
+    data[delta].i4     = ivec4(subgroupRotate(lessThan(data[1].i4, ivec4(0)),     delta));
+
+    data[delta].f4.x   = subgroupClusteredRotate(data[0].f4.x,    delta, 1);
+    data[delta].f4.xy  = subgroupClusteredRotate(data[1].f4.xy,   delta, 1);
+    data[delta].f4.xyz = subgroupClusteredRotate(data[2].f4.xyz,  delta, 1);
+    data[delta].f4     = subgroupClusteredRotate(data[3].f4,      delta, 1);
+
+    data[delta].i4.x   = subgroupClusteredRotate(data[0].i4.x,    delta, 1);
+    data[delta].i4.xy  = subgroupClusteredRotate(data[1].i4.xy,   delta, 1);
+    data[delta].i4.xyz = subgroupClusteredRotate(data[2].i4.xyz,  delta, 1);
+    data[delta].i4     = subgroupClusteredRotate(data[3].i4,      delta, 1);
+
+    data[delta].u4.x   = subgroupClusteredRotate(data[0].u4.x,    delta, 1);
+    data[delta].u4.xy  = subgroupClusteredRotate(data[1].u4.xy,   delta, 1);
+    data[delta].u4.xyz = subgroupClusteredRotate(data[2].u4.xyz,  delta, 1);
+    data[delta].u4     = subgroupClusteredRotate(data[3].u4,      delta, 1);
+
+    data[delta].d4.x   = subgroupClusteredRotate(data[0].d4.x,    delta, 1);
+    data[delta].d4.xy  = subgroupClusteredRotate(data[1].d4.xy,   delta, 1);
+    data[delta].d4.xyz = subgroupClusteredRotate(data[2].d4.xyz,  delta, 1);
+    data[delta].d4     = subgroupClusteredRotate(data[3].d4,      delta, 1);
+
+    data[delta].i4.x   =   int(subgroupClusteredRotate(data[0].i4.x < 0,                   delta, 1));
+    data[delta].i4.xy  = ivec2(subgroupClusteredRotate(lessThan(data[1].i4.xy, ivec2(0)),  delta, 1));
+    data[delta].i4.xyz = ivec3(subgroupClusteredRotate(lessThan(data[1].i4.xyz, ivec3(0)), delta, 1));
+    data[delta].i4     = ivec4(subgroupClusteredRotate(lessThan(data[1].i4, ivec4(0)),     delta, 1));
+}
diff --git a/Test/spv.tpipBlockMatchGatherSAD.frag b/Test/spv.tpipBlockMatchGatherSAD.frag
new file mode 100644
index 0000000..7ac8fd0
--- /dev/null
+++ b/Test/spv.tpipBlockMatchGatherSAD.frag
@@ -0,0 +1,39 @@
+#version 450
+#extension GL_QCOM_image_processing  : require
+#extension GL_QCOM_image_processing2 : require
+
+precision highp float;
+
+// fragment shader inputs and outputs
+layout (location = 0) in vec4 v_texcoord;
+
+layout (location = 0) out vec4 fragColor;
+
+// fragment shader resources
+layout(set = 0, binding = 0) uniform texture2DArray tex2DArray_weights;
+layout(set = 0, binding = 1) uniform texture2D tex2D_src1;
+layout(set = 0, binding = 2) uniform texture2D tex2D_src2;
+layout(set = 0, binding = 3) uniform sampler samp;
+layout(set = 0, binding = 4) uniform sampler2D target_samp;
+layout(set = 0, binding = 5) uniform sampler2D ref_samp;
+
+void main()
+{
+
+    uvec2 tgt_coords; tgt_coords.x = uint(v_texcoord.x); tgt_coords.x = uint(v_texcoord.y);
+    uvec2 ref_coords; ref_coords.x = uint(v_texcoord.z); ref_coords.y = uint(v_texcoord.w);
+    uvec2 blockSize = uvec2(4, 4);
+    fragColor = textureBlockMatchGatherSADQCOM(
+                    sampler2D(tex2D_src1, samp),                   // target texture
+                    tgt_coords,                                    // target coords
+                    sampler2D(tex2D_src2, samp),                   // reference texture
+                    ref_coords,                                    // reference coords
+                    blockSize);                                    // block size
+    fragColor = textureBlockMatchGatherSADQCOM(
+                    target_samp,                                   // target texture
+                    tgt_coords,                                    // target coords
+                    ref_samp,                                      // reference texture
+                    ref_coords,                                    // reference coords
+                    blockSize);                                    // block size
+}
+
diff --git a/Test/spv.tpipBlockMatchGatherSSD.frag b/Test/spv.tpipBlockMatchGatherSSD.frag
new file mode 100644
index 0000000..7890e35
--- /dev/null
+++ b/Test/spv.tpipBlockMatchGatherSSD.frag
@@ -0,0 +1,39 @@
+#version 450
+#extension GL_QCOM_image_processing  : require
+#extension GL_QCOM_image_processing2 : require
+
+precision highp float;
+
+// fragment shader inputs and outputs
+layout (location = 0) in vec4 v_texcoord;
+
+layout (location = 0) out vec4 fragColor;
+
+// fragment shader resources
+layout(set = 0, binding = 0) uniform texture2DArray tex2DArray_weights;
+layout(set = 0, binding = 1) uniform texture2D tex2D_src1;
+layout(set = 0, binding = 2) uniform texture2D tex2D_src2;
+layout(set = 0, binding = 3) uniform sampler samp;
+layout(set = 0, binding = 4) uniform sampler2D target_samp;
+layout(set = 0, binding = 5) uniform sampler2D ref_samp;
+
+void main()
+{
+
+    uvec2 tgt_coords; tgt_coords.x = uint(v_texcoord.x); tgt_coords.x = uint(v_texcoord.y);
+    uvec2 ref_coords; ref_coords.x = uint(v_texcoord.z); ref_coords.y = uint(v_texcoord.w);
+    uvec2 blockSize = uvec2(4, 4);
+    fragColor = textureBlockMatchGatherSSDQCOM(
+                    sampler2D(tex2D_src1, samp),                   // target texture
+                    tgt_coords,                                    // target coords
+                    sampler2D(tex2D_src2, samp),                   // reference texture
+                    ref_coords,                                    // reference coords
+                    blockSize);                                    // block size
+    fragColor = textureBlockMatchGatherSSDQCOM(
+                    target_samp,                                   // target texture
+                    tgt_coords,                                    // target coords
+                    ref_samp,                                      // reference texture
+                    ref_coords,                                    // reference coords
+                    blockSize);                                    // block size
+}
+
diff --git a/Test/spv.tpipBlockMatchWindowSAD.frag b/Test/spv.tpipBlockMatchWindowSAD.frag
new file mode 100644
index 0000000..468b8d8
--- /dev/null
+++ b/Test/spv.tpipBlockMatchWindowSAD.frag
@@ -0,0 +1,39 @@
+#version 450
+#extension GL_QCOM_image_processing  : require
+#extension GL_QCOM_image_processing2 : require
+
+precision highp float;
+
+// fragment shader inputs and outputs
+layout (location = 0) in vec4 v_texcoord;
+
+layout (location = 0) out vec4 fragColor;
+
+// fragment shader resources
+layout(set = 0, binding = 0) uniform texture2DArray tex2DArray_weights;
+layout(set = 0, binding = 1) uniform texture2D tex2D_src1;
+layout(set = 0, binding = 2) uniform texture2D tex2D_src2;
+layout(set = 0, binding = 3) uniform sampler samp;
+layout(set = 0, binding = 4) uniform sampler2D target_samp;
+layout(set = 0, binding = 5) uniform sampler2D ref_samp;
+
+void main()
+{
+
+    uvec2 tgt_coords; tgt_coords.x = uint(v_texcoord.x); tgt_coords.x = uint(v_texcoord.y);
+    uvec2 ref_coords; ref_coords.x = uint(v_texcoord.z); ref_coords.y = uint(v_texcoord.w);
+    uvec2 blockSize = uvec2(4, 4);
+    fragColor = textureBlockMatchWindowSADQCOM(
+                    sampler2D(tex2D_src1, samp),                   // target texture
+                    tgt_coords,                                    // target coords
+                    sampler2D(tex2D_src2, samp),                   // reference texture
+                    ref_coords,                                    // reference coords
+                    blockSize);                                    // block size
+    fragColor = textureBlockMatchWindowSADQCOM(
+                    target_samp,                                   // target texture
+                    tgt_coords,                                    // target coords
+                    ref_samp,                                      // reference texture
+                    ref_coords,                                    // reference coords
+                    blockSize);                                    // block size
+}
+
diff --git a/Test/spv.tpipBlockMatchWindowSSD.frag b/Test/spv.tpipBlockMatchWindowSSD.frag
new file mode 100644
index 0000000..fee1bb4
--- /dev/null
+++ b/Test/spv.tpipBlockMatchWindowSSD.frag
@@ -0,0 +1,40 @@
+#version 450
+#extension GL_QCOM_image_processing  : require
+#extension GL_QCOM_image_processing2 : require
+
+precision highp float;
+
+// fragment shader inputs and outputs
+layout (location = 0) in vec4 v_texcoord;
+
+layout (location = 0) out vec4 fragColor;
+
+// fragment shader resources
+layout(set = 0, binding = 0) uniform texture2DArray tex2DArray_weights;
+layout(set = 0, binding = 1) uniform texture2D tex2D_src1;
+layout(set = 0, binding = 2) uniform texture2D tex2D_src2;
+layout(set = 0, binding = 3) uniform sampler samp;
+layout(set = 0, binding = 4) uniform sampler2D target_samp;
+layout(set = 0, binding = 5) uniform sampler2D ref_samp;
+
+void main()
+{
+
+    uvec2 tgt_coords; tgt_coords.x = uint(v_texcoord.x); tgt_coords.x = uint(v_texcoord.y);
+    uvec2 ref_coords; ref_coords.x = uint(v_texcoord.z); ref_coords.y = uint(v_texcoord.w);
+    uvec2 blockSize = uvec2(4, 4);
+    fragColor = textureBlockMatchWindowSSDQCOM(
+                    sampler2D(tex2D_src1, samp),                   // target texture
+                    tgt_coords,                                    // target coords
+                    sampler2D(tex2D_src2, samp),                   // reference texture
+                    ref_coords,                                    // reference coords
+                    blockSize);                                    // block size
+    fragColor = textureBlockMatchWindowSSDQCOM(
+                    target_samp,                                   // target texture
+                    tgt_coords,                                    // target coords
+                    ref_samp,                                      // reference texture
+                    ref_coords,                                    // reference coords
+                    blockSize);                                    // block size
+}
+
+
diff --git a/Test/tes_patch.tese b/Test/tes_patch.tese
new file mode 100644
index 0000000..d41b5be
--- /dev/null
+++ b/Test/tes_patch.tese
@@ -0,0 +1,19 @@
+#version 430 core

+#extension GL_ARB_enhanced_layouts : require

+

+layout(isolines, point_mode) in;

+

+layout (location = 1, component = 0)   in vec2 gohan[];

+layout (location = 1, component = 2) patch  in vec2 goten;

+

+in  vec4 tcs_tes[];

+out vec4 tes_gs;

+

+void main()

+{

+    vec4 result = tcs_tes[0];

+

+

+

+    tes_gs += result;

+}

diff --git a/Test/tokenLength.vert b/Test/tokenLength.vert
index 325fbcb..2907b32 100644
--- a/Test/tokenLength.vert
+++ b/Test/tokenLength.vert
@@ -44,31 +44,31 @@
 
 // Boundary cases
 #if 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
-#error in long non-zero #if
+#error in long non-zero "if"
 #endif
 #if 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 == 0
-#error in long zero #if
+#error in long zero "if"
 #endif
 #if 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 == 0
-#error in too long #if
+#error in too long "if"
 #endif
 
 #if A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001
-#error in long macro #if
+#error in long macro "if"
 #endif
 #if A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-#error in long macro #if
+#error in long macro "if"
 #endif
 #if A0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-#error in too long macro #if
+#error in too long macro "if"
 #endif
 
 // Super long
 #if 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-#error in super long #if
+#error in super long "if"
 #endif
 #if A000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-#error in super long macro #if
+#error in super long macro "if"
 #endif
 
 int BE = 0b01u; // ERROR (not supported by GLSL)
diff --git a/Test/vk.relaxed.changeSet.frag b/Test/vk.relaxed.changeSet.frag
old mode 100755
new mode 100644
diff --git a/Test/vk.relaxed.changeSet.vert b/Test/vk.relaxed.changeSet.vert
old mode 100755
new mode 100644
diff --git a/Test/vk.relaxed.errorcheck.frag b/Test/vk.relaxed.errorcheck.frag
index b75b50b..086c1d0 100644
--- a/Test/vk.relaxed.errorcheck.frag
+++ b/Test/vk.relaxed.errorcheck.frag
@@ -7,10 +7,13 @@
 // default uniforms will be gathered into a uniform block

 uniform vec4 a;     // declared in both stages with different types

 

+uniform float test; // declared twice in this compilation unit

+uniform vec2 test;

+

 vec4 foo() {

-    return a;

+    return a + vec4(test);

 }

 

 void main() {

     o = io + foo();

-}
\ No newline at end of file
+}

diff --git a/Test/vk.relaxed.frag b/Test/vk.relaxed.frag
index d43416e..3dd3c17 100644
--- a/Test/vk.relaxed.frag
+++ b/Test/vk.relaxed.frag
@@ -7,10 +7,17 @@
 uniform vec2 b = vec2(0, 0);            // initializer will be ignored

 layout(location = 0) uniform vec2 c;    // location qualifier will be ignored

 uniform vec4 d[10];

+

+struct SamplerArray{

+    sampler2D tn[4];

+};

+

 uniform struct e {                      

     vec2 x;

     float y;

     uint z;

+    sampler2D t0;

+    SamplerArray samplers;

 } structUniform; 

 

 // opaque types will not be grouped into uniform block

@@ -64,11 +71,15 @@
 vec4 foo() {

     float f = j + bufferInstance.j + structUniform.y + structUniform.z;

     vec2 v2 = b + c + structUniform.x;

-    vec4 v4 = a + d[0] + d[1] + d[2] + k + bufferInstance.k + texture(t1, vec2(0, 0));

+    vec4 v4 = a + d[0] + d[1] + d[2] + k + bufferInstance.k + texture(t1, vec2(0, 0)) + texture(structUniform.t0, vec2(0, 0));

     return vec4(f) * vec4(v2, 1, 1) * v4;

 }

 

+vec4 baz(SamplerArray samplers) {

+    return texture(samplers.tn[0], vec2(0, 0)) + texture(samplers.tn[1], vec2(0, 0)) + texture(samplers.tn[2], vec2(0, 0)) + texture(samplers.tn[3], vec2(0, 0));

+}

+

 void main() {

     float j = float(bar());

-    o = j * foo();

-}
\ No newline at end of file
+    o = j * foo() + baz(structUniform.samplers);

+}

diff --git a/Test/vk.relaxed.stagelink.0.0.frag b/Test/vk.relaxed.stagelink.0.0.frag
old mode 100755
new mode 100644
diff --git a/Test/vk.relaxed.stagelink.0.0.vert b/Test/vk.relaxed.stagelink.0.0.vert
old mode 100755
new mode 100644
diff --git a/Test/vk.relaxed.stagelink.0.1.frag b/Test/vk.relaxed.stagelink.0.1.frag
old mode 100755
new mode 100644
diff --git a/Test/vk.relaxed.stagelink.0.1.vert b/Test/vk.relaxed.stagelink.0.1.vert
old mode 100755
new mode 100644
diff --git a/Test/vk.relaxed.stagelink.0.2.frag b/Test/vk.relaxed.stagelink.0.2.frag
old mode 100755
new mode 100644
diff --git a/Test/vk.relaxed.stagelink.0.2.vert b/Test/vk.relaxed.stagelink.0.2.vert
old mode 100755
new mode 100644
diff --git a/Test/vulkan.ast.vert b/Test/vulkan.ast.vert
index b9e3e28..5817a23 100644
--- a/Test/vulkan.ast.vert
+++ b/Test/vulkan.ast.vert
@@ -38,5 +38,5 @@
     ivec2[2](ivec2(sci2, sci2), ivec2(sci2, sci2)); // not a spec-const
 
     vec2(scf1, scf1);   // spec-const
-    vec2[2](vec2(scf1, scf1), vec2(scf1, scf1)); // not a spec-const
+    vec2[2](vec2(scf1, scf1), vec2(scf1, scf1)); // spec-const
 }
diff --git a/build_info.py b/build_info.py
index 06d613b..c8163c7 100755
--- a/build_info.py
+++ b/build_info.py
@@ -49,6 +49,24 @@
    ommitted then the string is printed to stdout.
 """
 
+try:
+    utc = datetime.timezone.utc
+except AttributeError:
+    # Python 2? In datetime.date.today().year? Yes.
+    class UTC(datetime.tzinfo):
+        ZERO = datetime.timedelta(0)
+
+        def utcoffset(self, dt):
+            return self.ZERO
+
+        def tzname(self, dt):
+            return "UTC"
+
+        def dst(self, dt):
+            return self.ZERO
+    utc = UTC()
+
+
 def mkdir_p(directory):
     """Make the directory, and all its ancestors as required.  Any of the
     directories are allowed to already exist."""
@@ -139,7 +157,7 @@
             # clock time with environment variable SOURCE_DATE_EPOCH
             # containing a (presumably) fixed timestamp.
             timestamp = int(os.environ.get('SOURCE_DATE_EPOCH', time.time()))
-            formatted = datetime.datetime.utcfromtimestamp(timestamp).isoformat()
+            formatted = datetime.datetime.fromtimestamp(timestamp, utc).isoformat()
             return 'unknown hash, {}'.format(formatted)
 
 def parse_args():
diff --git a/glslang/CInterface/glslang_c_interface.cpp b/glslang/CInterface/glslang_c_interface.cpp
index 870698f..d391c1d 100644
--- a/glslang/CInterface/glslang_c_interface.cpp
+++ b/glslang/CInterface/glslang_c_interface.cpp
@@ -34,9 +34,13 @@
 
 #include "StandAlone/DirStackFileIncluder.h"
 #include "glslang/Public/ResourceLimits.h"
+#include "glslang/Public/ShaderLang.h"
 #include "glslang/Include/ShHandle.h"
 
+#include "glslang/Include/BaseTypes.h"
 #include "glslang/Include/ResourceLimits.h"
+#include "glslang/Include/Types.h"
+#include "glslang/MachineIndependent/iomapper.h"
 #include "glslang/MachineIndependent/Versions.h"
 #include "glslang/MachineIndependent/localintermediate.h"
 
@@ -54,10 +58,12 @@
 static_assert(int(GLSLANG_PROFILE_COUNT) == EProfileCount, "");
 static_assert(sizeof(glslang_limits_t) == sizeof(TLimits), "");
 static_assert(sizeof(glslang_resource_t) == sizeof(TBuiltInResource), "");
+static_assert(sizeof(glslang_version_t) == sizeof(glslang::Version), "");
 
 typedef struct glslang_shader_s {
     glslang::TShader* shader;
     std::string preprocessedGLSL;
+    std::vector<std::string> baseResourceSetBinding;
 } glslang_shader_t;
 
 typedef struct glslang_program_s {
@@ -141,6 +147,11 @@
     void* context;
 };
 
+GLSLANG_EXPORT void glslang_get_version(glslang_version_t* version)
+{
+    *reinterpret_cast<glslang::Version*>(version) = glslang::GetVersion();
+}
+
 GLSLANG_EXPORT int glslang_initialize_process() { return static_cast<int>(glslang::InitializeProcess()); }
 
 GLSLANG_EXPORT void glslang_finalize_process() { glslang::FinalizeProcess(); }
@@ -205,6 +216,9 @@
     CONVERT_MSG(GLSLANG_MSG_HLSL_LEGALIZATION_BIT, EShMsgHlslLegalization);
     CONVERT_MSG(GLSLANG_MSG_HLSL_DX9_COMPATIBLE_BIT, EShMsgHlslDX9Compatible);
     CONVERT_MSG(GLSLANG_MSG_BUILTIN_SYMBOL_TABLE_BIT, EShMsgBuiltinSymbolTable);
+    CONVERT_MSG(GLSLANG_MSG_ENHANCED, EShMsgEnhanced);
+    CONVERT_MSG(GLSLANG_MSG_ABSOLUTE_PATH, EShMsgAbsolutePath);
+    CONVERT_MSG(GLSLANG_MSG_DISPLAY_ERROR_COLUMN, EShMsgDisplayErrorColumn);
     return res;
 #undef CONVERT_MSG
 }
@@ -256,6 +270,8 @@
         return glslang::EShTargetVulkan_1_2;
     case GLSLANG_TARGET_VULKAN_1_3:
         return glslang::EShTargetVulkan_1_3;
+    case GLSLANG_TARGET_VULKAN_1_4:
+        return glslang::EShTargetVulkan_1_4;
     case GLSLANG_TARGET_OPENGL_450:
         return glslang::EShTargetOpenGL_450;
     default:
@@ -310,7 +326,7 @@
 GLSLANG_EXPORT glslang_shader_t* glslang_shader_create(const glslang_input_t* input)
 {
     if (!input || !input->code) {
-        printf("Error creating shader: null input(%p)/input->code\n", input);
+        printf("Error creating shader: null input(%p)/input->code\n", (void*)input);
 
         if (input)
             printf("input->code = %p\n", input->code);
@@ -367,11 +383,35 @@
     shader->shader->setOverrideVersion(version);
 }
 
+GLSLANG_EXPORT void glslang_shader_set_default_uniform_block_set_and_binding(glslang_shader_t* shader, unsigned int set, unsigned int binding) {
+    shader->shader->setGlobalUniformSet(set);
+    shader->shader->setGlobalUniformBinding(binding);
+}
+
+GLSLANG_EXPORT void glslang_shader_set_default_uniform_block_name(glslang_shader_t* shader, const char *name) {
+    shader->shader->setGlobalUniformBlockName(name);
+}
+
+GLSLANG_EXPORT void glslang_shader_set_resource_set_binding(glslang_shader_t* shader, const char *const *bindings, unsigned int num_bindings) {
+    shader->baseResourceSetBinding.clear();
+
+    for (unsigned int i = 0; i < num_bindings; ++i) {
+        shader->baseResourceSetBinding.push_back(std::string(bindings[i]));
+    }
+
+    shader->shader->setResourceSetBinding(shader->baseResourceSetBinding);
+}
+
 GLSLANG_EXPORT const char* glslang_shader_get_preprocessed_code(glslang_shader_t* shader)
 {
     return shader->preprocessedGLSL.c_str();
 }
 
+GLSLANG_EXPORT void glslang_shader_set_preprocessed_code(glslang_shader_t* shader, const char* code)
+{
+    shader->preprocessedGLSL.assign(code);
+}
+
 GLSLANG_EXPORT int glslang_shader_preprocess(glslang_shader_t* shader, const glslang_input_t* input)
 {
     DirStackFileIncluder dirStackFileIncluder;
@@ -458,6 +498,11 @@
     return (int)program->program->mapIO();
 }
 
+GLSLANG_EXPORT int glslang_program_map_io_with_resolver_and_mapper(glslang_program_t* program, glslang_resolver_t* resolver, glslang_mapper_t* mapper)
+{
+    return (int)program->program->mapIO(reinterpret_cast<glslang::TDefaultGlslIoResolver*>(resolver), reinterpret_cast<glslang::TGlslIoMapper*>(mapper));
+}
+
 GLSLANG_EXPORT const char* glslang_program_get_info_log(glslang_program_t* program)
 {
     return program->program->getInfoLog();
@@ -467,3 +512,30 @@
 {
     return program->program->getInfoDebugLog();
 }
+
+GLSLANG_EXPORT glslang_mapper_t* glslang_glsl_mapper_create()
+{
+    return reinterpret_cast<glslang_mapper_t*>(new glslang::TGlslIoMapper());
+}
+
+GLSLANG_EXPORT void glslang_glsl_mapper_delete(glslang_mapper_t* mapper)
+{
+    if (!mapper)
+        return;
+
+    delete reinterpret_cast<glslang::TGlslIoMapper* >(mapper);
+}
+
+GLSLANG_EXPORT glslang_resolver_t* glslang_glsl_resolver_create(glslang_program_t* program, glslang_stage_t stage)
+{
+    glslang::TIntermediate* intermediate = program->program->getIntermediate(c_shader_stage(stage));
+    return reinterpret_cast<glslang_resolver_t*>(new glslang::TDefaultGlslIoResolver(reinterpret_cast<const glslang::TIntermediate&>(*intermediate)));
+}
+
+GLSLANG_EXPORT void glslang_glsl_resolver_delete(glslang_resolver_t* resolver)
+{
+    if (!resolver)
+        return;
+
+    delete reinterpret_cast<glslang::TDefaultGlslIoResolver* >(resolver);
+}
diff --git a/glslang/CMakeLists.txt b/glslang/CMakeLists.txt
index 57fb1b9..eb1dc68 100644
--- a/glslang/CMakeLists.txt
+++ b/glslang/CMakeLists.txt
@@ -47,9 +47,12 @@
 ################################################################################
 # GenericCodeGen
 ################################################################################
-add_library(GenericCodeGen STATIC
+set(GENERICCODEGEN_SOURCES
     GenericCodeGen/CodeGen.cpp
     GenericCodeGen/Link.cpp)
+
+add_library(GenericCodeGen STATIC
+            stub.cpp)
 set_property(TARGET GenericCodeGen PROPERTY POSITION_INDEPENDENT_CODE ON)
 set_property(TARGET GenericCodeGen PROPERTY FOLDER glslang)
 
@@ -130,15 +133,15 @@
         HLSL/hlslParseables.h)
 endif()
 
-add_library(MachineIndependent STATIC ${MACHINEINDEPENDENT_SOURCES} ${MACHINEINDEPENDENT_HEADERS})
+add_library(MachineIndependent STATIC stub.cpp)
 set_property(TARGET MachineIndependent PROPERTY POSITION_INDEPENDENT_CODE ON)
 set_property(TARGET MachineIndependent PROPERTY FOLDER glslang)
+target_link_libraries(MachineIndependent INTERFACE glslang)
 
-glslang_add_build_info_dependency(MachineIndependent)
-
-glslang_pch(MachineIndependent MachineIndependent/pch.h)
-
-target_link_libraries(MachineIndependent PRIVATE OGLCompiler OSDependent GenericCodeGen)
+if (NOT MSVC)
+    # -Wunused-but-set-variable is triggered in code generated by bison that we do not control. Turn this warning off, but only for the generated.
+    set_source_files_properties(MachineIndependent/glslang_tab.cpp PROPERTIES COMPILE_FLAGS -Wno-unused-but-set-variable)
+endif()
 
 ################################################################################
 # glslang
@@ -161,27 +164,45 @@
     Include/ResourceLimits.h
     Include/ShHandle.h
     Include/SpirvIntrinsics.h
-    Include/Types.h)
+    Include/Types.h
+    Include/visibility.h)
 
-add_library(glslang ${LIB_TYPE} ${BISON_GLSLParser_OUTPUT_SOURCE} ${GLSLANG_SOURCES} ${GLSLANG_HEADERS})
+add_library(glslang ${LIB_TYPE} ${GLSLANG_SOURCES} ${GLSLANG_HEADERS} ${GENERICCODEGEN_SOURCES} ${GENERICCODEGEN_HEADERS} ${OSDEPENDENT_SOURCES} ${OSDEPENDENT_HEADERS} ${MACHINEINDEPENDENT_SOURCES} ${MACHINEINDEPENDENT_HEADERS} ${SPIRV_SOURCES} ${SPIRV_HEADERS})
+add_library(glslang::glslang ALIAS glslang)
 set_target_properties(glslang PROPERTIES
     FOLDER glslang
     POSITION_INDEPENDENT_CODE ON
     VERSION   "${GLSLANG_VERSION}"
     SOVERSION "${GLSLANG_VERSION_MAJOR}")
-target_link_libraries(glslang PRIVATE OGLCompiler OSDependent MachineIndependent)
 target_include_directories(glslang PUBLIC
     $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>
     $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
 
 glslang_add_build_info_dependency(glslang)
 
+glslang_pch(glslang MachineIndependent/pch.h)
+
 glslang_only_export_explicit_symbols(glslang)
 
 if(WIN32 AND BUILD_SHARED_LIBS)
     set_target_properties(glslang PROPERTIES PREFIX "")
 endif()
 
+if(ENABLE_SPIRV)
+    if(ENABLE_OPT)
+        target_include_directories(glslang PUBLIC
+            $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/../External>)
+        target_link_libraries(glslang SPIRV-Tools-opt)
+    endif()
+endif()
+
+# Link pthread
+if(UNIX OR "${CMAKE_SYSTEM_NAME}" STREQUAL "Fuchsia" OR ANDROID)
+    set(THREADS_PREFER_PTHREAD_FLAG ON)
+    find_package(Threads REQUIRED)
+    target_link_libraries(glslang Threads::Threads)
+endif()
+
 ################################################################################
 # ResourceLimits
 ################################################################################
@@ -196,6 +217,7 @@
 )
 
 add_library(glslang-default-resource-limits ${RESOURCELIMITS_SOURCES} ${RESOURCELIMITS_HEADERS})
+add_library(glslang::glslang-default-resource-limits ALIAS glslang-default-resource-limits)
 set_target_properties(glslang-default-resource-limits PROPERTIES
     VERSION "${GLSLANG_VERSION}"
     SOVERSION "${GLSLANG_VERSION_MAJOR}"
@@ -205,11 +227,14 @@
 target_include_directories(glslang-default-resource-limits PUBLIC
     $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..>
     $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)
+glslang_only_export_explicit_symbols(glslang-default-resource-limits)
 
 ################################################################################
 # source_groups
 ################################################################################
 if(WIN32)
+    source_group("OSDependent" REGULAR_EXPRESSION "OSDependent/[^/]*")
+    source_group("OSDependent\\Windows" REGULAR_EXPRESSION "OSDependent/Windows/*")
     source_group("Public" REGULAR_EXPRESSION "Public/*")
     source_group("MachineIndependent" REGULAR_EXPRESSION "MachineIndependent/[^/]*")
     source_group("Include" REGULAR_EXPRESSION "Include/[^/]*")
@@ -217,42 +242,31 @@
     source_group("MachineIndependent\\Preprocessor" REGULAR_EXPRESSION "MachineIndependent/preprocessor/*")
     source_group("HLSL" REGULAR_EXPRESSION "HLSL/*")
     source_group("CInterface" REGULAR_EXPRESSION "CInterface/*")
+    source_group("SPIRV" REGULAR_EXPRESSION "SPIRV/[^/]*")
+    source_group("SPIRV\\CInterface" REGULAR_EXPRESSION "SPIRV/CInterface/*")
 endif()
 
 ################################################################################
 # install
 ################################################################################
-if(ENABLE_GLSLANG_INSTALL)
+if(GLSLANG_ENABLE_INSTALL)
     install(TARGETS glslang EXPORT glslang-targets)
     if(NOT BUILD_SHARED_LIBS)
         install(TARGETS MachineIndependent EXPORT glslang-targets)
         install(TARGETS GenericCodeGen EXPORT glslang-targets)
-
-        # Backward compatibility
-        file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/glslangTargets.cmake" "
-            message(WARNING \"Using `glslangTargets.cmake` is deprecated: use `find_package(glslang)` to find glslang CMake targets.\")
-
-            if (NOT TARGET glslang::glslang)
-                include(\"${CMAKE_INSTALL_FULL_LIBDIR}/cmake/${PROJECT_NAME}/glslang-targets.cmake\")
-            endif()
-
-            if(${BUILD_SHARED_LIBS})
-                add_library(glslang ALIAS glslang::glslang)
-            else()
-                add_library(glslang ALIAS glslang::glslang)
-                add_library(MachineIndependent ALIAS glslang::MachineIndependent)
-                add_library(GenericCodeGen ALIAS glslang::GenericCodeGen)
-            endif()
-        ")
-        install(FILES "${CMAKE_CURRENT_BINARY_DIR}/glslangTargets.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
     endif()
 
-    set(ALL_HEADERS
-        ${GLSLANG_HEADERS}
-        ${MACHINEINDEPENDENT_HEADERS}
-        ${RESOURCELIMITS_HEADERS})
+    set(PUBLIC_HEADERS
+        Public/ResourceLimits.h
+        Public/ShaderLang.h
+        Public/resource_limits_c.h
+        Include/glslang_c_interface.h
+        Include/glslang_c_shader_types.h
+        Include/ResourceLimits.h
+        Include/visibility.h
+        MachineIndependent/Versions.h)
 
-    foreach(file ${ALL_HEADERS})
+    foreach(file ${PUBLIC_HEADERS})
         get_filename_component(dir ${file} DIRECTORY)
         install(FILES ${file} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/glslang/${dir})
     endforeach()
@@ -260,17 +274,4 @@
     install(FILES ${GLSLANG_BUILD_INFO_H} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/glslang)
 
     install(TARGETS glslang-default-resource-limits EXPORT glslang-targets)
-
-    # Backward compatibility
-    file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/glslang-default-resource-limitsTargets.cmake" "
-        message(WARNING \"Using `glslang-default-resource-limitsTargets.cmake` is deprecated: use `find_package(glslang)` to find glslang CMake targets.\")
-
-        if (NOT TARGET glslang::glslang-default-resource-limits)
-            include(\"\${CMAKE_INSTALL_FULL_LIBDIR}/cmake/${PROJECT_NAME}/glslang-targets.cmake\")
-        endif()
-
-        add_library(glslang-default-resource-limits ALIAS glslang::glslang-default-resource-limits)
-    ")
-    install(FILES "${CMAKE_CURRENT_BINARY_DIR}/glslang-default-resource-limitsTargets.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
-
 endif()
diff --git a/glslang/GenericCodeGen/CodeGen.cpp b/glslang/GenericCodeGen/CodeGen.cpp
index b3c7226..1ef2449 100644
--- a/glslang/GenericCodeGen/CodeGen.cpp
+++ b/glslang/GenericCodeGen/CodeGen.cpp
@@ -41,10 +41,9 @@
 //
 class TGenericCompiler : public TCompiler {
 public:
-    TGenericCompiler(EShLanguage l, int dOptions) : TCompiler(l, infoSink), debugOptions(dOptions) { }
+    TGenericCompiler(EShLanguage l) : TCompiler(l, infoSink) {}
     virtual bool compile(TIntermNode* root, int version = 0, EProfile profile = ENoProfile);
     TInfoSink infoSink;
-    int debugOptions;
 };
 
 //
@@ -52,10 +51,7 @@
 // compile object used by higher level code.  It returns
 // a subclass of TCompiler.
 //
-TCompiler* ConstructCompiler(EShLanguage language, int debugOptions)
-{
-    return new TGenericCompiler(language, debugOptions);
-}
+TCompiler* ConstructCompiler(EShLanguage language, int) { return new TGenericCompiler(language); }
 
 //
 // Delete the compiler made by ConstructCompiler
diff --git a/glslang/GenericCodeGen/Link.cpp b/glslang/GenericCodeGen/Link.cpp
index 5e28405..5df39b8 100644
--- a/glslang/GenericCodeGen/Link.cpp
+++ b/glslang/GenericCodeGen/Link.cpp
@@ -44,11 +44,10 @@
 //
 class TGenericLinker : public TLinker {
 public:
-    TGenericLinker(EShExecutable e, int dOptions) : TLinker(e, infoSink), debugOptions(dOptions) { }
+    TGenericLinker(EShExecutable e) : TLinker(e, infoSink) {}
     bool link(TCompilerList&, TUniformMap*) { return true; }
     void getAttributeBindings(ShBindingTable const **) const { }
     TInfoSink infoSink;
-    int debugOptions;
 };
 
 //
@@ -60,10 +59,7 @@
     virtual int getLocation(const char*) { return 0; }
 };
 
-TShHandleBase* ConstructLinker(EShExecutable executable, int debugOptions)
-{
-    return new TGenericLinker(executable, debugOptions);
-}
+TShHandleBase* ConstructLinker(EShExecutable executable, int) { return new TGenericLinker(executable); }
 
 void DeleteLinker(TShHandleBase* linker)
 {
diff --git a/glslang/HLSL/hlslGrammar.cpp b/glslang/HLSL/hlslGrammar.cpp
index 11c0e45..ed32ff0 100644
--- a/glslang/HLSL/hlslGrammar.cpp
+++ b/glslang/HLSL/hlslGrammar.cpp
@@ -391,6 +391,7 @@
     case EvqOut:
     case EvqInOut:
         parseContext.error(token.loc, "in/out qualifiers are only valid on parameters", token.string->c_str(), "");
+        break;
     default:
         break;
     }
diff --git a/glslang/HLSL/hlslParseHelper.cpp b/glslang/HLSL/hlslParseHelper.cpp
index ac0dee5..0732334 100644
--- a/glslang/HLSL/hlslParseHelper.cpp
+++ b/glslang/HLSL/hlslParseHelper.cpp
@@ -43,8 +43,6 @@
 #include "../MachineIndependent/Scan.h"
 #include "../MachineIndependent/preprocessor/PpContext.h"
 
-#include "../OSDependent/osinclude.h"
-
 #include <algorithm>
 #include <functional>
 #include <cctype>
@@ -402,7 +400,7 @@
         case EOpLeftShiftAssign:
         case EOpRightShiftAssign:
             isModifyOp = true;
-            // fall through...
+            [[fallthrough]];
         case EOpAssign:
             {
                 // Since this is an lvalue, we'll convert an image load to a sequence like this
@@ -962,14 +960,11 @@
                 return addConstructor(loc, base, type);
             }
         }
-        if (base->getVectorSize() == 1) {
+        // Use EOpIndexDirect (below) with vec1.x so that it remains l-value (Test/hlsl.swizzle.vec1.comp)
+        if (base->getVectorSize() == 1 && selectors.size() > 1) {
             TType scalarType(base->getBasicType(), EvqTemporary, 1);
-            if (selectors.size() == 1)
-                return addConstructor(loc, base, scalarType);
-            else {
-                TType vectorType(base->getBasicType(), EvqTemporary, selectors.size());
-                return addConstructor(loc, addConstructor(loc, base, scalarType), vectorType);
-            }
+            TType vectorType(base->getBasicType(), EvqTemporary, selectors.size());
+            return addConstructor(loc, addConstructor(loc, base, scalarType), vectorType);
         }
 
         if (base->getType().getQualifier().isFrontEndConstant())
@@ -1401,7 +1396,7 @@
 
         // If this is not the final flattening, accumulate the position and return
         // an object of the partially dereferenced type.
-        subsetSymbol = new TIntermSymbol(uniqueId, "flattenShadow", dereferencedType);
+        subsetSymbol = new TIntermSymbol(uniqueId, "flattenShadow", getLanguage(), dereferencedType);
         subsetSymbol->setFlattenSubset(newSubset);
     }
 
@@ -1444,7 +1439,7 @@
         return offsets[subset];
     TType derefType(type, 0);
     return findSubtreeOffset(derefType, offsets[subset], offsets);
-};
+}
 
 // Find and return the split IO TVariable for id, or nullptr if none.
 TVariable* HlslParseContext::getSplitNonIoVar(long long id) const
@@ -4507,13 +4502,13 @@
             int cmpValues = 0;  // 1 if there is a compare value (handier than a bool below)
 
             switch (op) {
-            case EOpMethodGatherCmpRed:   cmpValues = 1;  // fall through
+            case EOpMethodGatherCmpRed:   cmpValues = 1;  [[fallthrough]];
             case EOpMethodGatherRed:      channel = 0; break;
-            case EOpMethodGatherCmpGreen: cmpValues = 1;  // fall through
+            case EOpMethodGatherCmpGreen: cmpValues = 1;  [[fallthrough]];
             case EOpMethodGatherGreen:    channel = 1; break;
-            case EOpMethodGatherCmpBlue:  cmpValues = 1;  // fall through
+            case EOpMethodGatherCmpBlue:  cmpValues = 1;  [[fallthrough]];
             case EOpMethodGatherBlue:     channel = 2; break;
-            case EOpMethodGatherCmpAlpha: cmpValues = 1;  // fall through
+            case EOpMethodGatherCmpAlpha: cmpValues = 1;  [[fallthrough]];
             case EOpMethodGatherAlpha:    channel = 3; break;
             default:                      assert(0);   break;
             }
@@ -5811,6 +5806,7 @@
                     internalAggregate->getWritableType().getQualifier().makeTemporary();
                     TIntermSymbol* internalSymbolNode = new TIntermSymbol(internalAggregate->getUniqueId(),
                                                                           internalAggregate->getName(),
+                                                                          getLanguage(),
                                                                           internalAggregate->getType());
                     internalSymbolNode->setLoc(arg->getLoc());
                     // This makes the deepest level, the member-wise copy
@@ -6062,7 +6058,7 @@
         unaryArg = callNode.getAsUnaryNode()->getOperand();
         arg0 = unaryArg;
     }
-    const TIntermSequence& aggArgs = *argp;  // only valid when unaryArg is nullptr
+    const TIntermSequence& aggArgs = argp ? *argp : TIntermSequence();  // only valid when unaryArg is nullptr
 
     switch (callNode.getOp()) {
     case EOpTextureGather:
@@ -9551,6 +9547,8 @@
         return language == EShLangTessEvaluation;
     case EbvTessCoord:
         return language == EShLangTessEvaluation;
+    case EbvViewIndex:
+        return language != EShLangCompute;
     default:
         return false;
     }
@@ -9656,6 +9654,10 @@
     if (language != EShLangTessControl)
         qualifier.patch = false;
 
+    // Fixes Test/hlsl.entry-inout.vert (SV_Position will not become a varying).
+    if (qualifier.builtIn == EbvNone)
+        qualifier.builtIn = qualifier.declaredBuiltIn;
+
     switch (qualifier.builtIn) {
     case EbvFragDepth:
         intermediate.setDepthReplacing();
diff --git a/glslang/HLSL/hlslScanContext.cpp b/glslang/HLSL/hlslScanContext.cpp
index 823b17a..e45643e 100644
--- a/glslang/HLSL/hlslScanContext.cpp
+++ b/glslang/HLSL/hlslScanContext.cpp
@@ -78,414 +78,396 @@
 };
 
 // A single global usable by all threads, by all versions, by all languages.
-// After a single process-level initialization, this is read only and thread safe
-std::unordered_map<const char*, glslang::EHlslTokenClass, str_hash, str_eq>* KeywordMap = nullptr;
-std::unordered_set<const char*, str_hash, str_eq>* ReservedSet = nullptr;
-std::unordered_map<const char*, glslang::TBuiltInVariable, str_hash, str_eq>* SemanticMap = nullptr;
+const std::unordered_map<const char*, glslang::EHlslTokenClass, str_hash, str_eq> KeywordMap {
+    {"static",glslang::EHTokStatic},
+    {"const",glslang::EHTokConst},
+    {"unorm",glslang::EHTokUnorm},
+    {"snorm",glslang::EHTokSNorm},
+    {"extern",glslang::EHTokExtern},
+    {"uniform",glslang::EHTokUniform},
+    {"volatile",glslang::EHTokVolatile},
+    {"precise",glslang::EHTokPrecise},
+    {"shared",glslang::EHTokShared},
+    {"groupshared",glslang::EHTokGroupShared},
+    {"linear",glslang::EHTokLinear},
+    {"centroid",glslang::EHTokCentroid},
+    {"nointerpolation",glslang::EHTokNointerpolation},
+    {"noperspective",glslang::EHTokNoperspective},
+    {"sample",glslang::EHTokSample},
+    {"row_major",glslang::EHTokRowMajor},
+    {"column_major",glslang::EHTokColumnMajor},
+    {"packoffset",glslang::EHTokPackOffset},
+    {"in",glslang::EHTokIn},
+    {"out",glslang::EHTokOut},
+    {"inout",glslang::EHTokInOut},
+    {"layout",glslang::EHTokLayout},
+    {"globallycoherent",glslang::EHTokGloballyCoherent},
+    {"inline",glslang::EHTokInline},
 
+    {"point",glslang::EHTokPoint},
+    {"line",glslang::EHTokLine},
+    {"triangle",glslang::EHTokTriangle},
+    {"lineadj",glslang::EHTokLineAdj},
+    {"triangleadj",glslang::EHTokTriangleAdj},
+
+    {"PointStream",glslang::EHTokPointStream},
+    {"LineStream",glslang::EHTokLineStream},
+    {"TriangleStream",glslang::EHTokTriangleStream},
+
+    {"InputPatch",glslang::EHTokInputPatch},
+    {"OutputPatch",glslang::EHTokOutputPatch},
+
+    {"Buffer",glslang::EHTokBuffer},
+    {"vector",glslang::EHTokVector},
+    {"matrix",glslang::EHTokMatrix},
+
+    {"void",glslang::EHTokVoid},
+    {"string",glslang::EHTokString},
+    {"bool",glslang::EHTokBool},
+    {"int",glslang::EHTokInt},
+    {"uint",glslang::EHTokUint},
+    {"uint64_t",glslang::EHTokUint64},
+    {"dword",glslang::EHTokDword},
+    {"half",glslang::EHTokHalf},
+    {"float",glslang::EHTokFloat},
+    {"double",glslang::EHTokDouble},
+    {"min16float",glslang::EHTokMin16float},
+    {"min10float",glslang::EHTokMin10float},
+    {"min16int",glslang::EHTokMin16int},
+    {"min12int",glslang::EHTokMin12int},
+    {"min16uint",glslang::EHTokMin16uint},
+
+    {"bool1",glslang::EHTokBool1},
+    {"bool2",glslang::EHTokBool2},
+    {"bool3",glslang::EHTokBool3},
+    {"bool4",glslang::EHTokBool4},
+    {"float1",glslang::EHTokFloat1},
+    {"float2",glslang::EHTokFloat2},
+    {"float3",glslang::EHTokFloat3},
+    {"float4",glslang::EHTokFloat4},
+    {"int1",glslang::EHTokInt1},
+    {"int2",glslang::EHTokInt2},
+    {"int3",glslang::EHTokInt3},
+    {"int4",glslang::EHTokInt4},
+    {"double1",glslang::EHTokDouble1},
+    {"double2",glslang::EHTokDouble2},
+    {"double3",glslang::EHTokDouble3},
+    {"double4",glslang::EHTokDouble4},
+    {"uint1",glslang::EHTokUint1},
+    {"uint2",glslang::EHTokUint2},
+    {"uint3",glslang::EHTokUint3},
+    {"uint4",glslang::EHTokUint4},
+
+    {"half1",glslang::EHTokHalf1},
+    {"half2",glslang::EHTokHalf2},
+    {"half3",glslang::EHTokHalf3},
+    {"half4",glslang::EHTokHalf4},
+    {"min16float1",glslang::EHTokMin16float1},
+    {"min16float2",glslang::EHTokMin16float2},
+    {"min16float3",glslang::EHTokMin16float3},
+    {"min16float4",glslang::EHTokMin16float4},
+    {"min10float1",glslang::EHTokMin10float1},
+    {"min10float2",glslang::EHTokMin10float2},
+    {"min10float3",glslang::EHTokMin10float3},
+    {"min10float4",glslang::EHTokMin10float4},
+    {"min16int1",glslang::EHTokMin16int1},
+    {"min16int2",glslang::EHTokMin16int2},
+    {"min16int3",glslang::EHTokMin16int3},
+    {"min16int4",glslang::EHTokMin16int4},
+    {"min12int1",glslang::EHTokMin12int1},
+    {"min12int2",glslang::EHTokMin12int2},
+    {"min12int3",glslang::EHTokMin12int3},
+    {"min12int4",glslang::EHTokMin12int4},
+    {"min16uint1",glslang::EHTokMin16uint1},
+    {"min16uint2",glslang::EHTokMin16uint2},
+    {"min16uint3",glslang::EHTokMin16uint3},
+    {"min16uint4",glslang::EHTokMin16uint4},
+
+    {"bool1x1",glslang::EHTokBool1x1},
+    {"bool1x2",glslang::EHTokBool1x2},
+    {"bool1x3",glslang::EHTokBool1x3},
+    {"bool1x4",glslang::EHTokBool1x4},
+    {"bool2x1",glslang::EHTokBool2x1},
+    {"bool2x2",glslang::EHTokBool2x2},
+    {"bool2x3",glslang::EHTokBool2x3},
+    {"bool2x4",glslang::EHTokBool2x4},
+    {"bool3x1",glslang::EHTokBool3x1},
+    {"bool3x2",glslang::EHTokBool3x2},
+    {"bool3x3",glslang::EHTokBool3x3},
+    {"bool3x4",glslang::EHTokBool3x4},
+    {"bool4x1",glslang::EHTokBool4x1},
+    {"bool4x2",glslang::EHTokBool4x2},
+    {"bool4x3",glslang::EHTokBool4x3},
+    {"bool4x4",glslang::EHTokBool4x4},
+    {"int1x1",glslang::EHTokInt1x1},
+    {"int1x2",glslang::EHTokInt1x2},
+    {"int1x3",glslang::EHTokInt1x3},
+    {"int1x4",glslang::EHTokInt1x4},
+    {"int2x1",glslang::EHTokInt2x1},
+    {"int2x2",glslang::EHTokInt2x2},
+    {"int2x3",glslang::EHTokInt2x3},
+    {"int2x4",glslang::EHTokInt2x4},
+    {"int3x1",glslang::EHTokInt3x1},
+    {"int3x2",glslang::EHTokInt3x2},
+    {"int3x3",glslang::EHTokInt3x3},
+    {"int3x4",glslang::EHTokInt3x4},
+    {"int4x1",glslang::EHTokInt4x1},
+    {"int4x2",glslang::EHTokInt4x2},
+    {"int4x3",glslang::EHTokInt4x3},
+    {"int4x4",glslang::EHTokInt4x4},
+    {"uint1x1",glslang::EHTokUint1x1},
+    {"uint1x2",glslang::EHTokUint1x2},
+    {"uint1x3",glslang::EHTokUint1x3},
+    {"uint1x4",glslang::EHTokUint1x4},
+    {"uint2x1",glslang::EHTokUint2x1},
+    {"uint2x2",glslang::EHTokUint2x2},
+    {"uint2x3",glslang::EHTokUint2x3},
+    {"uint2x4",glslang::EHTokUint2x4},
+    {"uint3x1",glslang::EHTokUint3x1},
+    {"uint3x2",glslang::EHTokUint3x2},
+    {"uint3x3",glslang::EHTokUint3x3},
+    {"uint3x4",glslang::EHTokUint3x4},
+    {"uint4x1",glslang::EHTokUint4x1},
+    {"uint4x2",glslang::EHTokUint4x2},
+    {"uint4x3",glslang::EHTokUint4x3},
+    {"uint4x4",glslang::EHTokUint4x4},
+    {"bool1x1",glslang::EHTokBool1x1},
+    {"bool1x2",glslang::EHTokBool1x2},
+    {"bool1x3",glslang::EHTokBool1x3},
+    {"bool1x4",glslang::EHTokBool1x4},
+    {"bool2x1",glslang::EHTokBool2x1},
+    {"bool2x2",glslang::EHTokBool2x2},
+    {"bool2x3",glslang::EHTokBool2x3},
+    {"bool2x4",glslang::EHTokBool2x4},
+    {"bool3x1",glslang::EHTokBool3x1},
+    {"bool3x2",glslang::EHTokBool3x2},
+    {"bool3x3",glslang::EHTokBool3x3},
+    {"bool3x4",glslang::EHTokBool3x4},
+    {"bool4x1",glslang::EHTokBool4x1},
+    {"bool4x2",glslang::EHTokBool4x2},
+    {"bool4x3",glslang::EHTokBool4x3},
+    {"bool4x4",glslang::EHTokBool4x4},
+    {"float1x1",glslang::EHTokFloat1x1},
+    {"float1x2",glslang::EHTokFloat1x2},
+    {"float1x3",glslang::EHTokFloat1x3},
+    {"float1x4",glslang::EHTokFloat1x4},
+    {"float2x1",glslang::EHTokFloat2x1},
+    {"float2x2",glslang::EHTokFloat2x2},
+    {"float2x3",glslang::EHTokFloat2x3},
+    {"float2x4",glslang::EHTokFloat2x4},
+    {"float3x1",glslang::EHTokFloat3x1},
+    {"float3x2",glslang::EHTokFloat3x2},
+    {"float3x3",glslang::EHTokFloat3x3},
+    {"float3x4",glslang::EHTokFloat3x4},
+    {"float4x1",glslang::EHTokFloat4x1},
+    {"float4x2",glslang::EHTokFloat4x2},
+    {"float4x3",glslang::EHTokFloat4x3},
+    {"float4x4",glslang::EHTokFloat4x4},
+    {"half1x1",glslang::EHTokHalf1x1},
+    {"half1x2",glslang::EHTokHalf1x2},
+    {"half1x3",glslang::EHTokHalf1x3},
+    {"half1x4",glslang::EHTokHalf1x4},
+    {"half2x1",glslang::EHTokHalf2x1},
+    {"half2x2",glslang::EHTokHalf2x2},
+    {"half2x3",glslang::EHTokHalf2x3},
+    {"half2x4",glslang::EHTokHalf2x4},
+    {"half3x1",glslang::EHTokHalf3x1},
+    {"half3x2",glslang::EHTokHalf3x2},
+    {"half3x3",glslang::EHTokHalf3x3},
+    {"half3x4",glslang::EHTokHalf3x4},
+    {"half4x1",glslang::EHTokHalf4x1},
+    {"half4x2",glslang::EHTokHalf4x2},
+    {"half4x3",glslang::EHTokHalf4x3},
+    {"half4x4",glslang::EHTokHalf4x4},
+    {"double1x1",glslang::EHTokDouble1x1},
+    {"double1x2",glslang::EHTokDouble1x2},
+    {"double1x3",glslang::EHTokDouble1x3},
+    {"double1x4",glslang::EHTokDouble1x4},
+    {"double2x1",glslang::EHTokDouble2x1},
+    {"double2x2",glslang::EHTokDouble2x2},
+    {"double2x3",glslang::EHTokDouble2x3},
+    {"double2x4",glslang::EHTokDouble2x4},
+    {"double3x1",glslang::EHTokDouble3x1},
+    {"double3x2",glslang::EHTokDouble3x2},
+    {"double3x3",glslang::EHTokDouble3x3},
+    {"double3x4",glslang::EHTokDouble3x4},
+    {"double4x1",glslang::EHTokDouble4x1},
+    {"double4x2",glslang::EHTokDouble4x2},
+    {"double4x3",glslang::EHTokDouble4x3},
+    {"double4x4",glslang::EHTokDouble4x4},
+    {"min16float1x1",glslang::EHTokMin16float1x1},
+    {"min16float1x2",glslang::EHTokMin16float1x2},
+    {"min16float1x3",glslang::EHTokMin16float1x3},
+    {"min16float1x4",glslang::EHTokMin16float1x4},
+    {"min16float2x1",glslang::EHTokMin16float2x1},
+    {"min16float2x2",glslang::EHTokMin16float2x2},
+    {"min16float2x3",glslang::EHTokMin16float2x3},
+    {"min16float2x4",glslang::EHTokMin16float2x4},
+    {"min16float3x1",glslang::EHTokMin16float3x1},
+    {"min16float3x2",glslang::EHTokMin16float3x2},
+    {"min16float3x3",glslang::EHTokMin16float3x3},
+    {"min16float3x4",glslang::EHTokMin16float3x4},
+    {"min16float4x1",glslang::EHTokMin16float4x1},
+    {"min16float4x2",glslang::EHTokMin16float4x2},
+    {"min16float4x3",glslang::EHTokMin16float4x3},
+    {"min16float4x4",glslang::EHTokMin16float4x4},
+    {"min10float1x1",glslang::EHTokMin10float1x1},
+    {"min10float1x2",glslang::EHTokMin10float1x2},
+    {"min10float1x3",glslang::EHTokMin10float1x3},
+    {"min10float1x4",glslang::EHTokMin10float1x4},
+    {"min10float2x1",glslang::EHTokMin10float2x1},
+    {"min10float2x2",glslang::EHTokMin10float2x2},
+    {"min10float2x3",glslang::EHTokMin10float2x3},
+    {"min10float2x4",glslang::EHTokMin10float2x4},
+    {"min10float3x1",glslang::EHTokMin10float3x1},
+    {"min10float3x2",glslang::EHTokMin10float3x2},
+    {"min10float3x3",glslang::EHTokMin10float3x3},
+    {"min10float3x4",glslang::EHTokMin10float3x4},
+    {"min10float4x1",glslang::EHTokMin10float4x1},
+    {"min10float4x2",glslang::EHTokMin10float4x2},
+    {"min10float4x3",glslang::EHTokMin10float4x3},
+    {"min10float4x4",glslang::EHTokMin10float4x4},
+    {"min16int1x1",glslang::EHTokMin16int1x1},
+    {"min16int1x2",glslang::EHTokMin16int1x2},
+    {"min16int1x3",glslang::EHTokMin16int1x3},
+    {"min16int1x4",glslang::EHTokMin16int1x4},
+    {"min16int2x1",glslang::EHTokMin16int2x1},
+    {"min16int2x2",glslang::EHTokMin16int2x2},
+    {"min16int2x3",glslang::EHTokMin16int2x3},
+    {"min16int2x4",glslang::EHTokMin16int2x4},
+    {"min16int3x1",glslang::EHTokMin16int3x1},
+    {"min16int3x2",glslang::EHTokMin16int3x2},
+    {"min16int3x3",glslang::EHTokMin16int3x3},
+    {"min16int3x4",glslang::EHTokMin16int3x4},
+    {"min16int4x1",glslang::EHTokMin16int4x1},
+    {"min16int4x2",glslang::EHTokMin16int4x2},
+    {"min16int4x3",glslang::EHTokMin16int4x3},
+    {"min16int4x4",glslang::EHTokMin16int4x4},
+    {"min12int1x1",glslang::EHTokMin12int1x1},
+    {"min12int1x2",glslang::EHTokMin12int1x2},
+    {"min12int1x3",glslang::EHTokMin12int1x3},
+    {"min12int1x4",glslang::EHTokMin12int1x4},
+    {"min12int2x1",glslang::EHTokMin12int2x1},
+    {"min12int2x2",glslang::EHTokMin12int2x2},
+    {"min12int2x3",glslang::EHTokMin12int2x3},
+    {"min12int2x4",glslang::EHTokMin12int2x4},
+    {"min12int3x1",glslang::EHTokMin12int3x1},
+    {"min12int3x2",glslang::EHTokMin12int3x2},
+    {"min12int3x3",glslang::EHTokMin12int3x3},
+    {"min12int3x4",glslang::EHTokMin12int3x4},
+    {"min12int4x1",glslang::EHTokMin12int4x1},
+    {"min12int4x2",glslang::EHTokMin12int4x2},
+    {"min12int4x3",glslang::EHTokMin12int4x3},
+    {"min12int4x4",glslang::EHTokMin12int4x4},
+    {"min16uint1x1",glslang::EHTokMin16uint1x1},
+    {"min16uint1x2",glslang::EHTokMin16uint1x2},
+    {"min16uint1x3",glslang::EHTokMin16uint1x3},
+    {"min16uint1x4",glslang::EHTokMin16uint1x4},
+    {"min16uint2x1",glslang::EHTokMin16uint2x1},
+    {"min16uint2x2",glslang::EHTokMin16uint2x2},
+    {"min16uint2x3",glslang::EHTokMin16uint2x3},
+    {"min16uint2x4",glslang::EHTokMin16uint2x4},
+    {"min16uint3x1",glslang::EHTokMin16uint3x1},
+    {"min16uint3x2",glslang::EHTokMin16uint3x2},
+    {"min16uint3x3",glslang::EHTokMin16uint3x3},
+    {"min16uint3x4",glslang::EHTokMin16uint3x4},
+    {"min16uint4x1",glslang::EHTokMin16uint4x1},
+    {"min16uint4x2",glslang::EHTokMin16uint4x2},
+    {"min16uint4x3",glslang::EHTokMin16uint4x3},
+    {"min16uint4x4",glslang::EHTokMin16uint4x4},
+
+    {"sampler",glslang::EHTokSampler},
+    {"sampler1D",glslang::EHTokSampler1d},
+    {"sampler2D",glslang::EHTokSampler2d},
+    {"sampler3D",glslang::EHTokSampler3d},
+    {"samplerCUBE",glslang::EHTokSamplerCube},
+    {"sampler_state",glslang::EHTokSamplerState},
+    {"SamplerState",glslang::EHTokSamplerState},
+    {"SamplerComparisonState",glslang::EHTokSamplerComparisonState},
+    {"texture",glslang::EHTokTexture},
+    {"Texture1D",glslang::EHTokTexture1d},
+    {"Texture1DArray",glslang::EHTokTexture1darray},
+    {"Texture2D",glslang::EHTokTexture2d},
+    {"Texture2DArray",glslang::EHTokTexture2darray},
+    {"Texture3D",glslang::EHTokTexture3d},
+    {"TextureCube",glslang::EHTokTextureCube},
+    {"TextureCubeArray",glslang::EHTokTextureCubearray},
+    {"Texture2DMS",glslang::EHTokTexture2DMS},
+    {"Texture2DMSArray",glslang::EHTokTexture2DMSarray},
+    {"RWTexture1D",glslang::EHTokRWTexture1d},
+    {"RWTexture1DArray",glslang::EHTokRWTexture1darray},
+    {"RWTexture2D",glslang::EHTokRWTexture2d},
+    {"RWTexture2DArray",glslang::EHTokRWTexture2darray},
+    {"RWTexture3D",glslang::EHTokRWTexture3d},
+    {"RWBuffer",glslang::EHTokRWBuffer},
+    {"SubpassInput",glslang::EHTokSubpassInput},
+    {"SubpassInputMS",glslang::EHTokSubpassInputMS},
+
+    {"AppendStructuredBuffer",glslang::EHTokAppendStructuredBuffer},
+    {"ByteAddressBuffer",glslang::EHTokByteAddressBuffer},
+    {"ConsumeStructuredBuffer",glslang::EHTokConsumeStructuredBuffer},
+    {"RWByteAddressBuffer",glslang::EHTokRWByteAddressBuffer},
+    {"RWStructuredBuffer",glslang::EHTokRWStructuredBuffer},
+    {"StructuredBuffer",glslang::EHTokStructuredBuffer},
+    {"TextureBuffer",glslang::EHTokTextureBuffer},
+
+    {"class",glslang::EHTokClass},
+    {"struct",glslang::EHTokStruct},
+    {"cbuffer",glslang::EHTokCBuffer},
+    {"ConstantBuffer",glslang::EHTokConstantBuffer},
+    {"tbuffer",glslang::EHTokTBuffer},
+    {"typedef",glslang::EHTokTypedef},
+    {"this",glslang::EHTokThis},
+    {"namespace",glslang::EHTokNamespace},
+
+    {"true",glslang::EHTokBoolConstant},
+    {"false",glslang::EHTokBoolConstant},
+
+    {"for",glslang::EHTokFor},
+    {"do",glslang::EHTokDo},
+    {"while",glslang::EHTokWhile},
+    {"break",glslang::EHTokBreak},
+    {"continue",glslang::EHTokContinue},
+    {"if",glslang::EHTokIf},
+    {"else",glslang::EHTokElse},
+    {"discard",glslang::EHTokDiscard},
+    {"return",glslang::EHTokReturn},
+    {"switch",glslang::EHTokSwitch},
+    {"case",glslang::EHTokCase},
+    {"default",glslang::EHTokDefault},
 };
 
-namespace glslang {
-
-void HlslScanContext::fillInKeywordMap()
-{
-    if (KeywordMap != nullptr) {
-        // this is really an error, as this should called only once per process
-        // but, the only risk is if two threads called simultaneously
-        return;
-    }
-    KeywordMap = new std::unordered_map<const char*, EHlslTokenClass, str_hash, str_eq>;
-
-    (*KeywordMap)["static"] =                  EHTokStatic;
-    (*KeywordMap)["const"] =                   EHTokConst;
-    (*KeywordMap)["unorm"] =                   EHTokUnorm;
-    (*KeywordMap)["snorm"] =                   EHTokSNorm;
-    (*KeywordMap)["extern"] =                  EHTokExtern;
-    (*KeywordMap)["uniform"] =                 EHTokUniform;
-    (*KeywordMap)["volatile"] =                EHTokVolatile;
-    (*KeywordMap)["precise"] =                 EHTokPrecise;
-    (*KeywordMap)["shared"] =                  EHTokShared;
-    (*KeywordMap)["groupshared"] =             EHTokGroupShared;
-    (*KeywordMap)["linear"] =                  EHTokLinear;
-    (*KeywordMap)["centroid"] =                EHTokCentroid;
-    (*KeywordMap)["nointerpolation"] =         EHTokNointerpolation;
-    (*KeywordMap)["noperspective"] =           EHTokNoperspective;
-    (*KeywordMap)["sample"] =                  EHTokSample;
-    (*KeywordMap)["row_major"] =               EHTokRowMajor;
-    (*KeywordMap)["column_major"] =            EHTokColumnMajor;
-    (*KeywordMap)["packoffset"] =              EHTokPackOffset;
-    (*KeywordMap)["in"] =                      EHTokIn;
-    (*KeywordMap)["out"] =                     EHTokOut;
-    (*KeywordMap)["inout"] =                   EHTokInOut;
-    (*KeywordMap)["layout"] =                  EHTokLayout;
-    (*KeywordMap)["globallycoherent"] =        EHTokGloballyCoherent;
-    (*KeywordMap)["inline"] =                  EHTokInline;
-
-    (*KeywordMap)["point"] =                   EHTokPoint;
-    (*KeywordMap)["line"] =                    EHTokLine;
-    (*KeywordMap)["triangle"] =                EHTokTriangle;
-    (*KeywordMap)["lineadj"] =                 EHTokLineAdj;
-    (*KeywordMap)["triangleadj"] =             EHTokTriangleAdj;
-
-    (*KeywordMap)["PointStream"] =             EHTokPointStream;
-    (*KeywordMap)["LineStream"] =              EHTokLineStream;
-    (*KeywordMap)["TriangleStream"] =          EHTokTriangleStream;
-
-    (*KeywordMap)["InputPatch"] =              EHTokInputPatch;
-    (*KeywordMap)["OutputPatch"] =             EHTokOutputPatch;
-
-    (*KeywordMap)["Buffer"] =                  EHTokBuffer;
-    (*KeywordMap)["vector"] =                  EHTokVector;
-    (*KeywordMap)["matrix"] =                  EHTokMatrix;
-
-    (*KeywordMap)["void"] =                    EHTokVoid;
-    (*KeywordMap)["string"] =                  EHTokString;
-    (*KeywordMap)["bool"] =                    EHTokBool;
-    (*KeywordMap)["int"] =                     EHTokInt;
-    (*KeywordMap)["uint"] =                    EHTokUint;
-    (*KeywordMap)["uint64_t"] =                EHTokUint64;
-    (*KeywordMap)["dword"] =                   EHTokDword;
-    (*KeywordMap)["half"] =                    EHTokHalf;
-    (*KeywordMap)["float"] =                   EHTokFloat;
-    (*KeywordMap)["double"] =                  EHTokDouble;
-    (*KeywordMap)["min16float"] =              EHTokMin16float;
-    (*KeywordMap)["min10float"] =              EHTokMin10float;
-    (*KeywordMap)["min16int"] =                EHTokMin16int;
-    (*KeywordMap)["min12int"] =                EHTokMin12int;
-    (*KeywordMap)["min16uint"] =               EHTokMin16uint;
-
-    (*KeywordMap)["bool1"] =                   EHTokBool1;
-    (*KeywordMap)["bool2"] =                   EHTokBool2;
-    (*KeywordMap)["bool3"] =                   EHTokBool3;
-    (*KeywordMap)["bool4"] =                   EHTokBool4;
-    (*KeywordMap)["float1"] =                  EHTokFloat1;
-    (*KeywordMap)["float2"] =                  EHTokFloat2;
-    (*KeywordMap)["float3"] =                  EHTokFloat3;
-    (*KeywordMap)["float4"] =                  EHTokFloat4;
-    (*KeywordMap)["int1"] =                    EHTokInt1;
-    (*KeywordMap)["int2"] =                    EHTokInt2;
-    (*KeywordMap)["int3"] =                    EHTokInt3;
-    (*KeywordMap)["int4"] =                    EHTokInt4;
-    (*KeywordMap)["double1"] =                 EHTokDouble1;
-    (*KeywordMap)["double2"] =                 EHTokDouble2;
-    (*KeywordMap)["double3"] =                 EHTokDouble3;
-    (*KeywordMap)["double4"] =                 EHTokDouble4;
-    (*KeywordMap)["uint1"] =                   EHTokUint1;
-    (*KeywordMap)["uint2"] =                   EHTokUint2;
-    (*KeywordMap)["uint3"] =                   EHTokUint3;
-    (*KeywordMap)["uint4"] =                   EHTokUint4;
-
-    (*KeywordMap)["half1"] =                   EHTokHalf1;
-    (*KeywordMap)["half2"] =                   EHTokHalf2;
-    (*KeywordMap)["half3"] =                   EHTokHalf3;
-    (*KeywordMap)["half4"] =                   EHTokHalf4;
-    (*KeywordMap)["min16float1"] =             EHTokMin16float1;
-    (*KeywordMap)["min16float2"] =             EHTokMin16float2;
-    (*KeywordMap)["min16float3"] =             EHTokMin16float3;
-    (*KeywordMap)["min16float4"] =             EHTokMin16float4;
-    (*KeywordMap)["min10float1"] =             EHTokMin10float1;
-    (*KeywordMap)["min10float2"] =             EHTokMin10float2;
-    (*KeywordMap)["min10float3"] =             EHTokMin10float3;
-    (*KeywordMap)["min10float4"] =             EHTokMin10float4;
-    (*KeywordMap)["min16int1"] =               EHTokMin16int1;
-    (*KeywordMap)["min16int2"] =               EHTokMin16int2;
-    (*KeywordMap)["min16int3"] =               EHTokMin16int3;
-    (*KeywordMap)["min16int4"] =               EHTokMin16int4;
-    (*KeywordMap)["min12int1"] =               EHTokMin12int1;
-    (*KeywordMap)["min12int2"] =               EHTokMin12int2;
-    (*KeywordMap)["min12int3"] =               EHTokMin12int3;
-    (*KeywordMap)["min12int4"] =               EHTokMin12int4;
-    (*KeywordMap)["min16uint1"] =              EHTokMin16uint1;
-    (*KeywordMap)["min16uint2"] =              EHTokMin16uint2;
-    (*KeywordMap)["min16uint3"] =              EHTokMin16uint3;
-    (*KeywordMap)["min16uint4"] =              EHTokMin16uint4;
-
-    (*KeywordMap)["bool1x1"] =                 EHTokBool1x1;
-    (*KeywordMap)["bool1x2"] =                 EHTokBool1x2;
-    (*KeywordMap)["bool1x3"] =                 EHTokBool1x3;
-    (*KeywordMap)["bool1x4"] =                 EHTokBool1x4;
-    (*KeywordMap)["bool2x1"] =                 EHTokBool2x1;
-    (*KeywordMap)["bool2x2"] =                 EHTokBool2x2;
-    (*KeywordMap)["bool2x3"] =                 EHTokBool2x3;
-    (*KeywordMap)["bool2x4"] =                 EHTokBool2x4;
-    (*KeywordMap)["bool3x1"] =                 EHTokBool3x1;
-    (*KeywordMap)["bool3x2"] =                 EHTokBool3x2;
-    (*KeywordMap)["bool3x3"] =                 EHTokBool3x3;
-    (*KeywordMap)["bool3x4"] =                 EHTokBool3x4;
-    (*KeywordMap)["bool4x1"] =                 EHTokBool4x1;
-    (*KeywordMap)["bool4x2"] =                 EHTokBool4x2;
-    (*KeywordMap)["bool4x3"] =                 EHTokBool4x3;
-    (*KeywordMap)["bool4x4"] =                 EHTokBool4x4;
-    (*KeywordMap)["int1x1"] =                  EHTokInt1x1;
-    (*KeywordMap)["int1x2"] =                  EHTokInt1x2;
-    (*KeywordMap)["int1x3"] =                  EHTokInt1x3;
-    (*KeywordMap)["int1x4"] =                  EHTokInt1x4;
-    (*KeywordMap)["int2x1"] =                  EHTokInt2x1;
-    (*KeywordMap)["int2x2"] =                  EHTokInt2x2;
-    (*KeywordMap)["int2x3"] =                  EHTokInt2x3;
-    (*KeywordMap)["int2x4"] =                  EHTokInt2x4;
-    (*KeywordMap)["int3x1"] =                  EHTokInt3x1;
-    (*KeywordMap)["int3x2"] =                  EHTokInt3x2;
-    (*KeywordMap)["int3x3"] =                  EHTokInt3x3;
-    (*KeywordMap)["int3x4"] =                  EHTokInt3x4;
-    (*KeywordMap)["int4x1"] =                  EHTokInt4x1;
-    (*KeywordMap)["int4x2"] =                  EHTokInt4x2;
-    (*KeywordMap)["int4x3"] =                  EHTokInt4x3;
-    (*KeywordMap)["int4x4"] =                  EHTokInt4x4;
-    (*KeywordMap)["uint1x1"] =                 EHTokUint1x1;
-    (*KeywordMap)["uint1x2"] =                 EHTokUint1x2;
-    (*KeywordMap)["uint1x3"] =                 EHTokUint1x3;
-    (*KeywordMap)["uint1x4"] =                 EHTokUint1x4;
-    (*KeywordMap)["uint2x1"] =                 EHTokUint2x1;
-    (*KeywordMap)["uint2x2"] =                 EHTokUint2x2;
-    (*KeywordMap)["uint2x3"] =                 EHTokUint2x3;
-    (*KeywordMap)["uint2x4"] =                 EHTokUint2x4;
-    (*KeywordMap)["uint3x1"] =                 EHTokUint3x1;
-    (*KeywordMap)["uint3x2"] =                 EHTokUint3x2;
-    (*KeywordMap)["uint3x3"] =                 EHTokUint3x3;
-    (*KeywordMap)["uint3x4"] =                 EHTokUint3x4;
-    (*KeywordMap)["uint4x1"] =                 EHTokUint4x1;
-    (*KeywordMap)["uint4x2"] =                 EHTokUint4x2;
-    (*KeywordMap)["uint4x3"] =                 EHTokUint4x3;
-    (*KeywordMap)["uint4x4"] =                 EHTokUint4x4;
-    (*KeywordMap)["bool1x1"] =                 EHTokBool1x1;
-    (*KeywordMap)["bool1x2"] =                 EHTokBool1x2;
-    (*KeywordMap)["bool1x3"] =                 EHTokBool1x3;
-    (*KeywordMap)["bool1x4"] =                 EHTokBool1x4;
-    (*KeywordMap)["bool2x1"] =                 EHTokBool2x1;
-    (*KeywordMap)["bool2x2"] =                 EHTokBool2x2;
-    (*KeywordMap)["bool2x3"] =                 EHTokBool2x3;
-    (*KeywordMap)["bool2x4"] =                 EHTokBool2x4;
-    (*KeywordMap)["bool3x1"] =                 EHTokBool3x1;
-    (*KeywordMap)["bool3x2"] =                 EHTokBool3x2;
-    (*KeywordMap)["bool3x3"] =                 EHTokBool3x3;
-    (*KeywordMap)["bool3x4"] =                 EHTokBool3x4;
-    (*KeywordMap)["bool4x1"] =                 EHTokBool4x1;
-    (*KeywordMap)["bool4x2"] =                 EHTokBool4x2;
-    (*KeywordMap)["bool4x3"] =                 EHTokBool4x3;
-    (*KeywordMap)["bool4x4"] =                 EHTokBool4x4;
-    (*KeywordMap)["float1x1"] =                EHTokFloat1x1;
-    (*KeywordMap)["float1x2"] =                EHTokFloat1x2;
-    (*KeywordMap)["float1x3"] =                EHTokFloat1x3;
-    (*KeywordMap)["float1x4"] =                EHTokFloat1x4;
-    (*KeywordMap)["float2x1"] =                EHTokFloat2x1;
-    (*KeywordMap)["float2x2"] =                EHTokFloat2x2;
-    (*KeywordMap)["float2x3"] =                EHTokFloat2x3;
-    (*KeywordMap)["float2x4"] =                EHTokFloat2x4;
-    (*KeywordMap)["float3x1"] =                EHTokFloat3x1;
-    (*KeywordMap)["float3x2"] =                EHTokFloat3x2;
-    (*KeywordMap)["float3x3"] =                EHTokFloat3x3;
-    (*KeywordMap)["float3x4"] =                EHTokFloat3x4;
-    (*KeywordMap)["float4x1"] =                EHTokFloat4x1;
-    (*KeywordMap)["float4x2"] =                EHTokFloat4x2;
-    (*KeywordMap)["float4x3"] =                EHTokFloat4x3;
-    (*KeywordMap)["float4x4"] =                EHTokFloat4x4;
-    (*KeywordMap)["half1x1"] =                 EHTokHalf1x1;
-    (*KeywordMap)["half1x2"] =                 EHTokHalf1x2;
-    (*KeywordMap)["half1x3"] =                 EHTokHalf1x3;
-    (*KeywordMap)["half1x4"] =                 EHTokHalf1x4;
-    (*KeywordMap)["half2x1"] =                 EHTokHalf2x1;
-    (*KeywordMap)["half2x2"] =                 EHTokHalf2x2;
-    (*KeywordMap)["half2x3"] =                 EHTokHalf2x3;
-    (*KeywordMap)["half2x4"] =                 EHTokHalf2x4;
-    (*KeywordMap)["half3x1"] =                 EHTokHalf3x1;
-    (*KeywordMap)["half3x2"] =                 EHTokHalf3x2;
-    (*KeywordMap)["half3x3"] =                 EHTokHalf3x3;
-    (*KeywordMap)["half3x4"] =                 EHTokHalf3x4;
-    (*KeywordMap)["half4x1"] =                 EHTokHalf4x1;
-    (*KeywordMap)["half4x2"] =                 EHTokHalf4x2;
-    (*KeywordMap)["half4x3"] =                 EHTokHalf4x3;
-    (*KeywordMap)["half4x4"] =                 EHTokHalf4x4;
-    (*KeywordMap)["double1x1"] =               EHTokDouble1x1;
-    (*KeywordMap)["double1x2"] =               EHTokDouble1x2;
-    (*KeywordMap)["double1x3"] =               EHTokDouble1x3;
-    (*KeywordMap)["double1x4"] =               EHTokDouble1x4;
-    (*KeywordMap)["double2x1"] =               EHTokDouble2x1;
-    (*KeywordMap)["double2x2"] =               EHTokDouble2x2;
-    (*KeywordMap)["double2x3"] =               EHTokDouble2x3;
-    (*KeywordMap)["double2x4"] =               EHTokDouble2x4;
-    (*KeywordMap)["double3x1"] =               EHTokDouble3x1;
-    (*KeywordMap)["double3x2"] =               EHTokDouble3x2;
-    (*KeywordMap)["double3x3"] =               EHTokDouble3x3;
-    (*KeywordMap)["double3x4"] =               EHTokDouble3x4;
-    (*KeywordMap)["double4x1"] =               EHTokDouble4x1;
-    (*KeywordMap)["double4x2"] =               EHTokDouble4x2;
-    (*KeywordMap)["double4x3"] =               EHTokDouble4x3;
-    (*KeywordMap)["double4x4"] =               EHTokDouble4x4;
-    (*KeywordMap)["min16float1x1"] =           EHTokMin16float1x1;
-    (*KeywordMap)["min16float1x2"] =           EHTokMin16float1x2;
-    (*KeywordMap)["min16float1x3"] =           EHTokMin16float1x3;
-    (*KeywordMap)["min16float1x4"] =           EHTokMin16float1x4;
-    (*KeywordMap)["min16float2x1"] =           EHTokMin16float2x1;
-    (*KeywordMap)["min16float2x2"] =           EHTokMin16float2x2;
-    (*KeywordMap)["min16float2x3"] =           EHTokMin16float2x3;
-    (*KeywordMap)["min16float2x4"] =           EHTokMin16float2x4;
-    (*KeywordMap)["min16float3x1"] =           EHTokMin16float3x1;
-    (*KeywordMap)["min16float3x2"] =           EHTokMin16float3x2;
-    (*KeywordMap)["min16float3x3"] =           EHTokMin16float3x3;
-    (*KeywordMap)["min16float3x4"] =           EHTokMin16float3x4;
-    (*KeywordMap)["min16float4x1"] =           EHTokMin16float4x1;
-    (*KeywordMap)["min16float4x2"] =           EHTokMin16float4x2;
-    (*KeywordMap)["min16float4x3"] =           EHTokMin16float4x3;
-    (*KeywordMap)["min16float4x4"] =           EHTokMin16float4x4;
-    (*KeywordMap)["min10float1x1"] =           EHTokMin10float1x1;
-    (*KeywordMap)["min10float1x2"] =           EHTokMin10float1x2;
-    (*KeywordMap)["min10float1x3"] =           EHTokMin10float1x3;
-    (*KeywordMap)["min10float1x4"] =           EHTokMin10float1x4;
-    (*KeywordMap)["min10float2x1"] =           EHTokMin10float2x1;
-    (*KeywordMap)["min10float2x2"] =           EHTokMin10float2x2;
-    (*KeywordMap)["min10float2x3"] =           EHTokMin10float2x3;
-    (*KeywordMap)["min10float2x4"] =           EHTokMin10float2x4;
-    (*KeywordMap)["min10float3x1"] =           EHTokMin10float3x1;
-    (*KeywordMap)["min10float3x2"] =           EHTokMin10float3x2;
-    (*KeywordMap)["min10float3x3"] =           EHTokMin10float3x3;
-    (*KeywordMap)["min10float3x4"] =           EHTokMin10float3x4;
-    (*KeywordMap)["min10float4x1"] =           EHTokMin10float4x1;
-    (*KeywordMap)["min10float4x2"] =           EHTokMin10float4x2;
-    (*KeywordMap)["min10float4x3"] =           EHTokMin10float4x3;
-    (*KeywordMap)["min10float4x4"] =           EHTokMin10float4x4;
-    (*KeywordMap)["min16int1x1"] =             EHTokMin16int1x1;
-    (*KeywordMap)["min16int1x2"] =             EHTokMin16int1x2;
-    (*KeywordMap)["min16int1x3"] =             EHTokMin16int1x3;
-    (*KeywordMap)["min16int1x4"] =             EHTokMin16int1x4;
-    (*KeywordMap)["min16int2x1"] =             EHTokMin16int2x1;
-    (*KeywordMap)["min16int2x2"] =             EHTokMin16int2x2;
-    (*KeywordMap)["min16int2x3"] =             EHTokMin16int2x3;
-    (*KeywordMap)["min16int2x4"] =             EHTokMin16int2x4;
-    (*KeywordMap)["min16int3x1"] =             EHTokMin16int3x1;
-    (*KeywordMap)["min16int3x2"] =             EHTokMin16int3x2;
-    (*KeywordMap)["min16int3x3"] =             EHTokMin16int3x3;
-    (*KeywordMap)["min16int3x4"] =             EHTokMin16int3x4;
-    (*KeywordMap)["min16int4x1"] =             EHTokMin16int4x1;
-    (*KeywordMap)["min16int4x2"] =             EHTokMin16int4x2;
-    (*KeywordMap)["min16int4x3"] =             EHTokMin16int4x3;
-    (*KeywordMap)["min16int4x4"] =             EHTokMin16int4x4;
-    (*KeywordMap)["min12int1x1"] =             EHTokMin12int1x1;
-    (*KeywordMap)["min12int1x2"] =             EHTokMin12int1x2;
-    (*KeywordMap)["min12int1x3"] =             EHTokMin12int1x3;
-    (*KeywordMap)["min12int1x4"] =             EHTokMin12int1x4;
-    (*KeywordMap)["min12int2x1"] =             EHTokMin12int2x1;
-    (*KeywordMap)["min12int2x2"] =             EHTokMin12int2x2;
-    (*KeywordMap)["min12int2x3"] =             EHTokMin12int2x3;
-    (*KeywordMap)["min12int2x4"] =             EHTokMin12int2x4;
-    (*KeywordMap)["min12int3x1"] =             EHTokMin12int3x1;
-    (*KeywordMap)["min12int3x2"] =             EHTokMin12int3x2;
-    (*KeywordMap)["min12int3x3"] =             EHTokMin12int3x3;
-    (*KeywordMap)["min12int3x4"] =             EHTokMin12int3x4;
-    (*KeywordMap)["min12int4x1"] =             EHTokMin12int4x1;
-    (*KeywordMap)["min12int4x2"] =             EHTokMin12int4x2;
-    (*KeywordMap)["min12int4x3"] =             EHTokMin12int4x3;
-    (*KeywordMap)["min12int4x4"] =             EHTokMin12int4x4;
-    (*KeywordMap)["min16uint1x1"] =            EHTokMin16uint1x1;
-    (*KeywordMap)["min16uint1x2"] =            EHTokMin16uint1x2;
-    (*KeywordMap)["min16uint1x3"] =            EHTokMin16uint1x3;
-    (*KeywordMap)["min16uint1x4"] =            EHTokMin16uint1x4;
-    (*KeywordMap)["min16uint2x1"] =            EHTokMin16uint2x1;
-    (*KeywordMap)["min16uint2x2"] =            EHTokMin16uint2x2;
-    (*KeywordMap)["min16uint2x3"] =            EHTokMin16uint2x3;
-    (*KeywordMap)["min16uint2x4"] =            EHTokMin16uint2x4;
-    (*KeywordMap)["min16uint3x1"] =            EHTokMin16uint3x1;
-    (*KeywordMap)["min16uint3x2"] =            EHTokMin16uint3x2;
-    (*KeywordMap)["min16uint3x3"] =            EHTokMin16uint3x3;
-    (*KeywordMap)["min16uint3x4"] =            EHTokMin16uint3x4;
-    (*KeywordMap)["min16uint4x1"] =            EHTokMin16uint4x1;
-    (*KeywordMap)["min16uint4x2"] =            EHTokMin16uint4x2;
-    (*KeywordMap)["min16uint4x3"] =            EHTokMin16uint4x3;
-    (*KeywordMap)["min16uint4x4"] =            EHTokMin16uint4x4;
-
-    (*KeywordMap)["sampler"] =                 EHTokSampler;
-    (*KeywordMap)["sampler1D"] =               EHTokSampler1d;
-    (*KeywordMap)["sampler2D"] =               EHTokSampler2d;
-    (*KeywordMap)["sampler3D"] =               EHTokSampler3d;
-    (*KeywordMap)["samplerCUBE"] =             EHTokSamplerCube;
-    (*KeywordMap)["sampler_state"] =           EHTokSamplerState;
-    (*KeywordMap)["SamplerState"] =            EHTokSamplerState;
-    (*KeywordMap)["SamplerComparisonState"] =  EHTokSamplerComparisonState;
-    (*KeywordMap)["texture"] =                 EHTokTexture;
-    (*KeywordMap)["Texture1D"] =               EHTokTexture1d;
-    (*KeywordMap)["Texture1DArray"] =          EHTokTexture1darray;
-    (*KeywordMap)["Texture2D"] =               EHTokTexture2d;
-    (*KeywordMap)["Texture2DArray"] =          EHTokTexture2darray;
-    (*KeywordMap)["Texture3D"] =               EHTokTexture3d;
-    (*KeywordMap)["TextureCube"] =             EHTokTextureCube;
-    (*KeywordMap)["TextureCubeArray"] =        EHTokTextureCubearray;
-    (*KeywordMap)["Texture2DMS"] =             EHTokTexture2DMS;
-    (*KeywordMap)["Texture2DMSArray"] =        EHTokTexture2DMSarray;
-    (*KeywordMap)["RWTexture1D"] =             EHTokRWTexture1d;
-    (*KeywordMap)["RWTexture1DArray"] =        EHTokRWTexture1darray;
-    (*KeywordMap)["RWTexture2D"] =             EHTokRWTexture2d;
-    (*KeywordMap)["RWTexture2DArray"] =        EHTokRWTexture2darray;
-    (*KeywordMap)["RWTexture3D"] =             EHTokRWTexture3d;
-    (*KeywordMap)["RWBuffer"] =                EHTokRWBuffer;
-    (*KeywordMap)["SubpassInput"] =            EHTokSubpassInput;
-    (*KeywordMap)["SubpassInputMS"] =          EHTokSubpassInputMS;
-
-    (*KeywordMap)["AppendStructuredBuffer"] =  EHTokAppendStructuredBuffer;
-    (*KeywordMap)["ByteAddressBuffer"] =       EHTokByteAddressBuffer;
-    (*KeywordMap)["ConsumeStructuredBuffer"] = EHTokConsumeStructuredBuffer;
-    (*KeywordMap)["RWByteAddressBuffer"] =     EHTokRWByteAddressBuffer;
-    (*KeywordMap)["RWStructuredBuffer"] =      EHTokRWStructuredBuffer;
-    (*KeywordMap)["StructuredBuffer"] =        EHTokStructuredBuffer;
-    (*KeywordMap)["TextureBuffer"] =           EHTokTextureBuffer;
-
-    (*KeywordMap)["class"] =                   EHTokClass;
-    (*KeywordMap)["struct"] =                  EHTokStruct;
-    (*KeywordMap)["cbuffer"] =                 EHTokCBuffer;
-    (*KeywordMap)["ConstantBuffer"] =          EHTokConstantBuffer;
-    (*KeywordMap)["tbuffer"] =                 EHTokTBuffer;
-    (*KeywordMap)["typedef"] =                 EHTokTypedef;
-    (*KeywordMap)["this"] =                    EHTokThis;
-    (*KeywordMap)["namespace"] =               EHTokNamespace;
-
-    (*KeywordMap)["true"] =                    EHTokBoolConstant;
-    (*KeywordMap)["false"] =                   EHTokBoolConstant;
-
-    (*KeywordMap)["for"] =                     EHTokFor;
-    (*KeywordMap)["do"] =                      EHTokDo;
-    (*KeywordMap)["while"] =                   EHTokWhile;
-    (*KeywordMap)["break"] =                   EHTokBreak;
-    (*KeywordMap)["continue"] =                EHTokContinue;
-    (*KeywordMap)["if"] =                      EHTokIf;
-    (*KeywordMap)["else"] =                    EHTokElse;
-    (*KeywordMap)["discard"] =                 EHTokDiscard;
-    (*KeywordMap)["return"] =                  EHTokReturn;
-    (*KeywordMap)["switch"] =                  EHTokSwitch;
-    (*KeywordMap)["case"] =                    EHTokCase;
-    (*KeywordMap)["default"] =                 EHTokDefault;
-
-    // TODO: get correct set here
-    ReservedSet = new std::unordered_set<const char*, str_hash, str_eq>;
-
-    ReservedSet->insert("auto");
-    ReservedSet->insert("catch");
-    ReservedSet->insert("char");
-    ReservedSet->insert("const_cast");
-    ReservedSet->insert("enum");
-    ReservedSet->insert("explicit");
-    ReservedSet->insert("friend");
-    ReservedSet->insert("goto");
-    ReservedSet->insert("long");
-    ReservedSet->insert("mutable");
-    ReservedSet->insert("new");
-    ReservedSet->insert("operator");
-    ReservedSet->insert("private");
-    ReservedSet->insert("protected");
-    ReservedSet->insert("public");
-    ReservedSet->insert("reinterpret_cast");
-    ReservedSet->insert("short");
-    ReservedSet->insert("signed");
-    ReservedSet->insert("sizeof");
-    ReservedSet->insert("static_cast");
-    ReservedSet->insert("template");
-    ReservedSet->insert("throw");
-    ReservedSet->insert("try");
-    ReservedSet->insert("typename");
-    ReservedSet->insert("union");
-    ReservedSet->insert("unsigned");
-    ReservedSet->insert("using");
-    ReservedSet->insert("virtual");
-
-    SemanticMap = new std::unordered_map<const char*, glslang::TBuiltInVariable, str_hash, str_eq>;
+const std::unordered_set<const char*, str_hash, str_eq> ReservedSet {
+    "auto",
+    "catch",
+    "char",
+    "const_cast",
+    "enum",
+    "explicit",
+    "friend",
+    "goto",
+    "long",
+    "mutable",
+    "new",
+    "operator",
+    "private",
+    "protected",
+    "public",
+    "reinterpret_cast",
+    "short",
+    "signed",
+    "sizeof",
+    "static_cast",
+    "template",
+    "throw",
+    "try",
+    "typename",
+    "union",
+    "unsigned",
+    "using",
+    "virtual",
+};
+std::unordered_map<const char*, glslang::TBuiltInVariable, str_hash, str_eq> SemanticMap { 
 
     // in DX9, all outputs had to have a semantic associated with them, that was either consumed
     // by the system or was a specific register assignment
@@ -494,48 +476,41 @@
     // Also, in DX10 if a SV value is present as the input of a stage, but isn't appropriate for that
     // stage, it would just be ignored as it is likely there as part of an output struct from one stage
     // to the next
-    bool bParseDX9 = false;
-    if (bParseDX9) {
-        (*SemanticMap)["PSIZE"] = EbvPointSize;
-        (*SemanticMap)["FOG"] =   EbvFogFragCoord;
-        (*SemanticMap)["DEPTH"] = EbvFragDepth;
-        (*SemanticMap)["VFACE"] = EbvFace;
-        (*SemanticMap)["VPOS"] =  EbvFragCoord;
-    }
+#if 0
+    (*SemanticMap)["PSIZE"] = EbvPointSize;
+    (*SemanticMap)["FOG"] =   EbvFogFragCoord;
+    (*SemanticMap)["DEPTH"] = EbvFragDepth;
+    (*SemanticMap)["VFACE"] = EbvFace;
+    (*SemanticMap)["VPOS"] =  EbvFragCoord;
+#endif
 
-    (*SemanticMap)["SV_POSITION"] =               EbvPosition;
-    (*SemanticMap)["SV_VERTEXID"] =               EbvVertexIndex;
-    (*SemanticMap)["SV_VIEWPORTARRAYINDEX"] =     EbvViewportIndex;
-    (*SemanticMap)["SV_TESSFACTOR"] =             EbvTessLevelOuter;
-    (*SemanticMap)["SV_SAMPLEINDEX"] =            EbvSampleId;
-    (*SemanticMap)["SV_RENDERTARGETARRAYINDEX"] = EbvLayer;
-    (*SemanticMap)["SV_PRIMITIVEID"] =            EbvPrimitiveId;
-    (*SemanticMap)["SV_OUTPUTCONTROLPOINTID"] =   EbvInvocationId;
-    (*SemanticMap)["SV_ISFRONTFACE"] =            EbvFace;
-    (*SemanticMap)["SV_INSTANCEID"] =             EbvInstanceIndex;
-    (*SemanticMap)["SV_INSIDETESSFACTOR"] =       EbvTessLevelInner;
-    (*SemanticMap)["SV_GSINSTANCEID"] =           EbvInvocationId;
-    (*SemanticMap)["SV_DISPATCHTHREADID"] =       EbvGlobalInvocationId;
-    (*SemanticMap)["SV_GROUPTHREADID"] =          EbvLocalInvocationId;
-    (*SemanticMap)["SV_GROUPINDEX"] =             EbvLocalInvocationIndex;
-    (*SemanticMap)["SV_GROUPID"] =                EbvWorkGroupId;
-    (*SemanticMap)["SV_DOMAINLOCATION"] =         EbvTessCoord;
-    (*SemanticMap)["SV_DEPTH"] =                  EbvFragDepth;
-    (*SemanticMap)["SV_COVERAGE"] =               EbvSampleMask;
-    (*SemanticMap)["SV_DEPTHGREATEREQUAL"] =      EbvFragDepthGreater;
-    (*SemanticMap)["SV_DEPTHLESSEQUAL"] =         EbvFragDepthLesser;
-    (*SemanticMap)["SV_STENCILREF"] =             EbvFragStencilRef;
+    {"SV_POSITION",glslang::EbvPosition},
+    {"SV_VERTEXID",glslang::EbvVertexIndex},
+    {"SV_VIEWPORTARRAYINDEX",glslang::EbvViewportIndex},
+    {"SV_TESSFACTOR",glslang::EbvTessLevelOuter},
+    {"SV_SAMPLEINDEX",glslang::EbvSampleId},
+    {"SV_RENDERTARGETARRAYINDEX",glslang::EbvLayer},
+    {"SV_PRIMITIVEID",glslang::EbvPrimitiveId},
+    {"SV_OUTPUTCONTROLPOINTID",glslang::EbvInvocationId},
+    {"SV_ISFRONTFACE",glslang::EbvFace},
+    {"SV_VIEWID",glslang::EbvViewIndex},
+    {"SV_INSTANCEID",glslang::EbvInstanceIndex},
+    {"SV_INSIDETESSFACTOR",glslang::EbvTessLevelInner},
+    {"SV_GSINSTANCEID",glslang::EbvInvocationId},
+    {"SV_DISPATCHTHREADID",glslang::EbvGlobalInvocationId},
+    {"SV_GROUPTHREADID",glslang::EbvLocalInvocationId},
+    {"SV_GROUPINDEX",glslang::EbvLocalInvocationIndex},
+    {"SV_GROUPID",glslang::EbvWorkGroupId},
+    {"SV_DOMAINLOCATION",glslang::EbvTessCoord},
+    {"SV_DEPTH",glslang::EbvFragDepth},
+    {"SV_COVERAGE",glslang::EbvSampleMask},
+    {"SV_DEPTHGREATEREQUAL",glslang::EbvFragDepthGreater},
+    {"SV_DEPTHLESSEQUAL",glslang::EbvFragDepthLesser},
+    {"SV_STENCILREF", glslang::EbvFragStencilRef},
+};
 }
 
-void HlslScanContext::deleteKeywordMap()
-{
-    delete KeywordMap;
-    KeywordMap = nullptr;
-    delete ReservedSet;
-    ReservedSet = nullptr;
-    delete SemanticMap;
-    SemanticMap = nullptr;
-}
+namespace glslang {
 
 // Wrapper for tokenizeClass() to get everything inside the token.
 void HlslScanContext::tokenize(HlslToken& token)
@@ -546,8 +521,8 @@
 
 glslang::TBuiltInVariable HlslScanContext::mapSemantic(const char* upperCase)
 {
-    auto it = SemanticMap->find(upperCase);
-    if (it != SemanticMap->end())
+    auto it = SemanticMap.find(upperCase);
+    if (it != SemanticMap.end())
         return it->second;
     else
         return glslang::EbvNone;
@@ -663,11 +638,11 @@
 
 EHlslTokenClass HlslScanContext::tokenizeIdentifier()
 {
-    if (ReservedSet->find(tokenText) != ReservedSet->end())
+    if (ReservedSet.find(tokenText) != ReservedSet.end())
         return reservedWord();
 
-    auto it = KeywordMap->find(tokenText);
-    if (it == KeywordMap->end()) {
+    auto it = KeywordMap.find(tokenText);
+    if (it == KeywordMap.end()) {
         // Should have an identifier of some sort
         return identifierOrType();
     }
diff --git a/glslang/HLSL/pch.h b/glslang/HLSL/pch.h
index 465e7c1..f51efac 100644
--- a/glslang/HLSL/pch.h
+++ b/glslang/HLSL/pch.h
@@ -42,8 +42,6 @@
 #include "../MachineIndependent/Scan.h"
 #include "../MachineIndependent/preprocessor/PpContext.h"
 
-#include "../OSDependent/osinclude.h"
-
 #include <algorithm>
 #include <array>
 #include <cctype>
diff --git a/glslang/Include/BaseTypes.h b/glslang/Include/BaseTypes.h
old mode 100755
new mode 100644
index 64bffa8..8586707
--- a/glslang/Include/BaseTypes.h
+++ b/glslang/Include/BaseTypes.h
@@ -67,6 +67,9 @@
     EbtRayQuery,
     EbtHitObjectNV,
     EbtCoopmat,
+    EbtFunction,
+    EbtTensorLayoutNV,
+    EbtTensorViewNV,
     // SPIR-V type defined by spirv_type
     EbtSpirvType,
 
@@ -268,7 +271,6 @@
     EbvRayTmin,
     EbvRayTmax,
     EbvCullMask,
-    EbvHitT,
     EbvHitKind,
     EbvObjectToWorld,
     EbvObjectToWorld3x4,
@@ -495,7 +497,6 @@
     case EbvObjectRayDirection:         return "ObjectRayDirectionNV";
     case EbvRayTmin:                    return "ObjectRayTminNV";
     case EbvRayTmax:                    return "ObjectRayTmaxNV";
-    case EbvHitT:                       return "HitTNV";
     case EbvHitKind:                    return "HitKindNV";
     case EbvIncomingRayFlags:           return "IncomingRayFlagsNV";
     case EbvObjectToWorld:              return "ObjectToWorldNV";
@@ -590,6 +591,30 @@
     }
 }
 
+__inline uint32_t GetNumBits(TBasicType type)
+{
+    switch (type) {
+    case EbtInt8:
+    case EbtUint8:
+        return 8;
+    case EbtFloat16:
+    case EbtInt16:
+    case EbtUint16:
+        return 16;
+    case EbtInt:
+    case EbtUint:
+    case EbtFloat:
+        return 32;
+    case EbtDouble:
+    case EbtInt64:
+    case EbtUint64:
+        return 64;
+    default:
+        assert(false);
+        return 0;
+    }
+}
+
 __inline int getTypeRank(TBasicType type)
 {
     int res = -1;
diff --git a/glslang/Include/Common.h b/glslang/Include/Common.h
index 080b807..0c14260 100644
--- a/glslang/Include/Common.h
+++ b/glslang/Include/Common.h
@@ -94,6 +94,11 @@
     #pragma warning(disable : 4201) // nameless union
 #endif
 
+// Allow compilation to WASI which does not support threads yet.
+#ifdef __wasi__ 
+#define DISABLE_THREAD_SUPPORT
+#endif
+
 #include "PoolAlloc.h"
 
 //
@@ -159,6 +164,11 @@
     return new(GetThreadPoolAllocator().allocate(instances * sizeof(T))) T[instances];
 }
 
+inline bool StartsWith(TString const &str, const char *prefix)
+{
+    return str.compare(0, strlen(prefix), prefix) == 0;
+}
+
 //
 // Pool allocator versions of vectors, lists, and maps
 //
@@ -292,34 +302,6 @@
     return result;
 }
 
-inline bool IsInfinity(double x) {
-#ifdef _MSC_VER
-    switch (_fpclass(x)) {
-    case _FPCLASS_NINF:
-    case _FPCLASS_PINF:
-        return true;
-    default:
-        return false;
-    }
-#else
-    return std::isinf(x);
-#endif
-}
-
-inline bool IsNan(double x) {
-#ifdef _MSC_VER
-    switch (_fpclass(x)) {
-    case _FPCLASS_SNAN:
-    case _FPCLASS_QNAN:
-        return true;
-    default:
-        return false;
-    }
-#else
-  return std::isnan(x);
-#endif
-}
-
 } // end namespace glslang
 
 #endif // _COMMON_INCLUDED_
diff --git a/glslang/Include/ConstantUnion.h b/glslang/Include/ConstantUnion.h
index 1f39fc5..da4737b 100644
--- a/glslang/Include/ConstantUnion.h
+++ b/glslang/Include/ConstantUnion.h
@@ -503,7 +503,7 @@
         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 EbtInt16:  returnValue.setI8Const(i8Const % constant.i16Const); break;
+        case EbtInt16:  returnValue.setI16Const(i16Const % constant.i16Const); 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;
diff --git a/glslang/Include/InfoSink.h b/glslang/Include/InfoSink.h
index dceb603..2629339 100644
--- a/glslang/Include/InfoSink.h
+++ b/glslang/Include/InfoSink.h
@@ -36,6 +36,7 @@
 #define _INFOSINK_INCLUDED_
 
 #include "../Include/Common.h"
+#include <filesystem>
 #include <cmath>
 
 namespace glslang {
@@ -67,7 +68,7 @@
 //
 class TInfoSinkBase {
 public:
-    TInfoSinkBase() : outputStream(4) {}
+    TInfoSinkBase() : outputStream(4), shaderFileName(nullptr) {}
     void erase() { sink.erase(); }
     TInfoSinkBase& operator<<(const TPersistString& t) { append(t); return *this; }
     TInfoSinkBase& operator<<(char c)                  { append(1, c); return *this; }
@@ -94,11 +95,26 @@
         default:                   append("UNKNOWN ERROR: ");   break;
         }
     }
-    void location(const TSourceLoc& loc) {
+    void location(const TSourceLoc& loc, bool absolute = false, bool displayColumn = false) {
         const int maxSize = 24;
         char locText[maxSize];
-        snprintf(locText, maxSize, ":%d", loc.line);
-        append(loc.getStringNameOrNum(false).c_str());
+        if (displayColumn) {
+            snprintf(locText, maxSize, ":%d:%d", loc.line, loc.column);
+        } else {
+            snprintf(locText, maxSize, ":%d", loc.line);
+        }
+
+        if(loc.getFilename() == nullptr && shaderFileName != nullptr && absolute) {
+            append(std::filesystem::absolute(shaderFileName).string());
+        } else {
+            std::string location = loc.getStringNameOrNum(false);
+            if (absolute) {
+                append(std::filesystem::absolute(location).string());
+            } else {
+                append(location);
+            }
+        }
+
         append(locText);
         append(": ");
     }
@@ -107,9 +123,11 @@
         append(s);
         append("\n");
     }
-    void message(TPrefixType message, const char* s, const TSourceLoc& loc) {
+    void message(TPrefixType message, const char* s, const TSourceLoc& loc, bool absolute = false,
+                 bool displayColumn = false)
+    {
         prefix(message);
-        location(loc);
+        location(loc, absolute, displayColumn);
         append(s);
         append("\n");
     }
@@ -119,6 +137,11 @@
         outputStream = output;
     }
 
+    void setShaderFileName(const char* file = nullptr)
+    {
+        shaderFileName = file;
+    }
+
 protected:
     void append(const char* s);
 
@@ -131,6 +154,7 @@
     void appendToStream(const char* s);
     TPersistString sink;
     int outputStream;
+    const char* shaderFileName;
 };
 
 } // end namespace glslang
diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h
index 26aba9b..465fb46 100644
--- a/glslang/Include/Types.h
+++ b/glslang/Include/Types.h
@@ -307,21 +307,6 @@
 
 typedef TVector<TString*> TIdentifierList;
 
-//
-// Following are a series of helper enums for managing layouts and qualifiers,
-// used for TPublicType, TType, others.
-//
-
-enum TLayoutPacking {
-    ElpNone,
-    ElpShared,      // default, but different than saying nothing
-    ElpStd140,
-    ElpStd430,
-    ElpPacked,
-    ElpScalar,
-    ElpCount        // If expanding, see bitfield width below
-};
-
 enum TLayoutMatrix {
     ElmNone,
     ElmRowMajor,
@@ -573,7 +558,8 @@
     }
 
     const char*         semanticName;
-    TStorageQualifier   storage   : 6;
+    TStorageQualifier   storage   : 7;
+    static_assert(EvqLast < 64, "need to increase size of TStorageQualifier bitfields!");
     TBuiltInVariable    builtIn   : 9;
     TBuiltInVariable    declaredBuiltIn : 9;
     static_assert(EbvLast < 256, "need to increase size of TBuiltInVariable bitfields!");
@@ -852,6 +838,8 @@
         // -2048 as the default value indicating layoutSecondaryViewportRelative is not set
         layoutSecondaryViewportRelativeOffset = -2048;
         layoutShaderRecord = false;
+        layoutFullQuads = false;
+        layoutQuadDeriv = false;
         layoutHitObjectShaderRecordNV = false;
         layoutBindlessSampler = false;
         layoutBindlessImage = false;
@@ -948,6 +936,8 @@
     bool layoutViewportRelative;
     int layoutSecondaryViewportRelativeOffset;
     bool layoutShaderRecord;
+    bool layoutFullQuads;
+    bool layoutQuadDeriv;
     bool layoutHitObjectShaderRecordNV;
 
     // GL_EXT_spirv_intrinsics
@@ -1055,6 +1045,8 @@
     TLayoutFormat getFormat() const { return layoutFormat; }
     bool isPushConstant() const { return layoutPushConstant; }
     bool isShaderRecord() const { return layoutShaderRecord; }
+    bool isFullQuads() const { return layoutFullQuads; }
+    bool isQuadDeriv() const { return layoutQuadDeriv; }
     bool hasHitObjectShaderRecordNV() const { return layoutHitObjectShaderRecordNV; }
     bool hasBufferReference() const { return layoutBufferReference; }
     bool hasBufferReferenceAlign() const
@@ -1075,7 +1067,7 @@
     }
 
     // GL_EXT_spirv_intrinsics
-    bool hasSprivDecorate() const { return spirvDecorate != nullptr; }
+    bool hasSpirvDecorate() const { return spirvDecorate != nullptr; }
     void setSpirvDecorate(int decoration, const TIntermAggregate* args = nullptr);
     void setSpirvDecorateId(int decoration, const TIntermAggregate* args);
     void setSpirvDecorateString(int decoration, const TIntermAggregate* args);
@@ -1428,13 +1420,25 @@
 public:
     POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator())
 
-    TTypeParameters() : basicType(EbtVoid), arraySizes(nullptr) {}
+    TTypeParameters() : basicType(EbtVoid), arraySizes(nullptr), spirvType(nullptr) {}
 
     TBasicType basicType;
     TArraySizes *arraySizes;
+    TSpirvType *spirvType;
 
-    bool operator==(const TTypeParameters& rhs) const { return basicType == rhs.basicType && *arraySizes == *rhs.arraySizes; }
-    bool operator!=(const TTypeParameters& rhs) const { return basicType != rhs.basicType || *arraySizes != *rhs.arraySizes; }
+    bool operator==(const TTypeParameters& rhs) const
+    {
+        bool same = basicType == rhs.basicType && *arraySizes == *rhs.arraySizes;
+        if (same && basicType == EbtSpirvType) {
+            assert(spirvType && rhs.spirvType);
+            return *spirvType == *rhs.spirvType;
+        }
+        return same;
+    }
+    bool operator!=(const TTypeParameters& rhs) const
+    {
+        return !(*this == rhs);
+    }
 };
 
 //
@@ -1451,9 +1455,9 @@
     TSampler sampler;
     TQualifier qualifier;
     TShaderQualifiers shaderQualifiers;
-    int vectorSize  : 4;
-    int matrixCols  : 4;
-    int matrixRows  : 4;
+    uint32_t vectorSize  : 4;
+    uint32_t matrixCols  : 4;
+    uint32_t matrixRows  : 4;
     bool coopmatNV  : 1;
     bool coopmatKHR : 1;
     TArraySizes* arraySizes;
@@ -1467,10 +1471,13 @@
     bool isCoopmatNV() const { return coopmatNV; }
     bool isCoopmatKHR() const { return coopmatKHR; }
 
+    bool isTensorLayoutNV() const { return basicType == EbtTensorLayoutNV; }
+    bool isTensorViewNV() const { return basicType == EbtTensorViewNV; }
+
     void initType(const TSourceLoc& l)
     {
         basicType = EbtVoid;
-        vectorSize = 1;
+        vectorSize = 1u;
         matrixRows = 0;
         matrixCols = 0;
         arraySizes = nullptr;
@@ -1501,19 +1508,22 @@
     {
         matrixRows = 0;
         matrixCols = 0;
-        vectorSize = s;
+        assert(s >= 0);
+        vectorSize = static_cast<uint32_t>(s) & 0b1111;
     }
 
     void setMatrix(int c, int r)
     {
-        matrixRows = r;
-        matrixCols = c;
+        assert(r >= 0);
+        matrixRows = static_cast<uint32_t>(r) & 0b1111;
+        assert(c >= 0);
+        matrixCols = static_cast<uint32_t>(c) & 0b1111;
         vectorSize = 0;
     }
 
     bool isScalar() const
     {
-        return matrixCols == 0 && vectorSize == 1 && arraySizes == nullptr && userDef == nullptr;
+        return matrixCols == 0u && vectorSize == 1u && arraySizes == nullptr && userDef == nullptr;
     }
 
     // GL_EXT_spirv_intrinsics
@@ -1535,10 +1545,14 @@
     // for "empty" type (no args) or simple scalar/vector/matrix
     explicit TType(TBasicType t = EbtVoid, TStorageQualifier q = EvqTemporary, int vs = 1, int mc = 0, int mr = 0,
                    bool isVector = false) :
-                            basicType(t), vectorSize(vs), matrixCols(mc), matrixRows(mr), vector1(isVector && vs == 1), coopmatNV(false), coopmatKHR(false), coopmatKHRuse(-1),
+                            basicType(t), vectorSize(static_cast<uint32_t>(vs) & 0b1111), matrixCols(static_cast<uint32_t>(mc) & 0b1111), matrixRows(static_cast<uint32_t>(mr) & 0b1111), vector1(isVector && vs == 1), coopmatNV(false), coopmatKHR(false), coopmatKHRuse(0), coopmatKHRUseValid(false),
                             arraySizes(nullptr), structure(nullptr), fieldName(nullptr), typeName(nullptr), typeParameters(nullptr),
                             spirvType(nullptr)
                             {
+                                assert(vs >= 0);
+                                assert(mc >= 0);
+                                assert(mr >= 0);
+
                                 sampler.clear();
                                 qualifier.clear();
                                 qualifier.storage = q;
@@ -1547,10 +1561,14 @@
     // for explicit precision qualifier
     TType(TBasicType t, TStorageQualifier q, TPrecisionQualifier p, int vs = 1, int mc = 0, int mr = 0,
           bool isVector = false) :
-                            basicType(t), vectorSize(vs), matrixCols(mc), matrixRows(mr), vector1(isVector && vs == 1), coopmatNV(false), coopmatKHR(false), coopmatKHRuse(-1),
+                            basicType(t), vectorSize(static_cast<uint32_t>(vs) & 0b1111), matrixCols(static_cast<uint32_t>(mc) & 0b1111), matrixRows(static_cast<uint32_t>(mr) & 0b1111), vector1(isVector && vs == 1), coopmatNV(false), coopmatKHR(false), coopmatKHRuse(0), coopmatKHRUseValid(false),
                             arraySizes(nullptr), structure(nullptr), fieldName(nullptr), typeName(nullptr), typeParameters(nullptr),
                             spirvType(nullptr)
                             {
+                                assert(vs >= 0);
+                                assert(mc >= 0);
+                                assert(mr >= 0);
+
                                 sampler.clear();
                                 qualifier.clear();
                                 qualifier.storage = q;
@@ -1561,7 +1579,7 @@
     // for turning a TPublicType into a TType, using a shallow copy
     explicit TType(const TPublicType& p) :
                             basicType(p.basicType),
-                            vectorSize(p.vectorSize), matrixCols(p.matrixCols), matrixRows(p.matrixRows), vector1(false), coopmatNV(p.coopmatNV), coopmatKHR(p.coopmatKHR), coopmatKHRuse(-1),
+                            vectorSize(p.vectorSize), matrixCols(p.matrixCols), matrixRows(p.matrixRows), vector1(false), coopmatNV(p.coopmatNV), coopmatKHR(p.coopmatKHR), coopmatKHRuse(0), coopmatKHRUseValid(false),
                             arraySizes(p.arraySizes), structure(nullptr), fieldName(nullptr), typeName(nullptr), typeParameters(p.typeParameters),
                             spirvType(p.spirvType)
                             {
@@ -1600,16 +1618,22 @@
                                 }
                                 if (p.isCoopmatKHR() && p.typeParameters && p.typeParameters->arraySizes->getNumDims() > 0) {
                                     basicType = p.typeParameters->basicType;
+                                    if (isSpirvType()) {
+                                        assert(p.typeParameters->spirvType);
+                                        spirvType = p.typeParameters->spirvType;
+                                    }
 
                                     if (p.typeParameters->arraySizes->getNumDims() == 4) {
-                                        coopmatKHRuse = p.typeParameters->arraySizes->getDimSize(3);
-                                        p.typeParameters->arraySizes->removeLastSize();
+                                        const int dimSize = p.typeParameters->arraySizes->getDimSize(3);
+                                        assert(dimSize >= 0);
+                                        coopmatKHRuse = static_cast<uint32_t>(dimSize) & 0b111;
+                                        coopmatKHRUseValid = true;
                                     }
                                 }
                             }
     // for construction of sampler types
     TType(const TSampler& sampler, TStorageQualifier q = EvqUniform, TArraySizes* as = nullptr) :
-        basicType(EbtSampler), vectorSize(1), matrixCols(0), matrixRows(0), vector1(false), coopmatNV(false), coopmatKHR(false), coopmatKHRuse(-1),
+        basicType(EbtSampler), vectorSize(1u), matrixCols(0u), matrixRows(0u), vector1(false), coopmatNV(false), coopmatKHR(false), coopmatKHRuse(0), coopmatKHRUseValid(false),
         arraySizes(as), structure(nullptr), fieldName(nullptr), typeName(nullptr),
         sampler(sampler), typeParameters(nullptr), spirvType(nullptr)
     {
@@ -1655,14 +1679,15 @@
                                     } else if (isCoopMat()) {
                                         coopmatNV = false;
                                         coopmatKHR = false;
-                                        coopmatKHRuse = -1;
+                                        coopmatKHRuse = 0;
+                                        coopmatKHRUseValid = false;
                                         typeParameters = nullptr;
                                     }
                                 }
                             }
     // for making structures, ...
     TType(TTypeList* userDef, const TString& n) :
-                            basicType(EbtStruct), vectorSize(1), matrixCols(0), matrixRows(0), vector1(false), coopmatNV(false), coopmatKHR(false), coopmatKHRuse(-1),
+                            basicType(EbtStruct), vectorSize(1), matrixCols(0), matrixRows(0), vector1(false), coopmatNV(false), coopmatKHR(false), coopmatKHRuse(0), coopmatKHRUseValid(false),
                             arraySizes(nullptr), structure(userDef), fieldName(nullptr), typeParameters(nullptr),
                             spirvType(nullptr)
                             {
@@ -1672,7 +1697,7 @@
                             }
     // For interface blocks
     TType(TTypeList* userDef, const TString& n, const TQualifier& q) :
-                            basicType(EbtBlock), vectorSize(1), matrixCols(0), matrixRows(0), vector1(false), coopmatNV(false), coopmatKHR(false), coopmatKHRuse(-1),
+                            basicType(EbtBlock), vectorSize(1), matrixCols(0), matrixRows(0), vector1(false), coopmatNV(false), coopmatKHR(false), coopmatKHRuse(0), coopmatKHRUseValid(false),
                             qualifier(q), arraySizes(nullptr), structure(userDef), fieldName(nullptr), typeParameters(nullptr),
                             spirvType(nullptr)
                             {
@@ -1681,7 +1706,7 @@
                             }
     // for block reference (first parameter must be EbtReference)
     explicit TType(TBasicType t, const TType &p, const TString& n) :
-                            basicType(t), vectorSize(1), matrixCols(0), matrixRows(0), vector1(false), coopmatNV(false), coopmatKHR(false), coopmatKHRuse(-1),
+                            basicType(t), vectorSize(1), matrixCols(0), matrixRows(0), vector1(false), coopmatNV(false), coopmatKHR(false), coopmatKHRuse(0), coopmatKHRUseValid(false),
                             arraySizes(nullptr), structure(nullptr), fieldName(nullptr), typeName(nullptr), typeParameters(nullptr),
                             spirvType(nullptr)
                             {
@@ -1719,6 +1744,7 @@
         coopmatNV = copyOf.isCoopMatNV();
         coopmatKHR = copyOf.isCoopMatKHR();
         coopmatKHRuse = copyOf.coopmatKHRuse;
+        coopmatKHRUseValid = copyOf.coopmatKHRUseValid;
     }
 
     // Make complete copy of the whole type graph rooted at 'copyOf'.
@@ -1748,7 +1774,7 @@
 
     void makeVector() { vector1 = true; }
 
-    virtual void hideMember() { basicType = EbtVoid; vectorSize = 1; }
+    virtual void hideMember() { basicType = EbtVoid; vectorSize = 1u; }
     virtual bool hiddenMember() const { return basicType == EbtVoid; }
 
     virtual void setFieldName(const TString& n) { fieldName = NewPoolTString(n.c_str()); }
@@ -1788,9 +1814,9 @@
     virtual       TQualifier& getQualifier()       { return qualifier; }
     virtual const TQualifier& getQualifier() const { return qualifier; }
 
-    virtual int getVectorSize() const { return vectorSize; }  // returns 1 for either scalar or vector of size 1, valid for both
-    virtual int getMatrixCols() const { return matrixCols; }
-    virtual int getMatrixRows() const { return matrixRows; }
+    virtual int getVectorSize() const { return static_cast<int>(vectorSize); }  // returns 1 for either scalar or vector of size 1, valid for both
+    virtual int getMatrixCols() const { return static_cast<int>(matrixCols); }
+    virtual int getMatrixRows() const { return static_cast<int>(matrixRows); }
     virtual int getOuterArraySize()  const { return arraySizes->getOuterSize(); }
     virtual TIntermTyped*  getOuterArrayNode() const { return arraySizes->getOuterNode(); }
     virtual int getCumulativeArraySize()  const { return arraySizes->getCumulativeSize(); }
@@ -1805,7 +1831,7 @@
     virtual bool isScalar() const { return ! isVector() && ! isMatrix() && ! isStruct() && ! isArray(); }
     virtual bool isScalarOrVec1() const { return isScalar() || vector1; }
     virtual bool isScalarOrVector() const { return !isMatrix() && !isStruct() && !isArray(); }
-    virtual bool isVector() const { return vectorSize > 1 || vector1; }
+    virtual bool isVector() const { return vectorSize > 1u || vector1; }
     virtual bool isMatrix() const { return matrixCols ? true : false; }
     virtual bool isArray()  const { return arraySizes != nullptr; }
     virtual bool isSizedArray() const { return isArray() && arraySizes->isSized(); }
@@ -1855,7 +1881,10 @@
     bool isCoopMatKHR() const { return coopmatKHR; }
     bool isReference() const { return getBasicType() == EbtReference; }
     bool isSpirvType() const { return getBasicType() == EbtSpirvType; }
-    int getCoopMatKHRuse() const { return coopmatKHRuse; }
+    int getCoopMatKHRuse() const { return static_cast<int>(coopmatKHRuse); }
+
+    bool isTensorLayoutNV() const { return getBasicType() == EbtTensorLayoutNV; }
+    bool isTensorViewNV() const { return getBasicType() == EbtTensorViewNV; }
 
     // return true if this type contains any subtype which satisfies the given predicate.
     template <typename P>
@@ -2082,6 +2111,8 @@
         case EbtString:            return "string";
         case EbtSpirvType:         return "spirv_type";
         case EbtCoopmat:           return "coopmat";
+        case EbtTensorLayoutNV:    return "tensorLayoutNV";
+        case EbtTensorViewNV:      return "tensorViewNV";
         default:                   return "unknown type";
         }
     }
@@ -2096,7 +2127,7 @@
         const auto appendInt  = [&](int i)          { typeString.append(std::to_string(i).c_str()); };
 
         if (getQualifiers) {
-          if (qualifier.hasSprivDecorate())
+          if (qualifier.hasSpirvDecorate())
             appendStr(qualifier.getSpirvDecorateQualifierString().c_str());
 
           if (qualifier.hasLayout()) {
@@ -2190,6 +2221,10 @@
               
               if (qualifier.layoutShaderRecord)
                 appendStr(" shaderRecordNV");
+              if (qualifier.layoutFullQuads)
+                appendStr(" full_quads");
+              if (qualifier.layoutQuadDeriv)
+                appendStr(" quad_derivatives");
               if (qualifier.layoutHitObjectShaderRecordNV)
                 appendStr(" hitobjectshaderrecordnv");
 
@@ -2388,6 +2423,14 @@
                 appendStr(" ");
                 appendStr("coopmat");
               }
+              if (isTensorLayoutNV()) {
+                appendStr(" ");
+                appendStr("tensorLayoutNV");
+              }
+              if (isTensorViewNV()) {
+                appendStr(" ");
+                appendStr("tensorViewNV");
+              }
 
               appendStr("<");
               for (int i = 0; i < (int)typeParameters->arraySizes->getNumDims(); ++i) {
@@ -2395,10 +2438,6 @@
                 if (i != (int)typeParameters->arraySizes->getNumDims() - 1)
                   appendStr(", ");
               }
-              if (coopmatKHRuse != -1) {
-                  appendStr(", ");
-                  appendInt(coopmatKHRuse);
-              }
               appendStr(">");
             }
             if (getPrecision && qualifier.precision != EpqNone) {
@@ -2464,11 +2503,14 @@
     void setStruct(TTypeList* s) { assert(isStruct()); structure = s; }
     TTypeList* getWritableStruct() const { assert(isStruct()); return structure; }  // This should only be used when known to not be sharing with other threads
     void setBasicType(const TBasicType& t) { basicType = t; }
-    void setVectorSize(int s) { vectorSize = s; }
+    void setVectorSize(int s) {
+        assert(s >= 0);
+        vectorSize = static_cast<uint32_t>(s) & 0b1111;
+    }
 
     int computeNumComponents() const
     {
-        int components = 0;
+        uint32_t components = 0;
 
         if (getBasicType() == EbtStruct || getBasicType() == EbtBlock) {
             for (TTypeList::const_iterator tl = getStruct()->begin(); tl != getStruct()->end(); tl++)
@@ -2482,7 +2524,7 @@
             components *= arraySizes->getCumulativeSize();
         }
 
-        return components;
+        return static_cast<int>(components);
     }
 
     // append this type's mangled name to the passed in 'name'
@@ -2689,7 +2731,8 @@
         if (isCoopMatKHR() && right.isCoopMatKHR()) {
             return ((getBasicType() == right.getBasicType()) || (getBasicType() == EbtCoopmat) ||
                     (right.getBasicType() == EbtCoopmat)) &&
-                   typeParameters == nullptr && right.typeParameters != nullptr;
+                   ((typeParameters == nullptr && right.typeParameters != nullptr) ||
+                    (typeParameters != nullptr && right.typeParameters == nullptr));
         }
         return false;
     }
@@ -2720,24 +2763,44 @@
         return rv;
     }
 
+    bool tensorParameterOK(const TType& right) const
+    {
+        if (isTensorLayoutNV()) {
+            return right.isTensorLayoutNV() && right.typeParameters == nullptr && typeParameters != nullptr;
+        }
+        if (isTensorViewNV()) {
+            return right.isTensorViewNV() && right.typeParameters == nullptr && typeParameters != nullptr;
+        }
+        return false;
+    }
+
     bool sameCoopMatUse(const TType &right) const {
         return coopmatKHRuse == right.coopmatKHRuse;
     }
 
-    bool sameCoopMatShapeAndUse(const TType &right) const
+    bool sameCoopMatShape(const TType &right) const
     {
         if (!isCoopMat() || !right.isCoopMat() || isCoopMatKHR() != right.isCoopMatKHR())
             return false;
 
+        // Skip bit width type parameter (first array size) for coopmatNV
+        int firstArrayDimToCompare = isCoopMatNV() ? 1 : 0;
+        int lastArrayDimToCompare = typeParameters->arraySizes->getNumDims() - (isCoopMatKHR() ? 1 : 0);
+        for (int i = firstArrayDimToCompare; i < lastArrayDimToCompare; ++i) {
+            if (typeParameters->arraySizes->getDimSize(i) != right.typeParameters->arraySizes->getDimSize(i))
+                return false;
+        }
+        return true;
+    }
+
+    bool sameCoopMatShapeAndUse(const TType &right) const
+    {
+        if (!sameCoopMatShape(right))
+            return false;
+
         if (coopmatKHRuse != right.coopmatKHRuse)
             return false;
 
-        // Skip bit width type parameter (first array size) for coopmatNV
-        int firstArrayDimToCompare = isCoopMatNV() ? 1 : 0;
-        for (int i = firstArrayDimToCompare; i < typeParameters->arraySizes->getNumDims(); ++i) {
-            if (typeParameters->arraySizes->getDimSize(i) != right.typeParameters->arraySizes->getDimSize(i))
-                return false;
-        }
         return true;
     }
 
@@ -2795,6 +2858,9 @@
             typeParameters = new TTypeParameters;
             typeParameters->arraySizes = new TArraySizes;
             *typeParameters->arraySizes = *copyOf.typeParameters->arraySizes;
+            if (copyOf.typeParameters->spirvType) {
+                *typeParameters->spirvType = *copyOf.typeParameters->spirvType;
+            }
             typeParameters->basicType = copyOf.basicType;
         }
 
@@ -2825,9 +2891,9 @@
     void buildMangledName(TString&) const;
 
     TBasicType basicType : 8;
-    int vectorSize       : 4;  // 1 means either scalar or 1-component vector; see vector1 to disambiguate.
-    int matrixCols       : 4;
-    int matrixRows       : 4;
+    uint32_t vectorSize       : 4;  // 1 means either scalar or 1-component vector; see vector1 to disambiguate.
+    uint32_t matrixCols       : 4;
+    uint32_t matrixRows       : 4;
     bool vector1         : 1;  // Backward-compatible tracking of a 1-component vector distinguished from a scalar.
                                // GLSL 4.5 never has a 1-component vector; so this will always be false until such
                                // functionality is added.
@@ -2835,7 +2901,8 @@
                                // from a scalar.
     bool coopmatNV       : 1;
     bool coopmatKHR      : 1;
-    int coopmatKHRuse    : 4;  // Accepts one of three values: 0, 1, 2 (gl_MatrixUseA, gl_MatrixUseB, gl_MatrixUseAccumulator)
+    uint32_t coopmatKHRuse    : 3;  // Accepts one of three values: 0, 1, 2 (gl_MatrixUseA, gl_MatrixUseB, gl_MatrixUseAccumulator)
+    bool coopmatKHRUseValid   : 1;  // True if coopmatKHRuse has been set
     TQualifier qualifier;
 
     TArraySizes* arraySizes;    // nullptr unless an array; can be shared across types
diff --git a/glslang/Include/glslang_c_interface.h b/glslang/Include/glslang_c_interface.h
index 7fa1a05..bfe0652 100644
--- a/glslang/Include/glslang_c_interface.h
+++ b/glslang/Include/glslang_c_interface.h
@@ -37,9 +37,20 @@
 #include <stdlib.h>
 
 #include "glslang_c_shader_types.h"
+#include "visibility.h"
 
 typedef struct glslang_shader_s glslang_shader_t;
 typedef struct glslang_program_s glslang_program_t;
+typedef struct glslang_mapper_s glslang_mapper_t;
+typedef struct glslang_resolver_s glslang_resolver_t;
+
+/* Version counterpart */
+typedef struct glslang_version_s {
+    int major;
+    int minor;
+    int patch;
+    const char* flavor;
+} glslang_version_t;
 
 /* TLimits counterpart */
 typedef struct glslang_limits_s {
@@ -227,27 +238,14 @@
     bool emit_nonsemantic_shader_debug_info;
     bool emit_nonsemantic_shader_debug_source;
     bool compile_only;
+    bool optimize_allow_expanded_id_bound;
 } glslang_spv_options_t;
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-#ifdef GLSLANG_IS_SHARED_LIBRARY
-    #ifdef _WIN32
-        #ifdef GLSLANG_EXPORTING
-            #define GLSLANG_EXPORT __declspec(dllexport)
-        #else
-            #define GLSLANG_EXPORT __declspec(dllimport)
-        #endif
-    #elif __GNUC__ >= 4
-        #define GLSLANG_EXPORT __attribute__((visibility("default")))
-    #endif
-#endif // GLSLANG_IS_SHARED_LIBRARY
-
-#ifndef GLSLANG_EXPORT
-#define GLSLANG_EXPORT
-#endif
+GLSLANG_EXPORT void glslang_get_version(glslang_version_t* version);
 
 GLSLANG_EXPORT int glslang_initialize_process(void);
 GLSLANG_EXPORT void glslang_finalize_process(void);
@@ -259,9 +257,13 @@
 GLSLANG_EXPORT void glslang_shader_shift_binding_for_set(glslang_shader_t* shader, glslang_resource_type_t res, unsigned int base, unsigned int set);
 GLSLANG_EXPORT void glslang_shader_set_options(glslang_shader_t* shader, int options); // glslang_shader_options_t
 GLSLANG_EXPORT void glslang_shader_set_glsl_version(glslang_shader_t* shader, int version);
+GLSLANG_EXPORT void glslang_shader_set_default_uniform_block_set_and_binding(glslang_shader_t* shader, unsigned int set, unsigned int binding);
+GLSLANG_EXPORT void glslang_shader_set_default_uniform_block_name(glslang_shader_t* shader, const char *name);
+GLSLANG_EXPORT void glslang_shader_set_resource_set_binding(glslang_shader_t* shader, const char *const *bindings, unsigned int num_bindings);
 GLSLANG_EXPORT int glslang_shader_preprocess(glslang_shader_t* shader, const glslang_input_t* input);
 GLSLANG_EXPORT int glslang_shader_parse(glslang_shader_t* shader, const glslang_input_t* input);
 GLSLANG_EXPORT const char* glslang_shader_get_preprocessed_code(glslang_shader_t* shader);
+GLSLANG_EXPORT void glslang_shader_set_preprocessed_code(glslang_shader_t* shader, const char* code);
 GLSLANG_EXPORT const char* glslang_shader_get_info_log(glslang_shader_t* shader);
 GLSLANG_EXPORT const char* glslang_shader_get_info_debug_log(glslang_shader_t* shader);
 
@@ -272,6 +274,7 @@
 GLSLANG_EXPORT void glslang_program_add_source_text(glslang_program_t* program, glslang_stage_t stage, const char* text, size_t len);
 GLSLANG_EXPORT void glslang_program_set_source_file(glslang_program_t* program, glslang_stage_t stage, const char* file);
 GLSLANG_EXPORT int glslang_program_map_io(glslang_program_t* program);
+GLSLANG_EXPORT int glslang_program_map_io_with_resolver_and_mapper(glslang_program_t* program, glslang_resolver_t* resolver, glslang_mapper_t* mapper);
 GLSLANG_EXPORT void glslang_program_SPIRV_generate(glslang_program_t* program, glslang_stage_t stage);
 GLSLANG_EXPORT void glslang_program_SPIRV_generate_with_options(glslang_program_t* program, glslang_stage_t stage, glslang_spv_options_t* spv_options);
 GLSLANG_EXPORT size_t glslang_program_SPIRV_get_size(glslang_program_t* program);
@@ -281,6 +284,12 @@
 GLSLANG_EXPORT const char* glslang_program_get_info_log(glslang_program_t* program);
 GLSLANG_EXPORT const char* glslang_program_get_info_debug_log(glslang_program_t* program);
 
+GLSLANG_EXPORT glslang_mapper_t* glslang_glsl_mapper_create();
+GLSLANG_EXPORT void glslang_glsl_mapper_delete(glslang_mapper_t* mapper);
+
+GLSLANG_EXPORT glslang_resolver_t* glslang_glsl_resolver_create(glslang_program_t* program, glslang_stage_t stage);
+GLSLANG_EXPORT void glslang_glsl_resolver_delete(glslang_resolver_t* resolver);
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/glslang/Include/glslang_c_shader_types.h b/glslang/Include/glslang_c_shader_types.h
index 9bc2114..d0bcced 100644
--- a/glslang/Include/glslang_c_shader_types.h
+++ b/glslang/Include/glslang_c_shader_types.h
@@ -118,8 +118,9 @@
     GLSLANG_TARGET_VULKAN_1_1 = (1 << 22) | (1 << 12),
     GLSLANG_TARGET_VULKAN_1_2 = (1 << 22) | (2 << 12),
     GLSLANG_TARGET_VULKAN_1_3 = (1 << 22) | (3 << 12),
+    GLSLANG_TARGET_VULKAN_1_4 = (1 << 22) | (4 << 12),
     GLSLANG_TARGET_OPENGL_450 = 450,
-    LAST_ELEMENT_MARKER(GLSLANG_TARGET_CLIENT_VERSION_COUNT = 5),
+    LAST_ELEMENT_MARKER(GLSLANG_TARGET_CLIENT_VERSION_COUNT = 6),
 } glslang_target_client_version_t;
 
 /* SH_TARGET_LanguageVersion counterpart */
@@ -157,23 +158,26 @@
 
 /* EShMessages counterpart */
 typedef enum {
-    GLSLANG_MSG_DEFAULT_BIT = 0,
-    GLSLANG_MSG_RELAXED_ERRORS_BIT = (1 << 0),
-    GLSLANG_MSG_SUPPRESS_WARNINGS_BIT = (1 << 1),
-    GLSLANG_MSG_AST_BIT = (1 << 2),
-    GLSLANG_MSG_SPV_RULES_BIT = (1 << 3),
-    GLSLANG_MSG_VULKAN_RULES_BIT = (1 << 4),
-    GLSLANG_MSG_ONLY_PREPROCESSOR_BIT = (1 << 5),
-    GLSLANG_MSG_READ_HLSL_BIT = (1 << 6),
-    GLSLANG_MSG_CASCADING_ERRORS_BIT = (1 << 7),
-    GLSLANG_MSG_KEEP_UNCALLED_BIT = (1 << 8),
-    GLSLANG_MSG_HLSL_OFFSETS_BIT = (1 << 9),
-    GLSLANG_MSG_DEBUG_INFO_BIT = (1 << 10),
+    GLSLANG_MSG_DEFAULT_BIT                 = 0,
+    GLSLANG_MSG_RELAXED_ERRORS_BIT          = (1 << 0),
+    GLSLANG_MSG_SUPPRESS_WARNINGS_BIT       = (1 << 1),
+    GLSLANG_MSG_AST_BIT                     = (1 << 2),
+    GLSLANG_MSG_SPV_RULES_BIT               = (1 << 3),
+    GLSLANG_MSG_VULKAN_RULES_BIT            = (1 << 4),
+    GLSLANG_MSG_ONLY_PREPROCESSOR_BIT       = (1 << 5),
+    GLSLANG_MSG_READ_HLSL_BIT               = (1 << 6),
+    GLSLANG_MSG_CASCADING_ERRORS_BIT        = (1 << 7),
+    GLSLANG_MSG_KEEP_UNCALLED_BIT           = (1 << 8),
+    GLSLANG_MSG_HLSL_OFFSETS_BIT            = (1 << 9),
+    GLSLANG_MSG_DEBUG_INFO_BIT              = (1 << 10),
     GLSLANG_MSG_HLSL_ENABLE_16BIT_TYPES_BIT = (1 << 11),
-    GLSLANG_MSG_HLSL_LEGALIZATION_BIT = (1 << 12),
-    GLSLANG_MSG_HLSL_DX9_COMPATIBLE_BIT = (1 << 13),
-    GLSLANG_MSG_BUILTIN_SYMBOL_TABLE_BIT = (1 << 14),
-    GLSLANG_MSG_ENHANCED = (1 << 15),
+    GLSLANG_MSG_HLSL_LEGALIZATION_BIT       = (1 << 12),
+    GLSLANG_MSG_HLSL_DX9_COMPATIBLE_BIT     = (1 << 13),
+    GLSLANG_MSG_BUILTIN_SYMBOL_TABLE_BIT    = (1 << 14),
+    GLSLANG_MSG_ENHANCED                    = (1 << 15),
+    GLSLANG_MSG_ABSOLUTE_PATH               = (1 << 16),
+    GLSLANG_MSG_DISPLAY_ERROR_COLUMN        = (1 << 17),
+    GLSLANG_MSG_LINK_TIME_OPTIMIZATION_BIT  = (1 << 18),
     LAST_ELEMENT_MARKER(GLSLANG_MSG_COUNT),
 } glslang_messages_t;
 
diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h
index 9d311d6..e574b80 100644
--- a/glslang/Include/intermediate.h
+++ b/glslang/Include/intermediate.h
@@ -1,7 +1,7 @@
 //
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2016 LunarG, Inc.
-// Copyright (C) 2017 ARM Limited.
+// Copyright (C) 2017, 2022-2024 Arm Limited.
 // Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
 //
 // All rights reserved.
@@ -48,14 +48,9 @@
 #ifndef __INTERMEDIATE_H
 #define __INTERMEDIATE_H
 
-#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
-
-#include "../Include/Common.h"
-#include "../Include/Types.h"
-#include "../Include/ConstantUnion.h"
+#include "Common.h"
+#include "Types.h"
+#include "ConstantUnion.h"
 
 namespace glslang {
 
@@ -92,189 +87,9 @@
 
     EOpDeclare,        // Used by debugging to force declaration of variable in correct scope
 
-    // (u)int* -> bool
-    EOpConvInt8ToBool,
-    EOpConvUint8ToBool,
-    EOpConvInt16ToBool,
-    EOpConvUint16ToBool,
-    EOpConvIntToBool,
-    EOpConvUintToBool,
-    EOpConvInt64ToBool,
-    EOpConvUint64ToBool,
-
-    // float* -> bool
-    EOpConvFloat16ToBool,
-    EOpConvFloatToBool,
-    EOpConvDoubleToBool,
-
-    // bool -> (u)int*
-    EOpConvBoolToInt8,
-    EOpConvBoolToUint8,
-    EOpConvBoolToInt16,
-    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,
-    EOpConvInt16ToInt64,
-    EOpConvInt16ToUint8,
-    EOpConvInt16ToUint16,
-    EOpConvInt16ToUint,
-    EOpConvInt16ToUint64,
-
-    // uint16_t -> (u)int*
-    EOpConvUint16ToInt8,
-    EOpConvUint16ToInt16,
-    EOpConvUint16ToInt,
-    EOpConvUint16ToInt64,
-    EOpConvUint16ToUint8,
-    EOpConvUint16ToUint,
-    EOpConvUint16ToUint64,
-
-    // int16_t -> float*
-    EOpConvInt16ToFloat16,
-    EOpConvInt16ToFloat,
-    EOpConvInt16ToDouble,
-
-    // uint16_t -> float*
-    EOpConvUint16ToFloat16,
-    EOpConvUint16ToFloat,
-    EOpConvUint16ToDouble,
-
-    // 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,
+    // Operator used to represent all conversions between int, float, and bool.
+    // The specific types are inferred from TBasicType.
+    EOpConvNumeric,
 
     // uint64_t <-> pointer
     EOpConvUint64ToPtr,
@@ -511,6 +326,8 @@
     EOpSubgroupShuffleXor,
     EOpSubgroupShuffleUp,
     EOpSubgroupShuffleDown,
+    EOpSubgroupRotate,
+    EOpSubgroupClusteredRotate,
     EOpSubgroupAdd,
     EOpSubgroupMul,
     EOpSubgroupMin,
@@ -543,6 +360,8 @@
     EOpSubgroupQuadSwapHorizontal,
     EOpSubgroupQuadSwapVertical,
     EOpSubgroupQuadSwapDiagonal,
+    EOpSubgroupQuadAll,
+    EOpSubgroupQuadAny,
 
     EOpSubgroupPartition,
     EOpSubgroupPartitionedAdd,
@@ -629,7 +448,24 @@
     EOpCooperativeMatrixMulAdd,
     EOpCooperativeMatrixLoadNV,
     EOpCooperativeMatrixStoreNV,
+    EOpCooperativeMatrixLoadTensorNV,
+    EOpCooperativeMatrixStoreTensorNV,
     EOpCooperativeMatrixMulAddNV,
+    EOpCooperativeMatrixReduceNV,
+    EOpCooperativeMatrixPerElementOpNV,
+    EOpCooperativeMatrixTransposeNV,
+
+    EOpCreateTensorLayoutNV,
+    EOpTensorLayoutSetBlockSizeNV,
+    EOpTensorLayoutSetDimensionNV,
+    EOpTensorLayoutSetStrideNV,
+    EOpTensorLayoutSliceNV,
+    EOpTensorLayoutSetClampValueNV,
+
+    EOpCreateTensorViewNV,
+    EOpTensorViewSetDimensionNV,
+    EOpTensorViewSetStrideNV,
+    EOpTensorViewSetClipNV,
 
     EOpBeginInvocationInterlock, // Fragment only
     EOpEndInvocationInterlock, // Fragment only
@@ -1092,6 +928,10 @@
     EOpWaveActiveCountBits,              // Will decompose to subgroupBallotBitCount(subgroupBallot()).
     EOpWavePrefixCountBits,              // Will decompose to subgroupBallotInclusiveBitCount(subgroupBallot()).
 
+    // GL_EXT_expect_assume
+    EOpAssumeEXT,
+    EOpExpectEXT,
+
     // Shader Clock Ops
     EOpReadClockSubgroupKHR,
     EOpReadClockDeviceKHR,
@@ -1108,8 +948,18 @@
     EOpImageBoxFilterQCOM,
     EOpImageBlockMatchSADQCOM,
     EOpImageBlockMatchSSDQCOM,
+
+    // Image processing2
+    EOpImageBlockMatchWindowSSDQCOM,
+    EOpImageBlockMatchWindowSADQCOM,
+    EOpImageBlockMatchGatherSSDQCOM,
+    EOpImageBlockMatchGatherSADQCOM,
 };
 
+inline bool IsOpNumericConv(const TOperator op) {
+    return op == EOpConvNumeric;
+}
+
 enum TLinkType {
     ELinkNone,
     ELinkExport,
@@ -1347,11 +1197,19 @@
     // if symbol is initialized as symbol(sym), the memory comes from the pool allocator of sym. If sym comes from
     // per process threadPoolAllocator, then it causes increased memory usage per compile
     // it is essential to use "symbol = sym" to assign to symbol
-    TIntermSymbol(long long i, const TString& n, const TType& t)
-        : TIntermTyped(t), id(i), flattenSubset(-1), constSubtree(nullptr) { name = n; }
+    TIntermSymbol(long long i, const TString& n, EShLanguage s, const TType& t, const TString* mn = nullptr)
+        : TIntermTyped(t), id(i), flattenSubset(-1), stage(s), constSubtree(nullptr) { 
+        name = n;
+        if (mn) {
+            mangledName = *mn;
+        } else {
+            mangledName = n;
+        }
+    }
     virtual long long getId() const { return id; }
     virtual void changeId(long long i) { id = i; }
     virtual const TString& getName() const { return name; }
+    virtual const TString& getMangledName() const { return mangledName; }
     virtual void traverse(TIntermTraverser*);
     virtual       TIntermSymbol* getAsSymbolNode()       { return this; }
     virtual const TIntermSymbol* getAsSymbolNode() const { return this; }
@@ -1367,11 +1225,14 @@
     // This is meant for cases where a node has already been constructed, and
     // later on, it becomes necessary to switch to a different symbol.
     virtual void switchId(long long newId) { id = newId; }
+    EShLanguage getStage() const { return stage; }
 
 protected:
     long long id;                // the unique id of the symbol this node represents
     int flattenSubset;           // how deeply the flattened object rooted at id has been dereferenced
     TString name;                // the name of the symbol this node represents
+    EShLanguage stage;
+    TString mangledName;         // mangled function name, or a copy of name if not a function
     TConstUnionArray constArray; // if the symbol is a front-end compile-time constant, this is its value
     TIntermTyped* constSubtree;
 };
@@ -1685,8 +1546,12 @@
 //
 class TIntermAggregate : public TIntermOperator {
 public:
-    TIntermAggregate() : TIntermOperator(EOpNull), userDefined(false), pragmaTable(nullptr) { }
-    TIntermAggregate(TOperator o) : TIntermOperator(o), pragmaTable(nullptr) { }
+    TIntermAggregate() : TIntermOperator(EOpNull), userDefined(false), pragmaTable(nullptr) { 
+        endLoc.init();
+    }
+    TIntermAggregate(TOperator o) : TIntermOperator(o), pragmaTable(nullptr) {
+        endLoc.init();
+    }
     ~TIntermAggregate() { delete pragmaTable; }
     virtual       TIntermAggregate* getAsAggregate()       { return this; }
     virtual const TIntermAggregate* getAsAggregate() const { return this; }
@@ -1710,6 +1575,9 @@
     void setSpirvInstruction(const TSpirvInstruction& inst) { spirvInst = inst; }
     const TSpirvInstruction& getSpirvInstruction() const { return spirvInst; }
 
+    void setEndLoc(TSourceLoc loc) { endLoc = loc; }
+    TSourceLoc getEndLoc() const { return endLoc; }
+
     void setLinkType(TLinkType l) { linkType = l; }
     TLinkType getLinkType() const { return linkType; }
 protected:
@@ -1724,6 +1592,10 @@
     TPragmaTable* pragmaTable;
     TSpirvInstruction spirvInst;
     TLinkType linkType = ELinkNone;
+
+    // Marking the end source location of the aggregate.
+    // This is currently only set for a compound statement or a function body, pointing to '}'.
+    TSourceLoc endLoc;
 };
 
 //
diff --git a/OGLCompilersDLL/InitializeDll.cpp b/glslang/Include/visibility.h
similarity index 68%
copy from OGLCompilersDLL/InitializeDll.cpp
copy to glslang/Include/visibility.h
index ab3762e..9bb8f3f 100644
--- a/OGLCompilersDLL/InitializeDll.cpp
+++ b/glslang/Include/visibility.h
@@ -1,5 +1,6 @@
 //
-// Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
+// Copyright (C) 2023 LunarG, Inc.
+//
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without
@@ -31,7 +32,23 @@
 // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 //
+#ifdef GLSLANG_IS_SHARED_LIBRARY
+    #ifdef _WIN32
+        #ifdef GLSLANG_EXPORTING
+            #define GLSLANG_EXPORT __declspec(dllexport)
+        #else
+            #define GLSLANG_EXPORT __declspec(dllimport)
+        #endif
+    #elif __GNUC__ >= 4
+        #define GLSLANG_EXPORT __attribute__((visibility("default")))
+    #endif
+#endif // GLSLANG_IS_SHARED_LIBRARY
 
-namespace glslang {
+#ifndef GLSLANG_EXPORT
+#define GLSLANG_EXPORT
+#endif
 
-} // end namespace glslang
+// Symbols marked with this macro are only meant for public use by the test suite
+// and do not appear in publicly installed headers. They are not considered to be
+// part of the glslang library ABI.
+#define GLSLANG_EXPORT_FOR_TESTS GLSLANG_EXPORT
diff --git a/glslang/MachineIndependent/Constant.cpp b/glslang/MachineIndependent/Constant.cpp
index 8acf9e5..2878be8 100644
--- a/glslang/MachineIndependent/Constant.cpp
+++ b/glslang/MachineIndependent/Constant.cpp
@@ -490,6 +490,163 @@
 
     // Process component-wise operations
     for (int i = 0; i < objectSize; i++) {
+        // First read the value and convert to i64/u64/f64/bool, then convert
+        // to the destination type (still 64b), then convert down to the
+        // destination size.
+        if (IsOpNumericConv(op)) {
+            enum ConvType { CONV_FLOAT, CONV_INT, CONV_UINT, CONV_BOOL };
+            ConvType srcType = CONV_UINT, dstType = CONV_UINT;
+            double valf = 0.0;
+            uint64_t valu = 0;
+            int64_t vali = 0;
+            bool valb = false;
+            switch (getType().getBasicType()) {
+            case EbtDouble:
+            case EbtFloat16:
+            case EbtFloat:
+                valf = unionArray[i].getDConst();
+                srcType = CONV_FLOAT;
+                break;
+            case EbtInt8:
+                vali = unionArray[i].getI8Const();
+                srcType = CONV_INT;
+                break;
+            case EbtInt16:
+                vali = unionArray[i].getI16Const();
+                srcType = CONV_INT;
+                break;
+            case EbtInt:
+                vali = unionArray[i].getIConst();
+                srcType = CONV_INT;
+                break;
+            case EbtInt64:
+                vali = unionArray[i].getI64Const();
+                srcType = CONV_INT;
+                break;
+            case EbtUint8:
+                valu = unionArray[i].getU8Const();
+                srcType = CONV_UINT;
+                break;
+            case EbtUint16:
+                valu = unionArray[i].getU16Const();
+                srcType = CONV_UINT;
+                break;
+            case EbtUint:
+                valu = unionArray[i].getUConst();
+                srcType = CONV_UINT;
+                break;
+            case EbtUint64:
+                valu = unionArray[i].getU64Const();
+                srcType = CONV_UINT;
+                break;
+            case EbtBool:
+                valb = unionArray[i].getBConst();
+                srcType = CONV_BOOL;
+                break;
+            default:
+                assert(0);
+                break;
+            }
+
+            switch (returnType.getBasicType()) {
+            case EbtDouble:
+            case EbtFloat16:
+            case EbtFloat:
+                dstType = CONV_FLOAT;
+                break;
+            case EbtInt8:
+            case EbtInt16:
+            case EbtInt:
+            case EbtInt64:
+                dstType = CONV_INT;
+                break;
+            case EbtUint8:
+            case EbtUint16:
+            case EbtUint:
+            case EbtUint64:
+                dstType = CONV_UINT;
+                break;
+            case EbtBool:
+                dstType = CONV_BOOL;
+                break;
+            default:
+                assert(0);
+                break;
+            }
+            if (dstType == CONV_BOOL) {
+                switch (srcType) {
+                case CONV_FLOAT:
+                    valb = (valf != 0.0); break;
+                case CONV_INT:
+                    valb = (vali != 0.0); break;
+                case CONV_UINT:
+                    valb = (valu != 0.0); break;
+                default:
+                    break;
+                }
+            } else if (dstType == CONV_FLOAT) {
+                switch (srcType) {
+                case CONV_BOOL:
+                    valf = (double)valb; break;
+                case CONV_INT:
+                    valf = (double)vali; break;
+                case CONV_UINT:
+                    valf = (double)valu; break;
+                default:
+                    break;
+                }
+            } else if (dstType == CONV_INT) {
+                switch (srcType) {
+                case CONV_BOOL:
+                    vali = (int64_t)valb; break;
+                case CONV_FLOAT:
+                    vali = (int64_t)valf; break;
+                case CONV_UINT:
+                    vali = (int64_t)valu; break;
+                default:
+                    break;
+                }
+            } else if (dstType == CONV_UINT) {
+                switch (srcType) {
+                case CONV_BOOL:
+                    valu = (uint64_t)valb; break;
+                case CONV_FLOAT:
+                    valu = (uint64_t)valf; break;
+                case CONV_INT:
+                    valu = (uint64_t)vali; break;
+                default:
+                    break;
+                }
+            }
+            switch (returnType.getBasicType()) {
+            case EbtDouble:
+            case EbtFloat16:
+            case EbtFloat:
+                newConstArray[i].setDConst(valf); break;
+            case EbtInt8:
+                newConstArray[i].setI8Const(static_cast<int8_t>(vali)); break;
+            case EbtInt16:
+                newConstArray[i].setI16Const(static_cast<int16_t>(vali)); break;
+            case EbtInt:
+                newConstArray[i].setIConst(static_cast<int32_t>(vali)); break;
+            case EbtInt64:
+                newConstArray[i].setI64Const(vali); break;
+            case EbtUint8:
+                newConstArray[i].setU8Const(static_cast<uint8_t>(valu)); break;
+            case EbtUint16:
+                newConstArray[i].setU16Const(static_cast<uint16_t>(valu)); break;
+            case EbtUint:
+                newConstArray[i].setUConst(static_cast<uint32_t>(valu)); break;
+            case EbtUint64:
+                newConstArray[i].setU64Const(valu); break;
+            case EbtBool:
+                newConstArray[i].setBConst(valb); break;
+            default:
+                assert(0);
+                break;
+            }
+            continue;
+        }
         switch (op) {
         case EOpNegative:
             switch (getType().getBasicType()) {
@@ -507,7 +664,11 @@
             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 EbtInt64: newConstArray[i].setI64Const(-unionArray[i].getI64Const()); break;
+            case EbtInt64: {
+                int64_t i64val = unionArray[i].getI64Const();
+                newConstArray[i].setI64Const(i64val == INT64_MIN ? INT64_MIN : -i64val);
+                break;
+            }
             case EbtUint64: newConstArray[i].setU64Const(static_cast<unsigned long long>(-static_cast<long long>(unionArray[i].getU64Const())));  break;
             default:
                 return nullptr;
@@ -628,286 +789,15 @@
 
         case EOpIsNan:
         {
-            newConstArray[i].setBConst(IsNan(unionArray[i].getDConst()));
+            newConstArray[i].setBConst(std::isnan(unionArray[i].getDConst()));
             break;
         }
         case EOpIsInf:
         {
-            newConstArray[i].setBConst(IsInfinity(unionArray[i].getDConst()));
+            newConstArray[i].setBConst(std::isinf(unionArray[i].getDConst()));
             break;
         }
 
-        case EOpConvIntToBool:
-            newConstArray[i].setBConst(unionArray[i].getIConst() != 0); break;
-        case EOpConvUintToBool:
-            newConstArray[i].setBConst(unionArray[i].getUConst() != 0); break;
-        case EOpConvBoolToInt:
-            newConstArray[i].setIConst(unionArray[i].getBConst()); break;
-        case EOpConvBoolToUint:
-            newConstArray[i].setUConst(unionArray[i].getBConst()); break;
-        case EOpConvIntToUint:
-            newConstArray[i].setUConst(unionArray[i].getIConst()); break;
-        case EOpConvUintToInt:
-            newConstArray[i].setIConst(unionArray[i].getUConst()); break;
-
-        case EOpConvFloatToBool:
-        case EOpConvDoubleToBool:
-            newConstArray[i].setBConst(unionArray[i].getDConst() != 0); break;
-
-        case EOpConvBoolToFloat:
-        case EOpConvBoolToDouble:
-            newConstArray[i].setDConst(unionArray[i].getBConst()); break;
-
-        case EOpConvIntToFloat:
-        case EOpConvIntToDouble:
-            newConstArray[i].setDConst(unionArray[i].getIConst()); break;
-
-        case EOpConvUintToFloat:
-        case EOpConvUintToDouble:
-            newConstArray[i].setDConst(unionArray[i].getUConst()); break;
-
-        case EOpConvDoubleToFloat:
-        case EOpConvFloatToDouble:
-            newConstArray[i].setDConst(unionArray[i].getDConst()); break;
-
-        case EOpConvFloatToUint:
-        case EOpConvDoubleToUint:
-            newConstArray[i].setUConst(static_cast<unsigned int>(unionArray[i].getDConst())); break;
-
-        case EOpConvFloatToInt:
-        case EOpConvDoubleToInt:
-            newConstArray[i].setIConst(static_cast<int>(unionArray[i].getDConst())); break;
-
-        case EOpConvInt8ToBool:
-            newConstArray[i].setBConst(unionArray[i].getI8Const() != 0); break;
-        case EOpConvUint8ToBool:
-            newConstArray[i].setBConst(unionArray[i].getU8Const() != 0); break;
-        case EOpConvInt16ToBool:
-            newConstArray[i].setBConst(unionArray[i].getI16Const() != 0); break;
-        case EOpConvUint16ToBool:
-            newConstArray[i].setBConst(unionArray[i].getU16Const() != 0); break;
-        case EOpConvInt64ToBool:
-            newConstArray[i].setBConst(unionArray[i].getI64Const() != 0); break;
-        case EOpConvUint64ToBool:
-            newConstArray[i].setBConst(unionArray[i].getI64Const() != 0); break;
-        case EOpConvFloat16ToBool:
-            newConstArray[i].setBConst(unionArray[i].getDConst() != 0); break;
-
-        case EOpConvBoolToInt8:
-            newConstArray[i].setI8Const(unionArray[i].getBConst()); break;
-        case EOpConvBoolToUint8:
-            newConstArray[i].setU8Const(unionArray[i].getBConst()); break;
-        case EOpConvBoolToInt16:
-            newConstArray[i].setI16Const(unionArray[i].getBConst()); break;
-        case EOpConvBoolToUint16:
-            newConstArray[i].setU16Const(unionArray[i].getBConst()); break;
-        case EOpConvBoolToInt64:
-            newConstArray[i].setI64Const(unionArray[i].getBConst()); break;
-        case EOpConvBoolToUint64:
-            newConstArray[i].setU64Const(unionArray[i].getBConst()); break;
-        case EOpConvBoolToFloat16:
-            newConstArray[i].setDConst(unionArray[i].getBConst()); break;
-
-        case EOpConvInt8ToInt16:
-            newConstArray[i].setI16Const(unionArray[i].getI8Const()); break;
-        case EOpConvInt8ToInt:
-            newConstArray[i].setIConst(unionArray[i].getI8Const()); break;
-        case EOpConvInt8ToInt64:
-            newConstArray[i].setI64Const(unionArray[i].getI8Const()); break;
-        case EOpConvInt8ToUint8:
-            newConstArray[i].setU8Const(unionArray[i].getI8Const()); break;
-        case EOpConvInt8ToUint16:
-            newConstArray[i].setU16Const(unionArray[i].getI8Const()); break;
-        case EOpConvInt8ToUint:
-            newConstArray[i].setUConst(unionArray[i].getI8Const()); break;
-        case EOpConvInt8ToUint64:
-            newConstArray[i].setU64Const(unionArray[i].getI8Const()); break;
-        case EOpConvUint8ToInt8:
-            newConstArray[i].setI8Const(unionArray[i].getU8Const()); break;
-        case EOpConvUint8ToInt16:
-            newConstArray[i].setI16Const(unionArray[i].getU8Const()); break;
-        case EOpConvUint8ToInt:
-            newConstArray[i].setIConst(unionArray[i].getU8Const()); break;
-        case EOpConvUint8ToInt64:
-            newConstArray[i].setI64Const(unionArray[i].getU8Const()); break;
-        case EOpConvUint8ToUint16:
-            newConstArray[i].setU16Const(unionArray[i].getU8Const()); break;
-        case EOpConvUint8ToUint:
-            newConstArray[i].setUConst(unionArray[i].getU8Const()); break;
-        case EOpConvUint8ToUint64:
-            newConstArray[i].setU64Const(unionArray[i].getU8Const()); break;
-        case EOpConvInt8ToFloat16:
-            newConstArray[i].setDConst(unionArray[i].getI8Const()); break;
-        case EOpConvInt8ToFloat:
-            newConstArray[i].setDConst(unionArray[i].getI8Const()); break;
-        case EOpConvInt8ToDouble:
-            newConstArray[i].setDConst(unionArray[i].getI8Const()); break;
-        case EOpConvUint8ToFloat16:
-            newConstArray[i].setDConst(unionArray[i].getU8Const()); break;
-        case EOpConvUint8ToFloat:
-            newConstArray[i].setDConst(unionArray[i].getU8Const()); break;
-        case EOpConvUint8ToDouble:
-            newConstArray[i].setDConst(unionArray[i].getU8Const()); break;
-
-        case EOpConvInt16ToInt8:
-            newConstArray[i].setI8Const(static_cast<signed char>(unionArray[i].getI16Const())); break;
-        case EOpConvInt16ToInt:
-            newConstArray[i].setIConst(unionArray[i].getI16Const()); break;
-        case EOpConvInt16ToInt64:
-            newConstArray[i].setI64Const(unionArray[i].getI16Const()); break;
-        case EOpConvInt16ToUint8:
-            newConstArray[i].setU8Const(static_cast<unsigned char>(unionArray[i].getI16Const())); break;
-        case EOpConvInt16ToUint16:
-            newConstArray[i].setU16Const(unionArray[i].getI16Const()); break;
-        case EOpConvInt16ToUint:
-            newConstArray[i].setUConst(unionArray[i].getI16Const()); break;
-        case EOpConvInt16ToUint64:
-            newConstArray[i].setU64Const(unionArray[i].getI16Const()); break;
-        case EOpConvUint16ToInt8:
-            newConstArray[i].setI8Const(static_cast<signed char>(unionArray[i].getU16Const())); break;
-        case EOpConvUint16ToInt16:
-            newConstArray[i].setI16Const(unionArray[i].getU16Const()); break;
-        case EOpConvUint16ToInt:
-            newConstArray[i].setIConst(unionArray[i].getU16Const()); break;
-        case EOpConvUint16ToInt64:
-            newConstArray[i].setI64Const(unionArray[i].getU16Const()); break;
-        case EOpConvUint16ToUint8:
-            newConstArray[i].setU8Const(static_cast<unsigned char>(unionArray[i].getU16Const())); break;
-
-        case EOpConvUint16ToUint:
-            newConstArray[i].setUConst(unionArray[i].getU16Const()); break;
-        case EOpConvUint16ToUint64:
-            newConstArray[i].setU64Const(unionArray[i].getU16Const()); break;
-        case EOpConvInt16ToFloat16:
-            newConstArray[i].setDConst(unionArray[i].getI16Const()); break;
-        case EOpConvInt16ToFloat:
-            newConstArray[i].setDConst(unionArray[i].getI16Const()); break;
-        case EOpConvInt16ToDouble:
-            newConstArray[i].setDConst(unionArray[i].getI16Const()); break;
-        case EOpConvUint16ToFloat16:
-            newConstArray[i].setDConst(unionArray[i].getU16Const()); break;
-        case EOpConvUint16ToFloat:
-            newConstArray[i].setDConst(unionArray[i].getU16Const()); break;
-        case EOpConvUint16ToDouble:
-            newConstArray[i].setDConst(unionArray[i].getU16Const()); break;
-
-        case EOpConvIntToInt8:
-            newConstArray[i].setI8Const((signed char)unionArray[i].getIConst()); break;
-        case EOpConvIntToInt16:
-            newConstArray[i].setI16Const((signed short)unionArray[i].getIConst()); break;
-        case EOpConvIntToInt64:
-            newConstArray[i].setI64Const(unionArray[i].getIConst()); break;
-        case EOpConvIntToUint8:
-            newConstArray[i].setU8Const((unsigned char)unionArray[i].getIConst()); break;
-        case EOpConvIntToUint16:
-            newConstArray[i].setU16Const((unsigned char)unionArray[i].getIConst()); break;
-        case EOpConvIntToUint64:
-            newConstArray[i].setU64Const(unionArray[i].getIConst()); break;
-
-        case EOpConvUintToInt8:
-            newConstArray[i].setI8Const((signed char)unionArray[i].getUConst()); break;
-        case EOpConvUintToInt16:
-            newConstArray[i].setI16Const((signed short)unionArray[i].getUConst()); break;
-        case EOpConvUintToInt64:
-            newConstArray[i].setI64Const(unionArray[i].getUConst()); break;
-        case EOpConvUintToUint8:
-            newConstArray[i].setU8Const((unsigned char)unionArray[i].getUConst()); break;
-        case EOpConvUintToUint16:
-            newConstArray[i].setU16Const((unsigned short)unionArray[i].getUConst()); break;
-        case EOpConvUintToUint64:
-            newConstArray[i].setU64Const(unionArray[i].getUConst()); break;
-        case EOpConvIntToFloat16:
-            newConstArray[i].setDConst(unionArray[i].getIConst()); break;
-        case EOpConvUintToFloat16:
-            newConstArray[i].setDConst(unionArray[i].getUConst()); break;
-        case EOpConvInt64ToInt8:
-            newConstArray[i].setI8Const(static_cast<signed char>(unionArray[i].getI64Const())); break;
-        case EOpConvInt64ToInt16:
-            newConstArray[i].setI16Const(static_cast<signed short>(unionArray[i].getI64Const())); break;
-        case EOpConvInt64ToInt:
-            newConstArray[i].setIConst(static_cast<int>(unionArray[i].getI64Const())); break;
-        case EOpConvInt64ToUint8:
-            newConstArray[i].setU8Const(static_cast<unsigned char>(unionArray[i].getI64Const())); break;
-        case EOpConvInt64ToUint16:
-            newConstArray[i].setU16Const(static_cast<unsigned short>(unionArray[i].getI64Const())); break;
-        case EOpConvInt64ToUint:
-            newConstArray[i].setUConst(static_cast<unsigned int>(unionArray[i].getI64Const())); break;
-        case EOpConvInt64ToUint64:
-            newConstArray[i].setU64Const(unionArray[i].getI64Const()); break;
-        case EOpConvUint64ToInt8:
-            newConstArray[i].setI8Const(static_cast<signed char>(unionArray[i].getU64Const())); break;
-        case EOpConvUint64ToInt16:
-            newConstArray[i].setI16Const(static_cast<signed short>(unionArray[i].getU64Const())); break;
-        case EOpConvUint64ToInt:
-            newConstArray[i].setIConst(static_cast<int>(unionArray[i].getU64Const())); break;
-        case EOpConvUint64ToInt64:
-            newConstArray[i].setI64Const(unionArray[i].getU64Const()); break;
-        case EOpConvUint64ToUint8:
-            newConstArray[i].setU8Const(static_cast<unsigned char>(unionArray[i].getU64Const())); break;
-        case EOpConvUint64ToUint16:
-            newConstArray[i].setU16Const(static_cast<unsigned short>(unionArray[i].getU64Const())); break;
-        case EOpConvUint64ToUint:
-            newConstArray[i].setUConst(static_cast<unsigned int>(unionArray[i].getU64Const())); break;
-        case EOpConvInt64ToFloat16:
-            newConstArray[i].setDConst(static_cast<double>(unionArray[i].getI64Const())); break;
-        case EOpConvInt64ToFloat:
-            newConstArray[i].setDConst(static_cast<double>(unionArray[i].getI64Const())); break;
-        case EOpConvInt64ToDouble:
-            newConstArray[i].setDConst(static_cast<double>(unionArray[i].getI64Const())); break;
-        case EOpConvUint64ToFloat16:
-            newConstArray[i].setDConst(static_cast<double>(unionArray[i].getU64Const())); break;
-        case EOpConvUint64ToFloat:
-            newConstArray[i].setDConst(static_cast<double>(unionArray[i].getU64Const())); break;
-        case EOpConvUint64ToDouble:
-            newConstArray[i].setDConst(static_cast<double>(unionArray[i].getU64Const())); break;
-        case EOpConvFloat16ToInt8:
-            newConstArray[i].setI8Const(static_cast<signed char>(unionArray[i].getDConst())); break;
-        case EOpConvFloat16ToInt16:
-            newConstArray[i].setI16Const(static_cast<signed short>(unionArray[i].getDConst())); break;
-        case EOpConvFloat16ToInt:
-            newConstArray[i].setIConst(static_cast<int>(unionArray[i].getDConst())); break;
-        case EOpConvFloat16ToInt64:
-            newConstArray[i].setI64Const(static_cast<long long>(unionArray[i].getDConst())); break;
-        case EOpConvFloat16ToUint8:
-            newConstArray[i].setU8Const(static_cast<unsigned char>(unionArray[i].getDConst())); break;
-        case EOpConvFloat16ToUint16:
-            newConstArray[i].setU16Const(static_cast<unsigned short>(unionArray[i].getDConst())); break;
-        case EOpConvFloat16ToUint:
-            newConstArray[i].setUConst(static_cast<unsigned int>(unionArray[i].getDConst())); break;
-        case EOpConvFloat16ToUint64:
-            newConstArray[i].setU64Const(static_cast<unsigned long long>(unionArray[i].getDConst())); break;
-        case EOpConvFloat16ToFloat:
-            newConstArray[i].setDConst(unionArray[i].getDConst()); break;
-        case EOpConvFloat16ToDouble:
-            newConstArray[i].setDConst(unionArray[i].getDConst()); break;
-        case EOpConvFloatToInt8:
-            newConstArray[i].setI8Const(static_cast<signed char>(unionArray[i].getDConst())); break;
-        case EOpConvFloatToInt16:
-            newConstArray[i].setI16Const(static_cast<signed short>(unionArray[i].getDConst())); break;
-        case EOpConvFloatToInt64:
-            newConstArray[i].setI64Const(static_cast<long long>(unionArray[i].getDConst())); break;
-        case EOpConvFloatToUint8:
-            newConstArray[i].setU8Const(static_cast<unsigned char>(unionArray[i].getDConst())); break;
-        case EOpConvFloatToUint16:
-            newConstArray[i].setU16Const(static_cast<unsigned short>(unionArray[i].getDConst())); break;
-        case EOpConvFloatToUint64:
-            newConstArray[i].setU64Const(static_cast<unsigned long long>(unionArray[i].getDConst())); break;
-        case EOpConvFloatToFloat16:
-            newConstArray[i].setDConst(unionArray[i].getDConst()); break;
-        case EOpConvDoubleToInt8:
-            newConstArray[i].setI8Const(static_cast<signed char>(unionArray[i].getDConst())); break;
-        case EOpConvDoubleToInt16:
-            newConstArray[i].setI16Const(static_cast<signed short>(unionArray[i].getDConst())); break;
-        case EOpConvDoubleToInt64:
-            newConstArray[i].setI64Const(static_cast<long long>(unionArray[i].getDConst())); break;
-        case EOpConvDoubleToUint8:
-            newConstArray[i].setU8Const(static_cast<unsigned char>(unionArray[i].getDConst())); break;
-        case EOpConvDoubleToUint16:
-            newConstArray[i].setU16Const(static_cast<unsigned short>(unionArray[i].getDConst())); break;
-        case EOpConvDoubleToUint64:
-            newConstArray[i].setU64Const(static_cast<unsigned long long>(unionArray[i].getDConst())); break;
-        case EOpConvDoubleToFloat16:
-            newConstArray[i].setDConst(unionArray[i].getDConst()); break;
         case EOpConvPtrToUint64:
         case EOpConvUint64ToPtr:
         case EOpConstructReference:
@@ -1009,6 +899,12 @@
         objectSize = std::max(children[0]->getAsTyped()->getType().getVectorSize(),
                               children[2]->getAsTyped()->getType().getVectorSize());
         break;
+    case EOpMul:
+        {
+        TIntermConstantUnion* left = children[0]->getAsConstantUnion();
+        TIntermConstantUnion* right = children[1]->getAsConstantUnion();
+        return left->fold(EOpMul, right);
+        }
     default:
         return aggrNode;
     }
diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp
old mode 100755
new mode 100644
index 8d5ce9a..abab968
--- a/glslang/MachineIndependent/Initialize.cpp
+++ b/glslang/MachineIndependent/Initialize.cpp
@@ -2,7 +2,7 @@
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2016 LunarG, Inc.
 // Copyright (C) 2015-2020 Google, Inc.
-// Copyright (C) 2017 ARM Limited.
+// Copyright (C) 2017, 2022-2024 Arm Limited.
 // Modifications Copyright (C) 2020-2021 Advanced Micro Devices, Inc. All rights reserved.
 //
 // All rights reserved.
@@ -51,7 +51,10 @@
 //                                                including identifying what extensions are needed if a version does not allow a symbol
 //
 
+#include <array>
+#include <sstream>
 #include "Initialize.h"
+#include "span.h"
 
 namespace glslang {
 
@@ -139,20 +142,17 @@
 EProfile EDesktopProfile = static_cast<EProfile>(ENoProfile | ECoreProfile | ECompatibilityProfile);
 
 // Declare pointers to put into the table for versioning.
-    const Versioning Es300Desktop130Version[] = { { EEsProfile,      0, 300, 0, nullptr },
-                                                  { EDesktopProfile, 0, 130, 0, nullptr },
-                                                  { EBadProfile } };
-    const Versioning* Es300Desktop130 = &Es300Desktop130Version[0];
+    const std::array Es300Desktop130Version = { Versioning{ EEsProfile,      0, 300, 0, nullptr },
+                                                Versioning{ EDesktopProfile, 0, 130, 0, nullptr },
+                                              };
 
-    const Versioning Es310Desktop420Version[] = { { EEsProfile,      0, 310, 0, nullptr },
-                                                  { EDesktopProfile, 0, 420, 0, nullptr },
-                                                  { EBadProfile } };
-    const Versioning* Es310Desktop420 = &Es310Desktop420Version[0];
+    const std::array Es310Desktop400Version = { Versioning{ EEsProfile,      0, 310, 0, nullptr },
+                                                Versioning{ EDesktopProfile, 0, 400, 0, nullptr },
+                                              };
 
-    const Versioning Es310Desktop450Version[] = { { EEsProfile,      0, 310, 0, nullptr },
-                                                  { EDesktopProfile, 0, 450, 0, nullptr },
-                                                  { EBadProfile } };
-    const Versioning* Es310Desktop450 = &Es310Desktop450Version[0];
+    const std::array Es310Desktop450Version = { Versioning{ EEsProfile,      0, 310, 0, nullptr },
+                                                Versioning{ EDesktopProfile, 0, 450, 0, nullptr },
+                                              };
 
 // The main descriptor of what a set of function prototypes can look like, and
 // a pointer to extra versioning information, when needed.
@@ -162,7 +162,7 @@
     int numArguments;             // number of arguments (overloads with varying arguments need different entries)
     ArgType types;                // ArgType mask
     ArgClass classes;             // the ways this particular function entry manifests
-    const Versioning* versioning; // nullptr means always a valid version
+    const span<const Versioning> versioning; // An empty span means always a valid version
 };
 
 // The tables can have the same built-in function name more than one time,
@@ -174,151 +174,146 @@
 //
 // Table is terminated by an OpNull TOperator.
 
-const BuiltInFunction BaseFunctions[] = {
+const std::array BaseFunctions = {
 //    TOperator,           name,       arg-count,   ArgType,   ArgClass,     versioning
 //    ---------            ----        ---------    -------    --------      ----------
-    { EOpRadians,          "radians",          1,   TypeF,     ClassRegular, nullptr },
-    { EOpDegrees,          "degrees",          1,   TypeF,     ClassRegular, nullptr },
-    { EOpSin,              "sin",              1,   TypeF,     ClassRegular, nullptr },
-    { EOpCos,              "cos",              1,   TypeF,     ClassRegular, nullptr },
-    { EOpTan,              "tan",              1,   TypeF,     ClassRegular, nullptr },
-    { EOpAsin,             "asin",             1,   TypeF,     ClassRegular, nullptr },
-    { EOpAcos,             "acos",             1,   TypeF,     ClassRegular, nullptr },
-    { EOpAtan,             "atan",             2,   TypeF,     ClassRegular, nullptr },
-    { EOpAtan,             "atan",             1,   TypeF,     ClassRegular, nullptr },
-    { EOpPow,              "pow",              2,   TypeF,     ClassRegular, nullptr },
-    { EOpExp,              "exp",              1,   TypeF,     ClassRegular, nullptr },
-    { EOpLog,              "log",              1,   TypeF,     ClassRegular, nullptr },
-    { EOpExp2,             "exp2",             1,   TypeF,     ClassRegular, nullptr },
-    { EOpLog2,             "log2",             1,   TypeF,     ClassRegular, nullptr },
-    { EOpSqrt,             "sqrt",             1,   TypeF,     ClassRegular, nullptr },
-    { EOpInverseSqrt,      "inversesqrt",      1,   TypeF,     ClassRegular, nullptr },
-    { EOpAbs,              "abs",              1,   TypeF,     ClassRegular, nullptr },
-    { EOpSign,             "sign",             1,   TypeF,     ClassRegular, nullptr },
-    { EOpFloor,            "floor",            1,   TypeF,     ClassRegular, nullptr },
-    { EOpCeil,             "ceil",             1,   TypeF,     ClassRegular, nullptr },
-    { EOpFract,            "fract",            1,   TypeF,     ClassRegular, nullptr },
-    { EOpMod,              "mod",              2,   TypeF,     ClassLS,      nullptr },
-    { EOpMin,              "min",              2,   TypeF,     ClassLS,      nullptr },
-    { EOpMax,              "max",              2,   TypeF,     ClassLS,      nullptr },
-    { EOpClamp,            "clamp",            3,   TypeF,     ClassLS2,     nullptr },
-    { EOpMix,              "mix",              3,   TypeF,     ClassLS,      nullptr },
-    { EOpStep,             "step",             2,   TypeF,     ClassFS,      nullptr },
-    { EOpSmoothStep,       "smoothstep",       3,   TypeF,     ClassFS2,     nullptr },
-    { EOpNormalize,        "normalize",        1,   TypeF,     ClassRegular, nullptr },
-    { EOpFaceForward,      "faceforward",      3,   TypeF,     ClassRegular, nullptr },
-    { EOpReflect,          "reflect",          2,   TypeF,     ClassRegular, nullptr },
-    { EOpRefract,          "refract",          3,   TypeF,     ClassXLS,     nullptr },
-    { EOpLength,           "length",           1,   TypeF,     ClassRS,      nullptr },
-    { EOpDistance,         "distance",         2,   TypeF,     ClassRS,      nullptr },
-    { EOpDot,              "dot",              2,   TypeF,     ClassRS,      nullptr },
-    { EOpCross,            "cross",            2,   TypeF,     ClassV3,      nullptr },
-    { EOpLessThan,         "lessThan",         2,   TypeFI,    ClassBNS,     nullptr },
-    { EOpLessThanEqual,    "lessThanEqual",    2,   TypeFI,    ClassBNS,     nullptr },
-    { EOpGreaterThan,      "greaterThan",      2,   TypeFI,    ClassBNS,     nullptr },
-    { EOpGreaterThanEqual, "greaterThanEqual", 2,   TypeFI,    ClassBNS,     nullptr },
-    { EOpVectorEqual,      "equal",            2,   TypeFIB,   ClassBNS,     nullptr },
-    { EOpVectorNotEqual,   "notEqual",         2,   TypeFIB,   ClassBNS,     nullptr },
-    { EOpAny,              "any",              1,   TypeB,     ClassRSNS,    nullptr },
-    { EOpAll,              "all",              1,   TypeB,     ClassRSNS,    nullptr },
-    { EOpVectorLogicalNot, "not",              1,   TypeB,     ClassNS,      nullptr },
-    { EOpSinh,             "sinh",             1,   TypeF,     ClassRegular, Es300Desktop130 },
-    { EOpCosh,             "cosh",             1,   TypeF,     ClassRegular, Es300Desktop130 },
-    { EOpTanh,             "tanh",             1,   TypeF,     ClassRegular, Es300Desktop130 },
-    { EOpAsinh,            "asinh",            1,   TypeF,     ClassRegular, Es300Desktop130 },
-    { EOpAcosh,            "acosh",            1,   TypeF,     ClassRegular, Es300Desktop130 },
-    { EOpAtanh,            "atanh",            1,   TypeF,     ClassRegular, Es300Desktop130 },
-    { EOpAbs,              "abs",              1,   TypeI,     ClassRegular, Es300Desktop130 },
-    { EOpSign,             "sign",             1,   TypeI,     ClassRegular, Es300Desktop130 },
-    { EOpTrunc,            "trunc",            1,   TypeF,     ClassRegular, Es300Desktop130 },
-    { EOpRound,            "round",            1,   TypeF,     ClassRegular, Es300Desktop130 },
-    { EOpRoundEven,        "roundEven",        1,   TypeF,     ClassRegular, Es300Desktop130 },
-    { EOpModf,             "modf",             2,   TypeF,     ClassLO,      Es300Desktop130 },
-    { EOpMin,              "min",              2,   TypeIU,    ClassLS,      Es300Desktop130 },
-    { EOpMax,              "max",              2,   TypeIU,    ClassLS,      Es300Desktop130 },
-    { EOpClamp,            "clamp",            3,   TypeIU,    ClassLS2,     Es300Desktop130 },
-    { EOpMix,              "mix",              3,   TypeF,     ClassLB,      Es300Desktop130 },
-    { EOpIsInf,            "isinf",            1,   TypeF,     ClassB,       Es300Desktop130 },
-    { EOpIsNan,            "isnan",            1,   TypeF,     ClassB,       Es300Desktop130 },
-    { EOpLessThan,         "lessThan",         2,   TypeU,     ClassBNS,     Es300Desktop130 },
-    { EOpLessThanEqual,    "lessThanEqual",    2,   TypeU,     ClassBNS,     Es300Desktop130 },
-    { EOpGreaterThan,      "greaterThan",      2,   TypeU,     ClassBNS,     Es300Desktop130 },
-    { EOpGreaterThanEqual, "greaterThanEqual", 2,   TypeU,     ClassBNS,     Es300Desktop130 },
-    { EOpVectorEqual,      "equal",            2,   TypeU,     ClassBNS,     Es300Desktop130 },
-    { EOpVectorNotEqual,   "notEqual",         2,   TypeU,     ClassBNS,     Es300Desktop130 },
-    { EOpAtomicAdd,        "atomicAdd",        2,   TypeIU,    ClassV1FIOCV, Es310Desktop420 },
-    { EOpAtomicMin,        "atomicMin",        2,   TypeIU,    ClassV1FIOCV, Es310Desktop420 },
-    { EOpAtomicMax,        "atomicMax",        2,   TypeIU,    ClassV1FIOCV, Es310Desktop420 },
-    { EOpAtomicAnd,        "atomicAnd",        2,   TypeIU,    ClassV1FIOCV, Es310Desktop420 },
-    { EOpAtomicOr,         "atomicOr",         2,   TypeIU,    ClassV1FIOCV, Es310Desktop420 },
-    { EOpAtomicXor,        "atomicXor",        2,   TypeIU,    ClassV1FIOCV, Es310Desktop420 },
-    { EOpAtomicExchange,   "atomicExchange",   2,   TypeIU,    ClassV1FIOCV, Es310Desktop420 },
-    { EOpAtomicCompSwap,   "atomicCompSwap",   3,   TypeIU,    ClassV1FIOCV, Es310Desktop420 },
-    { EOpMix,              "mix",              3,   TypeB,     ClassRegular, Es310Desktop450 },
-    { EOpMix,              "mix",              3,   TypeIU,    ClassLB,      Es310Desktop450 },
-
-    { EOpNull }
+    BuiltInFunction{ EOpRadians,          "radians",          1,   TypeF,     ClassRegular, {} },
+    BuiltInFunction{ EOpDegrees,          "degrees",          1,   TypeF,     ClassRegular, {} },
+    BuiltInFunction{ EOpSin,              "sin",              1,   TypeF,     ClassRegular, {} },
+    BuiltInFunction{ EOpCos,              "cos",              1,   TypeF,     ClassRegular, {} },
+    BuiltInFunction{ EOpTan,              "tan",              1,   TypeF,     ClassRegular, {} },
+    BuiltInFunction{ EOpAsin,             "asin",             1,   TypeF,     ClassRegular, {} },
+    BuiltInFunction{ EOpAcos,             "acos",             1,   TypeF,     ClassRegular, {} },
+    BuiltInFunction{ EOpAtan,             "atan",             2,   TypeF,     ClassRegular, {} },
+    BuiltInFunction{ EOpAtan,             "atan",             1,   TypeF,     ClassRegular, {} },
+    BuiltInFunction{ EOpPow,              "pow",              2,   TypeF,     ClassRegular, {} },
+    BuiltInFunction{ EOpExp,              "exp",              1,   TypeF,     ClassRegular, {} },
+    BuiltInFunction{ EOpLog,              "log",              1,   TypeF,     ClassRegular, {} },
+    BuiltInFunction{ EOpExp2,             "exp2",             1,   TypeF,     ClassRegular, {} },
+    BuiltInFunction{ EOpLog2,             "log2",             1,   TypeF,     ClassRegular, {} },
+    BuiltInFunction{ EOpSqrt,             "sqrt",             1,   TypeF,     ClassRegular, {} },
+    BuiltInFunction{ EOpInverseSqrt,      "inversesqrt",      1,   TypeF,     ClassRegular, {} },
+    BuiltInFunction{ EOpAbs,              "abs",              1,   TypeF,     ClassRegular, {} },
+    BuiltInFunction{ EOpSign,             "sign",             1,   TypeF,     ClassRegular, {} },
+    BuiltInFunction{ EOpFloor,            "floor",            1,   TypeF,     ClassRegular, {} },
+    BuiltInFunction{ EOpCeil,             "ceil",             1,   TypeF,     ClassRegular, {} },
+    BuiltInFunction{ EOpFract,            "fract",            1,   TypeF,     ClassRegular, {} },
+    BuiltInFunction{ EOpMod,              "mod",              2,   TypeF,     ClassLS,      {} },
+    BuiltInFunction{ EOpMin,              "min",              2,   TypeF,     ClassLS,      {} },
+    BuiltInFunction{ EOpMax,              "max",              2,   TypeF,     ClassLS,      {} },
+    BuiltInFunction{ EOpClamp,            "clamp",            3,   TypeF,     ClassLS2,     {} },
+    BuiltInFunction{ EOpMix,              "mix",              3,   TypeF,     ClassLS,      {} },
+    BuiltInFunction{ EOpStep,             "step",             2,   TypeF,     ClassFS,      {} },
+    BuiltInFunction{ EOpSmoothStep,       "smoothstep",       3,   TypeF,     ClassFS2,     {} },
+    BuiltInFunction{ EOpNormalize,        "normalize",        1,   TypeF,     ClassRegular, {} },
+    BuiltInFunction{ EOpFaceForward,      "faceforward",      3,   TypeF,     ClassRegular, {} },
+    BuiltInFunction{ EOpReflect,          "reflect",          2,   TypeF,     ClassRegular, {} },
+    BuiltInFunction{ EOpRefract,          "refract",          3,   TypeF,     ClassXLS,     {} },
+    BuiltInFunction{ EOpLength,           "length",           1,   TypeF,     ClassRS,      {} },
+    BuiltInFunction{ EOpDistance,         "distance",         2,   TypeF,     ClassRS,      {} },
+    BuiltInFunction{ EOpDot,              "dot",              2,   TypeF,     ClassRS,      {} },
+    BuiltInFunction{ EOpCross,            "cross",            2,   TypeF,     ClassV3,      {} },
+    BuiltInFunction{ EOpLessThan,         "lessThan",         2,   TypeFI,    ClassBNS,     {} },
+    BuiltInFunction{ EOpLessThanEqual,    "lessThanEqual",    2,   TypeFI,    ClassBNS,     {} },
+    BuiltInFunction{ EOpGreaterThan,      "greaterThan",      2,   TypeFI,    ClassBNS,     {} },
+    BuiltInFunction{ EOpGreaterThanEqual, "greaterThanEqual", 2,   TypeFI,    ClassBNS,     {} },
+    BuiltInFunction{ EOpVectorEqual,      "equal",            2,   TypeFIB,   ClassBNS,     {} },
+    BuiltInFunction{ EOpVectorNotEqual,   "notEqual",         2,   TypeFIB,   ClassBNS,     {} },
+    BuiltInFunction{ EOpAny,              "any",              1,   TypeB,     ClassRSNS,    {} },
+    BuiltInFunction{ EOpAll,              "all",              1,   TypeB,     ClassRSNS,    {} },
+    BuiltInFunction{ EOpVectorLogicalNot, "not",              1,   TypeB,     ClassNS,      {} },
+    BuiltInFunction{ EOpSinh,             "sinh",             1,   TypeF,     ClassRegular, {Es300Desktop130Version} },
+    BuiltInFunction{ EOpCosh,             "cosh",             1,   TypeF,     ClassRegular, {Es300Desktop130Version} },
+    BuiltInFunction{ EOpTanh,             "tanh",             1,   TypeF,     ClassRegular, {Es300Desktop130Version} },
+    BuiltInFunction{ EOpAsinh,            "asinh",            1,   TypeF,     ClassRegular, {Es300Desktop130Version} },
+    BuiltInFunction{ EOpAcosh,            "acosh",            1,   TypeF,     ClassRegular, {Es300Desktop130Version} },
+    BuiltInFunction{ EOpAtanh,            "atanh",            1,   TypeF,     ClassRegular, {Es300Desktop130Version} },
+    BuiltInFunction{ EOpAbs,              "abs",              1,   TypeI,     ClassRegular, {Es300Desktop130Version} },
+    BuiltInFunction{ EOpSign,             "sign",             1,   TypeI,     ClassRegular, {Es300Desktop130Version} },
+    BuiltInFunction{ EOpTrunc,            "trunc",            1,   TypeF,     ClassRegular, {Es300Desktop130Version} },
+    BuiltInFunction{ EOpRound,            "round",            1,   TypeF,     ClassRegular, {Es300Desktop130Version} },
+    BuiltInFunction{ EOpRoundEven,        "roundEven",        1,   TypeF,     ClassRegular, {Es300Desktop130Version} },
+    BuiltInFunction{ EOpModf,             "modf",             2,   TypeF,     ClassLO,      {Es300Desktop130Version} },
+    BuiltInFunction{ EOpMin,              "min",              2,   TypeIU,    ClassLS,      {Es300Desktop130Version} },
+    BuiltInFunction{ EOpMax,              "max",              2,   TypeIU,    ClassLS,      {Es300Desktop130Version} },
+    BuiltInFunction{ EOpClamp,            "clamp",            3,   TypeIU,    ClassLS2,     {Es300Desktop130Version} },
+    BuiltInFunction{ EOpMix,              "mix",              3,   TypeF,     ClassLB,      {Es300Desktop130Version} },
+    BuiltInFunction{ EOpIsInf,            "isinf",            1,   TypeF,     ClassB,       {Es300Desktop130Version} },
+    BuiltInFunction{ EOpIsNan,            "isnan",            1,   TypeF,     ClassB,       {Es300Desktop130Version} },
+    BuiltInFunction{ EOpLessThan,         "lessThan",         2,   TypeU,     ClassBNS,     {Es300Desktop130Version} },
+    BuiltInFunction{ EOpLessThanEqual,    "lessThanEqual",    2,   TypeU,     ClassBNS,     {Es300Desktop130Version} },
+    BuiltInFunction{ EOpGreaterThan,      "greaterThan",      2,   TypeU,     ClassBNS,     {Es300Desktop130Version} },
+    BuiltInFunction{ EOpGreaterThanEqual, "greaterThanEqual", 2,   TypeU,     ClassBNS,     {Es300Desktop130Version} },
+    BuiltInFunction{ EOpVectorEqual,      "equal",            2,   TypeU,     ClassBNS,     {Es300Desktop130Version} },
+    BuiltInFunction{ EOpVectorNotEqual,   "notEqual",         2,   TypeU,     ClassBNS,     {Es300Desktop130Version} },
+    BuiltInFunction{ EOpAtomicAdd,        "atomicAdd",        2,   TypeIU,    ClassV1FIOCV, {Es310Desktop400Version} },
+    BuiltInFunction{ EOpAtomicMin,        "atomicMin",        2,   TypeIU,    ClassV1FIOCV, {Es310Desktop400Version} },
+    BuiltInFunction{ EOpAtomicMax,        "atomicMax",        2,   TypeIU,    ClassV1FIOCV, {Es310Desktop400Version} },
+    BuiltInFunction{ EOpAtomicAnd,        "atomicAnd",        2,   TypeIU,    ClassV1FIOCV, {Es310Desktop400Version} },
+    BuiltInFunction{ EOpAtomicOr,         "atomicOr",         2,   TypeIU,    ClassV1FIOCV, {Es310Desktop400Version} },
+    BuiltInFunction{ EOpAtomicXor,        "atomicXor",        2,   TypeIU,    ClassV1FIOCV, {Es310Desktop400Version} },
+    BuiltInFunction{ EOpAtomicExchange,   "atomicExchange",   2,   TypeIU,    ClassV1FIOCV, {Es310Desktop400Version} },
+    BuiltInFunction{ EOpAtomicCompSwap,   "atomicCompSwap",   3,   TypeIU,    ClassV1FIOCV, {Es310Desktop400Version} },
+    BuiltInFunction{ EOpMix,              "mix",              3,   TypeB,     ClassRegular, {Es310Desktop450Version} },
+    BuiltInFunction{ EOpMix,              "mix",              3,   TypeIU,    ClassLB,      {Es310Desktop450Version} },
 };
 
-const BuiltInFunction DerivativeFunctions[] = {
-    { EOpDPdx,             "dFdx",             1,   TypeF,     ClassRegular, nullptr },
-    { EOpDPdy,             "dFdy",             1,   TypeF,     ClassRegular, nullptr },
-    { EOpFwidth,           "fwidth",           1,   TypeF,     ClassRegular, nullptr },
-    { EOpNull }
+const std::array DerivativeFunctions = {
+    BuiltInFunction{ EOpDPdx,             "dFdx",             1,   TypeF,     ClassRegular, {} },
+    BuiltInFunction{ EOpDPdy,             "dFdy",             1,   TypeF,     ClassRegular, {} },
+    BuiltInFunction{ EOpFwidth,           "fwidth",           1,   TypeF,     ClassRegular, {} },
 };
 
 // For functions declared some other way, but still use the table to relate to operator.
 struct CustomFunction {
     TOperator op;                 // operator to map the name to
     const char* name;             // function name
-    const Versioning* versioning; // nullptr means always a valid version
+    const span<const Versioning> versioning; // An empty span means always a valid version
 };
 
 const CustomFunction CustomFunctions[] = {
-    { EOpBarrier,             "barrier",             nullptr },
-    { EOpMemoryBarrierShared, "memoryBarrierShared", nullptr },
-    { EOpGroupMemoryBarrier,  "groupMemoryBarrier",  nullptr },
-    { EOpMemoryBarrier,       "memoryBarrier",       nullptr },
-    { EOpMemoryBarrierBuffer, "memoryBarrierBuffer", nullptr },
+    { EOpBarrier,             "barrier",             {} },
+    { EOpMemoryBarrierShared, "memoryBarrierShared", {} },
+    { EOpGroupMemoryBarrier,  "groupMemoryBarrier",  {} },
+    { EOpMemoryBarrier,       "memoryBarrier",       {} },
+    { EOpMemoryBarrierBuffer, "memoryBarrierBuffer", {} },
 
-    { EOpPackSnorm2x16,       "packSnorm2x16",       nullptr },
-    { EOpUnpackSnorm2x16,     "unpackSnorm2x16",     nullptr },
-    { EOpPackUnorm2x16,       "packUnorm2x16",       nullptr },
-    { EOpUnpackUnorm2x16,     "unpackUnorm2x16",     nullptr },
-    { EOpPackHalf2x16,        "packHalf2x16",        nullptr },
-    { EOpUnpackHalf2x16,      "unpackHalf2x16",      nullptr },
+    { EOpPackSnorm2x16,       "packSnorm2x16",       {} },
+    { EOpUnpackSnorm2x16,     "unpackSnorm2x16",     {} },
+    { EOpPackUnorm2x16,       "packUnorm2x16",       {} },
+    { EOpUnpackUnorm2x16,     "unpackUnorm2x16",     {} },
+    { EOpPackHalf2x16,        "packHalf2x16",        {} },
+    { EOpUnpackHalf2x16,      "unpackHalf2x16",      {} },
 
-    { EOpMul,                 "matrixCompMult",      nullptr },
-    { EOpOuterProduct,        "outerProduct",        nullptr },
-    { EOpTranspose,           "transpose",           nullptr },
-    { EOpDeterminant,         "determinant",         nullptr },
-    { EOpMatrixInverse,       "inverse",             nullptr },
-    { EOpFloatBitsToInt,      "floatBitsToInt",      nullptr },
-    { EOpFloatBitsToUint,     "floatBitsToUint",     nullptr },
-    { EOpIntBitsToFloat,      "intBitsToFloat",      nullptr },
-    { EOpUintBitsToFloat,     "uintBitsToFloat",     nullptr },
+    { EOpMul,                 "matrixCompMult",      {} },
+    { EOpOuterProduct,        "outerProduct",        {} },
+    { EOpTranspose,           "transpose",           {} },
+    { EOpDeterminant,         "determinant",         {} },
+    { EOpMatrixInverse,       "inverse",             {} },
+    { EOpFloatBitsToInt,      "floatBitsToInt",      {} },
+    { EOpFloatBitsToUint,     "floatBitsToUint",     {} },
+    { EOpIntBitsToFloat,      "intBitsToFloat",      {} },
+    { EOpUintBitsToFloat,     "uintBitsToFloat",     {} },
 
-    { EOpTextureQuerySize,      "textureSize",           nullptr },
-    { EOpTextureQueryLod,       "textureQueryLod",       nullptr },
-    { EOpTextureQueryLod,       "textureQueryLOD",       nullptr }, // extension GL_ARB_texture_query_lod
-    { EOpTextureQueryLevels,    "textureQueryLevels",    nullptr },
-    { EOpTextureQuerySamples,   "textureSamples",        nullptr },
-    { EOpTexture,               "texture",               nullptr },
-    { EOpTextureProj,           "textureProj",           nullptr },
-    { EOpTextureLod,            "textureLod",            nullptr },
-    { EOpTextureOffset,         "textureOffset",         nullptr },
-    { EOpTextureFetch,          "texelFetch",            nullptr },
-    { EOpTextureFetchOffset,    "texelFetchOffset",      nullptr },
-    { EOpTextureProjOffset,     "textureProjOffset",     nullptr },
-    { EOpTextureLodOffset,      "textureLodOffset",      nullptr },
-    { EOpTextureProjLod,        "textureProjLod",        nullptr },
-    { EOpTextureProjLodOffset,  "textureProjLodOffset",  nullptr },
-    { EOpTextureGrad,           "textureGrad",           nullptr },
-    { EOpTextureGradOffset,     "textureGradOffset",     nullptr },
-    { EOpTextureProjGrad,       "textureProjGrad",       nullptr },
-    { EOpTextureProjGradOffset, "textureProjGradOffset", nullptr },
-
-    { EOpNull }
+    { EOpTextureQuerySize,      "textureSize",           {} },
+    { EOpTextureQueryLod,       "textureQueryLod",       {} },
+    { EOpTextureQueryLod,       "textureQueryLOD",       {} }, // extension GL_ARB_texture_query_lod
+    { EOpTextureQueryLevels,    "textureQueryLevels",    {} },
+    { EOpTextureQuerySamples,   "textureSamples",        {} },
+    { EOpTexture,               "texture",               {} },
+    { EOpTextureProj,           "textureProj",           {} },
+    { EOpTextureLod,            "textureLod",            {} },
+    { EOpTextureOffset,         "textureOffset",         {} },
+    { EOpTextureFetch,          "texelFetch",            {} },
+    { EOpTextureFetchOffset,    "texelFetchOffset",      {} },
+    { EOpTextureProjOffset,     "textureProjOffset",     {} },
+    { EOpTextureLodOffset,      "textureLodOffset",      {} },
+    { EOpTextureProjLod,        "textureProjLod",        {} },
+    { EOpTextureProjLodOffset,  "textureProjLodOffset",  {} },
+    { EOpTextureGrad,           "textureGrad",           {} },
+    { EOpTextureGradOffset,     "textureGradOffset",     {} },
+    { EOpTextureProjGrad,       "textureProjGrad",       {} },
+    { EOpTextureProjGradOffset, "textureProjGradOffset", {} },
 };
 
 // For the given table of functions, add all the indicated prototypes for each
@@ -403,13 +398,13 @@
 bool ValidVersion(const BuiltInFunction& function, int version, EProfile profile, const SpvVersion& /* spVersion */)
 {
     // nullptr means always valid
-    if (function.versioning == nullptr)
+    if (function.versioning.empty())
         return true;
 
     // check for what is said about our current profile
-    for (const Versioning* v = function.versioning; v->profiles != EBadProfile; ++v) {
-        if ((v->profiles & profile) != 0) {
-            if (v->minCoreVersion <= version || (v->numExtensions > 0 && v->minExtendedVersion <= version))
+    for (const auto& v : function.versioning) {
+        if ((v.profiles & profile) != 0) {
+            if (v.minCoreVersion <= version || (v.numExtensions > 0 && v.minExtendedVersion <= version))
                 return true;
         }
     }
@@ -422,12 +417,11 @@
 // called once per stage). This is a performance issue only, not a correctness
 // concern.  It is done for quality arising from simplicity, as there are subtleties
 // to get correct if instead trying to do it surgically.
-template<class FunctionT>
-void RelateTabledBuiltins(const FunctionT* functions, TSymbolTable& symbolTable)
+template<class FunctionContainer>
+void RelateTabledBuiltins(const FunctionContainer& functions, TSymbolTable& symbolTable)
 {
-    while (functions->op != EOpNull) {
-        symbolTable.relateToOperator(functions->name, functions->op);
-        ++functions;
+    for (const auto& fn : functions) {
+        symbolTable.relateToOperator(fn.name, fn.op);
     }
 }
 
@@ -436,11 +430,10 @@
 // Add declarations for all tables of built-in functions.
 void TBuiltIns::addTabledBuiltins(int version, EProfile profile, const SpvVersion& spvVersion)
 {
-    const auto forEachFunction = [&](TString& decls, const BuiltInFunction* function) {
-        while (function->op != EOpNull) {
-            if (ValidVersion(*function, version, profile, spvVersion))
-                AddTabledBuiltin(decls, *function);
-            ++function;
+    const auto forEachFunction = [&](TString& decls, const span<const BuiltInFunction>& functions) {
+        for (const auto& fn : functions) {
+            if (ValidVersion(fn, version, profile, spvVersion))
+                AddTabledBuiltin(decls, fn);
         }
     };
 
@@ -1473,6 +1466,20 @@
             "\n");
     }
 
+    // NV_shader_atomic_fp16_vector
+    if (profile != EEsProfile && version >= 430) {
+        commonBuiltins.append(
+            "f16vec2 atomicAdd(coherent volatile inout f16vec2, f16vec2);"
+            "f16vec4 atomicAdd(coherent volatile inout f16vec4, f16vec4);"
+            "f16vec2 atomicMin(coherent volatile inout f16vec2, f16vec2);"
+            "f16vec4 atomicMin(coherent volatile inout f16vec4, f16vec4);"
+            "f16vec2 atomicMax(coherent volatile inout f16vec2, f16vec2);"
+            "f16vec4 atomicMax(coherent volatile inout f16vec4, f16vec4);"
+            "f16vec2 atomicExchange(coherent volatile inout f16vec2, f16vec2);"
+            "f16vec4 atomicExchange(coherent volatile inout f16vec4, f16vec4);"
+            "\n");
+    }
+
     if ((profile == EEsProfile && version >= 300) ||
         (profile != EEsProfile && version >= 150)) { // GL_ARB_shader_bit_encoding
         commonBuiltins.append(
@@ -1726,6 +1733,16 @@
                 "vec4 shadow2DRect(sampler2DRectShadow, vec3);"     // GL_ARB_texture_rectangle, caught by keyword check
                 "vec4 shadow2DRectProj(sampler2DRectShadow, vec4);" // GL_ARB_texture_rectangle, caught by keyword check
 
+                "vec4 texture1DArray(sampler1DArray, vec2);"      // GL_EXT_texture_array
+                "vec4 texture2DArray(sampler2DArray, vec3);"      // GL_EXT_texture_array
+                "vec4 shadow1DArray(sampler1DArrayShadow, vec3);" // GL_EXT_texture_array
+                "vec4 shadow2DArray(sampler2DArrayShadow, vec4);" // GL_EXT_texture_array
+                "vec4 texture1DArray(sampler1DArray, vec2, float);"                // GL_EXT_texture_array
+                "vec4 texture2DArray(sampler2DArray, vec3, float);"                // GL_EXT_texture_array
+                "vec4 shadow1DArray(sampler1DArrayShadow, vec3, float);"           // GL_EXT_texture_array
+                "vec4 texture1DArrayLod(sampler1DArray, vec2, float);"      // GL_EXT_texture_array
+                "vec4 texture2DArrayLod(sampler2DArray, vec3, float);"      // GL_EXT_texture_array
+                "vec4 shadow1DArrayLod(sampler1DArrayShadow, vec3, float);" // GL_EXT_texture_array
                 "\n");
         }
     }
@@ -2097,6 +2114,8 @@
             "%s     subgroupShuffleXor(%s, uint);\n",
             "%s     subgroupShuffleUp(%s, uint delta);\n",
             "%s     subgroupShuffleDown(%s, uint delta);\n",
+            "%s     subgroupRotate(%s, uint);\n",
+            "%s     subgroupClusteredRotate(%s, uint, uint);\n",
             "%s     subgroupAdd(%s);\n",
             "%s     subgroupMul(%s);\n",
             "%s     subgroupMin(%s);\n",
@@ -2225,6 +2244,15 @@
             );
     }
 
+    // GL_EXT_shader_quad_control
+    if ((profile == EEsProfile && version >= 310) ||
+        (profile != EEsProfile && version >= 140)) {
+        commonBuiltins.append(
+            "bool subgroupQuadAll(bool);\n"
+            "bool subgroupQuadAny(bool);\n"
+            );
+    }
+
     if (profile != EEsProfile && version >= 460) {
         commonBuiltins.append(
             "bool anyInvocation(bool);"
@@ -4105,6 +4133,37 @@
             "u16vec4  unpack16(uint64_t);"
             "i32vec2  unpack32(int64_t);"
             "u32vec2  unpack32(uint64_t);"
+
+            // GL_EXT_expect_assume
+            "int8_t expectEXT(int8_t, int8_t);"
+            "i8vec2 expectEXT(i8vec2, i8vec2);"
+            "i8vec3 expectEXT(i8vec3, i8vec3);"
+            "i8vec4 expectEXT(i8vec4, i8vec4);"
+
+            "uint8_t expectEXT(uint8_t, uint8_t);"
+            "u8vec2 expectEXT(u8vec2, u8vec2);"
+            "u8vec3 expectEXT(u8vec3, u8vec3);"
+            "u8vec4 expectEXT(u8vec4, u8vec4);"
+
+            "int16_t expectEXT(int16_t, int16_t);"
+            "i16vec2 expectEXT(i16vec2, i16vec2);"
+            "i16vec3 expectEXT(i16vec3, i16vec3);"
+            "i16vec4 expectEXT(i16vec4, i16vec4);"
+
+            "uint16_t expectEXT(uint16_t, uint16_t);"
+            "u16vec2 expectEXT(u16vec2, u16vec2);"
+            "u16vec3 expectEXT(u16vec3, u16vec3);"
+            "u16vec4 expectEXT(u16vec4, u16vec4);"
+
+            "int64_t expectEXT(int64_t, int64_t);"
+            "i64vec2 expectEXT(i64vec2, i64vec2);"
+            "i64vec3 expectEXT(i64vec3, i64vec3);"
+            "i64vec4 expectEXT(i64vec4, i64vec4);"
+
+            "uint64_t expectEXT(uint64_t, uint64_t);"
+            "u64vec2 expectEXT(u64vec2, u64vec2);"
+            "u64vec3 expectEXT(u64vec3, u64vec3);"
+            "u64vec4 expectEXT(u64vec4, u64vec4);"
             "\n");
     }
 
@@ -4143,6 +4202,29 @@
 
     }
 
+    // GL_EXT_expect_assume
+    if ((profile == EEsProfile && version >= 310) ||
+         ((profile != EEsProfile && version >= 140))) {
+        commonBuiltins.append(
+            "void assumeEXT(bool);"
+
+            "bool expectEXT(bool, bool);"
+            "bvec2 expectEXT(bvec2, bvec2);"
+            "bvec3 expectEXT(bvec3, bvec3);"
+            "bvec4 expectEXT(bvec4, bvec4);"
+
+            "int expectEXT(int, int);"
+            "ivec2 expectEXT(ivec2, ivec2);"
+            "ivec3 expectEXT(ivec3, ivec3);"
+            "ivec4 expectEXT(ivec4, ivec4);"
+
+            "uint expectEXT(uint, uint);"
+            "uvec2 expectEXT(uvec2, uvec2);"
+            "uvec3 expectEXT(uvec3, uvec3);"
+            "uvec4 expectEXT(uvec4, uvec4);"
+            "\n");
+    }
+
     // QCOM_image_processing
     if ((profile == EEsProfile && version >= 310) ||
          (profile != EEsProfile && version >= 140)) {
@@ -4152,6 +4234,11 @@
            "vec4 textureBoxFilterQCOM(sampler2D, vec2, vec2);"
            "vec4 textureBlockMatchSADQCOM(sampler2D, uvec2, sampler2D, uvec2, uvec2);"
            "vec4 textureBlockMatchSSDQCOM(sampler2D, uvec2, sampler2D, uvec2, uvec2);"
+
+           "vec4 textureBlockMatchWindowSSDQCOM(sampler2D, uvec2, sampler2D, uvec2, uvec2);"
+           "vec4 textureBlockMatchWindowSADQCOM(sampler2D, uvec2, sampler2D, uvec2, uvec2);"
+           "vec4 textureBlockMatchGatherSSDQCOM(sampler2D, uvec2, sampler2D, uvec2, uvec2);"
+           "vec4 textureBlockMatchGatherSADQCOM(sampler2D, uvec2, sampler2D, uvec2, uvec2);"
            "\n");
     }
 
@@ -4387,83 +4474,41 @@
             "ucoopmatNV coopMatMulAddNV(ucoopmatNV A, ucoopmatNV B, ucoopmatNV C);\n"
             );
 
-        std::string cooperativeMatrixFuncs =
-            "void coopMatLoad(out coopmat m, volatile coherent int8_t[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatLoad(out coopmat m, volatile coherent int16_t[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatLoad(out coopmat m, volatile coherent int32_t[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatLoad(out coopmat m, volatile coherent int64_t[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatLoad(out coopmat m, volatile coherent uint8_t[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatLoad(out coopmat m, volatile coherent uint16_t[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatLoad(out coopmat m, volatile coherent uint32_t[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatLoad(out coopmat m, volatile coherent uint64_t[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatLoad(out coopmat m, volatile coherent float16_t[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatLoad(out coopmat m, volatile coherent float[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatLoad(out coopmat m, volatile coherent float64_t[] buf, uint element, uint stride, int matrixLayout);\n"
+        std::stringstream cooperativeMatrixFuncs;
 
-            "void coopMatLoad(out coopmat m, volatile coherent i8vec2[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatLoad(out coopmat m, volatile coherent i16vec2[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatLoad(out coopmat m, volatile coherent i32vec2[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatLoad(out coopmat m, volatile coherent i64vec2[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatLoad(out coopmat m, volatile coherent u8vec2[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatLoad(out coopmat m, volatile coherent u16vec2[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatLoad(out coopmat m, volatile coherent u32vec2[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatLoad(out coopmat m, volatile coherent u64vec2[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatLoad(out coopmat m, volatile coherent f16vec2[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatLoad(out coopmat m, volatile coherent f32vec2[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatLoad(out coopmat m, volatile coherent f64vec2[] buf, uint element, uint stride, int matrixLayout);\n"
+        {
+            static const char *allTypes[] =
+            {
+                "float", "vec2", "vec4",
+                "float16_t", "f16vec2", "f16vec4",
+                "double", "dvec2", "dvec4",
+                "int8_t", "i8vec2", "i8vec4",
+                "int16_t", "i16vec2", "i16vec4",
+                "int", "ivec2", "ivec4",
+                "int64_t", "i64vec2", "i64vec4",
+                "uint8_t", "u8vec2", "u8vec4",
+                "uint16_t", "u16vec2", "u16vec4",
+                "uint", "uvec2", "uvec4",
+                "uint64_t", "u64vec2", "u64vec4",
+            };
+            for (auto t : allTypes) {
+                cooperativeMatrixFuncs << "void coopMatLoad(out coopmat m, volatile coherent " << t << "[] buf, uint element, uint stride, int matrixLayout);\n";
+                cooperativeMatrixFuncs << "void coopMatStore(coopmat m, volatile coherent " << t << "[] buf, uint element, uint stride, int matrixLayout);\n";
+            }
+            // Just use uint8_t for buffer type, we have special matching rules to allow any conversion
+            cooperativeMatrixFuncs << "void coopMatLoadTensorNV(inout coopmat m, volatile coherent uint8_t[] buf, uint element, tensorLayoutNV t);\n";
+            cooperativeMatrixFuncs << "void coopMatLoadTensorNV(inout coopmat m, volatile coherent uint8_t[] buf, uint element, tensorLayoutNV t, tensorViewNV v);\n";
+            cooperativeMatrixFuncs << "void coopMatLoadTensorNV(inout coopmat m, volatile coherent uint8_t[] buf, uint element, tensorLayoutNV t, __function f);\n";
+            cooperativeMatrixFuncs << "void coopMatLoadTensorNV(inout coopmat m, volatile coherent uint8_t[] buf, uint element, tensorLayoutNV t, tensorViewNV v, __function f);\n";
+            cooperativeMatrixFuncs << "void coopMatStoreTensorNV(coopmat m, volatile coherent uint8_t[] buf, uint element, tensorLayoutNV t);\n";
+            cooperativeMatrixFuncs << "void coopMatStoreTensorNV(coopmat m, volatile coherent uint8_t[] buf, uint element, tensorLayoutNV t, tensorViewNV v);\n";
+        }
 
-            "void coopMatLoad(out coopmat m, volatile coherent i8vec4[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatLoad(out coopmat m, volatile coherent i16vec4[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatLoad(out coopmat m, volatile coherent i32vec4[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatLoad(out coopmat m, volatile coherent i64vec4[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatLoad(out coopmat m, volatile coherent u8vec4[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatLoad(out coopmat m, volatile coherent u16vec4[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatLoad(out coopmat m, volatile coherent u32vec4[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatLoad(out coopmat m, volatile coherent u64vec4[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatLoad(out coopmat m, volatile coherent f16vec4[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatLoad(out coopmat m, volatile coherent f32vec4[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatLoad(out coopmat m, volatile coherent f64vec4[] buf, uint element, uint stride, int matrixLayout);\n"
-
-            "void coopMatStore(coopmat m, volatile coherent int8_t[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatStore(coopmat m, volatile coherent int16_t[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatStore(coopmat m, volatile coherent int32_t[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatStore(coopmat m, volatile coherent int64_t[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatStore(coopmat m, volatile coherent uint8_t[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatStore(coopmat m, volatile coherent uint16_t[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatStore(coopmat m, volatile coherent uint32_t[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatStore(coopmat m, volatile coherent uint64_t[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatStore(coopmat m, volatile coherent float16_t[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatStore(coopmat m, volatile coherent float[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatStore(coopmat m, volatile coherent float64_t[] buf, uint element, uint stride, int matrixLayout);\n"
-
-            "void coopMatStore(coopmat m, volatile coherent i8vec2[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatStore(coopmat m, volatile coherent i16vec2[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatStore(coopmat m, volatile coherent i32vec2[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatStore(coopmat m, volatile coherent i64vec2[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatStore(coopmat m, volatile coherent u8vec2[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatStore(coopmat m, volatile coherent u16vec2[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatStore(coopmat m, volatile coherent u32vec2[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatStore(coopmat m, volatile coherent u64vec2[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatStore(coopmat m, volatile coherent f16vec2[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatStore(coopmat m, volatile coherent f32vec2[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatStore(coopmat m, volatile coherent f64vec2[] buf, uint element, uint stride, int matrixLayout);\n"
-
-            "void coopMatStore(coopmat m, volatile coherent i8vec4[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatStore(coopmat m, volatile coherent i16vec4[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatStore(coopmat m, volatile coherent i32vec4[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatStore(coopmat m, volatile coherent i64vec4[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatStore(coopmat m, volatile coherent u8vec4[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatStore(coopmat m, volatile coherent u16vec4[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatStore(coopmat m, volatile coherent u32vec4[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatStore(coopmat m, volatile coherent u64vec4[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatStore(coopmat m, volatile coherent f16vec4[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatStore(coopmat m, volatile coherent f32vec4[] buf, uint element, uint stride, int matrixLayout);\n"
-            "void coopMatStore(coopmat m, volatile coherent f64vec4[] buf, uint element, uint stride, int matrixLayout);\n"
-
+        cooperativeMatrixFuncs <<
             "coopmat coopMatMulAdd(coopmat A, coopmat B, coopmat C);\n"
             "coopmat coopMatMulAdd(coopmat A, coopmat B, coopmat C, int matrixOperands);\n";
 
-        commonBuiltins.append(cooperativeMatrixFuncs.c_str());
+        commonBuiltins.append(cooperativeMatrixFuncs.str().c_str());
 
         commonBuiltins.append(
             "const int gl_MatrixUseA = 0;\n"
@@ -4472,8 +4517,87 @@
             "const int gl_MatrixOperandsSaturatingAccumulation = 0x10;\n"
             "const int gl_CooperativeMatrixLayoutRowMajor = 0;\n"
             "const int gl_CooperativeMatrixLayoutColumnMajor = 1;\n"
+            "const int gl_CooperativeMatrixLayoutRowBlockedInterleavedARM = 4202;\n"
+            "const int gl_CooperativeMatrixLayoutColumnBlockedInterleavedARM = 4203;\n"
             "\n"
             );
+
+        commonBuiltins.append(
+            "void coopMatTransposeNV(out coopmat, coopmat);"
+            "void coopMatReduceNV(out coopmat, coopmat, int, __function);"
+            "void coopMatPerElementNV();"
+        );
+
+        commonBuiltins.append(
+            "const int gl_CooperativeMatrixReduceRowNV = 0x1;\n"
+            "const int gl_CooperativeMatrixReduceColumnNV = 0x2;\n"
+            "const int gl_CooperativeMatrixReduceRowAndColumnNV = 0x3;\n"
+            "const int gl_CooperativeMatrixReduce2x2NV = 0x4;\n"
+            "\n"
+            );
+
+        commonBuiltins.append(
+            "const int gl_CooperativeMatrixClampModeUndefinedNV = 0x0;\n"
+            "const int gl_CooperativeMatrixClampModeConstantNV = 0x1;\n"
+            "const int gl_CooperativeMatrixClampModeClampToEdgeNV = 0x2;\n"
+            "const int gl_CooperativeMatrixClampModeRepeatNV = 0x3;\n"
+            "const int gl_CooperativeMatrixClampModeMirrorRepeatNV = 0x4;\n"
+            "\n"
+            );
+
+        commonBuiltins.append(
+            "tensorLayoutNV createTensorLayoutNV(uint Dim);\n"
+            "tensorLayoutNV createTensorLayoutNV(uint Dim, uint Mode);\n"
+
+            "tensorLayoutNV setTensorLayoutBlockSizeNV(tensorLayoutNV t, uint blockSize0);\n"
+            "tensorLayoutNV setTensorLayoutBlockSizeNV(tensorLayoutNV t, uint blockSize0, uint blockSize1);\n"
+            "tensorLayoutNV setTensorLayoutBlockSizeNV(tensorLayoutNV t, uint blockSize0, uint blockSize1, uint blockSize2);\n"
+            "tensorLayoutNV setTensorLayoutBlockSizeNV(tensorLayoutNV t, uint blockSize0, uint blockSize1, uint blockSize2, uint blockSize3);\n"
+            "tensorLayoutNV setTensorLayoutBlockSizeNV(tensorLayoutNV t, uint blockSize0, uint blockSize1, uint blockSize2, uint blockSize3, uint blockSize4);\n"
+
+            "tensorLayoutNV setTensorLayoutDimensionNV(tensorLayoutNV t, uint dim0);\n"
+            "tensorLayoutNV setTensorLayoutDimensionNV(tensorLayoutNV t, uint dim0, uint dim1);\n"
+            "tensorLayoutNV setTensorLayoutDimensionNV(tensorLayoutNV t, uint dim0, uint dim1, uint dim2);\n"
+            "tensorLayoutNV setTensorLayoutDimensionNV(tensorLayoutNV t, uint dim0, uint dim1, uint dim2, uint dim3);\n"
+            "tensorLayoutNV setTensorLayoutDimensionNV(tensorLayoutNV t, uint dim0, uint dim1, uint dim2, uint dim3, uint dim4);\n"
+
+            "tensorLayoutNV setTensorLayoutStrideNV(tensorLayoutNV t, uint stride0);\n"
+            "tensorLayoutNV setTensorLayoutStrideNV(tensorLayoutNV t, uint stride0, uint stride1);\n"
+            "tensorLayoutNV setTensorLayoutStrideNV(tensorLayoutNV t, uint stride0, uint stride1, uint stride2);\n"
+            "tensorLayoutNV setTensorLayoutStrideNV(tensorLayoutNV t, uint stride0, uint stride1, uint stride2, uint stride3);\n"
+            "tensorLayoutNV setTensorLayoutStrideNV(tensorLayoutNV t, uint stride0, uint stride1, uint stride2, uint stride3, uint stride4);\n"
+
+            "tensorLayoutNV sliceTensorLayoutNV(tensorLayoutNV t, uint offset0, uint span0);\n"
+            "tensorLayoutNV sliceTensorLayoutNV(tensorLayoutNV t, uint offset0, uint span0, uint offset1, uint span1);\n"
+            "tensorLayoutNV sliceTensorLayoutNV(tensorLayoutNV t, uint offset0, uint span0, uint offset1, uint span1, uint offset2, uint span2);\n"
+            "tensorLayoutNV sliceTensorLayoutNV(tensorLayoutNV t, uint offset0, uint span0, uint offset1, uint span1, uint offset2, uint span2, uint offset3, uint span3);\n"
+            "tensorLayoutNV sliceTensorLayoutNV(tensorLayoutNV t, uint offset0, uint span0, uint offset1, uint span1, uint offset2, uint span2, uint offset3, uint span3, uint offset4, uint span4);\n"
+
+            "tensorLayoutNV setTensorLayoutClampValueNV(tensorLayoutNV t, uint value);\n"
+
+            "tensorViewNV createTensorViewNV(uint Dim);\n"
+            "tensorViewNV createTensorViewNV(uint Dim, bool HasDimensions);\n"
+            "tensorViewNV createTensorViewNV(uint Dim, bool HasDimensions, uint p0);\n"
+            "tensorViewNV createTensorViewNV(uint Dim, bool HasDimensions, uint p0, uint p1);\n"
+            "tensorViewNV createTensorViewNV(uint Dim, bool HasDimensions, uint p0, uint p1, uint p2);\n"
+            "tensorViewNV createTensorViewNV(uint Dim, bool HasDimensions, uint p0, uint p1, uint p2, uint p3);\n"
+            "tensorViewNV createTensorViewNV(uint Dim, bool HasDimensions, uint p0, uint p1, uint p2, uint p3, uint p4);\n"
+
+            "tensorViewNV setTensorViewDimensionsNV(tensorViewNV v, uint dim0);\n"
+            "tensorViewNV setTensorViewDimensionsNV(tensorViewNV v, uint dim0, uint dim1);\n"
+            "tensorViewNV setTensorViewDimensionsNV(tensorViewNV v, uint dim0, uint dim1, uint dim2);\n"
+            "tensorViewNV setTensorViewDimensionsNV(tensorViewNV v, uint dim0, uint dim1, uint dim2, uint dim3);\n"
+            "tensorViewNV setTensorViewDimensionsNV(tensorViewNV v, uint dim0, uint dim1, uint dim2, uint dim3, uint dim4);\n"
+
+            "tensorViewNV setTensorViewStrideNV(tensorViewNV v, uint stride0);\n"
+            "tensorViewNV setTensorViewStrideNV(tensorViewNV v, uint stride0, uint stride1);\n"
+            "tensorViewNV setTensorViewStrideNV(tensorViewNV v, uint stride0, uint stride1, uint stride2);\n"
+            "tensorViewNV setTensorViewStrideNV(tensorViewNV v, uint stride0, uint stride1, uint stride2, uint stride3);\n"
+            "tensorViewNV setTensorViewStrideNV(tensorViewNV v, uint stride0, uint stride1, uint stride2, uint stride3, uint stride4);\n"
+
+            "tensorViewNV setTensorViewClipNV(tensorViewNV v, uint clipRowOffset, uint clipRowSpan, uint clipColOffset, uint clipColSpan);\n"
+            "\n"
+        );
     }
 
     //============================================================================
@@ -5246,7 +5370,7 @@
             stageBuiltins[EShLangVertex].append(
                 "int gl_VertexID;"            // needs qualifier fixed later
                 );
-        if (version >= 140 && spvVersion.vulkan == 0)
+        if (spvVersion.vulkan == 0)
             stageBuiltins[EShLangVertex].append(
                 "int gl_InstanceID;"          // needs qualifier fixed later
                 );
@@ -5301,6 +5425,7 @@
             stageBuiltins[EShLangVertex].append(
                 "highp   vec4  gl_Position;"  // needs qualifier fixed later
                 "mediump float gl_PointSize;" // needs qualifier fixed later
+                "highp int gl_InstanceID;" // needs qualifier fixed later
                 );
         } else {
             if (spvVersion.vulkan == 0 || spvVersion.vulkanRelaxed)
@@ -6278,7 +6403,7 @@
             {
                 if ((ms || image) && shadow)
                     continue;
-                if (ms && profile != EEsProfile && version < 150)
+                if (ms && profile != EEsProfile && version < 140)
                     continue;
                 if (ms && image && profile == EEsProfile)
                     continue;
@@ -6610,6 +6735,34 @@
                 commonBuiltins.append(imageParams);
                 commonBuiltins.append(", float);\n");
             }
+
+            // GL_NV_shader_atomic_fp16_vector
+            if (profile != EEsProfile && version >= 430) {
+                const int numFp16Builtins = 4;
+                const char* atomicFp16Func[numFp16Builtins] = {
+                    " imageAtomicAdd(volatile coherent ",
+                    " imageAtomicMin(volatile coherent ",
+                    " imageAtomicMax(volatile coherent ",
+                    " imageAtomicExchange(volatile coherent "
+                };
+                const int numFp16DataTypes = 2;
+                const char* atomicFp16DataTypes[numFp16DataTypes] = {
+                    "f16vec2",
+                    "f16vec4"
+                };
+                // Loop twice to add prototypes with/without scope/semantics
+                for (int j = 0; j < numFp16DataTypes; ++j) {
+                    for (int i = 0; i < numFp16Builtins; ++i) {
+                        commonBuiltins.append(atomicFp16DataTypes[j]);
+                        commonBuiltins.append(atomicFp16Func[i]);
+                        commonBuiltins.append(imageParams);
+                        commonBuiltins.append(", ");
+                        commonBuiltins.append(atomicFp16DataTypes[j]);
+                        commonBuiltins.append(");\n");
+                    }
+                }
+            }
+
             if (profile != EEsProfile && version >= 450) {
                 commonBuiltins.append("float imageAtomicAdd(volatile coherent ");
                 commonBuiltins.append(imageParams);
@@ -7851,6 +8004,8 @@
         if (spvVersion.vulkan == 0) {
             SpecialQualifier("gl_VertexID",   EvqVertexId,   EbvVertexId,   symbolTable);
             SpecialQualifier("gl_InstanceID", EvqInstanceId, EbvInstanceId, symbolTable);
+            if (version < 140)
+                symbolTable.setVariableExtensions("gl_InstanceID", 1, &E_GL_EXT_draw_instanced);
         }
 
         if (spvVersion.vulkan > 0 && spvVersion.vulkanRelaxed) {
@@ -8002,7 +8157,19 @@
             symbolTable.setFunctionExtensions("shadow2DEXT",        1, &E_GL_EXT_shadow_samplers);
             symbolTable.setFunctionExtensions("shadow2DProjEXT",    1, &E_GL_EXT_shadow_samplers);
         }
-        // Fall through
+
+        // E_GL_EXT_texture_array
+        if (profile != EEsProfile && spvVersion.spv == 0) {
+            symbolTable.setFunctionExtensions("texture1DArray", 1, &E_GL_EXT_texture_array);
+            symbolTable.setFunctionExtensions("texture2DArray", 1, &E_GL_EXT_texture_array);
+            symbolTable.setFunctionExtensions("shadow1DArray", 1, &E_GL_EXT_texture_array);
+            symbolTable.setFunctionExtensions("shadow2DArray", 1, &E_GL_EXT_texture_array);
+
+            symbolTable.setFunctionExtensions("texture1DArrayLod", 1, &E_GL_EXT_texture_array);
+            symbolTable.setFunctionExtensions("texture2DArrayLod", 1, &E_GL_EXT_texture_array);
+            symbolTable.setFunctionExtensions("shadow1DArrayLod", 1, &E_GL_EXT_texture_array);
+        }
+        [[fallthrough]];
 
     case EShLangTessControl:
         if (profile == EEsProfile && version >= 310) {
@@ -8017,7 +8184,7 @@
                 BuiltInVariable("gl_BoundingBox", EbvBoundingBox, symbolTable);
             }
         }
-        // Fall through
+        [[fallthrough]];
 
     case EShLangTessEvaluation:
     case EShLangGeometry:
@@ -8603,6 +8770,13 @@
                 BuiltInVariable("gl_SubGroupSizeARB", EbvSubGroupSize, symbolTable);
         }
 
+        // GL_EXT_expect_assume
+        if ((profile == EEsProfile && version >= 310) ||
+            (profile != EEsProfile && version >= 140)) {
+            symbolTable.setFunctionExtensions("assumeEXT", 1, &E_GL_EXT_expect_assume);
+            symbolTable.setFunctionExtensions("expectEXT", 1, &E_GL_EXT_expect_assume);
+        }
+
         // GL_KHR_shader_subgroup
         if ((profile == EEsProfile && version >= 310) ||
             (profile != EEsProfile && version >= 140)) {
@@ -8644,6 +8818,8 @@
             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("subgroupRotate",                  1, &E_GL_KHR_shader_subgroup_rotate);
+            symbolTable.setFunctionExtensions("subgroupClusteredRotate",         1, &E_GL_KHR_shader_subgroup_rotate);
             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);
@@ -8762,6 +8938,13 @@
             symbolTable.setVariableExtensions("gl_ShadingRateFlag4HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate);
         }
 
+        // GL_EXT_shader_quad_control
+        if ((profile != EEsProfile && version >= 140) ||
+            (profile == EEsProfile && version >= 310)) {
+            symbolTable.setFunctionExtensions("subgroupQuadAll",                     1,  &E_GL_KHR_shader_subgroup_vote);
+            symbolTable.setFunctionExtensions("subgroupQuadAny",                     1,  &E_GL_KHR_shader_subgroup_vote);
+        }
+
         // GL_EXT_shader_tile_image
         symbolTable.setFunctionExtensions("stencilAttachmentReadEXT", 1, &E_GL_EXT_shader_tile_image);
         symbolTable.setFunctionExtensions("depthAttachmentReadEXT", 1, &E_GL_EXT_shader_tile_image);
@@ -8769,10 +8952,16 @@
 
         if ((profile == EEsProfile && version >= 310) ||
             (profile != EEsProfile && version >= 140)) {
+
             symbolTable.setFunctionExtensions("textureWeightedQCOM",      1, &E_GL_QCOM_image_processing);
             symbolTable.setFunctionExtensions("textureBoxFilterQCOM",     1, &E_GL_QCOM_image_processing);
             symbolTable.setFunctionExtensions("textureBlockMatchSADQCOM", 1, &E_GL_QCOM_image_processing);
             symbolTable.setFunctionExtensions("textureBlockMatchSSDQCOM", 1, &E_GL_QCOM_image_processing);
+
+            symbolTable.setFunctionExtensions("textureBlockMatchWindowSSDQCOM", 1, &E_GL_QCOM_image_processing2);
+            symbolTable.setFunctionExtensions("textureBlockMatchWindowSADQCOM", 1, &E_GL_QCOM_image_processing2);
+            symbolTable.setFunctionExtensions("textureBlockMatchGatherSSDQCOM", 1, &E_GL_QCOM_image_processing2);
+            symbolTable.setFunctionExtensions("textureBlockMatchGatherSADQCOM", 1, &E_GL_QCOM_image_processing2);
         }
         break;
 
@@ -8913,6 +9102,22 @@
             symbolTable.setFunctionExtensions("coopMatLoad",   1, &E_GL_KHR_cooperative_matrix);
             symbolTable.setFunctionExtensions("coopMatStore",  1, &E_GL_KHR_cooperative_matrix);
             symbolTable.setFunctionExtensions("coopMatMulAdd", 1, &E_GL_KHR_cooperative_matrix);
+
+            symbolTable.setFunctionExtensions("coopMatReduceNV",   1, &E_GL_NV_cooperative_matrix2);
+            symbolTable.setFunctionExtensions("coopMatPerElementNV",  1, &E_GL_NV_cooperative_matrix2);
+            symbolTable.setFunctionExtensions("coopMatTransposeNV",   1, &E_GL_NV_cooperative_matrix2);
+            
+            symbolTable.setFunctionExtensions("createTensorLayoutNV",           1, &E_GL_NV_cooperative_matrix2);
+            symbolTable.setFunctionExtensions("setTensorLayoutBlockSizeNV",     1, &E_GL_NV_cooperative_matrix2);
+            symbolTable.setFunctionExtensions("setTensorLayoutDimensionNV",     1, &E_GL_NV_cooperative_matrix2);
+            symbolTable.setFunctionExtensions("setTensorLayoutStrideNV",        1, &E_GL_NV_cooperative_matrix2);
+            symbolTable.setFunctionExtensions("sliceTensorLayoutNV",            1, &E_GL_NV_cooperative_matrix2);
+            symbolTable.setFunctionExtensions("setTensorLayoutClampValueNV",    1, &E_GL_NV_cooperative_matrix2);
+
+            symbolTable.setFunctionExtensions("createTensorViewNV",             1, &E_GL_NV_cooperative_matrix2);
+            symbolTable.setFunctionExtensions("setTensorViewDimensionsNV",      1, &E_GL_NV_cooperative_matrix2);
+            symbolTable.setFunctionExtensions("setTensorViewStrideNV",          1, &E_GL_NV_cooperative_matrix2);
+            symbolTable.setFunctionExtensions("setTensorViewClipNV",            1, &E_GL_NV_cooperative_matrix2);
         }
 
         if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) {
@@ -9058,8 +9263,6 @@
             BuiltInVariable("gl_RayTmaxNV",              EbvRayTmax,            symbolTable);
             BuiltInVariable("gl_RayTmaxEXT",             EbvRayTmax,            symbolTable);
             BuiltInVariable("gl_CullMaskEXT",            EbvCullMask,           symbolTable);
-            BuiltInVariable("gl_HitTNV",                 EbvHitT,               symbolTable);
-            BuiltInVariable("gl_HitTEXT",                EbvHitT,               symbolTable);
             BuiltInVariable("gl_HitKindNV",              EbvHitKind,            symbolTable);
             BuiltInVariable("gl_HitKindEXT",             EbvHitKind,            symbolTable);
             BuiltInVariable("gl_ObjectToWorldNV",        EbvObjectToWorld,      symbolTable);
@@ -9078,6 +9281,10 @@
             BuiltInVariable("gl_HitKindFrontFacingMicroTriangleNV", EbvHitKindFrontFacingMicroTriangleNV, symbolTable);
             BuiltInVariable("gl_HitKindBackFacingMicroTriangleNV", EbvHitKindBackFacingMicroTriangleNV, symbolTable);
 
+            // gl_HitT variables are aliases of their gl_RayTmax counterparts.
+            RetargetVariable("gl_HitTNV",                "gl_RayTmaxNV",        symbolTable);
+            RetargetVariable("gl_HitTEXT",               "gl_RayTmaxEXT",       symbolTable);
+
             // GL_ARB_shader_ballot
             symbolTable.setVariableExtensions("gl_SubGroupSizeARB",       1, &E_GL_ARB_shader_ballot);
             symbolTable.setVariableExtensions("gl_SubGroupInvocationARB", 1, &E_GL_ARB_shader_ballot);
@@ -9695,6 +9902,8 @@
     symbolTable.relateToOperator("averageRounded",     EOpAverageRounded);
     symbolTable.relateToOperator("multiply32x16",      EOpMul32x16);
     symbolTable.relateToOperator("debugPrintfEXT",     EOpDebugPrintf);
+    symbolTable.relateToOperator("assumeEXT",          EOpAssumeEXT);
+    symbolTable.relateToOperator("expectEXT",          EOpExpectEXT);
 
 
     if (PureOperatorBuiltins) {
@@ -9898,6 +10107,8 @@
             symbolTable.relateToOperator("subgroupShuffleXor",              EOpSubgroupShuffleXor);
             symbolTable.relateToOperator("subgroupShuffleUp",               EOpSubgroupShuffleUp);
             symbolTable.relateToOperator("subgroupShuffleDown",             EOpSubgroupShuffleDown);
+            symbolTable.relateToOperator("subgroupRotate",                  EOpSubgroupRotate);
+            symbolTable.relateToOperator("subgroupClusteredRotate",         EOpSubgroupClusteredRotate);
             symbolTable.relateToOperator("subgroupAdd",                     EOpSubgroupAdd);
             symbolTable.relateToOperator("subgroupMul",                     EOpSubgroupMul);
             symbolTable.relateToOperator("subgroupMin",                     EOpSubgroupMin);
@@ -9960,12 +10171,35 @@
             symbolTable.relateToOperator("shadow2DProjEXT",          EOpTextureProj);
         }
 
+        // GL_EXT_shader_quad_control
+        if ((profile == EEsProfile && version >= 310) ||
+            (profile != EEsProfile && version >= 140)) {
+            symbolTable.relateToOperator("subgroupQuadAll",                     EOpSubgroupQuadAll);
+            symbolTable.relateToOperator("subgroupQuadAny",                     EOpSubgroupQuadAny);
+        }
+
         if ((profile == EEsProfile && version >= 310) ||
             (profile != EEsProfile && version >= 140)) {
             symbolTable.relateToOperator("textureWeightedQCOM",      EOpImageSampleWeightedQCOM);
             symbolTable.relateToOperator("textureBoxFilterQCOM",     EOpImageBoxFilterQCOM);
             symbolTable.relateToOperator("textureBlockMatchSADQCOM", EOpImageBlockMatchSADQCOM);
             symbolTable.relateToOperator("textureBlockMatchSSDQCOM", EOpImageBlockMatchSSDQCOM);
+
+            symbolTable.relateToOperator("textureBlockMatchWindowSSDQCOM", EOpImageBlockMatchWindowSSDQCOM);
+            symbolTable.relateToOperator("textureBlockMatchWindowSADQCOM", EOpImageBlockMatchWindowSADQCOM);
+            symbolTable.relateToOperator("textureBlockMatchGatherSSDQCOM", EOpImageBlockMatchGatherSSDQCOM);
+            symbolTable.relateToOperator("textureBlockMatchGatherSADQCOM", EOpImageBlockMatchGatherSADQCOM);
+        }
+
+        if (profile != EEsProfile && spvVersion.spv == 0) {
+            symbolTable.relateToOperator("texture1DArray", EOpTexture);
+            symbolTable.relateToOperator("texture2DArray", EOpTexture);
+            symbolTable.relateToOperator("shadow1DArray", EOpTexture);
+            symbolTable.relateToOperator("shadow2DArray", EOpTexture);
+
+            symbolTable.relateToOperator("texture1DArrayLod", EOpTextureLod);
+            symbolTable.relateToOperator("texture2DArrayLod", EOpTextureLod);
+            symbolTable.relateToOperator("shadow1DArrayLod", EOpTextureLod);
         }
     }
 
@@ -10059,6 +10293,25 @@
         symbolTable.relateToOperator("coopMatStore",               EOpCooperativeMatrixStore);
         symbolTable.relateToOperator("coopMatMulAdd",              EOpCooperativeMatrixMulAdd);
 
+        symbolTable.relateToOperator("coopMatLoadTensorNV",        EOpCooperativeMatrixLoadTensorNV);
+        symbolTable.relateToOperator("coopMatStoreTensorNV",       EOpCooperativeMatrixStoreTensorNV);
+
+        symbolTable.relateToOperator("coopMatReduceNV",            EOpCooperativeMatrixReduceNV);
+        symbolTable.relateToOperator("coopMatPerElementNV",        EOpCooperativeMatrixPerElementOpNV);
+        symbolTable.relateToOperator("coopMatTransposeNV",         EOpCooperativeMatrixTransposeNV);
+
+        symbolTable.relateToOperator("createTensorLayoutNV",         EOpCreateTensorLayoutNV);
+        symbolTable.relateToOperator("setTensorLayoutBlockSizeNV",   EOpTensorLayoutSetBlockSizeNV);
+        symbolTable.relateToOperator("setTensorLayoutDimensionNV",   EOpTensorLayoutSetDimensionNV);
+        symbolTable.relateToOperator("setTensorLayoutStrideNV",      EOpTensorLayoutSetStrideNV);
+        symbolTable.relateToOperator("sliceTensorLayoutNV",          EOpTensorLayoutSliceNV);
+        symbolTable.relateToOperator("setTensorLayoutClampValueNV",  EOpTensorLayoutSetClampValueNV);
+
+        symbolTable.relateToOperator("createTensorViewNV",           EOpCreateTensorViewNV);
+        symbolTable.relateToOperator("setTensorViewDimensionsNV",    EOpTensorViewSetDimensionNV);
+        symbolTable.relateToOperator("setTensorViewStrideNV",        EOpTensorViewSetStrideNV);
+        symbolTable.relateToOperator("setTensorViewClipNV",          EOpTensorViewSetClipNV);
+
         if (profile != EEsProfile && version >= 460) {
             symbolTable.relateToOperator("fetchMicroTriangleVertexPositionNV", EOpFetchMicroTriangleVertexPositionNV);
             symbolTable.relateToOperator("fetchMicroTriangleVertexBarycentricNV", EOpFetchMicroTriangleVertexBarycentricNV);
@@ -10069,7 +10322,8 @@
         if (profile != EEsProfile && version >= 460) {
             symbolTable.relateToOperator("fetchMicroTriangleVertexPositionNV", EOpFetchMicroTriangleVertexPositionNV);
             symbolTable.relateToOperator("fetchMicroTriangleVertexBarycentricNV", EOpFetchMicroTriangleVertexBarycentricNV);
-        } // fallthrough
+        }
+        [[fallthrough]];
     case EShLangClosestHit:
     case EShLangMiss:
         if (profile != EEsProfile && version >= 460) {
diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp
index a8e3b38..7f707c8 100644
--- a/glslang/MachineIndependent/Intermediate.cpp
+++ b/glslang/MachineIndependent/Intermediate.cpp
@@ -65,10 +65,10 @@
 // Returns the added node.
 //
 
-TIntermSymbol* TIntermediate::addSymbol(long long id, const TString& name, const TType& type, const TConstUnionArray& constArray,
+TIntermSymbol* TIntermediate::addSymbol(long long id, const TString& name, const TString& mangledName, const TType& type, const TConstUnionArray& constArray,
                                         TIntermTyped* constSubtree, const TSourceLoc& loc)
 {
-    TIntermSymbol* node = new TIntermSymbol(id, name, type);
+    TIntermSymbol* node = new TIntermSymbol(id, name, getStage(), type, &mangledName);
     node->setLoc(loc);
     node->setConstArray(constArray);
     node->setConstSubtree(constSubtree);
@@ -80,6 +80,7 @@
 {
     return addSymbol(intermSymbol.getId(),
                      intermSymbol.getName(),
+                     intermSymbol.getMangledName(),
                      intermSymbol.getType(),
                      intermSymbol.getConstArray(),
                      intermSymbol.getConstSubtree(),
@@ -96,14 +97,14 @@
 
 TIntermSymbol* TIntermediate::addSymbol(const TVariable& variable, const TSourceLoc& loc)
 {
-    return addSymbol(variable.getUniqueId(), variable.getName(), variable.getType(), variable.getConstArray(), variable.getConstSubtree(), loc);
+    return addSymbol(variable.getUniqueId(), variable.getName(), variable.getMangledName(), variable.getType(), variable.getConstArray(), variable.getConstSubtree(), loc);
 }
 
 TIntermSymbol* TIntermediate::addSymbol(const TType& type, const TSourceLoc& loc)
 {
     TConstUnionArray unionArray;  // just a null constant
 
-    return addSymbol(0, "", type, unionArray, nullptr, loc);
+    return addSymbol(0, "", "", type, unionArray, nullptr, loc);
 }
 
 //
@@ -163,8 +164,8 @@
         left = addBuiltInFunctionCall(loc, EOpConvPtrToUint64, true, left, TType(EbtUint64));
         right = addBuiltInFunctionCall(loc, EOpConvPtrToUint64, true, right, TType(EbtUint64));
 
-        left = addBuiltInFunctionCall(loc, EOpConvUint64ToInt64, true, left, TType(EbtInt64));
-        right = addBuiltInFunctionCall(loc, EOpConvUint64ToInt64, true, right, TType(EbtInt64));
+        left = addBuiltInFunctionCall(loc, EOpConvNumeric, true, left, TType(EbtInt64));
+        right = addBuiltInFunctionCall(loc, EOpConvNumeric, true, right, TType(EbtInt64));
 
         left = addBinaryMath(EOpSub, left, right, loc);
 
@@ -376,6 +377,7 @@
     case EOpNegative:
         if (child->getType().getBasicType() == EbtStruct || child->getType().isArray())
             return nullptr;
+        break;
     default: break; // some compilers want this
     }
 
@@ -566,222 +568,12 @@
 
 bool TIntermediate::buildConvertOp(TBasicType dst, TBasicType src, TOperator& newOp) const
 {
-    switch (dst) {
-    case EbtDouble:
-        switch (src) {
-        case EbtUint:    newOp = EOpConvUintToDouble;    break;
-        case EbtBool:    newOp = EOpConvBoolToDouble;    break;
-        case EbtFloat:   newOp = EOpConvFloatToDouble;   break;
-        case EbtInt:     newOp = EOpConvIntToDouble;     break;
-        case EbtInt8:    newOp = EOpConvInt8ToDouble;    break;
-        case EbtUint8:   newOp = EOpConvUint8ToDouble;   break;
-        case EbtInt16:   newOp = EOpConvInt16ToDouble;   break;
-        case EbtUint16:  newOp = EOpConvUint16ToDouble;  break;
-        case EbtFloat16: newOp = EOpConvFloat16ToDouble; break;
-        case EbtInt64:   newOp = EOpConvInt64ToDouble;   break;
-        case EbtUint64:  newOp = EOpConvUint64ToDouble;  break;
-        default:
-            return false;
-        }
-        break;
-    case EbtFloat:
-        switch (src) {
-        case EbtInt:     newOp = EOpConvIntToFloat;     break;
-        case EbtUint:    newOp = EOpConvUintToFloat;    break;
-        case EbtBool:    newOp = EOpConvBoolToFloat;    break;
-        case EbtDouble:  newOp = EOpConvDoubleToFloat;  break;
-        case EbtInt8:    newOp = EOpConvInt8ToFloat;    break;
-        case EbtUint8:   newOp = EOpConvUint8ToFloat;   break;
-        case EbtInt16:   newOp = EOpConvInt16ToFloat;   break;
-        case EbtUint16:  newOp = EOpConvUint16ToFloat;  break;
-        case EbtFloat16: newOp = EOpConvFloat16ToFloat; break;
-        case EbtInt64:   newOp = EOpConvInt64ToFloat;   break;
-        case EbtUint64:  newOp = EOpConvUint64ToFloat;  break;
-        default:
-            return false;
-        }
-        break;
-    case EbtFloat16:
-        switch (src) {
-        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 false;
-        }
-        break;
-    case EbtBool:
-        switch (src) {
-        case EbtInt:     newOp = EOpConvIntToBool;     break;
-        case EbtUint:    newOp = EOpConvUintToBool;    break;
-        case EbtFloat:   newOp = EOpConvFloatToBool;   break;
-        case EbtDouble:  newOp = EOpConvDoubleToBool;  break;
-        case EbtInt8:    newOp = EOpConvInt8ToBool;    break;
-        case EbtUint8:   newOp = EOpConvUint8ToBool;   break;
-        case EbtInt16:   newOp = EOpConvInt16ToBool;   break;
-        case EbtUint16:  newOp = EOpConvUint16ToBool;  break;
-        case EbtFloat16: newOp = EOpConvFloat16ToBool; break;
-        case EbtInt64:   newOp = EOpConvInt64ToBool;   break;
-        case EbtUint64:  newOp = EOpConvUint64ToBool;  break;
-        default:
-            return false;
-        }
-        break;
-    case EbtInt8:
-        switch (src) {
-        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 false;
-        }
-        break;
-    case EbtUint8:
-        switch (src) {
-        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 false;
-        }
-        break;
-
-    case EbtInt16:
-        switch (src) {
-        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 false;
-        }
-        break;
-    case EbtUint16:
-        switch (src) {
-        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 false;
-        }
-        break;
-
-    case EbtInt:
-        switch (src) {
-        case EbtUint:    newOp = EOpConvUintToInt;    break;
-        case EbtBool:    newOp = EOpConvBoolToInt;    break;
-        case EbtFloat:   newOp = EOpConvFloatToInt;   break;
-        case EbtInt8:    newOp = EOpConvInt8ToInt;    break;
-        case EbtUint8:   newOp = EOpConvUint8ToInt;   break;
-        case EbtInt16:   newOp = EOpConvInt16ToInt;   break;
-        case EbtUint16:  newOp = EOpConvUint16ToInt;  break;
-        case EbtDouble:  newOp = EOpConvDoubleToInt;  break;
-        case EbtFloat16: newOp = EOpConvFloat16ToInt; break;
-        case EbtInt64:   newOp = EOpConvInt64ToInt;   break;
-        case EbtUint64:  newOp = EOpConvUint64ToInt;  break;
-        default:
-            return false;
-        }
-        break;
-    case EbtUint:
-        switch (src) {
-        case EbtInt:     newOp = EOpConvIntToUint;     break;
-        case EbtBool:    newOp = EOpConvBoolToUint;    break;
-        case EbtFloat:   newOp = EOpConvFloatToUint;   break;
-        case EbtInt8:    newOp = EOpConvInt8ToUint;    break;
-        case EbtUint8:   newOp = EOpConvUint8ToUint;   break;
-        case EbtInt16:   newOp = EOpConvInt16ToUint;   break;
-        case EbtUint16:  newOp = EOpConvUint16ToUint;  break;
-        case EbtDouble:  newOp = EOpConvDoubleToUint;  break;
-        case EbtFloat16: newOp = EOpConvFloat16ToUint; break;
-        case EbtInt64:   newOp = EOpConvInt64ToUint;   break;
-        case EbtUint64:  newOp = EOpConvUint64ToUint;  break;
-        // For bindless texture type conversion, add a dummy convert op, just
-        // to generate a new TIntermTyped
-        // uvec2(any sampler type)
-        // uvec2(any image type)
-        case EbtSampler: newOp = EOpConvIntToUint;  break;
-        default:
-            return false;
-        }
-        break;
-    case EbtInt64:
-        switch (src) {
-        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 false;
-        }
-        break;
-    case EbtUint64:
-        switch (src) {
-        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 false;
-        }
-        break;
-    default:
-        return false;
+    if ((isTypeInt(dst) || isTypeFloat(dst) || dst == EbtBool) &&
+        (isTypeInt(src) || isTypeFloat(src) || src == EbtBool)) {
+        newOp = EOpConvNumeric;
+        return true;
     }
-    return true;
+    return false;
 }
 
 // This is 'mechanism' here, it does any conversion told.
@@ -1033,6 +825,10 @@
         op != EOpConstructCooperativeMatrixKHR)
         return nullptr;
 
+    if (node->getType().isTensorLayoutNV() ||
+        node->getType().isTensorViewNV())
+        return nullptr;
+
     // Note: callers are responsible for other aspects of shape,
     // like vector and matrix sizes.
 
@@ -1277,6 +1073,7 @@
         // matrix multiply does not change shapes
         if (lhsNode->isMatrix() && rhsNode->isMatrix())
             return;
+        [[fallthrough]];
     case EOpAdd:
     case EOpSub:
     case EOpDiv:
@@ -2317,6 +2114,40 @@
     return aggNode;
 }
 
+TIntermAggregate* TIntermediate::mergeAggregate(TIntermNode* left, TIntermNode* right)
+{
+    if (left == nullptr && right == nullptr)
+        return nullptr;
+
+    TIntermAggregate* aggNode = nullptr;
+    if (left != nullptr)
+        aggNode = left->getAsAggregate();
+    if (aggNode == nullptr || aggNode->getOp() != EOpNull) {
+        aggNode = new TIntermAggregate;
+        if (left != nullptr)
+            aggNode->getSequence().push_back(left);
+    }
+
+    TIntermAggregate* rhsagg = right->getAsAggregate();
+    if (rhsagg == nullptr || rhsagg->getOp() != EOpNull)
+        aggNode->getSequence().push_back(right);
+    else
+        aggNode->getSequence().insert(aggNode->getSequence().end(),
+                                      rhsagg->getSequence().begin(),
+                                      rhsagg->getSequence().end());
+
+    return aggNode;
+}
+
+TIntermAggregate* TIntermediate::mergeAggregate(TIntermNode* left, TIntermNode* right, const TSourceLoc& loc)
+{
+    TIntermAggregate* aggNode = mergeAggregate(left, right);
+    if (aggNode)
+        aggNode->setLoc(loc);
+
+    return aggNode;
+}
+
 //
 // Turn an existing node into an aggregate.
 //
@@ -2590,6 +2421,18 @@
 {
     assert(baseType == EbtFloat || baseType == EbtDouble || baseType == EbtFloat16);
 
+    if (isEsProfile() && (baseType == EbtFloat || baseType == EbtFloat16)) {
+        int exponent = 0;
+        frexp(d, &exponent);
+        int minExp = baseType == EbtFloat ? -126 : -14;
+        int maxExp = baseType == EbtFloat ? 127 : 15;
+        if (exponent > maxExp) { //overflow, d = inf
+            d = std::numeric_limits<double>::infinity();
+        } else if (exponent < minExp) { //underflow, d = 0.0;
+            d = 0.0;
+        }
+    }
+
     TConstUnionArray unionArray(1);
     unionArray[0].setDConst(d);
 
@@ -2647,28 +2490,42 @@
 // 'swizzleOkay' says whether or not it is okay to consider a swizzle
 // a valid part of the dereference chain.
 //
-// 'BufferReferenceOk' says if type is buffer_reference, the routine stop to find the most left node.
+// 'bufferReferenceOk' says if type is buffer_reference, the routine will stop to find the most left node.
 //
+// 'proc' is an optional function to run on each node that is processed during the traversal. 'proc' must
+// return true to continue the traversal, or false to end the traversal early.
 //
 
-const TIntermTyped* TIntermediate::findLValueBase(const TIntermTyped* node, bool swizzleOkay , bool bufferReferenceOk)
+const TIntermTyped* TIntermediate::traverseLValueBase(const TIntermTyped* node, bool swizzleOkay,
+                                                      bool bufferReferenceOk,
+                                                      std::function<bool(const TIntermNode&)> proc)
 {
     do {
         const TIntermBinary* binary = node->getAsBinaryNode();
-        if (binary == nullptr)
+        if (binary == nullptr) {
+            if (proc) {
+                proc(*node);
+            }
             return node;
+        }
         TOperator op = binary->getOp();
-        if (op != EOpIndexDirect && op != EOpIndexIndirect && op != EOpIndexDirectStruct && op != EOpVectorSwizzle && op != EOpMatrixSwizzle)
+        if (op != EOpIndexDirect && op != EOpIndexIndirect && op != EOpIndexDirectStruct && op != EOpVectorSwizzle &&
+            op != EOpMatrixSwizzle)
             return nullptr;
-        if (! swizzleOkay) {
+        if (!swizzleOkay) {
             if (op == EOpVectorSwizzle || op == EOpMatrixSwizzle)
                 return nullptr;
             if ((op == EOpIndexDirect || op == EOpIndexIndirect) &&
                 (binary->getLeft()->getType().isVector() || binary->getLeft()->getType().isScalar()) &&
-                ! binary->getLeft()->getType().isArray())
+                !binary->getLeft()->getType().isArray())
                 return nullptr;
         }
-        node = node->getAsBinaryNode()->getLeft();
+        if (proc) {
+            if (!proc(*node)) {
+                return node;
+            }
+        }
+        node = binary->getLeft();
         if (bufferReferenceOk && node->isReference())
             return node;
     } while (true);
@@ -2795,10 +2652,9 @@
     //}
 
     if (language == EShLangVertex) {
-        // the names won't be found in the symbol table unless the versions are right,
-        // so version logic does not need to be repeated here
         addSymbolLinkageNode(linkage, symbolTable, "gl_VertexID");
-        addSymbolLinkageNode(linkage, symbolTable, "gl_InstanceID");
+        if ((version < 140 && requestedExtensions.find(E_GL_EXT_draw_instanced) != requestedExtensions.end()) || version >= 140)
+            addSymbolLinkageNode(linkage, symbolTable, "gl_InstanceID");
     }
 
     // Add a child to the root node for the linker objects
@@ -2901,17 +2757,16 @@
     // (However, some floating-point operations result in bool, like ">",
     // so are handled later.)
     if (node.getType().isFloatingDomain()) {
+        if (IsOpNumericConv(node.getOp()) &&
+            isTypeFloat(node.getType().getBasicType()) &&
+            isTypeFloat(node.getAsUnaryNode()->getOperand()->getAsTyped()->getType().getBasicType())) {
+            return true;
+        }
         switch (node.getOp()) {
         case EOpIndexDirect:
         case EOpIndexIndirect:
         case EOpIndexDirectStruct:
         case EOpVectorSwizzle:
-        case EOpConvFloatToDouble:
-        case EOpConvDoubleToFloat:
-        case EOpConvFloat16ToFloat:
-        case EOpConvFloatToFloat16:
-        case EOpConvFloat16ToDouble:
-        case EOpConvDoubleToFloat16:
             return true;
         default:
             return false;
@@ -2926,6 +2781,15 @@
 
     // So, for now, we can assume everything left is non-floating-point...
 
+    if (IsOpNumericConv(node.getOp())) {
+        TBasicType srcType = node.getAsUnaryNode()->getOperand()->getAsTyped()->getType().getBasicType();
+        TBasicType dstType = node.getType().getBasicType();
+        if ((isTypeInt(srcType) || srcType == EbtBool) &&
+            (isTypeInt(dstType) || dstType == EbtBool)) {
+            return true;
+        }
+    }
+
     // Now check for integer/bool-based operations
     switch (node.getOp()) {
 
@@ -2935,98 +2799,6 @@
     case EOpIndexDirectStruct:
     case EOpVectorSwizzle:
 
-    // (u)int* -> bool
-    case EOpConvInt8ToBool:
-    case EOpConvInt16ToBool:
-    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 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:
-    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:
     case EOpLogicalNot:
@@ -3430,6 +3202,7 @@
         // check for non-Boolean operands
         if (left->getBasicType() == EbtBool || right->getBasicType() == EbtBool)
             return false;
+        break;
 
     default:
         break;
@@ -3473,13 +3246,14 @@
         if (left->getType() == right->getType())
             return true;
 
-        // Fall through
+        [[fallthrough]];
 
     case EOpMul:
     case EOpMulAssign:
         // At least the basic type has to match
         if (left->getBasicType() != right->getBasicType())
             return false;
+        break;
 
     default:
         break;
@@ -3622,7 +3396,7 @@
     case EOpAssign:
         if (left->getVectorSize() != right->getVectorSize() || left->getMatrixCols() != right->getMatrixCols() || left->getMatrixRows() != right->getMatrixRows())
             return false;
-        // fall through
+        [[fallthrough]];
 
     case EOpAdd:
     case EOpSub:
diff --git a/glslang/MachineIndependent/ParseContextBase.cpp b/glslang/MachineIndependent/ParseContextBase.cpp
index d73f403..f7895d9 100644
--- a/glslang/MachineIndependent/ParseContextBase.cpp
+++ b/glslang/MachineIndependent/ParseContextBase.cpp
@@ -59,7 +59,7 @@
     safe_vsprintf(szExtraInfo, maxSize, szExtraInfoFormat, args);
 
     infoSink.info.prefix(prefix);
-    infoSink.info.location(loc);
+    infoSink.info.location(loc, messages & EShMsgAbsolutePath, messages & EShMsgDisplayErrorColumn);
     infoSink.info << "'" << szToken <<  "' : " << szReason << " " << szExtraInfo << "\n";
 
     if (prefix == EPrefixError) {
@@ -208,7 +208,7 @@
     //
     // If we get here, we have an error and a message.
     //
-    const TIntermTyped* leftMostTypeNode = TIntermediate::findLValueBase(node, true);
+    const TIntermTyped* leftMostTypeNode = TIntermediate::traverseLValueBase(node, true);
 
     if (symNode)
         error(loc, " l-value required", op, "\"%s\" (%s)", symbol, message);
@@ -234,7 +234,7 @@
     const TIntermSymbol* symNode = node->getAsSymbolNode();
 
     if (node->getQualifier().isWriteOnly()) {
-        const TIntermTyped* leftMostTypeNode = TIntermediate::findLValueBase(node, true);
+        const TIntermTyped* leftMostTypeNode = TIntermediate::traverseLValueBase(node, true);
 
         if (symNode != nullptr)
             error(loc, "can't read from writeonly object: ", op, symNode->getName().c_str());
@@ -257,6 +257,7 @@
             case EOpVectorSwizzle:
             case EOpMatrixSwizzle:
                 rValueErrorCheck(loc, op, binaryNode->getLeft());
+                break;
             default:
                 break;
             }
@@ -626,10 +627,8 @@
     if (symbol) {
         if (memberType != symbol->getType()) {
             TString err;
-            err += "\"" + memberType.getCompleteString() + "\"";
-            err += " versus ";
-            err += "\"" + symbol->getType().getCompleteString() + "\"";
-            error(loc, "Types must match:", memberType.getFieldName().c_str(), err.c_str());
+            err += "Redeclaration: already declared as \"" + symbol->getType().getCompleteString() + "\"";
+            error(loc, "", memberName.c_str(), err.c_str());
         }
         return;
     }
@@ -724,6 +723,24 @@
     if (parsingBuiltins)
         return;
 
+    for (const TString& relaxedSymbol : relaxedSymbols)
+    {
+        TSymbol* symbol = symbolTable.find(relaxedSymbol);
+        TType& type = symbol->getWritableType();
+        for (const TTypeLoc& typeLoc : *type.getStruct())
+        {
+            if (typeLoc.type->isOpaque())
+            {
+                typeLoc.type->getSampler() = TSampler{};
+                typeLoc.type->setBasicType(EbtInt);
+                TString fieldName("/*");
+                fieldName.append(typeLoc.type->getFieldName());
+                fieldName.append("*/");
+                typeLoc.type->setFieldName(fieldName);
+            }
+        }
+    }
+
     // Transfer the linkage symbols to AST nodes, preserving order.
     TIntermAggregate* linkage = new TIntermAggregate;
     for (auto i = linkageSymbols.begin(); i != linkageSymbols.end(); ++i)
diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp
index 592e9aa..41c6179 100644
--- a/glslang/MachineIndependent/ParseHelper.cpp
+++ b/glslang/MachineIndependent/ParseHelper.cpp
@@ -4,6 +4,7 @@
 // Copyright (C) 2015-2018 Google, Inc.
 // Copyright (C) 2017, 2019 ARM Limited.
 // Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
+// Modifications Copyright (C) 2024 Ravi Prakash Singh.
 //
 // All rights reserved.
 //
@@ -41,7 +42,6 @@
 #include "Initialize.h"
 #include "Scan.h"
 
-#include "../OSDependent/osinclude.h"
 #include <algorithm>
 
 #include "preprocessor/PpContext.h"
@@ -399,6 +399,10 @@
         if (spvVersion.spv < glslang::EShTargetSpv_1_3)
             error(loc, "requires SPIR-V 1.3", "#pragma use_variable_pointers", "");
         intermediate.setUseVariablePointers();
+    } else if (spvVersion.spv > 0 && tokens[0].compare("use_replicated_composites") == 0) {
+        if (tokens.size() != 1)
+            error(loc, "extra tokens", "#pragma", "");
+        intermediate.setReplicatedComposites();
     } else if (tokens[0].compare("once") == 0) {
         warn(loc, "not implemented", "#pragma once", "");
     } else if (tokens[0].compare("glslang_binary_double_output") == 0) {
@@ -492,7 +496,7 @@
                 if ((variable->getMangledName() == "gl_PrimitiveTriangleIndicesEXT" && primitiveType != ElgTriangles) ||
                     (variable->getMangledName() == "gl_PrimitiveLineIndicesEXT" && primitiveType != ElgLines) ||
                     (variable->getMangledName() == "gl_PrimitivePointIndicesEXT" && primitiveType != ElgPoints)) {
-                    error(loc, "cannot be used (ouput primitive type mismatch)", string->c_str(), "");
+                    error(loc, "cannot be used (output primitive type mismatch)", string->c_str(), "");
                     variable = nullptr;
                 }
             }
@@ -502,8 +506,18 @@
         }
 
         // Recovery, if it wasn't found or was not a variable.
-        if (! variable)
-            variable = new TVariable(string, TType(EbtVoid));
+        if (! variable) {
+            bool builtIn = false;
+            TVector<const TFunction*> candidateList;
+            symbolTable.findFunctionNameList(*string + "(", candidateList, builtIn);
+
+            // If it's a function, pass the name/mangledName
+            if (!candidateList.empty() && !builtIn) {
+                variable = new TVariable(&candidateList[0]->getName(), &candidateList[0]->getMangledName(), TType(EbtFunction));
+            } else {
+                variable = new TVariable(string, TType(EbtVoid));
+            }
+        }
 
         if (variable->getType().getQualifier().isFrontEndConstant())
             node = intermediate.addConstantUnion(variable->getConstArray(), variable->getType(), loc);
@@ -598,6 +612,10 @@
                 indexValue >= resources.maxCullDistances) {
                 error(loc, "gl_CullDistance", "[", "array index out of range '%d'", indexValue);
             }
+            else if (base->getQualifier().builtIn == EbvSampleMask &&
+                indexValue >= (resources.maxSamples + 31) / 32) {
+                error(loc, "gl_SampleMask", "[", "array index out of range '%d'", indexValue);
+            }
             // For 2D per-view builtin arrays, update the inner dimension size in parent type
             if (base->getQualifier().isPerView() && base->getQualifier().builtIn != EbvNone) {
                 TIntermBinary* binaryNode = base->getAsBinaryNode();
@@ -632,7 +650,7 @@
             else {
                 // input/output blocks either don't exist or can't be variably indexed
             }
-        } else if (language == EShLangFragment && base->getQualifier().isPipeOutput())
+        } else if (language == EShLangFragment && base->getQualifier().isPipeOutput() && base->getQualifier().builtIn != EbvSampleMask)
             requireProfile(base->getLoc(), ~EEsProfile, "variable indexing fragment shader output array");
         else if (base->getBasicType() == EbtSampler && version >= 130) {
             const char* explanation = "variable indexing sampler array";
@@ -993,17 +1011,25 @@
                 break;
             }
         }
+
         if (fieldFound) {
-            if (base->getType().getQualifier().isFrontEndConstant())
-                result = intermediate.foldDereference(base, member, loc);
-            else {
-                blockMemberExtensionCheck(loc, base, member, field);
-                TIntermTyped* index = intermediate.addConstantUnion(member, loc);
-                result = intermediate.addIndex(EOpIndexDirectStruct, base, index, loc);
-                result->setType(*(*fields)[member].type);
-                if ((*fields)[member].type->getQualifier().isIo())
-                    intermediate.addIoAccessed(field);
+            if (spvVersion.vulkan != 0 && spvVersion.vulkanRelaxed)
+                result = vkRelaxedRemapDotDereference(loc, *base, *(*fields)[member].type, field);
+
+            if (result == base)
+            {
+                if (base->getType().getQualifier().isFrontEndConstant())
+                    result = intermediate.foldDereference(base, member, loc);
+                else {
+                    blockMemberExtensionCheck(loc, base, member, field);
+                    TIntermTyped* index = intermediate.addConstantUnion(member, loc);
+                    result = intermediate.addIndex(EOpIndexDirectStruct, base, index, loc);
+                    result->setType(*(*fields)[member].type);
+                    if ((*fields)[member].type->getQualifier().isIo())
+                        intermediate.addIoAccessed(field);
+                }
             }
+
             inheritMemoryQualifiers(base->getQualifier(), result->getWritableType().getQualifier());
         } else {
             auto baseSymbol = base;
@@ -1343,6 +1369,10 @@
             //  - a user function.
 
             // Error check for a function requiring specific extensions present.
+            if (builtIn &&
+                (fnCandidate->getBuiltInOp() == EOpSubgroupQuadAll || fnCandidate->getBuiltInOp() == EOpSubgroupQuadAny))
+                requireExtensions(loc, 1, &E_GL_EXT_shader_quad_control, fnCandidate->getName().c_str());
+
             if (builtIn && fnCandidate->getNumExtensions())
                 requireExtensions(loc, fnCandidate->getNumExtensions(), fnCandidate->getExtensions(), fnCandidate->getName().c_str());
 
@@ -1352,7 +1382,10 @@
                 requireInt16Arithmetic(loc, "built-in function", "(u)int16 types can only be in uniform block or buffer storage");
             if (builtIn && fnCandidate->getType().contains8BitInt())
                 requireInt8Arithmetic(loc, "built-in function", "(u)int8 types can only be in uniform block or buffer storage");
-
+            if (builtIn && (fnCandidate->getBuiltInOp() == EOpTextureFetch || fnCandidate->getBuiltInOp() == EOpTextureQuerySize)) {
+                if ((*fnCandidate)[0].type->getSampler().isMultiSample() && version <= 140)
+                    requireExtensions(loc, 1, &E_GL_ARB_texture_multisample, fnCandidate->getName().c_str());
+            }
             if (arguments != nullptr) {
                 // Make sure qualifications work for these arguments.
                 TIntermAggregate* aggregate = arguments->getAsAggregate();
@@ -1466,13 +1499,7 @@
                 result = addOutputArgumentConversions(*fnCandidate, *result->getAsAggregate());
             }
 
-            if (result->getAsTyped()->getType().isCoopMat() &&
-               !result->getAsTyped()->getType().isParameterized()) {
-                assert(fnCandidate->getBuiltInOp() == EOpCooperativeMatrixMulAdd ||
-                       fnCandidate->getBuiltInOp() == EOpCooperativeMatrixMulAddNV);
-
-                result->setType(result->getAsAggregate()->getSequence()[2]->getAsTyped()->getType());
-            }
+            handleCoopMat2FunctionCall(loc, fnCandidate, result, arguments);
         }
     }
 
@@ -1484,6 +1511,224 @@
     return result;
 }
 
+void TParseContext::handleCoopMat2FunctionCall(const TSourceLoc& loc, const TFunction* fnCandidate, TIntermTyped* result, TIntermNode* arguments)
+{
+    if (arguments && arguments->getAsAggregate()) {
+        auto &sequence = arguments->getAsAggregate()->getSequence();
+        for (uint32_t i = 0; i < sequence.size(); ++i) {
+            auto param = sequence[i];
+            if (param->getAsTyped()->getBasicType() == EbtFunction) {
+                // Add the function to the callgraph
+                intermediate.addToCallGraph(infoSink, currentCaller, param->getAsSymbolNode()->getMangledName());
+
+                // error checking that all parameters are 'const in'
+                if (fnCandidate->getBuiltInOp() == EOpCooperativeMatrixLoadTensorNV ||
+                    fnCandidate->getBuiltInOp() == EOpCooperativeMatrixReduceNV ||
+                    fnCandidate->getBuiltInOp() == EOpCooperativeMatrixPerElementOpNV) {
+                    const TFunction* func = symbolTable.find(param->getAsSymbolNode()->getMangledName())->getAsFunction();
+                    for (int i = 0; i < func->getParamCount(); ++i) {
+                        const TParameter& arg = (*func)[i];
+                        const TQualifier& formalQualifier = arg.type->getQualifier();
+                        if (formalQualifier.storage != EvqConstReadOnly) {
+                            error(loc, "function parameters must all be qualified 'const in'", param->getAsSymbolNode()->getMangledName().c_str(), "");
+                        }
+                    }
+                }
+
+                // error checking decodeFunc parameters are (reference, uint32_t[], uint32_t[])
+                if (fnCandidate->getBuiltInOp() == EOpCooperativeMatrixLoadTensorNV) {
+                    const TFunction* decodeFunc = symbolTable.find(param->getAsSymbolNode()->getMangledName())->getAsFunction();
+
+                    if (decodeFunc->getParamCount() != 3) {
+                        error(loc, "must have three parameters", param->getAsSymbolNode()->getMangledName().c_str(), "");
+                    }
+
+                    if ((*decodeFunc)[0].type->getBasicType() != EbtReference) {
+                        error(loc, "first parameter must be buffer reference type", param->getAsSymbolNode()->getMangledName().c_str(), "");
+                    }
+                    if ((*decodeFunc)[1].type->getBasicType() != EbtUint || (*decodeFunc)[2].type->getBasicType() != EbtUint) {
+                        error(loc, "coordinate parameters must be uint32_t", param->getAsSymbolNode()->getMangledName().c_str(), "");
+                    }
+                    if (!(*decodeFunc)[1].type->isArray() || !(*decodeFunc)[2].type->isArray()) {
+                        error(loc, "coordinate parameters must be uint32_t", param->getAsSymbolNode()->getMangledName().c_str(), "");
+                    }
+                }
+                
+                // error checking reduce function has matching parameters
+                if (fnCandidate->getBuiltInOp() == EOpCooperativeMatrixReduceNV) {
+                    const TFunction* combineOp = symbolTable.find(param->getAsSymbolNode()->getMangledName())->getAsFunction();
+
+                    if (combineOp->getParamCount() != 2) {
+                        error(loc, "must have two parameters", param->getAsSymbolNode()->getMangledName().c_str(), "");
+                    }
+
+                    for (int i = 0; i < combineOp->getParamCount(); ++i) {
+                        const TParameter& arg = (*combineOp)[i];
+                        if (sequence[1]->getAsTyped()->getType().getBasicType() != arg.type->getBasicType()) {
+                            error(loc, "parameter types must match cooperative matrix component type", param->getAsSymbolNode()->getMangledName().c_str(), "");
+                        }
+                    }
+                    if (sequence[1]->getAsTyped()->getType().getBasicType() != combineOp->getType().getBasicType()) {
+                        error(loc, "return type must match cooperative matrix component type", param->getAsSymbolNode()->getMangledName().c_str(), "");
+                    }
+                }
+
+                // error checking perelement op has correct parameters
+                if (fnCandidate->getBuiltInOp() == EOpCooperativeMatrixPerElementOpNV) {
+                    const TFunction* elemOp = symbolTable.find(param->getAsSymbolNode()->getMangledName())->getAsFunction();
+
+                    if (sequence[1]->getAsTyped()->getType() != sequence[0]->getAsTyped()->getType()) {
+                        error(loc, "cooperative matrix input and result types must match", "", "");
+                    }
+
+                    if (elemOp->getParamCount() < 3) {
+                        error(loc, "not enough parameters", param->getAsSymbolNode()->getMangledName().c_str(), "");
+                    } else if (elemOp->getParamCount() != (int)sequence.size()) {
+                        error(loc, "number of parameters must match call to coopMatPerElementNV", param->getAsSymbolNode()->getMangledName().c_str(), "");
+                    } else {
+                        if ((*elemOp)[0].type->getBasicType() != EbtUint || (*elemOp)[1].type->getBasicType() != EbtUint) {
+                            error(loc, "row/column parameters must be uint32_t", param->getAsSymbolNode()->getMangledName().c_str(), "");
+                        }
+
+                        const TParameter& matArg = (*elemOp)[2];
+                        if (sequence[1]->getAsTyped()->getType().getBasicType() != matArg.type->getBasicType()) {
+                            error(loc, "third parameter must match cooperative matrix component type", param->getAsSymbolNode()->getMangledName().c_str(), "");
+                        }
+
+                        for (int i = 3; i < elemOp->getParamCount(); ++i) {
+                            const TParameter& arg = (*elemOp)[i];
+                            if (sequence[i]->getAsTyped()->getType().getBasicType() != arg.type->getBasicType()) {
+                                error(loc, "parameter types must match or be cooperative matrix component type", param->getAsSymbolNode()->getMangledName().c_str(), "");
+                            }
+                        }
+                        if (sequence[1]->getAsTyped()->getType().getBasicType() != elemOp->getType().getBasicType()) {
+                            error(loc, "return type must match cooperative matrix component type", param->getAsSymbolNode()->getMangledName().c_str(), "");
+                        }
+                    }
+                }
+            }
+        }
+    }
+    if ((result->getAsTyped()->getType().isCoopMat() ||
+         result->getAsTyped()->getType().isTensorLayoutNV() ||
+         result->getAsTyped()->getType().isTensorViewNV()) &&
+       !result->getAsTyped()->getType().isParameterized()) {
+        assert(fnCandidate->getBuiltInOp() == EOpCooperativeMatrixMulAdd ||
+               fnCandidate->getBuiltInOp() == EOpCooperativeMatrixMulAddNV ||
+               fnCandidate->getBuiltInOp() == EOpCooperativeMatrixReduceNV ||
+               fnCandidate->getBuiltInOp() == EOpCooperativeMatrixPerElementOpNV ||
+               fnCandidate->getBuiltInOp() == EOpCooperativeMatrixTransposeNV ||
+               fnCandidate->getBuiltInOp() == EOpCreateTensorLayoutNV ||
+               fnCandidate->getBuiltInOp() == EOpTensorLayoutSetDimensionNV ||
+               fnCandidate->getBuiltInOp() == EOpTensorLayoutSetBlockSizeNV ||
+               fnCandidate->getBuiltInOp() == EOpTensorLayoutSetStrideNV ||
+               fnCandidate->getBuiltInOp() == EOpTensorLayoutSliceNV ||
+               fnCandidate->getBuiltInOp() == EOpTensorLayoutSetClampValueNV ||
+               fnCandidate->getBuiltInOp() == EOpCreateTensorViewNV ||
+               fnCandidate->getBuiltInOp() == EOpTensorViewSetDimensionNV ||
+               fnCandidate->getBuiltInOp() == EOpTensorViewSetStrideNV ||
+               fnCandidate->getBuiltInOp() == EOpTensorViewSetClipNV);
+
+        if (fnCandidate->getBuiltInOp() == EOpCreateTensorLayoutNV) {
+
+            // Convert template parameters to arraySizes/typeParameters
+            TArraySizes *arraySizes = new TArraySizes;
+            for (uint32_t i = 0; i < 2; ++i) {
+                TIntermNode *param {};
+                if (arguments->getAsConstantUnion()) {
+                    if (i == 0) {
+                        param = arguments;
+                    }
+                } else {
+                    assert(arguments->getAsAggregate());
+                    auto &sequence = arguments->getAsAggregate()->getSequence();
+                    if (i < sequence.size()) {
+                        param = sequence[i];
+                    }
+                }
+                if (param) {
+                    if (param->getAsTyped()->getType().getQualifier().isSpecConstant()) {
+                        uint32_t value = param->getAsSymbolNode()->getConstArray()[0].getIConst();
+                        arraySizes->addInnerSize(value, param->getAsTyped());
+                    } else {
+                        uint32_t value = param->getAsConstantUnion()->getConstArray()[0].getIConst();
+                        arraySizes->addInnerSize(value);
+                    }
+                } else {
+                    // gl_CooperativeMatrixClampModeUndefined
+                    arraySizes->addInnerSize(0);
+                }
+            }
+            TTypeParameters typeParameters;
+            typeParameters.arraySizes = arraySizes;
+
+            TType resultType;
+            resultType.deepCopy(result->getAsTyped()->getType());
+
+            resultType.copyTypeParameters(typeParameters);
+            result->setType(resultType);
+        } else if (fnCandidate->getBuiltInOp() == EOpCreateTensorViewNV) {
+
+            // Convert template parameters to arraySizes/typeParameters
+            TArraySizes *arraySizes = new TArraySizes;
+            for (uint32_t i = 0; i < 7; ++i) {
+                TIntermNode *param {};
+                if (arguments->getAsConstantUnion()) {
+                    if (i == 0) {
+                        param = arguments;
+                    }
+                } else {
+                    assert(arguments->getAsAggregate());
+                    auto &sequence = arguments->getAsAggregate()->getSequence();
+                    if (i < sequence.size()) {
+                        param = sequence[i];
+                    }
+                }
+                if (param) {
+                    if (param->getAsTyped()->getType().getQualifier().isSpecConstant()) {
+                        uint32_t value = param->getAsSymbolNode()->getConstArray()[0].getIConst();
+                        arraySizes->addInnerSize(value, param->getAsTyped());
+                    } else {
+                        uint32_t value = param->getAsConstantUnion()->getConstArray()[0].getIConst();
+                        arraySizes->addInnerSize(value);
+                    }
+                } else {
+                    uint32_t value = 0;
+                    if (i >= 2) {
+                        // default permutation values are an increasing sequence
+                        value = i - 2;
+                    }
+                    arraySizes->addInnerSize(value);
+                }
+            }
+            TTypeParameters typeParameters;
+            typeParameters.arraySizes = arraySizes;
+
+            TType resultType;
+            resultType.deepCopy(result->getAsTyped()->getType());
+
+            resultType.copyTypeParameters(typeParameters);
+            result->setType(resultType);
+        } else if (fnCandidate->getBuiltInOp() == EOpCooperativeMatrixReduceNV ||
+                   fnCandidate->getBuiltInOp() == EOpCooperativeMatrixPerElementOpNV ||
+                   fnCandidate->getBuiltInOp() == EOpCooperativeMatrixTransposeNV ||
+                   fnCandidate->getBuiltInOp() == EOpTensorLayoutSetDimensionNV ||
+                   fnCandidate->getBuiltInOp() == EOpTensorLayoutSetBlockSizeNV ||
+                   fnCandidate->getBuiltInOp() == EOpTensorLayoutSetStrideNV ||
+                   fnCandidate->getBuiltInOp() == EOpTensorLayoutSliceNV ||
+                   fnCandidate->getBuiltInOp() == EOpTensorLayoutSetClampValueNV ||
+                   fnCandidate->getBuiltInOp() == EOpTensorViewSetDimensionNV ||
+                   fnCandidate->getBuiltInOp() == EOpTensorViewSetStrideNV ||
+                   fnCandidate->getBuiltInOp() == EOpTensorViewSetClipNV) {
+            // Set result type to match type of first parameter
+            result->setType(result->getAsAggregate()->getSequence()[0]->getAsTyped()->getType());
+        } else {
+            // For MulAdd, set result type to match type of C parameter
+            result->setType(result->getAsAggregate()->getSequence()[2]->getAsTyped()->getType());
+        }
+    }
+}
+
 TIntermTyped* TParseContext::handleBuiltInFunctionCall(TSourceLoc loc, TIntermNode* arguments,
                                                        const TFunction& function)
 {
@@ -1599,6 +1844,8 @@
             numArgs = 1;
             break;
         case EOpDebugPrintf:
+        case EOpCooperativeMatrixPerElementOpNV:
+        case EOpCooperativeMatrixReduceNV:
             numArgs = 0;
             break;
         default:
@@ -1655,7 +1902,9 @@
         }
     } else {
         if (value->getType().isTexture() || value->getType().isImage()) {
-            if (!extensionTurnedOn(E_GL_ARB_bindless_texture))
+            if (spvVersion.spv != 0)
+                error(loc, "sampler or image cannot be used as return type when generating SPIR-V", "return", "");
+            else if (!extensionTurnedOn(E_GL_ARB_bindless_texture))
                 error(loc, "sampler or image can be used as return type only when the extension GL_ARB_bindless_texture enabled", "return", "");
         }
         branch = intermediate.addBranch(EOpReturn, value, loc);
@@ -1746,6 +1995,11 @@
                         name == "gl_MeshPrimitivesNV") {
                         length = getIoArrayImplicitSize(type.getQualifier());
                     }
+                } else if (const auto typed = intermNode->getAsTyped()) {
+                    if (typed->getQualifier().builtIn == EbvSampleMask) {
+                        requireProfile(loc, EEsProfile, "the array size of gl_SampleMask and gl_SampleMaskIn is ceil(gl_MaxSamples/32)");
+                        length = (resources.maxSamples + 31) / 32;
+                    }
                 }
                 if (length == 0) {
                     if (intermNode->getAsSymbolNode() && isIoResizeArray(type))
@@ -1873,6 +2127,13 @@
                 }
                 TVariable* tempArg = makeInternalVariable("tempArg", paramType);
                 tempArg->getWritableType().getQualifier().makeTemporary();
+                if (function[i].type->getQualifier().isParamInput()) {
+                    // If the parameter is also an input, copy-in.
+                    TIntermSymbol* tempArgNode = intermediate.addSymbol(*tempArg, intermNode.getLoc());
+                    TIntermTyped* tempAssign = intermediate.addAssign(EOpAssign, tempArgNode, intermediate.addSymbol(*arguments[i]->getAsTyped()->getAsSymbolNode()), arguments[i]->getLoc());
+                    conversionTree = intermediate.mergeAggregate(tempAssign, conversionTree, intermNode.getLoc());
+                }
+
                 TIntermSymbol* tempArgNode = intermediate.addSymbol(*tempArg, intermNode.getLoc());
                 TIntermTyped* tempAssign = intermediate.addAssign(EOpAssign, arguments[i]->getAsTyped(), tempArgNode, arguments[i]->getLoc());
                 conversionTree = intermediate.growAggregate(conversionTree, tempAssign, arguments[i]->getLoc());
@@ -2318,7 +2579,7 @@
                 TSampler s = arg0->getType().getSampler();
                 if (s.is2D() && s.isArrayed() && s.isShadow()) {
                     if (
-                        ((*argp)[1]->getAsTyped()->getType().getBasicType() == EbtFloat) && 
+                        ((*argp)[1]->getAsTyped()->getType().getBasicType() == EbtFloat) &&
                         ((*argp)[1]->getAsTyped()->getType().getVectorSize() == 4) &&
                         (fnCandidate.getParamCount() == 4)) {
                         featureString = fnCandidate.getName() + " for sampler2DArrayShadow";
@@ -2502,15 +2763,26 @@
                 error(loc, "only supported on image with format r64i", fnCandidate.getName().c_str(), "");
             else if (callNode.getType().getBasicType() == EbtUint64 && imageType.getQualifier().getFormat() != ElfR64ui)
                 error(loc, "only supported on image with format r64ui", fnCandidate.getName().c_str(), "");
+        } else if(callNode.getType().getBasicType() == EbtFloat16 &&
+                ((callNode.getType().getVectorSize() == 2 && arg0->getType().getQualifier().getFormat() == ElfRg16f) ||
+                  (callNode.getType().getVectorSize() == 4 && arg0->getType().getQualifier().getFormat() == ElfRgba16f))) {
+            if (StartsWith(fnCandidate.getName(), "imageAtomicAdd") ||
+                StartsWith(fnCandidate.getName(), "imageAtomicExchange") ||
+                StartsWith(fnCandidate.getName(), "imageAtomicMin") ||
+                StartsWith(fnCandidate.getName(), "imageAtomicMax")) {
+                requireExtensions(loc, 1, &E_GL_NV_shader_atomic_fp16_vector, fnCandidate.getName().c_str());
+            } else {
+                error(loc, "f16vec2/4 operation not supported on: ", fnCandidate.getName().c_str(), "");
+            }
         } else if (imageType.getSampler().type == EbtFloat) {
-            if (fnCandidate.getName().compare(0, 19, "imageAtomicExchange") == 0) {
+            if (StartsWith(fnCandidate.getName(), "imageAtomicExchange")) {
                 // imageAtomicExchange doesn't require an extension
-            } else if ((fnCandidate.getName().compare(0, 14, "imageAtomicAdd") == 0) ||
-                       (fnCandidate.getName().compare(0, 15, "imageAtomicLoad") == 0) ||
-                       (fnCandidate.getName().compare(0, 16, "imageAtomicStore") == 0)) {
+            } else if (StartsWith(fnCandidate.getName(), "imageAtomicAdd") ||
+                       StartsWith(fnCandidate.getName(), "imageAtomicLoad") ||
+                       StartsWith(fnCandidate.getName(), "imageAtomicStore")) {
                 requireExtensions(loc, 1, &E_GL_EXT_shader_atomic_float, fnCandidate.getName().c_str());
-            } else if ((fnCandidate.getName().compare(0, 14, "imageAtomicMin") == 0) ||
-                       (fnCandidate.getName().compare(0, 14, "imageAtomicMax") == 0)) {
+            } else if (StartsWith(fnCandidate.getName(), "imageAtomicMin") ||
+                       StartsWith(fnCandidate.getName(), "imageAtomicMax")) {
                 requireExtensions(loc, 1, &E_GL_EXT_shader_atomic_float2, fnCandidate.getName().c_str());
             } else {
                 error(loc, "only supported on integer images", fnCandidate.getName().c_str(), "");
@@ -2560,6 +2832,11 @@
             const char* const extensions[2] = { E_GL_NV_shader_atomic_int64,
                                                 E_GL_EXT_shader_atomic_int64 };
             requireExtensions(loc, 2, extensions, fnCandidate.getName().c_str());
+        } else if ((callNode.getOp() == EOpAtomicAdd || callNode.getOp() == EOpAtomicExchange ||
+                    callNode.getOp() == EOpAtomicMin || callNode.getOp() == EOpAtomicMax) &&
+                   arg0->getType().getBasicType() == EbtFloat16 &&
+                   (arg0->getType().getVectorSize() == 2 || arg0->getType().getVectorSize() == 4 )) {
+            requireExtensions(loc, 1, &E_GL_NV_shader_atomic_fp16_vector, fnCandidate.getName().c_str());
         } else if ((callNode.getOp() == EOpAtomicAdd || callNode.getOp() == EOpAtomicExchange) &&
                    (arg0->getType().getBasicType() == EbtFloat ||
                     arg0->getType().getBasicType() == EbtDouble)) {
@@ -2571,7 +2848,7 @@
             requireExtensions(loc, 1, &E_GL_EXT_shader_atomic_float2, fnCandidate.getName().c_str());
         }
 
-        const TIntermTyped* base = TIntermediate::findLValueBase(arg0, true , true);
+        const TIntermTyped* base = TIntermediate::traverseLValueBase(arg0, true, true);
         const char* errMsg = "Only l-values corresponding to shader block storage or shared variables can be used with "
                              "atomic memory functions.";
         if (base) {
@@ -2591,20 +2868,57 @@
     case EOpInterpolateAtCentroid:
     case EOpInterpolateAtSample:
     case EOpInterpolateAtOffset:
-    case EOpInterpolateAtVertex:
-        // Make sure the first argument is an interpolant, or an array element of an interpolant
+    case EOpInterpolateAtVertex: {
         if (arg0->getType().getQualifier().storage != EvqVaryingIn) {
-            // It might still be an array element.
+            // Traverse down the left branch of arg0 to ensure this argument is a valid interpolant.
             //
-            // We could check more, but the semantics of the first argument are already met; the
-            // only way to turn an array into a float/vec* is array dereference and swizzle.
+            // For desktop GL >4.3 we effectively only need to ensure that arg0 represents an l-value from an
+            // input declaration.
             //
-            // ES and desktop 4.3 and earlier:  swizzles may not be used
-            // desktop 4.4 and later: swizzles may be used
-            bool swizzleOkay = (!isEsProfile()) && (version >= 440);
-            const TIntermTyped* base = TIntermediate::findLValueBase(arg0, swizzleOkay);
-            if (base == nullptr || base->getType().getQualifier().storage != EvqVaryingIn)
-                error(loc, "first argument must be an interpolant, or interpolant-array element", fnCandidate.getName().c_str(), "");
+            // For desktop GL <= 4.3 and ES, we must also ensure that swizzling is not used
+            //
+            // For ES, we must also ensure that a field selection operator (i.e., '.') is not used on a named
+            // struct.
+
+            const bool esProfile = isEsProfile();
+            const bool swizzleOkay = !esProfile && (version >= 440);
+
+            std::string interpolantErrorMsg = "first argument must be an interpolant, or interpolant-array element";
+            bool isValid = true; // Assume that the interpolant is valid until we find a condition making it invalid
+            bool isIn = false;   // Checks whether or not the interpolant is a shader input
+            bool structAccessOp = false; // Whether or not the previous node in the chain is a struct accessor
+            TIntermediate::traverseLValueBase(
+                arg0, swizzleOkay, false,
+                [&isValid, &isIn, &interpolantErrorMsg, esProfile, &structAccessOp](const TIntermNode& n) -> bool {
+                    auto* type = n.getAsTyped();
+                    if (type) {
+                        if (type->getType().getQualifier().storage == EvqVaryingIn) {
+                            isIn = true;
+                        }
+                        // If a field accessor was used, it can only be used to access a field with an input block, not a struct.
+                        if (structAccessOp && (type->getType().getBasicType() != EbtBlock)) {
+                            interpolantErrorMsg +=
+                                ". Using the field of a named struct as an interpolant argument is not "
+                                "allowed (ES-only).";
+                            isValid = false;
+                        }
+                    }
+
+                    // ES has different requirements for interpolants than GL
+                    if (esProfile) {
+                        // Swizzling will be taken care of by the 'swizzleOkay' argument passsed to traverseLValueBase,
+                        // so we only ned to check whether or not a field accessor has been used with a named struct.
+                        auto* binary = n.getAsBinaryNode();
+                        if (binary && (binary->getOp() == EOpIndexDirectStruct)) {
+                            structAccessOp = true;
+                        }
+                    }
+                    // Don't continue traversing if we know we have an invalid interpolant at this point.
+                    return isValid;
+                });
+            if (!isIn || !isValid) {
+                error(loc, interpolantErrorMsg.c_str(), fnCandidate.getName().c_str(), "");
+            }
         }
 
         if (callNode.getOp() == EOpInterpolateAtVertex) {
@@ -2620,12 +2934,12 @@
                 }
             }
         }
-        break;
+    } break;
 
     case EOpEmitStreamVertex:
     case EOpEndStreamPrimitive:
         if (version == 150)
-            requireExtensions(loc, 1, &E_GL_ARB_gpu_shader5, "if the verison is 150 , the EmitStreamVertex and EndStreamPrimitive only support at extension GL_ARB_gpu_shader5");
+            requireExtensions(loc, 1, &E_GL_ARB_gpu_shader5, "if the version is 150 , the EmitStreamVertex and EndStreamPrimitive only support at extension GL_ARB_gpu_shader5");
         intermediate.setMultiStream();
         break;
 
@@ -3534,6 +3848,19 @@
                 makeSpecConst = ! intArgument && !type.isArray();
                 break;
 
+            case EOpConstructCooperativeMatrixNV:
+            case EOpConstructCooperativeMatrixKHR:
+            case EOpConstructStruct:
+                {
+                    const char *specConstantCompositeExt[] = { E_GL_EXT_spec_constant_composites };
+                    if (checkExtensionsRequested(loc, 1, specConstantCompositeExt, "spec constant aggregate constructor")) {
+                        makeSpecConst = true;
+                    } else {
+                        makeSpecConst = false;
+                    }
+                }
+                break;
+
             default:
                 // anything else wasn't white-listed in the spec as a conversion
                 makeSpecConst = false;
@@ -3632,7 +3959,8 @@
 
     TIntermTyped* typed = node->getAsTyped();
     if (type.isCoopMat() && typed->getType().isCoopMat() &&
-        !type.sameCoopMatShapeAndUse(typed->getType())) {
+        ((extensionTurnedOn(E_GL_NV_cooperative_matrix2) && !type.sameCoopMatShape(typed->getType())) ||
+         (!extensionTurnedOn(E_GL_NV_cooperative_matrix2) && !type.sameCoopMatShapeAndUse(typed->getType())))) {
         error(loc, "Cooperative matrix type parameters mismatch", constructorString.c_str(), "");
         return true;
     }
@@ -3839,6 +4167,18 @@
 
 }
 
+void TParseContext::hitObjectNVCheck(const TSourceLoc & loc, const TType & type, const TString & identifier)
+{
+    if (type.getBasicType() == EbtStruct && containsFieldWithBasicType(type, EbtHitObjectNV)) {
+        error(loc, "struct is not allowed to contain hitObjectNV:", type.getTypeName().c_str(), identifier.c_str());
+    } else if (type.getBasicType() == EbtHitObjectNV) {
+        TStorageQualifier qualifier = type.getQualifier().storage;
+        if (qualifier != EvqGlobal && qualifier != EvqTemporary) {
+            error(loc, "hitObjectNV can only be declared in global or function scope with no storage qualifier:", "hitObjectNV", identifier.c_str());
+        }
+    }
+}
+
 void TParseContext::transparentOpaqueCheck(const TSourceLoc& loc, const TType& type, const TString& identifier)
 {
     if (parsingBuiltins)
@@ -3931,6 +4271,18 @@
     // Storage qualifier isn't ready for memberQualifierCheck, we should skip invariantCheck for it.
     if (!isMemberCheck || structNestingLevel > 0)
         invariantCheck(loc, qualifier);
+
+    if (qualifier.isFullQuads()) {
+        if (qualifier.storage != EvqVaryingIn)
+            error(loc, "can only apply to input layout", "full_quads ", "");
+        intermediate.setReqFullQuadsMode();
+    }
+
+    if (qualifier.isQuadDeriv()) {
+        if (qualifier.storage != EvqVaryingIn)
+            error(loc, "can only apply to input layout", "quad_derivatives", "");
+        intermediate.setQuadDerivMode();
+    }
 }
 
 //
@@ -4191,8 +4543,8 @@
     dst.spirvStorageClass = src.spirvStorageClass;
 
     // SPIR-V decorate qualifiers (GL_EXT_spirv_intrinsics)
-    if (src.hasSprivDecorate()) {
-        if (dst.hasSprivDecorate()) {
+    if (src.hasSpirvDecorate()) {
+        if (dst.hasSpirvDecorate()) {
             const TSpirvDecorate& srcSpirvDecorate = src.getSpirvDecorate();
             TSpirvDecorate& dstSpirvDecorate = dst.getSpirvDecorate();
             for (auto& decorate : srcSpirvDecorate.decorates) {
@@ -4340,7 +4692,7 @@
 // Do size checking for an array type's size.
 //
 void TParseContext::arraySizeCheck(const TSourceLoc& loc, TIntermTyped* expr, TArraySize& sizePair,
-                                   const char* sizeType, const bool allowZero)
+                                   const char* sizeType, const bool isTypeParameter)
 {
     bool isConst = false;
     sizePair.node = nullptr;
@@ -4370,17 +4722,27 @@
 
     sizePair.size = size;
 
-    if (! isConst || (expr->getBasicType() != EbtInt && expr->getBasicType() != EbtUint)) {
-        error(loc, sizeType, "", "must be a constant integer expression");
-        return;
-    }
-
-    if (allowZero) {
+    if (isTypeParameter) {
+        if (extensionTurnedOn(E_GL_NV_cooperative_matrix2)) {
+            if (! isConst || (expr->getBasicType() != EbtInt && expr->getBasicType() != EbtUint && expr->getBasicType() != EbtBool)) {
+                error(loc, sizeType, "", "must be a constant integer or boolean expression");
+                return;
+            }
+        } else {
+            if (! isConst || (expr->getBasicType() != EbtInt && expr->getBasicType() != EbtUint)) {
+                error(loc, sizeType, "", "must be a constant integer expression");
+                return;
+            }
+        }
         if (size < 0) {
             error(loc, sizeType, "", "must be a non-negative integer");
             return;
         }
     } else {
+        if (! isConst || (expr->getBasicType() != EbtInt && expr->getBasicType() != EbtUint)) {
+            error(loc, sizeType, "", "must be a constant integer expression");
+            return;
+        }
         if (size <= 0) {
             error(loc, sizeType, "", "must be a positive integer");
             return;
@@ -5804,6 +6166,15 @@
             publicType.shaderQualifiers.layoutOverrideCoverage = true;
             return;
         }
+        if (id == "full_quads")
+        {
+            const char* feature = "full_quads qualifier";
+            requireProfile(loc, ECompatibilityProfile | ECoreProfile | EEsProfile, feature);
+            profileRequires(loc, ECoreProfile | ECompatibilityProfile, 140, E_GL_EXT_shader_quad_control, feature);
+            profileRequires(loc, EEsProfile, 310, E_GL_EXT_shader_quad_control, feature);
+            publicType.qualifier.layoutFullQuads = true;
+            return;
+        }
     }
     if (language == EShLangVertex ||
         language == EShLangTessControl ||
@@ -5853,6 +6224,16 @@
         return;
     }
 
+    if (id == "quad_derivatives")
+    {
+        const char* feature = "quad_derivatives qualifier";
+        requireProfile(loc, ECompatibilityProfile | ECoreProfile | EEsProfile, feature);
+        profileRequires(loc, ECoreProfile | ECompatibilityProfile, 140, E_GL_EXT_shader_quad_control, feature);
+        profileRequires(loc, EEsProfile, 310, E_GL_EXT_shader_quad_control, feature);
+        publicType.qualifier.layoutQuadDeriv = true;
+        return;
+    }
+
     error(loc, "unrecognized layout identifier, or qualifier requires assignment (e.g., binding = 4)", id.c_str(), "");
 }
 
@@ -6154,7 +6535,7 @@
                 error(loc, "needs a literal integer", "max_primitives", "");
             return;
         }
-        // Fall through
+        [[fallthrough]];
 
     case EShLangTask:
         // Fall through
@@ -6281,6 +6662,10 @@
             dst.layoutSecondaryViewportRelativeOffset = src.layoutSecondaryViewportRelativeOffset;
         if (src.layoutShaderRecord)
             dst.layoutShaderRecord = true;
+        if (src.layoutFullQuads)
+            dst.layoutFullQuads = true;
+        if (src.layoutQuadDeriv)
+            dst.layoutQuadDeriv = true;
         if (src.layoutBindlessSampler)
             dst.layoutBindlessSampler = true;
         if (src.layoutBindlessImage)
@@ -6326,8 +6711,7 @@
         switch (qualifier.storage) {
         case EvqVaryingIn:
         case EvqVaryingOut:
-            if (!type.getQualifier().isTaskMemory() &&
-                !type.getQualifier().hasSprivDecorate() &&
+            if (!type.getQualifier().isTaskMemory() && !type.getQualifier().hasSpirvDecorate() &&
                 (type.getBasicType() != EbtBlock ||
                  (!(*type.getStruct())[0].type->getQualifier().hasLocation() &&
                    (*type.getStruct())[0].type->getQualifier().builtIn == EbvNone)))
@@ -6455,10 +6839,10 @@
         int repeated = intermediate.addUsedLocation(qualifier, type, typeCollision);
         if (repeated >= 0 && ! typeCollision)
             error(loc, "overlapping use of location", "location", "%d", repeated);
-        // "fragment-shader outputs/tileImageEXT ... if two variables are placed within the same
-        // location, they must have the same underlying type (floating-point or integer)"
-        if (typeCollision && language == EShLangFragment && (qualifier.isPipeOutput() || qualifier.storage == EvqTileImageEXT))
-            error(loc, "fragment outputs or tileImageEXTs sharing the same location", "location", "%d must be the same basic type", repeated);
+        // When location aliasing, the aliases sharing the location must have the same underlying numerical type and bit width(
+        // floating - point or integer, 32 - bit versus 64 - bit,etc.)
+        if (typeCollision && (qualifier.isPipeInput() || qualifier.isPipeOutput() || qualifier.storage == EvqTileImageEXT))
+            error(loc, "the aliases sharing the location", "location", "%d must be the same basic type and interpolation qualification", repeated);
     }
 
     if (qualifier.hasXfbOffset() && qualifier.hasXfbBuffer()) {
@@ -6894,6 +7278,14 @@
             return symbol->getAsFunction();
     }
 
+    // coopMatPerElementNV is variadic. There is some function signature error
+    // checking in handleCoopMat2FunctionCall.
+    if (call.getName() == "coopMatPerElementNV") {
+        TSymbol* symbol = symbolTable.find("coopMatPerElementNV(", &builtIn);
+        if (symbol)
+            return symbol->getAsFunction();
+    }
+
     bool explicitTypesEnabled = extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types) ||
                                 extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int8) ||
                                 extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_int16) ||
@@ -7059,15 +7451,25 @@
     symbolTable.findFunctionNameList(call.getMangledName(), candidateList, builtIn);
 
     // can 'from' convert to 'to'?
-    const auto convertible = [this,builtIn](const TType& from, const TType& to, TOperator, int) -> bool {
+    const auto convertible = [this,builtIn](const TType& from, const TType& to, TOperator op, int param) -> bool {
         if (from == to)
             return true;
         if (from.coopMatParameterOK(to))
             return true;
+        if (from.tensorParameterOK(to))
+            return true;
+        if (from.getBasicType() == EbtFunction && to.getBasicType() == EbtFunction)
+            return true;
         // Allow a sized array to be passed through an unsized array parameter, for coopMatLoad/Store functions
         if (builtIn && from.isArray() && to.isUnsizedArray()) {
             TType fromElementType(from, 0);
             TType toElementType(to, 0);
+            // Load/store tensor functions allow any element type for the pointer
+            if ((op == EOpCooperativeMatrixLoadTensorNV || op == EOpCooperativeMatrixStoreTensorNV) &&
+                param == 1 &&
+                (from.getQualifier().storage == EvqBuffer || from.getQualifier().storage == EvqShared)) {
+                return true;
+            }
             if (fromElementType == toElementType)
                 return true;
         }
@@ -7135,15 +7537,25 @@
     symbolTable.findFunctionNameList(call.getMangledName(), candidateList, builtIn);
 
     // can 'from' convert to 'to'?
-    const auto convertible = [this,builtIn](const TType& from, const TType& to, TOperator, int) -> bool {
+    const auto convertible = [this,builtIn](const TType& from, const TType& to, TOperator op, int param) -> bool {
         if (from == to)
             return true;
         if (from.coopMatParameterOK(to))
             return true;
+        if (from.tensorParameterOK(to))
+            return true;
+        if (from.getBasicType() == EbtFunction && to.getBasicType() == EbtFunction)
+            return true;
         // Allow a sized array to be passed through an unsized array parameter, for coopMatLoad/Store functions
         if (builtIn && from.isArray() && to.isUnsizedArray()) {
             TType fromElementType(from, 0);
             TType toElementType(to, 0);
+            // Load/store tensor functions allow any element type for the pointer
+            if ((op == EOpCooperativeMatrixLoadTensorNV || op == EOpCooperativeMatrixStoreTensorNV) &&
+                param == 1 &&
+                (from.getQualifier().storage == EvqBuffer || from.getQualifier().storage == EvqShared)) {
+                return true;
+            }
             if (fromElementType == toElementType)
                 return true;
         }
@@ -7227,7 +7639,7 @@
             realFunc.addParameter(TParameter().copyParam((*function)[i]));
         }
 
-        TParameter tmpP = { nullptr, &uintType };
+        TParameter tmpP = { nullptr, &uintType, {} };
         realFunc.addParameter(TParameter().copyParam(tmpP));
         arguments = intermediate.growAggregate(arguments, intermediate.addConstantUnion(1, loc, true));
 
@@ -7244,7 +7656,7 @@
             realFunc.addParameter(TParameter().copyParam((*function)[i]));
         }
 
-        TParameter tmpP = { nullptr, &uintType };
+        TParameter tmpP = { nullptr, &uintType, {} };
         realFunc.addParameter(TParameter().copyParam(tmpP));
         arguments = intermediate.growAggregate(arguments, intermediate.addConstantUnion(-1, loc, true));
 
@@ -7256,7 +7668,7 @@
         }
     } else if (function->getName() == "atomicCounter") {
         // change atomicCounter into a direct read of the variable
-        if (arguments->getAsTyped()) {
+        if (arguments && arguments->getAsTyped()) {
             result = arguments->getAsTyped();
         }
     }
@@ -7304,6 +7716,7 @@
         case EbtUint:
         case EbtUint8:
         case EbtUint16:
+        case EbtSpirvType:
             break;
         default:
             error(loc, "coopmat invalid basic type", TType::getBasicString(publicType.typeParameters->basicType), "");
@@ -7319,14 +7732,50 @@
             return;
         }
     }
+    if (publicType.isTensorLayoutNV()) {
+        if (publicType.typeParameters == nullptr) {
+            error(loc, "tensorLayout missing type parameters", "", "");
+            return;
+        }
+        if (publicType.typeParameters->arraySizes->getNumDims() > 2) {
+            error(loc, "tensorLayout incorrect number of type parameters", "", "");
+            return;
+        }
+        if (publicType.typeParameters && publicType.typeParameters->arraySizes->getNumDims() < 2) {
+            while (publicType.typeParameters->arraySizes->getNumDims() < 2) {
+                publicType.typeParameters->arraySizes->addInnerSize(0);
+            }
+        }
+    }
+    if (publicType.isTensorViewNV()) {
+        if (publicType.typeParameters == nullptr) {
+            error(loc, "tensorView missing type parameters", "", "");
+            return;
+        }
+        if (publicType.typeParameters->arraySizes->getNumDims() < 1 ||
+            publicType.typeParameters->arraySizes->getNumDims() > 7) {
+            error(loc, "tensorView incorrect number of type parameters", "", "");
+            return;
+        }
+        if (publicType.typeParameters && publicType.typeParameters->arraySizes->getNumDims() < 7) {
+            uint32_t numDims = publicType.typeParameters->arraySizes->getNumDims();
+            while (numDims < 7) {
+                uint32_t dim = (numDims == 1) ? 0 : (numDims - 2);
+                publicType.typeParameters->arraySizes->addInnerSize(dim);
+                numDims++;
+            }
+        }
+    }
 }
 
-bool TParseContext::vkRelaxedRemapUniformVariable(const TSourceLoc& loc, TString& identifier, const TPublicType&,
+bool TParseContext::vkRelaxedRemapUniformVariable(const TSourceLoc& loc, TString& identifier, const TPublicType& publicType,
     TArraySizes*, TIntermTyped* initializer, TType& type)
 {
+    vkRelaxedRemapUniformMembers(loc, publicType, type, identifier);
+
     if (parsingBuiltins || symbolTable.atBuiltInLevel() || !symbolTable.atGlobalLevel() ||
         type.getQualifier().storage != EvqUniform ||
-        !(type.containsNonOpaque()|| type.getBasicType() == EbtAtomicUint)) {
+        !(type.containsNonOpaque() || type.getBasicType() == EbtAtomicUint || (type.containsSampler() && type.isStruct()))) {
         return false;
     }
 
@@ -7400,6 +7849,263 @@
     return true;
 }
 
+template <typename Function>
+static void ForEachOpaque(const TType& type, const TString& path, Function callback)
+{
+    auto recursion = [&callback](const TType& type, const TString& path, bool skipArray, auto& recursion) -> void {
+        if (!skipArray && type.isArray())
+        {
+            std::vector<int> indices(type.getArraySizes()->getNumDims());
+            for (int flatIndex = 0;
+                 flatIndex < type.getArraySizes()->getCumulativeSize();
+                 ++flatIndex)
+            {
+                TString subscriptPath = path;
+                for (size_t dimIndex = 0; dimIndex < indices.size(); ++dimIndex)
+                {
+                    int index = indices[dimIndex];
+                    subscriptPath.append("[");
+                    subscriptPath.append(String(index));
+                    subscriptPath.append("]");
+                }
+
+                recursion(type, subscriptPath, true, recursion);
+
+                for (size_t dimIndex = 0; dimIndex < indices.size(); ++dimIndex)
+                {
+                    ++indices[dimIndex];
+                    if (indices[dimIndex] < type.getArraySizes()->getDimSize(dimIndex))
+                        break;
+                    else
+                        indices[dimIndex] = 0;
+                }
+            }
+        }
+
+        else if (type.isStruct() && type.containsOpaque())
+        {
+            const TTypeList& types = *type.getStruct();
+            for (const TTypeLoc& typeLoc : types)
+            {
+                TString nextPath = path;
+                nextPath.append(".");
+                nextPath.append(typeLoc.type->getFieldName());
+
+                recursion(*(typeLoc.type), nextPath, false, recursion);
+            }
+        }
+
+        else if (type.isOpaque())
+        {
+            callback(type, path);
+        }
+    };
+
+    recursion(type, path, false, recursion);
+}
+
+void TParseContext::vkRelaxedRemapUniformMembers(const TSourceLoc& loc, const TPublicType& publicType, const TType& type,
+    const TString& identifier)
+{
+    if (!type.isStruct() || !type.containsOpaque())
+        return;
+
+    ForEachOpaque(type, identifier,
+                  [&publicType, &loc, this](const TType& type, const TString& path) {
+                      TArraySizes arraySizes = {};
+                      if (type.getArraySizes()) arraySizes = *type.getArraySizes();
+                      TTypeParameters typeParameters = {};
+                      if (type.getTypeParameters()) typeParameters = *type.getTypeParameters();
+
+                      TPublicType memberType{};
+                      memberType.basicType = type.getBasicType();
+                      memberType.sampler = type.getSampler();
+                      memberType.qualifier = type.getQualifier();
+                      memberType.vectorSize = type.getVectorSize();
+                      memberType.matrixCols = type.getMatrixCols();
+                      memberType.matrixRows = type.getMatrixRows();
+                      memberType.coopmatNV = type.isCoopMatNV();
+                      memberType.coopmatKHR = type.isCoopMatKHR();
+                      memberType.arraySizes = nullptr;
+                      memberType.userDef = nullptr;
+                      memberType.loc = loc;
+                      memberType.typeParameters = (type.getTypeParameters() ? &typeParameters : nullptr);
+                      memberType.spirvType = nullptr;
+
+                      memberType.qualifier.storage = publicType.qualifier.storage;
+                      memberType.shaderQualifiers = publicType.shaderQualifiers;
+
+                      TString& structMemberName = *NewPoolTString(path.c_str()); // A copy is required due to declareVariable() signature.
+                      declareVariable(loc, structMemberName, memberType, nullptr, nullptr);
+                  });
+}
+
+void TParseContext::vkRelaxedRemapFunctionParameter(TFunction* function, TParameter& param, std::vector<int>* newParams)
+{
+    function->addParameter(param);
+
+    if (!param.type->isStruct() || !param.type->containsOpaque())
+        return;
+
+    ForEachOpaque(*param.type, (param.name ? *param.name : param.type->getFieldName()),
+                  [function, param, newParams](const TType& type, const TString& path) {
+                      TString* memberName = NewPoolTString(path.c_str());
+
+                      TType* memberType = new TType();
+                      memberType->shallowCopy(type);
+                      memberType->getQualifier().storage = param.type->getQualifier().storage;
+                      memberType->clearArraySizes();
+
+                      TParameter memberParam = {};
+                      memberParam.name = memberName;
+                      memberParam.type = memberType;
+                      memberParam.defaultValue = nullptr;
+                      function->addParameter(memberParam);
+                      if (newParams)
+                          newParams->push_back(function->getParamCount()-1);
+                  });
+}
+
+//
+// Generates a valid GLSL dereferencing string for the input TIntermNode
+//
+struct AccessChainTraverser : public TIntermTraverser {
+    AccessChainTraverser() : TIntermTraverser(false, false, true)
+    {}
+
+    TString path = "";
+    TStorageQualifier topLevelStorageQualifier = TStorageQualifier::EvqLast;
+
+    bool visitBinary(TVisit, TIntermBinary* binary) override {
+        if (binary->getOp() == EOpIndexDirectStruct)
+        {
+            const TTypeList& members = *binary->getLeft()->getType().getStruct();
+            const TTypeLoc& member =
+                members[binary->getRight()->getAsConstantUnion()->getConstArray()[0].getIConst()];
+            TString memberName = member.type->getFieldName();
+
+            if (path != "")
+                path.append(".");
+
+            path.append(memberName);
+        }
+
+        if (binary->getOp() == EOpIndexDirect)
+        {
+            const TConstUnionArray& indices = binary->getRight()->getAsConstantUnion()->getConstArray();
+            for (int index = 0; index < indices.size(); ++index)
+            {
+                path.append("[");
+                path.append(String(indices[index].getIConst()));
+                path.append("]");
+            }
+        }
+
+        return true;
+    }
+
+    void visitSymbol(TIntermSymbol* symbol) override {
+        if (symbol->getType().isOpaque())
+            topLevelStorageQualifier = symbol->getQualifier().storage;
+        if (!IsAnonymous(symbol->getName()))
+            path.append(symbol->getName());
+    }
+};
+
+TIntermNode* TParseContext::vkRelaxedRemapFunctionArgument(const TSourceLoc& loc, TFunction* function, TIntermTyped* intermTyped)
+{
+    AccessChainTraverser accessChainTraverser{};
+    intermTyped->traverse(&accessChainTraverser);
+
+    if (accessChainTraverser.topLevelStorageQualifier == TStorageQualifier::EvqUniform)
+    {
+        TParameter param = { 0, new TType, {} };
+        param.type->shallowCopy(intermTyped->getType());
+
+        function->addParameter(param);
+        return intermTyped;
+    }
+
+    TParameter param = { NewPoolTString(accessChainTraverser.path.c_str()), new TType, {} };
+    param.type->shallowCopy(intermTyped->getType());
+
+    std::vector<int> newParams = {};
+    vkRelaxedRemapFunctionParameter(function, param, &newParams);
+
+    if (intermTyped->getType().isOpaque())
+    {
+        TIntermNode* remappedArgument = intermTyped;
+        {
+            TIntermSymbol* intermSymbol = nullptr;
+            TSymbol* symbol = symbolTable.find(*param.name);
+            if (symbol && symbol->getAsVariable())
+                intermSymbol = intermediate.addSymbol(*symbol->getAsVariable(), loc);
+            else
+            {
+                TVariable* variable = new TVariable(param.name, *param.type);
+                intermSymbol = intermediate.addSymbol(*variable, loc);
+            }
+
+            remappedArgument = intermSymbol;
+        }
+
+        return remappedArgument;
+    }
+    else if (!(intermTyped->isStruct() && intermTyped->getType().containsOpaque()))
+        return intermTyped;
+    else
+    {
+        TIntermNode* remappedArgument = intermTyped;
+        {
+            TSymbol* symbol = symbolTable.find(*param.name);
+            if (symbol && symbol->getAsVariable())
+                remappedArgument = intermediate.addSymbol(*symbol->getAsVariable(), loc);
+        }
+
+        if (!newParams.empty())
+            remappedArgument = intermediate.makeAggregate(remappedArgument, loc);
+
+        for (int paramIndex : newParams)
+        {
+            TParameter& newParam = function->operator[](paramIndex);
+            TIntermSymbol* intermSymbol = nullptr;
+            TSymbol* symbol = symbolTable.find(*newParam.name);
+            if (symbol && symbol->getAsVariable())
+                intermSymbol = intermediate.addSymbol(*symbol->getAsVariable(), loc);
+            else
+            {
+                TVariable* variable = new TVariable(newParam.name, *newParam.type);
+                intermSymbol = intermediate.addSymbol(*variable, loc);
+            }
+
+            remappedArgument = intermediate.growAggregate(remappedArgument, intermSymbol);
+        }
+
+        return remappedArgument;
+    }
+}
+
+TIntermTyped* TParseContext::vkRelaxedRemapDotDereference(const TSourceLoc&, TIntermTyped& base, const TType& member,
+    const TString& identifier)
+{
+    if (!member.isOpaque())
+        return &base;
+
+    AccessChainTraverser traverser{};
+    base.traverse(&traverser);
+    if (!traverser.path.empty())
+        traverser.path.append(".");
+    traverser.path.append(identifier);
+
+    const TSymbol* symbol = symbolTable.find(traverser.path);
+    if (!symbol)
+        return &base;
+
+    TIntermTyped* result = intermediate.addSymbol(*symbol->getAsVariable());
+    result->setType(symbol->getType());
+    return result;
+}
+
 //
 // Do everything necessary to handle a variable (non-block) declaration.
 // Either redeclaring a variable, or making a new one, updating the symbol
@@ -7435,11 +8141,12 @@
         intermediate.setUseStorageBuffer();
 
         if (!publicType.typeParameters || !publicType.typeParameters->arraySizes ||
-            publicType.typeParameters->arraySizes->getNumDims() != 3) {
+            publicType.typeParameters->arraySizes->getNumDims() != 4) {
             error(loc, "unexpected number type parameters", identifier.c_str(), "");
         }
         if (publicType.typeParameters) {
-            if (!isTypeFloat(publicType.typeParameters->basicType) && !isTypeInt(publicType.typeParameters->basicType)) {
+            if (!isTypeFloat(publicType.typeParameters->basicType) &&
+                !isTypeInt(publicType.typeParameters->basicType) && publicType.typeParameters->basicType != EbtSpirvType) {
                 error(loc, "expected 8, 16, 32, or 64 bit signed or unsigned integer or 16, 32, or 64 bit float type", identifier.c_str(), "");
             }
         }
@@ -7465,6 +8172,14 @@
                 error(loc, "expected 8, 16, or 32 bits for first type parameter", identifier.c_str(), "");
             }
         }
+    } else if (type.isTensorLayoutNV()) {
+        if (!publicType.typeParameters || publicType.typeParameters->arraySizes->getNumDims() > 2) {
+            error(loc, "expected 1-2 type parameters", identifier.c_str(), "");
+        }
+    } else if (type.isTensorViewNV()) {
+        if (!publicType.typeParameters || publicType.typeParameters->arraySizes->getNumDims() > 7) {
+            error(loc, "expected 1-7 type parameters", identifier.c_str(), "");
+        }
     } else {
         if (publicType.typeParameters && publicType.typeParameters->arraySizes->getNumDims() != 0) {
             error(loc, "unexpected type parameters", identifier.c_str(), "");
@@ -7483,6 +8198,7 @@
     transparentOpaqueCheck(loc, type, identifier);
     atomicUintCheck(loc, type, identifier);
     accStructCheck(loc, type, identifier);
+    hitObjectNVCheck(loc, type, identifier);
     checkAndResizeMeshViewDim(loc, type, /*isBlockMember*/ false);
     if (type.getQualifier().storage == EvqConst && type.containsReference()) {
         error(loc, "variables with reference type can't have qualifier 'const'", "qualifier", "");
@@ -7981,6 +8697,11 @@
 
     int paramCount = 0;  // keeps track of the constructor parameter number being checked
 
+    // We don't know "top down" whether type is a specialization constant,
+    // but a const becomes a specialization constant if any of its children are.
+    bool hasSpecConst = false;
+    bool isConstConstructor = true;
+
     // for each parameter to the constructor call, check to see if the right type is passed or convert them
     // to the right type if possible (and allowed).
     // for structure constructors, just check if the right type is passed, no conversion is allowed.
@@ -7993,13 +8714,24 @@
         else
             newNode = constructBuiltIn(type, op, (*p)->getAsTyped(), node->getLoc(), true);
 
-        if (newNode)
+        if (newNode) {
             *p = newNode;
-        else
+            if (!newNode->getType().getQualifier().isConstant())
+                isConstConstructor = false;
+            if (newNode->getType().getQualifier().isSpecConstant())
+                hasSpecConst = true;
+        } else
             return nullptr;
     }
 
-    TIntermTyped *ret_node = intermediate.setAggregateOperator(aggrNode, op, type, loc);
+    TIntermTyped* ret_node = intermediate.setAggregateOperator(aggrNode, op, type, loc);
+
+    const char *specConstantCompositeExt[] = { E_GL_EXT_spec_constant_composites };
+    if (checkExtensionsRequested(loc, 1, specConstantCompositeExt, "spec constant aggregate constructor")) {
+        if (isConstConstructor && hasSpecConst) {
+            ret_node->getWritableType().getQualifier().makeSpecConstant();
+        }
+    }
 
     TIntermAggregate *agg_node = ret_node->getAsAggregate();
     if (agg_node && (agg_node->isVector() || agg_node->isArray() || agg_node->isMatrix()))
@@ -8078,6 +8810,7 @@
                 intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConstructUVec2, false, newSrcNode, type);
             return newNode;
         }
+        [[fallthrough]];
     case EOpConstructUVec3:
     case EOpConstructUVec4:
     case EOpConstructUint:
@@ -8099,6 +8832,7 @@
                 intermediate.addBuiltInFunctionCall(node->getLoc(), EOpPackUint2x32, true, node, type);
             return newNode;
         }
+        [[fallthrough]];
     case EOpConstructDVec2:
     case EOpConstructDVec3:
     case EOpConstructDVec4:
@@ -8129,9 +8863,10 @@
     case EOpConstructF16Mat4x4:
     case EOpConstructFloat16:
         basicOp = EOpConstructFloat16;
-        // 8/16-bit storage extensions don't support constructing composites of 8/16-bit types,
+        // 8/16-bit storage extensions don't support direct constructing composites of 8/16-bit types,
         // so construct a 32-bit type and convert
-        if (!intermediate.getArithemeticFloat16Enabled()) {
+        // and do not generate any conversion if it is an identity conversion, i.e. float16_t(<float16_t> var)
+        if (!intermediate.getArithemeticFloat16Enabled() && (node->getBasicType() != EbtFloat16)) {
             TType tempType(EbtFloat, EvqTemporary, type.getVectorSize());
             newNode = node;
             if (tempType != newNode->getType()) {
@@ -8152,9 +8887,10 @@
     case EOpConstructI8Vec4:
     case EOpConstructInt8:
         basicOp = EOpConstructInt8;
-        // 8/16-bit storage extensions don't support constructing composites of 8/16-bit types,
+        // 8/16-bit storage extensions don't support direct constructing composites of 8/16-bit types,
         // so construct a 32-bit type and convert
-        if (!intermediate.getArithemeticInt8Enabled()) {
+        // and do not generate any conversion if it is an identity conversion, i.e. int8_t(<int8_t> var)
+        if (!intermediate.getArithemeticInt8Enabled() && (node->getBasicType() != EbtInt8)) {
             TType tempType(EbtInt, EvqTemporary, type.getVectorSize());
             newNode = node;
             if (tempType != newNode->getType()) {
@@ -8175,9 +8911,10 @@
     case EOpConstructU8Vec4:
     case EOpConstructUint8:
         basicOp = EOpConstructUint8;
-        // 8/16-bit storage extensions don't support constructing composites of 8/16-bit types,
+        // 8/16-bit storage extensions don't support direct constructing composites of 8/16-bit types,
         // so construct a 32-bit type and convert
-        if (!intermediate.getArithemeticInt8Enabled()) {
+        // and do not generate any conversion if it is an identity conversion, i.e. uint8_t(<uint8_t> var)
+        if (!intermediate.getArithemeticInt8Enabled() && (node->getBasicType() != EbtUint8)) {
             TType tempType(EbtUint, EvqTemporary, type.getVectorSize());
             newNode = node;
             if (tempType != newNode->getType()) {
@@ -8198,9 +8935,10 @@
     case EOpConstructI16Vec4:
     case EOpConstructInt16:
         basicOp = EOpConstructInt16;
-        // 8/16-bit storage extensions don't support constructing composites of 8/16-bit types,
+        // 8/16-bit storage extensions don't support direct constructing composites of 8/16-bit types,
         // so construct a 32-bit type and convert
-        if (!intermediate.getArithemeticInt16Enabled()) {
+        // and do not generate any conversion if it is an identity conversion, i.e. int16_t(<int16_t> var)
+        if (!intermediate.getArithemeticInt16Enabled() && (node->getBasicType() != EbtInt16)) {
             TType tempType(EbtInt, EvqTemporary, type.getVectorSize());
             newNode = node;
             if (tempType != newNode->getType()) {
@@ -8221,9 +8959,10 @@
     case EOpConstructU16Vec4:
     case EOpConstructUint16:
         basicOp = EOpConstructUint16;
-        // 8/16-bit storage extensions don't support constructing composites of 8/16-bit types,
+        // 8/16-bit storage extensions don't support direct constructing composites of 8/16-bit types,
         // so construct a 32-bit type and convert
-        if (!intermediate.getArithemeticInt16Enabled()) {
+        // and do not generate any conversion if it is an identity conversion, i.e. uint16_t(<uint16_t> var)
+        if (!intermediate.getArithemeticInt16Enabled() && (node->getBasicType() != EbtUint16)) {
             TType tempType(EbtUint, EvqTemporary, type.getVectorSize());
             newNode = node;
             if (tempType != newNode->getType()) {
@@ -8251,7 +8990,7 @@
             TIntermTyped* newNode = intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConvPtrToUint64, true, node, type);
             return newNode;
         }
-        // fall through
+        [[fallthrough]];
     case EOpConstructU64Vec2:
     case EOpConstructU64Vec3:
     case EOpConstructU64Vec4:
@@ -8296,109 +9035,11 @@
                     return nullptr;
             }
             node = intermediate.setAggregateOperator(node, op, type, node->getLoc());
+        } else if (type.sameCoopMatShape(node->getType()) && !type.sameCoopMatUse(node->getType()) &&
+                   type.getBasicType() == node->getType().getBasicType()) {
+            node = intermediate.setAggregateOperator(node, op, type, node->getLoc());
         } else {
-            TOperator op = EOpNull;
-            switch (type.getBasicType()) {
-            default:
-                assert(0);
-                break;
-            case EbtInt:
-                switch (node->getType().getBasicType()) {
-                    case EbtFloat:   op = EOpConvFloatToInt;    break;
-                    case EbtFloat16: op = EOpConvFloat16ToInt;  break;
-                    case EbtUint8:   op = EOpConvUint8ToInt;    break;
-                    case EbtInt8:    op = EOpConvInt8ToInt;     break;
-                    case EbtUint16:  op = EOpConvUint16ToInt;   break;
-                    case EbtInt16:   op = EOpConvInt16ToInt;    break;
-                    case EbtUint:    op = EOpConvUintToInt;     break;
-                    default: assert(0);
-                }
-                break;
-            case EbtUint:
-                switch (node->getType().getBasicType()) {
-                    case EbtFloat:   op = EOpConvFloatToUint;    break;
-                    case EbtFloat16: op = EOpConvFloat16ToUint;  break;
-                    case EbtUint8:   op = EOpConvUint8ToUint;    break;
-                    case EbtInt8:    op = EOpConvInt8ToUint;     break;
-                    case EbtUint16:  op = EOpConvUint16ToUint;   break;
-                    case EbtInt16:   op = EOpConvInt16ToUint;    break;
-                    case EbtInt:     op = EOpConvIntToUint;      break;
-                    default: assert(0);
-                }
-                break;
-            case EbtInt16:
-                switch (node->getType().getBasicType()) {
-                    case EbtFloat:   op = EOpConvFloatToInt16;    break;
-                    case EbtFloat16: op = EOpConvFloat16ToInt16;  break;
-                    case EbtUint8:   op = EOpConvUint8ToInt16;    break;
-                    case EbtInt8:    op = EOpConvInt8ToInt16;     break;
-                    case EbtUint16:  op = EOpConvUint16ToInt16;   break;
-                    case EbtInt:     op = EOpConvIntToInt16;      break;
-                    case EbtUint:    op = EOpConvUintToInt16;     break;
-                    default: assert(0);
-                }
-                break;
-            case EbtUint16:
-                switch (node->getType().getBasicType()) {
-                    case EbtFloat:   op = EOpConvFloatToUint16;   break;
-                    case EbtFloat16: op = EOpConvFloat16ToUint16; break;
-                    case EbtUint8:   op = EOpConvUint8ToUint16;   break;
-                    case EbtInt8:    op = EOpConvInt8ToUint16;    break;
-                    case EbtInt16:   op = EOpConvInt16ToUint16;   break;
-                    case EbtInt:     op = EOpConvIntToUint16;     break;
-                    case EbtUint:    op = EOpConvUintToUint16;    break;
-                    default: assert(0);
-                }
-                break;
-            case EbtInt8:
-                switch (node->getType().getBasicType()) {
-                    case EbtFloat:   op = EOpConvFloatToInt8;    break;
-                    case EbtFloat16: op = EOpConvFloat16ToInt8;  break;
-                    case EbtUint8:   op = EOpConvUint8ToInt8;    break;
-                    case EbtInt16:   op = EOpConvInt16ToInt8;    break;
-                    case EbtUint16:  op = EOpConvUint16ToInt8;   break;
-                    case EbtInt:     op = EOpConvIntToInt8;      break;
-                    case EbtUint:    op = EOpConvUintToInt8;     break;
-                    default: assert(0);
-                }
-                break;
-            case EbtUint8:
-                switch (node->getType().getBasicType()) {
-                    case EbtFloat:   op = EOpConvFloatToUint8;   break;
-                    case EbtFloat16: op = EOpConvFloat16ToUint8; break;
-                    case EbtInt8:    op = EOpConvInt8ToUint8;    break;
-                    case EbtInt16:   op = EOpConvInt16ToUint8;   break;
-                    case EbtUint16:  op = EOpConvUint16ToUint8;  break;
-                    case EbtInt:     op = EOpConvIntToUint8;     break;
-                    case EbtUint:    op = EOpConvUintToUint8;    break;
-                    default: assert(0);
-                }
-                break;
-            case EbtFloat:
-                switch (node->getType().getBasicType()) {
-                    case EbtFloat16: op = EOpConvFloat16ToFloat;  break;
-                    case EbtInt8:    op = EOpConvInt8ToFloat;     break;
-                    case EbtUint8:   op = EOpConvUint8ToFloat;    break;
-                    case EbtInt16:   op = EOpConvInt16ToFloat;    break;
-                    case EbtUint16:  op = EOpConvUint16ToFloat;   break;
-                    case EbtInt:     op = EOpConvIntToFloat;      break;
-                    case EbtUint:    op = EOpConvUintToFloat;     break;
-                    default: assert(0);
-                }
-                break;
-            case EbtFloat16:
-                switch (node->getType().getBasicType()) {
-                    case EbtFloat:  op = EOpConvFloatToFloat16;  break;
-                    case EbtInt8:   op = EOpConvInt8ToFloat16;   break;
-                    case EbtUint8:  op = EOpConvUint8ToFloat16;  break;
-                    case EbtInt16:  op = EOpConvInt16ToFloat16;   break;
-                    case EbtUint16: op = EOpConvUint16ToFloat16;  break;
-                    case EbtInt:    op = EOpConvIntToFloat16;    break;
-                    case EbtUint:   op = EOpConvUintToFloat16;   break;
-                    default: assert(0);
-                }
-                break;
-            }
+            TOperator op = EOpConvNumeric;
 
             node = intermediate.addUnaryNode(op, node, node->getLoc(), type);
             // If it's a (non-specialization) constant, it must be folded.
@@ -8540,7 +9181,7 @@
             memberQualifier.storage = EvqtaskPayloadSharedEXT;
         if (memberQualifier.storage == EvqSpirvStorageClass)
             error(memberLoc, "member cannot have a spirv_storage_class qualifier", memberType.getFieldName().c_str(), "");
-        if (memberQualifier.hasSprivDecorate() && !memberQualifier.getSpirvDecorate().decorateIds.empty())
+        if (memberQualifier.hasSpirvDecorate() && !memberQualifier.getSpirvDecorate().decorateIds.empty())
             error(memberLoc, "member cannot have a spirv_decorate_id qualifier", memberType.getFieldName().c_str(), "");
         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(), "");
@@ -9178,6 +9819,15 @@
     // type with an empty type list, which will be filled in later in
     // TParseContext::declareBlock.
     if (!symbol && qualifier.hasBufferReference()) {
+        // The layout qualifiers are ignored in forward declaration, give warning for the most probable to be seen
+        if (qualifier.hasBufferReferenceAlign()) {
+            warn(loc, "the buffer_reference_align layout is ignored when defined in forward declaration",
+                 identifier.c_str(), "");
+        }
+        if (qualifier.hasPacking()) {
+            warn(loc, "the packing layout (scalar, std430, etc) is ignored when defined in forward declaration",
+                 identifier.c_str(), "");
+        }
         TTypeList typeList;
         TType blockType(&typeList, identifier, qualifier);
         TType blockNameType(EbtReference, blockType, identifier);
@@ -9316,7 +9966,7 @@
                     error(loc, "cannot apply to 'out'", TQualifier::getGeometryString(publicType.shaderQualifiers.geometry), "");
                     break;
                 }
-                // Fall through
+                [[fallthrough]];
             case ElgPoints:
             case ElgLineStrip:
             case ElgTriangleStrip:
@@ -9497,8 +10147,8 @@
 
     if (publicType.shaderQualifiers.layoutDerivativeGroupQuads) {
         if (publicType.qualifier.storage == EvqVaryingIn) {
-            if ((intermediate.getLocalSize(0) & 1) ||
-                (intermediate.getLocalSize(1) & 1))
+            if ((intermediate.getLocalSizeSpecId(0) == TQualifier::layoutNotSet && (intermediate.getLocalSize(0) & 1)) ||
+                (intermediate.getLocalSizeSpecId(1) == TQualifier::layoutNotSet && (intermediate.getLocalSize(1) & 1)))
                 error(loc, "requires local_size_x and local_size_y to be multiple of two", "derivative_group_quadsNV", "");
             else
                 intermediate.setLayoutDerivativeMode(LayoutDerivativeGroupQuads);
@@ -9508,7 +10158,10 @@
     }
     if (publicType.shaderQualifiers.layoutDerivativeGroupLinear) {
         if (publicType.qualifier.storage == EvqVaryingIn) {
-            if((intermediate.getLocalSize(0) *
+            if (intermediate.getLocalSizeSpecId(0) == TQualifier::layoutNotSet &&
+                intermediate.getLocalSizeSpecId(1) == TQualifier::layoutNotSet &&
+                intermediate.getLocalSizeSpecId(2) == TQualifier::layoutNotSet &&
+                (intermediate.getLocalSize(0) *
                 intermediate.getLocalSize(1) *
                 intermediate.getLocalSize(2)) % 4 != 0)
                 error(loc, "requires total group size to be multiple of four", "derivative_group_linearNV", "");
diff --git a/glslang/MachineIndependent/ParseHelper.h b/glslang/MachineIndependent/ParseHelper.h
index 05ebca2..5b192c1 100644
--- a/glslang/MachineIndependent/ParseHelper.h
+++ b/glslang/MachineIndependent/ParseHelper.h
@@ -180,6 +180,7 @@
     // Basic parsing state, easily accessible to the grammar
 
     TSymbolTable& symbolTable;        // symbol table that goes with the current language, version, and profile
+    TVector<TString> relaxedSymbols;
     int statementNestingLevel;        // 0 if outside all flow control or compound statements
     int loopNestingLevel;             // 0 if outside all loops
     int structNestingLevel;           // 0 if outside structures
@@ -367,6 +368,10 @@
     TIntermTyped* vkRelaxedRemapFunctionCall(const TSourceLoc&, TFunction*, TIntermNode*);
     // returns true if the variable was remapped to something else
     bool vkRelaxedRemapUniformVariable(const TSourceLoc&, TString&, const TPublicType&, TArraySizes*, TIntermTyped*, TType&);
+    void vkRelaxedRemapUniformMembers(const TSourceLoc&, const TPublicType&, const TType&, const TString&);
+    void vkRelaxedRemapFunctionParameter(TFunction*, TParameter&, std::vector<int>* newParams = nullptr);
+    TIntermNode* vkRelaxedRemapFunctionArgument(const TSourceLoc&, TFunction*, TIntermTyped*);
+    TIntermTyped* vkRelaxedRemapDotDereference(const TSourceLoc&, TIntermTyped&, const TType&, const TString&);
 
     void assignError(const TSourceLoc&, const char* op, TString left, TString right);
     void unaryOpError(const TSourceLoc&, const char* op, TString operand);
@@ -379,7 +384,7 @@
     void globalCheck(const TSourceLoc&, const char* token);
     bool constructorError(const TSourceLoc&, TIntermNode*, TFunction&, TOperator, TType&);
     bool constructorTextureSamplerError(const TSourceLoc&, const TFunction&);
-    void arraySizeCheck(const TSourceLoc&, TIntermTyped* expr, TArraySize&, const char *sizeType, const bool allowZero = false);
+    void arraySizeCheck(const TSourceLoc&, TIntermTyped* expr, TArraySize&, const char *sizeType, const bool isTypeParameter = false);
     bool arrayQualifierError(const TSourceLoc&, const TQualifier&);
     bool arrayError(const TSourceLoc&, const TType&);
     void arraySizeRequiredCheck(const TSourceLoc&, const TArraySizes&);
@@ -392,6 +397,7 @@
     void samplerCheck(const TSourceLoc&, const TType&, const TString& identifier, TIntermTyped* initializer);
     void atomicUintCheck(const TSourceLoc&, const TType&, const TString& identifier);
     void accStructCheck(const TSourceLoc & loc, const TType & type, const TString & identifier);
+    void hitObjectNVCheck(const TSourceLoc & loc, const TType & type, const TString & identifier);
     void transparentOpaqueCheck(const TSourceLoc&, const TType&, const TString& identifier);
     void memberQualifierCheck(glslang::TPublicType&);
     void globalQualifierFixCheck(const TSourceLoc&, TQualifier&, bool isMemberCheck = false, const TPublicType* publicType = nullptr);
@@ -503,6 +509,7 @@
     TIntermNode* executeInitializer(const TSourceLoc&, TIntermTyped* initializer, TVariable* variable);
     TIntermTyped* convertInitializerList(const TSourceLoc&, const TType&, TIntermTyped* initializer);
     void finish() override;
+    void handleCoopMat2FunctionCall(const TSourceLoc& loc, const TFunction* fnCandidate, TIntermTyped* result, TIntermNode* arguments);
 
     virtual const char* getGlobalUniformBlockName() const override;
     virtual void finalizeGlobalUniformBlockLayout(TVariable&) override;
diff --git a/glslang/MachineIndependent/PoolAlloc.cpp b/glslang/MachineIndependent/PoolAlloc.cpp
index 5d7173c..93a3b0d 100644
--- a/glslang/MachineIndependent/PoolAlloc.cpp
+++ b/glslang/MachineIndependent/PoolAlloc.cpp
@@ -35,14 +35,21 @@
 #include "../Include/Common.h"
 #include "../Include/PoolAlloc.h"
 
+// Mostly here for target that do not support threads such as WASI.
+#ifdef DISABLE_THREAD_SUPPORT
+#define THREAD_LOCAL 
+#else
+#define THREAD_LOCAL thread_local
+#endif
+
 namespace glslang {
 
 namespace {
-thread_local TPoolAllocator* threadPoolAllocator = nullptr;
+THREAD_LOCAL TPoolAllocator* threadPoolAllocator = nullptr;
 
 TPoolAllocator* GetDefaultThreadPoolAllocator()
 {
-    thread_local TPoolAllocator defaultAllocator;
+    THREAD_LOCAL TPoolAllocator defaultAllocator;
     return &defaultAllocator;
 }
 } // anonymous namespace
diff --git a/glslang/MachineIndependent/Scan.cpp b/glslang/MachineIndependent/Scan.cpp
index 5c7e2e6..414251e 100644
--- a/glslang/MachineIndependent/Scan.cpp
+++ b/glslang/MachineIndependent/Scan.cpp
@@ -322,503 +322,485 @@
 };
 
 // A single global usable by all threads, by all versions, by all languages.
-// After a single process-level initialization, this is read only and thread safe
-std::unordered_map<const char*, int, str_hash, str_eq>* KeywordMap = nullptr;
-std::unordered_set<const char*, str_hash, str_eq>* ReservedSet = nullptr;
+const std::unordered_map<const char*, int, str_hash, str_eq> KeywordMap {
+    {"const",CONST},
+    {"uniform",UNIFORM},
+    {"tileImageEXT",TILEIMAGEEXT},
+    {"buffer",BUFFER},
+    {"in",IN},
+    {"out",OUT},
+    {"smooth",SMOOTH},
+    {"flat",FLAT},
+    {"centroid",CENTROID},
+    {"invariant",INVARIANT},
+    {"packed",PACKED},
+    {"resource",RESOURCE},
+    {"inout",INOUT},
+    {"struct",STRUCT},
+    {"break",BREAK},
+    {"continue",CONTINUE},
+    {"do",DO},
+    {"for",FOR},
+    {"while",WHILE},
+    {"switch",SWITCH},
+    {"case",CASE},
+    {"default",DEFAULT},
+    {"if",IF},
+    {"else",ELSE},
+    {"discard",DISCARD},
+    {"terminateInvocation",TERMINATE_INVOCATION},
+    {"terminateRayEXT",TERMINATE_RAY},
+    {"ignoreIntersectionEXT",IGNORE_INTERSECTION},
+    {"return",RETURN},
+    {"void",VOID},
+    {"bool",BOOL},
+    {"float",FLOAT},
+    {"int",INT},
+    {"bvec2",BVEC2},
+    {"bvec3",BVEC3},
+    {"bvec4",BVEC4},
+    {"vec2",VEC2},
+    {"vec3",VEC3},
+    {"vec4",VEC4},
+    {"ivec2",IVEC2},
+    {"ivec3",IVEC3},
+    {"ivec4",IVEC4},
+    {"mat2",MAT2},
+    {"mat3",MAT3},
+    {"mat4",MAT4},
+    {"true",BOOLCONSTANT},
+    {"false",BOOLCONSTANT},
+    {"layout",LAYOUT},
+    {"shared",SHARED},
+    {"highp",HIGH_PRECISION},
+    {"mediump",MEDIUM_PRECISION},
+    {"lowp",LOW_PRECISION},
+    {"superp",SUPERP},
+    {"precision",PRECISION},
+    {"mat2x2",MAT2X2},
+    {"mat2x3",MAT2X3},
+    {"mat2x4",MAT2X4},
+    {"mat3x2",MAT3X2},
+    {"mat3x3",MAT3X3},
+    {"mat3x4",MAT3X4},
+    {"mat4x2",MAT4X2},
+    {"mat4x3",MAT4X3},
+    {"mat4x4",MAT4X4},
+    {"uint",UINT},
+    {"uvec2",UVEC2},
+    {"uvec3",UVEC3},
+    {"uvec4",UVEC4},
+
+    {"nonuniformEXT",NONUNIFORM},
+    {"demote",DEMOTE},
+    {"attribute",ATTRIBUTE},
+    {"varying",VARYING},
+    {"noperspective",NOPERSPECTIVE},
+    {"coherent",COHERENT},
+    {"devicecoherent",DEVICECOHERENT},
+    {"queuefamilycoherent",QUEUEFAMILYCOHERENT},
+    {"workgroupcoherent",WORKGROUPCOHERENT},
+    {"subgroupcoherent",SUBGROUPCOHERENT},
+    {"shadercallcoherent",SHADERCALLCOHERENT},
+    {"nonprivate",NONPRIVATE},
+    {"restrict",RESTRICT},
+    {"readonly",READONLY},
+    {"writeonly",WRITEONLY},
+    {"atomic_uint",ATOMIC_UINT},
+    {"volatile",VOLATILE},
+    {"patch",PATCH},
+    {"sample",SAMPLE},
+    {"subroutine",SUBROUTINE},
+    {"dmat2",DMAT2},
+    {"dmat3",DMAT3},
+    {"dmat4",DMAT4},
+    {"dmat2x2",DMAT2X2},
+    {"dmat2x3",DMAT2X3},
+    {"dmat2x4",DMAT2X4},
+    {"dmat3x2",DMAT3X2},
+    {"dmat3x3",DMAT3X3},
+    {"dmat3x4",DMAT3X4},
+    {"dmat4x2",DMAT4X2},
+    {"dmat4x3",DMAT4X3},
+    {"dmat4x4",DMAT4X4},
+    {"image1D",IMAGE1D},
+    {"iimage1D",IIMAGE1D},
+    {"uimage1D",UIMAGE1D},
+    {"image2D",IMAGE2D},
+    {"iimage2D",IIMAGE2D},
+    {"uimage2D",UIMAGE2D},
+    {"image3D",IMAGE3D},
+    {"iimage3D",IIMAGE3D},
+    {"uimage3D",UIMAGE3D},
+    {"image2DRect",IMAGE2DRECT},
+    {"iimage2DRect",IIMAGE2DRECT},
+    {"uimage2DRect",UIMAGE2DRECT},
+    {"imageCube",IMAGECUBE},
+    {"iimageCube",IIMAGECUBE},
+    {"uimageCube",UIMAGECUBE},
+    {"imageBuffer",IMAGEBUFFER},
+    {"iimageBuffer",IIMAGEBUFFER},
+    {"uimageBuffer",UIMAGEBUFFER},
+    {"image1DArray",IMAGE1DARRAY},
+    {"iimage1DArray",IIMAGE1DARRAY},
+    {"uimage1DArray",UIMAGE1DARRAY},
+    {"image2DArray",IMAGE2DARRAY},
+    {"iimage2DArray",IIMAGE2DARRAY},
+    {"uimage2DArray",UIMAGE2DARRAY},
+    {"imageCubeArray",IMAGECUBEARRAY},
+    {"iimageCubeArray",IIMAGECUBEARRAY},
+    {"uimageCubeArray",UIMAGECUBEARRAY},
+    {"image2DMS",IMAGE2DMS},
+    {"iimage2DMS",IIMAGE2DMS},
+    {"uimage2DMS",UIMAGE2DMS},
+    {"image2DMSArray",IMAGE2DMSARRAY},
+    {"iimage2DMSArray",IIMAGE2DMSARRAY},
+    {"uimage2DMSArray",UIMAGE2DMSARRAY},
+    {"i64image1D",I64IMAGE1D},
+    {"u64image1D",U64IMAGE1D},
+    {"i64image2D",I64IMAGE2D},
+    {"u64image2D",U64IMAGE2D},
+    {"i64image3D",I64IMAGE3D},
+    {"u64image3D",U64IMAGE3D},
+    {"i64image2DRect",I64IMAGE2DRECT},
+    {"u64image2DRect",U64IMAGE2DRECT},
+    {"i64imageCube",I64IMAGECUBE},
+    {"u64imageCube",U64IMAGECUBE},
+    {"i64imageBuffer",I64IMAGEBUFFER},
+    {"u64imageBuffer",U64IMAGEBUFFER},
+    {"i64image1DArray",I64IMAGE1DARRAY},
+    {"u64image1DArray",U64IMAGE1DARRAY},
+    {"i64image2DArray",I64IMAGE2DARRAY},
+    {"u64image2DArray",U64IMAGE2DARRAY},
+    {"i64imageCubeArray",I64IMAGECUBEARRAY},
+    {"u64imageCubeArray",U64IMAGECUBEARRAY},
+    {"i64image2DMS",I64IMAGE2DMS},
+    {"u64image2DMS",U64IMAGE2DMS},
+    {"i64image2DMSArray",I64IMAGE2DMSARRAY},
+    {"u64image2DMSArray",U64IMAGE2DMSARRAY},
+    {"double",DOUBLE},
+    {"dvec2",DVEC2},
+    {"dvec3",DVEC3},
+    {"dvec4",DVEC4},
+    {"int64_t",INT64_T},
+    {"uint64_t",UINT64_T},
+    {"i64vec2",I64VEC2},
+    {"i64vec3",I64VEC3},
+    {"i64vec4",I64VEC4},
+    {"u64vec2",U64VEC2},
+    {"u64vec3",U64VEC3},
+    {"u64vec4",U64VEC4},
+
+    // GL_EXT_shader_explicit_arithmetic_types
+    {"int8_t",INT8_T},
+    {"i8vec2",I8VEC2},
+    {"i8vec3",I8VEC3},
+    {"i8vec4",I8VEC4},
+    {"uint8_t",UINT8_T},
+    {"u8vec2",U8VEC2},
+    {"u8vec3",U8VEC3},
+    {"u8vec4",U8VEC4},
+
+    {"int16_t",INT16_T},
+    {"i16vec2",I16VEC2},
+    {"i16vec3",I16VEC3},
+    {"i16vec4",I16VEC4},
+    {"uint16_t",UINT16_T},
+    {"u16vec2",U16VEC2},
+    {"u16vec3",U16VEC3},
+    {"u16vec4",U16VEC4},
+
+    {"int32_t",INT32_T},
+    {"i32vec2",I32VEC2},
+    {"i32vec3",I32VEC3},
+    {"i32vec4",I32VEC4},
+    {"uint32_t",UINT32_T},
+    {"u32vec2",U32VEC2},
+    {"u32vec3",U32VEC3},
+    {"u32vec4",U32VEC4},
+
+    {"float16_t",FLOAT16_T},
+    {"f16vec2",F16VEC2},
+    {"f16vec3",F16VEC3},
+    {"f16vec4",F16VEC4},
+    {"f16mat2",F16MAT2},
+    {"f16mat3",F16MAT3},
+    {"f16mat4",F16MAT4},
+    {"f16mat2x2",F16MAT2X2},
+    {"f16mat2x3",F16MAT2X3},
+    {"f16mat2x4",F16MAT2X4},
+    {"f16mat3x2",F16MAT3X2},
+    {"f16mat3x3",F16MAT3X3},
+    {"f16mat3x4",F16MAT3X4},
+    {"f16mat4x2",F16MAT4X2},
+    {"f16mat4x3",F16MAT4X3},
+    {"f16mat4x4",F16MAT4X4},
+
+    {"float32_t",FLOAT32_T},
+    {"f32vec2",F32VEC2},
+    {"f32vec3",F32VEC3},
+    {"f32vec4",F32VEC4},
+    {"f32mat2",F32MAT2},
+    {"f32mat3",F32MAT3},
+    {"f32mat4",F32MAT4},
+    {"f32mat2x2",F32MAT2X2},
+    {"f32mat2x3",F32MAT2X3},
+    {"f32mat2x4",F32MAT2X4},
+    {"f32mat3x2",F32MAT3X2},
+    {"f32mat3x3",F32MAT3X3},
+    {"f32mat3x4",F32MAT3X4},
+    {"f32mat4x2",F32MAT4X2},
+    {"f32mat4x3",F32MAT4X3},
+    {"f32mat4x4",F32MAT4X4},
+    {"float64_t",FLOAT64_T},
+    {"f64vec2",F64VEC2},
+    {"f64vec3",F64VEC3},
+    {"f64vec4",F64VEC4},
+    {"f64mat2",F64MAT2},
+    {"f64mat3",F64MAT3},
+    {"f64mat4",F64MAT4},
+    {"f64mat2x2",F64MAT2X2},
+    {"f64mat2x3",F64MAT2X3},
+    {"f64mat2x4",F64MAT2X4},
+    {"f64mat3x2",F64MAT3X2},
+    {"f64mat3x3",F64MAT3X3},
+    {"f64mat3x4",F64MAT3X4},
+    {"f64mat4x2",F64MAT4X2},
+    {"f64mat4x3",F64MAT4X3},
+    {"f64mat4x4",F64MAT4X4},
+
+    // GL_EXT_spirv_intrinsics
+    {"spirv_instruction",SPIRV_INSTRUCTION},
+    {"spirv_execution_mode",SPIRV_EXECUTION_MODE},
+    {"spirv_execution_mode_id",SPIRV_EXECUTION_MODE_ID},
+    {"spirv_decorate",SPIRV_DECORATE},
+    {"spirv_decorate_id",SPIRV_DECORATE_ID},
+    {"spirv_decorate_string",SPIRV_DECORATE_STRING},
+    {"spirv_type",SPIRV_TYPE},
+    {"spirv_storage_class",SPIRV_STORAGE_CLASS},
+    {"spirv_by_reference",SPIRV_BY_REFERENCE},
+    {"spirv_literal",SPIRV_LITERAL},
+
+    {"sampler2D",SAMPLER2D},
+    {"samplerCube",SAMPLERCUBE},
+    {"samplerCubeShadow",SAMPLERCUBESHADOW},
+    {"sampler2DArray",SAMPLER2DARRAY},
+    {"sampler2DArrayShadow",SAMPLER2DARRAYSHADOW},
+    {"isampler2D",ISAMPLER2D},
+    {"isampler3D",ISAMPLER3D},
+    {"isamplerCube",ISAMPLERCUBE},
+    {"isampler2DArray",ISAMPLER2DARRAY},
+    {"usampler2D",USAMPLER2D},
+    {"usampler3D",USAMPLER3D},
+    {"usamplerCube",USAMPLERCUBE},
+    {"usampler2DArray",USAMPLER2DARRAY},
+    {"sampler3D",SAMPLER3D},
+    {"sampler2DShadow",SAMPLER2DSHADOW},
+
+    {"texture2D",TEXTURE2D},
+    {"textureCube",TEXTURECUBE},
+    {"texture2DArray",TEXTURE2DARRAY},
+    {"itexture2D",ITEXTURE2D},
+    {"itexture3D",ITEXTURE3D},
+    {"itextureCube",ITEXTURECUBE},
+    {"itexture2DArray",ITEXTURE2DARRAY},
+    {"utexture2D",UTEXTURE2D},
+    {"utexture3D",UTEXTURE3D},
+    {"utextureCube",UTEXTURECUBE},
+    {"utexture2DArray",UTEXTURE2DARRAY},
+    {"texture3D",TEXTURE3D},
+
+    {"sampler",SAMPLER},
+    {"samplerShadow",SAMPLERSHADOW},
+
+    {"textureCubeArray",TEXTURECUBEARRAY},
+    {"itextureCubeArray",ITEXTURECUBEARRAY},
+    {"utextureCubeArray",UTEXTURECUBEARRAY},
+    {"samplerCubeArray",SAMPLERCUBEARRAY},
+    {"samplerCubeArrayShadow",SAMPLERCUBEARRAYSHADOW},
+    {"isamplerCubeArray",ISAMPLERCUBEARRAY},
+    {"usamplerCubeArray",USAMPLERCUBEARRAY},
+    {"sampler1DArrayShadow",SAMPLER1DARRAYSHADOW},
+    {"isampler1DArray",ISAMPLER1DARRAY},
+    {"usampler1D",USAMPLER1D},
+    {"isampler1D",ISAMPLER1D},
+    {"usampler1DArray",USAMPLER1DARRAY},
+    {"samplerBuffer",SAMPLERBUFFER},
+    {"isampler2DRect",ISAMPLER2DRECT},
+    {"usampler2DRect",USAMPLER2DRECT},
+    {"isamplerBuffer",ISAMPLERBUFFER},
+    {"usamplerBuffer",USAMPLERBUFFER},
+    {"sampler2DMS",SAMPLER2DMS},
+    {"isampler2DMS",ISAMPLER2DMS},
+    {"usampler2DMS",USAMPLER2DMS},
+    {"sampler2DMSArray",SAMPLER2DMSARRAY},
+    {"isampler2DMSArray",ISAMPLER2DMSARRAY},
+    {"usampler2DMSArray",USAMPLER2DMSARRAY},
+    {"sampler1D",SAMPLER1D},
+    {"sampler1DShadow",SAMPLER1DSHADOW},
+    {"sampler2DRect",SAMPLER2DRECT},
+    {"sampler2DRectShadow",SAMPLER2DRECTSHADOW},
+    {"sampler1DArray",SAMPLER1DARRAY},
+
+    {"samplerExternalOES",     SAMPLEREXTERNALOES}, // GL_OES_EGL_image_external
+    {"__samplerExternal2DY2YEXT", SAMPLEREXTERNAL2DY2YEXT}, // GL_EXT_YUV_target
+
+    {"itexture1DArray",ITEXTURE1DARRAY},
+    {"utexture1D",UTEXTURE1D},
+    {"itexture1D",ITEXTURE1D},
+    {"utexture1DArray",UTEXTURE1DARRAY},
+    {"textureBuffer",TEXTUREBUFFER},
+    {"itexture2DRect",ITEXTURE2DRECT},
+    {"utexture2DRect",UTEXTURE2DRECT},
+    {"itextureBuffer",ITEXTUREBUFFER},
+    {"utextureBuffer",UTEXTUREBUFFER},
+    {"texture2DMS",TEXTURE2DMS},
+    {"itexture2DMS",ITEXTURE2DMS},
+    {"utexture2DMS",UTEXTURE2DMS},
+    {"texture2DMSArray",TEXTURE2DMSARRAY},
+    {"itexture2DMSArray",ITEXTURE2DMSARRAY},
+    {"utexture2DMSArray",UTEXTURE2DMSARRAY},
+    {"texture1D",TEXTURE1D},
+    {"texture2DRect",TEXTURE2DRECT},
+    {"texture1DArray",TEXTURE1DARRAY},
+
+    {"attachmentEXT",ATTACHMENTEXT},
+    {"iattachmentEXT",IATTACHMENTEXT},
+    {"uattachmentEXT",UATTACHMENTEXT},
+
+    {"subpassInput",SUBPASSINPUT},
+    {"subpassInputMS",SUBPASSINPUTMS},
+    {"isubpassInput",ISUBPASSINPUT},
+    {"isubpassInputMS",ISUBPASSINPUTMS},
+    {"usubpassInput",USUBPASSINPUT},
+    {"usubpassInputMS",USUBPASSINPUTMS},
+
+    {"f16sampler1D",F16SAMPLER1D},
+    {"f16sampler2D",F16SAMPLER2D},
+    {"f16sampler3D",F16SAMPLER3D},
+    {"f16sampler2DRect",F16SAMPLER2DRECT},
+    {"f16samplerCube",F16SAMPLERCUBE},
+    {"f16sampler1DArray",F16SAMPLER1DARRAY},
+    {"f16sampler2DArray",F16SAMPLER2DARRAY},
+    {"f16samplerCubeArray",F16SAMPLERCUBEARRAY},
+    {"f16samplerBuffer",F16SAMPLERBUFFER},
+    {"f16sampler2DMS",F16SAMPLER2DMS},
+    {"f16sampler2DMSArray",F16SAMPLER2DMSARRAY},
+    {"f16sampler1DShadow",F16SAMPLER1DSHADOW},
+    {"f16sampler2DShadow",F16SAMPLER2DSHADOW},
+    {"f16sampler2DRectShadow",F16SAMPLER2DRECTSHADOW},
+    {"f16samplerCubeShadow",F16SAMPLERCUBESHADOW},
+    {"f16sampler1DArrayShadow",F16SAMPLER1DARRAYSHADOW},
+    {"f16sampler2DArrayShadow",F16SAMPLER2DARRAYSHADOW},
+    {"f16samplerCubeArrayShadow",F16SAMPLERCUBEARRAYSHADOW},
+
+    {"f16image1D",F16IMAGE1D},
+    {"f16image2D",F16IMAGE2D},
+    {"f16image3D",F16IMAGE3D},
+    {"f16image2DRect",F16IMAGE2DRECT},
+    {"f16imageCube",F16IMAGECUBE},
+    {"f16image1DArray",F16IMAGE1DARRAY},
+    {"f16image2DArray",F16IMAGE2DARRAY},
+    {"f16imageCubeArray",F16IMAGECUBEARRAY},
+    {"f16imageBuffer",F16IMAGEBUFFER},
+    {"f16image2DMS",F16IMAGE2DMS},
+    {"f16image2DMSArray",F16IMAGE2DMSARRAY},
+
+    {"f16texture1D",F16TEXTURE1D},
+    {"f16texture2D",F16TEXTURE2D},
+    {"f16texture3D",F16TEXTURE3D},
+    {"f16texture2DRect",F16TEXTURE2DRECT},
+    {"f16textureCube",F16TEXTURECUBE},
+    {"f16texture1DArray",F16TEXTURE1DARRAY},
+    {"f16texture2DArray",F16TEXTURE2DARRAY},
+    {"f16textureCubeArray",F16TEXTURECUBEARRAY},
+    {"f16textureBuffer",F16TEXTUREBUFFER},
+    {"f16texture2DMS",F16TEXTURE2DMS},
+    {"f16texture2DMSArray",F16TEXTURE2DMSARRAY},
+
+    {"f16subpassInput",F16SUBPASSINPUT},
+    {"f16subpassInputMS",F16SUBPASSINPUTMS},
+    {"__explicitInterpAMD",EXPLICITINTERPAMD},
+    {"pervertexNV",PERVERTEXNV},
+    {"pervertexEXT",PERVERTEXEXT},
+    {"precise",PRECISE},
+
+    {"rayPayloadNV",PAYLOADNV},
+    {"rayPayloadEXT",PAYLOADEXT},
+    {"rayPayloadInNV",PAYLOADINNV},
+    {"rayPayloadInEXT",PAYLOADINEXT},
+    {"hitAttributeNV",HITATTRNV},
+    {"hitAttributeEXT",HITATTREXT},
+    {"callableDataNV",CALLDATANV},
+    {"callableDataEXT",CALLDATAEXT},
+    {"callableDataInNV",CALLDATAINNV},
+    {"callableDataInEXT",CALLDATAINEXT},
+    {"accelerationStructureNV",ACCSTRUCTNV},
+    {"accelerationStructureEXT",ACCSTRUCTEXT},
+    {"rayQueryEXT",RAYQUERYEXT},
+    {"perprimitiveNV",PERPRIMITIVENV},
+    {"perviewNV",PERVIEWNV},
+    {"taskNV",PERTASKNV},
+    {"perprimitiveEXT",PERPRIMITIVEEXT},
+    {"taskPayloadSharedEXT",TASKPAYLOADWORKGROUPEXT},
+
+    {"fcoopmatNV",FCOOPMATNV},
+    {"icoopmatNV",ICOOPMATNV},
+    {"ucoopmatNV",UCOOPMATNV},
+
+    {"coopmat",COOPMAT},
+
+    {"hitObjectNV",HITOBJECTNV},
+    {"hitObjectAttributeNV",HITOBJECTATTRNV},
+
+    {"__function",FUNCTION},
+    {"tensorLayoutNV",TENSORLAYOUTNV},
+    {"tensorViewNV",TENSORVIEWNV},
+};
+const std::unordered_set<const char*, str_hash, str_eq> ReservedSet {
+    "common",
+    "partition",
+    "active",
+    "asm",
+    "class",
+    "union",
+    "enum",
+    "typedef",
+    "template",
+    "this",
+    "goto",
+    "inline",
+    "noinline",
+    "public",
+    "static",
+    "extern",
+    "external",
+    "interface",
+    "long",
+    "short",
+    "half",
+    "fixed",
+    "unsigned",
+    "input",
+    "output",
+    "hvec2",
+    "hvec3",
+    "hvec4",
+    "fvec2",
+    "fvec3",
+    "fvec4",
+    "sampler3DRect",
+    "filter",
+    "sizeof",
+    "cast",
+    "namespace",
+    "using",
+};
 
 }
 
 namespace glslang {
 
-void TScanContext::fillInKeywordMap()
-{
-    if (KeywordMap != nullptr) {
-        // this is really an error, as this should called only once per process
-        // but, the only risk is if two threads called simultaneously
-        return;
-    }
-    KeywordMap = new std::unordered_map<const char*, int, str_hash, str_eq>;
-
-    (*KeywordMap)["const"] =                   CONST;
-    (*KeywordMap)["uniform"] =                 UNIFORM;
-    (*KeywordMap)["tileImageEXT"] =            TILEIMAGEEXT;
-    (*KeywordMap)["buffer"] =                  BUFFER;
-    (*KeywordMap)["in"] =                      IN;
-    (*KeywordMap)["out"] =                     OUT;
-    (*KeywordMap)["smooth"] =                  SMOOTH;
-    (*KeywordMap)["flat"] =                    FLAT;
-    (*KeywordMap)["centroid"] =                CENTROID;
-    (*KeywordMap)["invariant"] =               INVARIANT;
-    (*KeywordMap)["packed"] =                  PACKED;
-    (*KeywordMap)["resource"] =                RESOURCE;
-    (*KeywordMap)["inout"] =                   INOUT;
-    (*KeywordMap)["struct"] =                  STRUCT;
-    (*KeywordMap)["break"] =                   BREAK;
-    (*KeywordMap)["continue"] =                CONTINUE;
-    (*KeywordMap)["do"] =                      DO;
-    (*KeywordMap)["for"] =                     FOR;
-    (*KeywordMap)["while"] =                   WHILE;
-    (*KeywordMap)["switch"] =                  SWITCH;
-    (*KeywordMap)["case"] =                    CASE;
-    (*KeywordMap)["default"] =                 DEFAULT;
-    (*KeywordMap)["if"] =                      IF;
-    (*KeywordMap)["else"] =                    ELSE;
-    (*KeywordMap)["discard"] =                 DISCARD;
-    (*KeywordMap)["terminateInvocation"] =     TERMINATE_INVOCATION;
-    (*KeywordMap)["terminateRayEXT"] =         TERMINATE_RAY;
-    (*KeywordMap)["ignoreIntersectionEXT"] =   IGNORE_INTERSECTION;
-    (*KeywordMap)["return"] =                  RETURN;
-    (*KeywordMap)["void"] =                    VOID;
-    (*KeywordMap)["bool"] =                    BOOL;
-    (*KeywordMap)["float"] =                   FLOAT;
-    (*KeywordMap)["int"] =                     INT;
-    (*KeywordMap)["bvec2"] =                   BVEC2;
-    (*KeywordMap)["bvec3"] =                   BVEC3;
-    (*KeywordMap)["bvec4"] =                   BVEC4;
-    (*KeywordMap)["vec2"] =                    VEC2;
-    (*KeywordMap)["vec3"] =                    VEC3;
-    (*KeywordMap)["vec4"] =                    VEC4;
-    (*KeywordMap)["ivec2"] =                   IVEC2;
-    (*KeywordMap)["ivec3"] =                   IVEC3;
-    (*KeywordMap)["ivec4"] =                   IVEC4;
-    (*KeywordMap)["mat2"] =                    MAT2;
-    (*KeywordMap)["mat3"] =                    MAT3;
-    (*KeywordMap)["mat4"] =                    MAT4;
-    (*KeywordMap)["true"] =                    BOOLCONSTANT;
-    (*KeywordMap)["false"] =                   BOOLCONSTANT;
-    (*KeywordMap)["layout"] =                  LAYOUT;
-    (*KeywordMap)["shared"] =                  SHARED;
-    (*KeywordMap)["highp"] =                   HIGH_PRECISION;
-    (*KeywordMap)["mediump"] =                 MEDIUM_PRECISION;
-    (*KeywordMap)["lowp"] =                    LOW_PRECISION;
-    (*KeywordMap)["superp"] =                  SUPERP;
-    (*KeywordMap)["precision"] =               PRECISION;
-    (*KeywordMap)["mat2x2"] =                  MAT2X2;
-    (*KeywordMap)["mat2x3"] =                  MAT2X3;
-    (*KeywordMap)["mat2x4"] =                  MAT2X4;
-    (*KeywordMap)["mat3x2"] =                  MAT3X2;
-    (*KeywordMap)["mat3x3"] =                  MAT3X3;
-    (*KeywordMap)["mat3x4"] =                  MAT3X4;
-    (*KeywordMap)["mat4x2"] =                  MAT4X2;
-    (*KeywordMap)["mat4x3"] =                  MAT4X3;
-    (*KeywordMap)["mat4x4"] =                  MAT4X4;
-    (*KeywordMap)["uint"] =                    UINT;
-    (*KeywordMap)["uvec2"] =                   UVEC2;
-    (*KeywordMap)["uvec3"] =                   UVEC3;
-    (*KeywordMap)["uvec4"] =                   UVEC4;
-
-    (*KeywordMap)["nonuniformEXT"] =           NONUNIFORM;
-    (*KeywordMap)["demote"] =                  DEMOTE;
-    (*KeywordMap)["attribute"] =               ATTRIBUTE;
-    (*KeywordMap)["varying"] =                 VARYING;
-    (*KeywordMap)["noperspective"] =           NOPERSPECTIVE;
-    (*KeywordMap)["coherent"] =                COHERENT;
-    (*KeywordMap)["devicecoherent"] =          DEVICECOHERENT;
-    (*KeywordMap)["queuefamilycoherent"] =     QUEUEFAMILYCOHERENT;
-    (*KeywordMap)["workgroupcoherent"] =       WORKGROUPCOHERENT;
-    (*KeywordMap)["subgroupcoherent"] =        SUBGROUPCOHERENT;
-    (*KeywordMap)["shadercallcoherent"] =      SHADERCALLCOHERENT;
-    (*KeywordMap)["nonprivate"] =              NONPRIVATE;
-    (*KeywordMap)["restrict"] =                RESTRICT;
-    (*KeywordMap)["readonly"] =                READONLY;
-    (*KeywordMap)["writeonly"] =               WRITEONLY;
-    (*KeywordMap)["atomic_uint"] =             ATOMIC_UINT;
-    (*KeywordMap)["volatile"] =                VOLATILE;
-    (*KeywordMap)["patch"] =                   PATCH;
-    (*KeywordMap)["sample"] =                  SAMPLE;
-    (*KeywordMap)["subroutine"] =              SUBROUTINE;
-    (*KeywordMap)["dmat2"] =                   DMAT2;
-    (*KeywordMap)["dmat3"] =                   DMAT3;
-    (*KeywordMap)["dmat4"] =                   DMAT4;
-    (*KeywordMap)["dmat2x2"] =                 DMAT2X2;
-    (*KeywordMap)["dmat2x3"] =                 DMAT2X3;
-    (*KeywordMap)["dmat2x4"] =                 DMAT2X4;
-    (*KeywordMap)["dmat3x2"] =                 DMAT3X2;
-    (*KeywordMap)["dmat3x3"] =                 DMAT3X3;
-    (*KeywordMap)["dmat3x4"] =                 DMAT3X4;
-    (*KeywordMap)["dmat4x2"] =                 DMAT4X2;
-    (*KeywordMap)["dmat4x3"] =                 DMAT4X3;
-    (*KeywordMap)["dmat4x4"] =                 DMAT4X4;
-    (*KeywordMap)["image1D"] =                 IMAGE1D;
-    (*KeywordMap)["iimage1D"] =                IIMAGE1D;
-    (*KeywordMap)["uimage1D"] =                UIMAGE1D;
-    (*KeywordMap)["image2D"] =                 IMAGE2D;
-    (*KeywordMap)["iimage2D"] =                IIMAGE2D;
-    (*KeywordMap)["uimage2D"] =                UIMAGE2D;
-    (*KeywordMap)["image3D"] =                 IMAGE3D;
-    (*KeywordMap)["iimage3D"] =                IIMAGE3D;
-    (*KeywordMap)["uimage3D"] =                UIMAGE3D;
-    (*KeywordMap)["image2DRect"] =             IMAGE2DRECT;
-    (*KeywordMap)["iimage2DRect"] =            IIMAGE2DRECT;
-    (*KeywordMap)["uimage2DRect"] =            UIMAGE2DRECT;
-    (*KeywordMap)["imageCube"] =               IMAGECUBE;
-    (*KeywordMap)["iimageCube"] =              IIMAGECUBE;
-    (*KeywordMap)["uimageCube"] =              UIMAGECUBE;
-    (*KeywordMap)["imageBuffer"] =             IMAGEBUFFER;
-    (*KeywordMap)["iimageBuffer"] =            IIMAGEBUFFER;
-    (*KeywordMap)["uimageBuffer"] =            UIMAGEBUFFER;
-    (*KeywordMap)["image1DArray"] =            IMAGE1DARRAY;
-    (*KeywordMap)["iimage1DArray"] =           IIMAGE1DARRAY;
-    (*KeywordMap)["uimage1DArray"] =           UIMAGE1DARRAY;
-    (*KeywordMap)["image2DArray"] =            IMAGE2DARRAY;
-    (*KeywordMap)["iimage2DArray"] =           IIMAGE2DARRAY;
-    (*KeywordMap)["uimage2DArray"] =           UIMAGE2DARRAY;
-    (*KeywordMap)["imageCubeArray"] =          IMAGECUBEARRAY;
-    (*KeywordMap)["iimageCubeArray"] =         IIMAGECUBEARRAY;
-    (*KeywordMap)["uimageCubeArray"] =         UIMAGECUBEARRAY;
-    (*KeywordMap)["image2DMS"] =               IMAGE2DMS;
-    (*KeywordMap)["iimage2DMS"] =              IIMAGE2DMS;
-    (*KeywordMap)["uimage2DMS"] =              UIMAGE2DMS;
-    (*KeywordMap)["image2DMSArray"] =          IMAGE2DMSARRAY;
-    (*KeywordMap)["iimage2DMSArray"] =         IIMAGE2DMSARRAY;
-    (*KeywordMap)["uimage2DMSArray"] =         UIMAGE2DMSARRAY;
-    (*KeywordMap)["i64image1D"] =              I64IMAGE1D;
-    (*KeywordMap)["u64image1D"] =              U64IMAGE1D;
-    (*KeywordMap)["i64image2D"] =              I64IMAGE2D;
-    (*KeywordMap)["u64image2D"] =              U64IMAGE2D;
-    (*KeywordMap)["i64image3D"] =              I64IMAGE3D;
-    (*KeywordMap)["u64image3D"] =              U64IMAGE3D;
-    (*KeywordMap)["i64image2DRect"] =          I64IMAGE2DRECT;
-    (*KeywordMap)["u64image2DRect"] =          U64IMAGE2DRECT;
-    (*KeywordMap)["i64imageCube"] =            I64IMAGECUBE;
-    (*KeywordMap)["u64imageCube"] =            U64IMAGECUBE;
-    (*KeywordMap)["i64imageBuffer"] =          I64IMAGEBUFFER;
-    (*KeywordMap)["u64imageBuffer"] =          U64IMAGEBUFFER;
-    (*KeywordMap)["i64image1DArray"] =         I64IMAGE1DARRAY;
-    (*KeywordMap)["u64image1DArray"] =         U64IMAGE1DARRAY;
-    (*KeywordMap)["i64image2DArray"] =         I64IMAGE2DARRAY;
-    (*KeywordMap)["u64image2DArray"] =         U64IMAGE2DARRAY;
-    (*KeywordMap)["i64imageCubeArray"] =       I64IMAGECUBEARRAY;
-    (*KeywordMap)["u64imageCubeArray"] =       U64IMAGECUBEARRAY;
-    (*KeywordMap)["i64image2DMS"] =            I64IMAGE2DMS;
-    (*KeywordMap)["u64image2DMS"] =            U64IMAGE2DMS;
-    (*KeywordMap)["i64image2DMSArray"] =       I64IMAGE2DMSARRAY;
-    (*KeywordMap)["u64image2DMSArray"] =       U64IMAGE2DMSARRAY;
-    (*KeywordMap)["double"] =                  DOUBLE;
-    (*KeywordMap)["dvec2"] =                   DVEC2;
-    (*KeywordMap)["dvec3"] =                   DVEC3;
-    (*KeywordMap)["dvec4"] =                   DVEC4;
-    (*KeywordMap)["int64_t"] =                 INT64_T;
-    (*KeywordMap)["uint64_t"] =                UINT64_T;
-    (*KeywordMap)["i64vec2"] =                 I64VEC2;
-    (*KeywordMap)["i64vec3"] =                 I64VEC3;
-    (*KeywordMap)["i64vec4"] =                 I64VEC4;
-    (*KeywordMap)["u64vec2"] =                 U64VEC2;
-    (*KeywordMap)["u64vec3"] =                 U64VEC3;
-    (*KeywordMap)["u64vec4"] =                 U64VEC4;
-
-    // GL_EXT_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)["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;
-    (*KeywordMap)["f16vec4"] =                 F16VEC4;
-    (*KeywordMap)["f16mat2"] =                 F16MAT2;
-    (*KeywordMap)["f16mat3"] =                 F16MAT3;
-    (*KeywordMap)["f16mat4"] =                 F16MAT4;
-    (*KeywordMap)["f16mat2x2"] =               F16MAT2X2;
-    (*KeywordMap)["f16mat2x3"] =               F16MAT2X3;
-    (*KeywordMap)["f16mat2x4"] =               F16MAT2X4;
-    (*KeywordMap)["f16mat3x2"] =               F16MAT3X2;
-    (*KeywordMap)["f16mat3x3"] =               F16MAT3X3;
-    (*KeywordMap)["f16mat3x4"] =               F16MAT3X4;
-    (*KeywordMap)["f16mat4x2"] =               F16MAT4X2;
-    (*KeywordMap)["f16mat4x3"] =               F16MAT4X3;
-    (*KeywordMap)["f16mat4x4"] =               F16MAT4X4;
-
-    (*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;
-
-    // GL_EXT_spirv_intrinsics
-    (*KeywordMap)["spirv_instruction"] =       SPIRV_INSTRUCTION;
-    (*KeywordMap)["spirv_execution_mode"] =    SPIRV_EXECUTION_MODE;
-    (*KeywordMap)["spirv_execution_mode_id"] = SPIRV_EXECUTION_MODE_ID;
-    (*KeywordMap)["spirv_decorate"] =          SPIRV_DECORATE;
-    (*KeywordMap)["spirv_decorate_id"] =       SPIRV_DECORATE_ID;
-    (*KeywordMap)["spirv_decorate_string"] =   SPIRV_DECORATE_STRING;
-    (*KeywordMap)["spirv_type"] =              SPIRV_TYPE;
-    (*KeywordMap)["spirv_storage_class"] =     SPIRV_STORAGE_CLASS;
-    (*KeywordMap)["spirv_by_reference"] =      SPIRV_BY_REFERENCE;
-    (*KeywordMap)["spirv_literal"] =           SPIRV_LITERAL;
-
-    (*KeywordMap)["sampler2D"] =               SAMPLER2D;
-    (*KeywordMap)["samplerCube"] =             SAMPLERCUBE;
-    (*KeywordMap)["samplerCubeShadow"] =       SAMPLERCUBESHADOW;
-    (*KeywordMap)["sampler2DArray"] =          SAMPLER2DARRAY;
-    (*KeywordMap)["sampler2DArrayShadow"] =    SAMPLER2DARRAYSHADOW;
-    (*KeywordMap)["isampler2D"] =              ISAMPLER2D;
-    (*KeywordMap)["isampler3D"] =              ISAMPLER3D;
-    (*KeywordMap)["isamplerCube"] =            ISAMPLERCUBE;
-    (*KeywordMap)["isampler2DArray"] =         ISAMPLER2DARRAY;
-    (*KeywordMap)["usampler2D"] =              USAMPLER2D;
-    (*KeywordMap)["usampler3D"] =              USAMPLER3D;
-    (*KeywordMap)["usamplerCube"] =            USAMPLERCUBE;
-    (*KeywordMap)["usampler2DArray"] =         USAMPLER2DARRAY;
-    (*KeywordMap)["sampler3D"] =               SAMPLER3D;
-    (*KeywordMap)["sampler2DShadow"] =         SAMPLER2DSHADOW;
-
-    (*KeywordMap)["texture2D"] =               TEXTURE2D;
-    (*KeywordMap)["textureCube"] =             TEXTURECUBE;
-    (*KeywordMap)["texture2DArray"] =          TEXTURE2DARRAY;
-    (*KeywordMap)["itexture2D"] =              ITEXTURE2D;
-    (*KeywordMap)["itexture3D"] =              ITEXTURE3D;
-    (*KeywordMap)["itextureCube"] =            ITEXTURECUBE;
-    (*KeywordMap)["itexture2DArray"] =         ITEXTURE2DARRAY;
-    (*KeywordMap)["utexture2D"] =              UTEXTURE2D;
-    (*KeywordMap)["utexture3D"] =              UTEXTURE3D;
-    (*KeywordMap)["utextureCube"] =            UTEXTURECUBE;
-    (*KeywordMap)["utexture2DArray"] =         UTEXTURE2DARRAY;
-    (*KeywordMap)["texture3D"] =               TEXTURE3D;
-
-    (*KeywordMap)["sampler"] =                 SAMPLER;
-    (*KeywordMap)["samplerShadow"] =           SAMPLERSHADOW;
-
-    (*KeywordMap)["textureCubeArray"] =        TEXTURECUBEARRAY;
-    (*KeywordMap)["itextureCubeArray"] =       ITEXTURECUBEARRAY;
-    (*KeywordMap)["utextureCubeArray"] =       UTEXTURECUBEARRAY;
-    (*KeywordMap)["samplerCubeArray"] =        SAMPLERCUBEARRAY;
-    (*KeywordMap)["samplerCubeArrayShadow"] =  SAMPLERCUBEARRAYSHADOW;
-    (*KeywordMap)["isamplerCubeArray"] =       ISAMPLERCUBEARRAY;
-    (*KeywordMap)["usamplerCubeArray"] =       USAMPLERCUBEARRAY;
-    (*KeywordMap)["sampler1DArrayShadow"] =    SAMPLER1DARRAYSHADOW;
-    (*KeywordMap)["isampler1DArray"] =         ISAMPLER1DARRAY;
-    (*KeywordMap)["usampler1D"] =              USAMPLER1D;
-    (*KeywordMap)["isampler1D"] =              ISAMPLER1D;
-    (*KeywordMap)["usampler1DArray"] =         USAMPLER1DARRAY;
-    (*KeywordMap)["samplerBuffer"] =           SAMPLERBUFFER;
-    (*KeywordMap)["isampler2DRect"] =          ISAMPLER2DRECT;
-    (*KeywordMap)["usampler2DRect"] =          USAMPLER2DRECT;
-    (*KeywordMap)["isamplerBuffer"] =          ISAMPLERBUFFER;
-    (*KeywordMap)["usamplerBuffer"] =          USAMPLERBUFFER;
-    (*KeywordMap)["sampler2DMS"] =             SAMPLER2DMS;
-    (*KeywordMap)["isampler2DMS"] =            ISAMPLER2DMS;
-    (*KeywordMap)["usampler2DMS"] =            USAMPLER2DMS;
-    (*KeywordMap)["sampler2DMSArray"] =        SAMPLER2DMSARRAY;
-    (*KeywordMap)["isampler2DMSArray"] =       ISAMPLER2DMSARRAY;
-    (*KeywordMap)["usampler2DMSArray"] =       USAMPLER2DMSARRAY;
-    (*KeywordMap)["sampler1D"] =               SAMPLER1D;
-    (*KeywordMap)["sampler1DShadow"] =         SAMPLER1DSHADOW;
-    (*KeywordMap)["sampler2DRect"] =           SAMPLER2DRECT;
-    (*KeywordMap)["sampler2DRectShadow"] =     SAMPLER2DRECTSHADOW;
-    (*KeywordMap)["sampler1DArray"] =          SAMPLER1DARRAY;
-
-    (*KeywordMap)["samplerExternalOES"] =      SAMPLEREXTERNALOES; // GL_OES_EGL_image_external
-
-    (*KeywordMap)["__samplerExternal2DY2YEXT"] = SAMPLEREXTERNAL2DY2YEXT; // GL_EXT_YUV_target
-
-    (*KeywordMap)["itexture1DArray"] =         ITEXTURE1DARRAY;
-    (*KeywordMap)["utexture1D"] =              UTEXTURE1D;
-    (*KeywordMap)["itexture1D"] =              ITEXTURE1D;
-    (*KeywordMap)["utexture1DArray"] =         UTEXTURE1DARRAY;
-    (*KeywordMap)["textureBuffer"] =           TEXTUREBUFFER;
-    (*KeywordMap)["itexture2DRect"] =          ITEXTURE2DRECT;
-    (*KeywordMap)["utexture2DRect"] =          UTEXTURE2DRECT;
-    (*KeywordMap)["itextureBuffer"] =          ITEXTUREBUFFER;
-    (*KeywordMap)["utextureBuffer"] =          UTEXTUREBUFFER;
-    (*KeywordMap)["texture2DMS"] =             TEXTURE2DMS;
-    (*KeywordMap)["itexture2DMS"] =            ITEXTURE2DMS;
-    (*KeywordMap)["utexture2DMS"] =            UTEXTURE2DMS;
-    (*KeywordMap)["texture2DMSArray"] =        TEXTURE2DMSARRAY;
-    (*KeywordMap)["itexture2DMSArray"] =       ITEXTURE2DMSARRAY;
-    (*KeywordMap)["utexture2DMSArray"] =       UTEXTURE2DMSARRAY;
-    (*KeywordMap)["texture1D"] =               TEXTURE1D;
-    (*KeywordMap)["texture2DRect"] =           TEXTURE2DRECT;
-    (*KeywordMap)["texture1DArray"] =          TEXTURE1DARRAY;
-
-    (*KeywordMap)["attachmentEXT"] =           ATTACHMENTEXT;
-    (*KeywordMap)["iattachmentEXT"] =          IATTACHMENTEXT;
-    (*KeywordMap)["uattachmentEXT"] =          UATTACHMENTEXT;
-
-    (*KeywordMap)["subpassInput"] =            SUBPASSINPUT;
-    (*KeywordMap)["subpassInputMS"] =          SUBPASSINPUTMS;
-    (*KeywordMap)["isubpassInput"] =           ISUBPASSINPUT;
-    (*KeywordMap)["isubpassInputMS"] =         ISUBPASSINPUTMS;
-    (*KeywordMap)["usubpassInput"] =           USUBPASSINPUT;
-    (*KeywordMap)["usubpassInputMS"] =         USUBPASSINPUTMS;
-
-    (*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;
-    (*KeywordMap)["__explicitInterpAMD"] =     EXPLICITINTERPAMD;
-    (*KeywordMap)["pervertexNV"] =             PERVERTEXNV;
-    (*KeywordMap)["pervertexEXT"] =            PERVERTEXEXT;
-    (*KeywordMap)["precise"] =                 PRECISE;
-
-    (*KeywordMap)["rayPayloadNV"] =            PAYLOADNV;
-    (*KeywordMap)["rayPayloadEXT"] =           PAYLOADEXT;
-    (*KeywordMap)["rayPayloadInNV"] =          PAYLOADINNV;
-    (*KeywordMap)["rayPayloadInEXT"] =         PAYLOADINEXT;
-    (*KeywordMap)["hitAttributeNV"] =          HITATTRNV;
-    (*KeywordMap)["hitAttributeEXT"] =         HITATTREXT;
-    (*KeywordMap)["callableDataNV"] =          CALLDATANV;
-    (*KeywordMap)["callableDataEXT"] =         CALLDATAEXT;
-    (*KeywordMap)["callableDataInNV"] =        CALLDATAINNV;
-    (*KeywordMap)["callableDataInEXT"] =       CALLDATAINEXT;
-    (*KeywordMap)["accelerationStructureNV"] = ACCSTRUCTNV;
-    (*KeywordMap)["accelerationStructureEXT"]   = ACCSTRUCTEXT;
-    (*KeywordMap)["rayQueryEXT"] =              RAYQUERYEXT;
-    (*KeywordMap)["perprimitiveNV"] =          PERPRIMITIVENV;
-    (*KeywordMap)["perviewNV"] =               PERVIEWNV;
-    (*KeywordMap)["taskNV"] =                  PERTASKNV;
-    (*KeywordMap)["perprimitiveEXT"] =         PERPRIMITIVEEXT;
-    (*KeywordMap)["taskPayloadSharedEXT"] =    TASKPAYLOADWORKGROUPEXT;
-
-    (*KeywordMap)["fcoopmatNV"] =              FCOOPMATNV;
-    (*KeywordMap)["icoopmatNV"] =              ICOOPMATNV;
-    (*KeywordMap)["ucoopmatNV"] =              UCOOPMATNV;
-
-    (*KeywordMap)["coopmat"] =                 COOPMAT;
-
-    (*KeywordMap)["hitObjectNV"] =             HITOBJECTNV;
-    (*KeywordMap)["hitObjectAttributeNV"] =    HITOBJECTATTRNV;
-
-    ReservedSet = new std::unordered_set<const char*, str_hash, str_eq>;
-
-    ReservedSet->insert("common");
-    ReservedSet->insert("partition");
-    ReservedSet->insert("active");
-    ReservedSet->insert("asm");
-    ReservedSet->insert("class");
-    ReservedSet->insert("union");
-    ReservedSet->insert("enum");
-    ReservedSet->insert("typedef");
-    ReservedSet->insert("template");
-    ReservedSet->insert("this");
-    ReservedSet->insert("goto");
-    ReservedSet->insert("inline");
-    ReservedSet->insert("noinline");
-    ReservedSet->insert("public");
-    ReservedSet->insert("static");
-    ReservedSet->insert("extern");
-    ReservedSet->insert("external");
-    ReservedSet->insert("interface");
-    ReservedSet->insert("long");
-    ReservedSet->insert("short");
-    ReservedSet->insert("half");
-    ReservedSet->insert("fixed");
-    ReservedSet->insert("unsigned");
-    ReservedSet->insert("input");
-    ReservedSet->insert("output");
-    ReservedSet->insert("hvec2");
-    ReservedSet->insert("hvec3");
-    ReservedSet->insert("hvec4");
-    ReservedSet->insert("fvec2");
-    ReservedSet->insert("fvec3");
-    ReservedSet->insert("fvec4");
-    ReservedSet->insert("sampler3DRect");
-    ReservedSet->insert("filter");
-    ReservedSet->insert("sizeof");
-    ReservedSet->insert("cast");
-    ReservedSet->insert("namespace");
-    ReservedSet->insert("using");
-}
-
-void TScanContext::deleteKeywordMap()
-{
-    delete KeywordMap;
-    KeywordMap = nullptr;
-    delete ReservedSet;
-    ReservedSet = nullptr;
-}
-
 // Called by yylex to get the next token.
 // Returning 0 implies end of input.
 int TScanContext::tokenize(TPpContext* pp, TParserToken& token)
@@ -924,11 +906,11 @@
 
 int TScanContext::tokenizeIdentifier()
 {
-    if (ReservedSet->find(tokenText) != ReservedSet->end())
+    if (ReservedSet.find(tokenText) != ReservedSet.end())
         return reservedWord();
 
-    auto it = KeywordMap->find(tokenText);
-    if (it == KeywordMap->end()) {
+    auto it = KeywordMap.find(tokenText);
+    if (it == KeywordMap.end()) {
         // Should have an identifier of some sort
         return identifierOrType();
     }
@@ -1496,6 +1478,12 @@
     case USAMPLERCUBE:
     case USAMPLER2DARRAY:
         afterType = true;
+        if (keyword == SAMPLER2DARRAY || keyword == SAMPLER2DARRAYSHADOW) {
+            if (!parseContext.isEsProfile() &&
+                (parseContext.extensionTurnedOn(E_GL_EXT_texture_array) || parseContext.symbolTable.atBuiltInLevel())) {
+                return keyword;
+            }
+        }
         return nonreservedKeyword(300, 130);
 
     case SAMPLER3D:
@@ -1539,6 +1527,12 @@
     case USAMPLER1D:
     case USAMPLER1DARRAY:
         afterType = true;
+        if (keyword == SAMPLER1DARRAYSHADOW) {
+            if (!parseContext.isEsProfile() &&
+                (parseContext.extensionTurnedOn(E_GL_EXT_texture_array) || parseContext.symbolTable.atBuiltInLevel())) {
+                return keyword;
+            }
+        }
         return es30ReservedFromGLSL(130);
     case ISAMPLER2DRECT:
     case USAMPLER2DRECT:
@@ -1608,7 +1602,9 @@
         if (parseContext.isEsProfile() && parseContext.version == 300)
             reservedWord();
         else if ((parseContext.isEsProfile() && parseContext.version < 300) ||
-                 (!parseContext.isEsProfile() && parseContext.version < 130))
+                 ((!parseContext.isEsProfile() && parseContext.version < 130) &&
+                   !parseContext.symbolTable.atBuiltInLevel() &&
+                   !parseContext.extensionTurnedOn(E_GL_EXT_texture_array)))
             return identifierOrType();
         return keyword;
 
@@ -1815,6 +1811,15 @@
             return keyword;
         return identifierOrType();
 
+    case FUNCTION:
+    case TENSORLAYOUTNV:
+    case TENSORVIEWNV:
+        afterType = true;
+        if (parseContext.symbolTable.atBuiltInLevel() ||
+            parseContext.extensionTurnedOn(E_GL_NV_cooperative_matrix2))
+            return keyword;
+        return identifierOrType();
+
     default:
         parseContext.infoSink.info.message(EPrefixInternalError, "Unknown glslang keyword", loc);
         return 0;
diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp
index 9a42aca..040b21d 100644
--- a/glslang/MachineIndependent/ShaderLang.cpp
+++ b/glslang/MachineIndependent/ShaderLang.cpp
@@ -58,7 +58,6 @@
 #endif
 
 #include "../Include/ShHandle.h"
-#include "../../OGLCompilersDLL/InitializeDll.h"
 
 #include "preprocessor/PpContext.h"
 
@@ -83,7 +82,10 @@
 int NumberOfClients = 0;
 
 // global initialization lock
+#ifndef DISABLE_THREAD_SUPPORT
 std::mutex init_lock;
+#endif
+
 
 using namespace glslang;
 
@@ -295,18 +297,21 @@
 //
 // To initialize per-stage shared tables, with the common table already complete.
 //
-void InitializeStageSymbolTable(TBuiltInParseables& builtInParseables, int version, EProfile profile, const SpvVersion& spvVersion,
+bool InitializeStageSymbolTable(TBuiltInParseables& builtInParseables, int version, EProfile profile, const SpvVersion& spvVersion,
                                 EShLanguage language, EShSource source, TInfoSink& infoSink, TSymbolTable** commonTable,
                                 TSymbolTable** symbolTables)
 {
     (*symbolTables[language]).adoptLevels(*commonTable[CommonIndex(profile, language)]);
-    InitializeSymbolTable(builtInParseables.getStageString(language), version, profile, spvVersion, language, source,
-                          infoSink, *symbolTables[language]);
+    if (!InitializeSymbolTable(builtInParseables.getStageString(language), version, profile, spvVersion, language, source,
+                          infoSink, *symbolTables[language]))
+        return false;
     builtInParseables.identifyBuiltIns(version, profile, spvVersion, language, *symbolTables[language]);
     if (profile == EEsProfile && version >= 300)
         (*symbolTables[language]).setNoBuiltInRedeclarations();
     if (version == 110)
         (*symbolTables[language]).setSeparateNameSpaces();
+
+    return true;
 }
 
 //
@@ -315,6 +320,7 @@
 //
 bool InitializeSymbolTables(TInfoSink& infoSink, TSymbolTable** commonTable,  TSymbolTable** symbolTables, int version, EProfile profile, const SpvVersion& spvVersion, EShSource source)
 {
+    bool success = true;
     std::unique_ptr<TBuiltInParseables> builtInParseables(CreateBuiltInParseables(infoSink, source));
 
     if (builtInParseables == nullptr)
@@ -323,70 +329,70 @@
     builtInParseables->initialize(version, profile, spvVersion);
 
     // do the common tables
-    InitializeSymbolTable(builtInParseables->getCommonString(), version, profile, spvVersion, EShLangVertex, source,
+    success &= InitializeSymbolTable(builtInParseables->getCommonString(), version, profile, spvVersion, EShLangVertex, source,
                           infoSink, *commonTable[EPcGeneral]);
     if (profile == EEsProfile)
-        InitializeSymbolTable(builtInParseables->getCommonString(), version, profile, spvVersion, EShLangFragment, source,
+        success &= InitializeSymbolTable(builtInParseables->getCommonString(), version, profile, spvVersion, EShLangFragment, source,
                               infoSink, *commonTable[EPcFragment]);
 
     // do the per-stage tables
 
     // always have vertex and fragment
-    InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangVertex, source,
+    success &= InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangVertex, source,
                                infoSink, commonTable, symbolTables);
-    InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangFragment, source,
+    success &= InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangFragment, source,
                                infoSink, commonTable, symbolTables);
 
     // check for tessellation
     if ((profile != EEsProfile && version >= 150) ||
         (profile == EEsProfile && version >= 310)) {
-        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangTessControl, source,
+        success &= InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangTessControl, source,
                                    infoSink, commonTable, symbolTables);
-        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangTessEvaluation, source,
+        success &= InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangTessEvaluation, source,
                                    infoSink, commonTable, symbolTables);
     }
 
     // check for geometry
     if ((profile != EEsProfile && version >= 150) ||
         (profile == EEsProfile && version >= 310))
-        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangGeometry, source,
+        success &= InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangGeometry, source,
                                    infoSink, commonTable, symbolTables);
 
     // check for compute
     if ((profile != EEsProfile && version >= 420) ||
         (profile == EEsProfile && version >= 310))
-        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangCompute, source,
+        success &= InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangCompute, source,
                                    infoSink, commonTable, symbolTables);
 
     // check for ray tracing stages
     if (profile != EEsProfile && version >= 450) {
-        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangRayGen, source,
+        success &= InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangRayGen, source,
             infoSink, commonTable, symbolTables);
-        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangIntersect, source,
+        success &= InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangIntersect, source,
             infoSink, commonTable, symbolTables);
-        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangAnyHit, source,
+        success &= InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangAnyHit, source,
             infoSink, commonTable, symbolTables);
-        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangClosestHit, source,
+        success &= InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangClosestHit, source,
             infoSink, commonTable, symbolTables);
-        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangMiss, source,
+        success &= InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangMiss, source,
             infoSink, commonTable, symbolTables);
-        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangCallable, source,
+        success &= InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangCallable, source,
             infoSink, commonTable, symbolTables);
     }
 
     // check for mesh
     if ((profile != EEsProfile && version >= 450) ||
         (profile == EEsProfile && version >= 320))
-        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangMesh, source,
+        success &= InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangMesh, source,
                                    infoSink, commonTable, symbolTables);
 
     // check for task
     if ((profile != EEsProfile && version >= 450) ||
         (profile == EEsProfile && version >= 320))
-        InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangTask, source,
+        success &= InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangTask, source,
                                    infoSink, commonTable, symbolTables);
 
-    return true;
+    return success;
 }
 
 bool AddContextSpecificSymbols(const TBuiltInResource* resources, TInfoSink& infoSink, TSymbolTable& symbolTable, int version,
@@ -398,7 +404,8 @@
         return false;
 
     builtInParseables->initialize(*resources, version, profile, spvVersion, language);
-    InitializeSymbolTable(builtInParseables->getCommonString(), version, profile, spvVersion, language, source, infoSink, symbolTable);
+    if (!InitializeSymbolTable(builtInParseables->getCommonString(), version, profile, spvVersion, language, source, infoSink, symbolTable))
+        return false;
     builtInParseables->identifyBuiltIns(version, profile, spvVersion, language, symbolTable, *resources);
 
     return true;
@@ -416,20 +423,24 @@
 // This only gets done the first time any thread needs a particular symbol table
 // (lazy evaluation).
 //
-void SetupBuiltinSymbolTable(int version, EProfile profile, const SpvVersion& spvVersion, EShSource source)
+bool SetupBuiltinSymbolTable(int version, EProfile profile, const SpvVersion& spvVersion, EShSource source)
 {
     TInfoSink infoSink;
+    bool success;
 
     // Make sure only one thread tries to do this at a time
+#ifndef DISABLE_THREAD_SUPPORT
     const std::lock_guard<std::mutex> lock(init_lock);
+#endif
 
     // See if it's already been done for this version/profile combination
     int versionIndex = MapVersionToIndex(version);
     int spvVersionIndex = MapSpvVersionToIndex(spvVersion);
     int profileIndex = MapProfileToIndex(profile);
     int sourceIndex = MapSourceToIndex(source);
-    if (CommonSymbolTable[versionIndex][spvVersionIndex][profileIndex][sourceIndex][EPcGeneral])
-        return;
+    if (CommonSymbolTable[versionIndex][spvVersionIndex][profileIndex][sourceIndex][EPcGeneral]) {
+        return true;
+    }
 
     // Switch to a new pool
     TPoolAllocator& previousAllocator = GetThreadPoolAllocator();
@@ -445,7 +456,10 @@
         stageTables[stage] = new TSymbolTable;
 
     // Generate the local symbol tables using the new pool
-    InitializeSymbolTables(infoSink, commonTable, stageTables, version, profile, spvVersion, source);
+    if (!InitializeSymbolTables(infoSink, commonTable, stageTables, version, profile, spvVersion, source)) {
+        success = false;
+        goto cleanup;
+    }
 
     // Switch to the process-global pool
     SetThreadPoolAllocator(PerProcessGPA);
@@ -467,7 +481,9 @@
             SharedSymbolTables[versionIndex][spvVersionIndex][profileIndex][sourceIndex][stage]->readOnly();
         }
     }
+    success = true;
 
+cleanup:
     // Clean up the local tables before deleting the pool they used.
     for (int precClass = 0; precClass < EPcCount; ++precClass)
         delete commonTable[precClass];
@@ -476,6 +492,8 @@
 
     delete builtInPoolAllocator;
     SetThreadPoolAllocator(&previousAllocator);
+
+    return success;
 }
 
 // Function to Print all builtins
@@ -634,6 +652,7 @@
             infoSink.info.message(EPrefixError, "#version: mesh/task shaders require es profile with version 320 or above, or non-es profile with version 450 or above");
             version = profile == EEsProfile ? 320 : 450;
         }
+        break;
     default:
         break;
     }
@@ -788,7 +807,7 @@
     // set version/profile to defaultVersion/defaultProfile regardless of the #version
     // directive in the source code
     bool forceDefaultVersionAndProfile,
-    int overrideVersion, // overrides version specified by #verison or default version
+    int overrideVersion, // overrides version specified by #version or default version
     bool forwardCompatible,     // give errors for use of deprecated features
     EShMessages messages,       // warnings/errors/AST; things to print out
     TIntermediate& intermediate, // returned tree, etc.
@@ -910,7 +929,9 @@
             intermediate.addSourceText(strings[numPre + s], lengths[numPre + s]);
         }
     }
-    SetupBuiltinSymbolTable(version, profile, spvVersion, source);
+    if (!SetupBuiltinSymbolTable(version, profile, spvVersion, source)) {
+        return false;
+    }
 
     TSymbolTable* cachedTable = SharedSymbolTables[MapVersionToIndex(version)]
                                                   [MapSpvVersionToIndex(spvVersion)]
@@ -1311,20 +1332,14 @@
 //
 int ShInitialize()
 {
-    if (! InitProcess())
-        return 0;
-
+#ifndef DISABLE_THREAD_SUPPORT
     const std::lock_guard<std::mutex> lock(init_lock);
+#endif
     ++NumberOfClients;
 
     if (PerProcessGPA == nullptr)
         PerProcessGPA = new TPoolAllocator();
 
-    glslang::TScanContext::fillInKeywordMap();
-#ifdef ENABLE_HLSL
-    glslang::HlslScanContext::fillInKeywordMap();
-#endif
-
     return 1;
 }
 
@@ -1333,31 +1348,22 @@
 // objects.
 //
 
-ShHandle ShConstructCompiler(const EShLanguage language, int debugOptions)
+ShHandle ShConstructCompiler(const EShLanguage language, int /*debugOptions unused*/)
 {
-    if (!InitThread())
-        return nullptr;
-
-    TShHandleBase* base = static_cast<TShHandleBase*>(ConstructCompiler(language, debugOptions));
+    TShHandleBase* base = static_cast<TShHandleBase*>(ConstructCompiler(language, 0));
 
     return reinterpret_cast<void*>(base);
 }
 
-ShHandle ShConstructLinker(const EShExecutable executable, int debugOptions)
+ShHandle ShConstructLinker(const EShExecutable executable, int /*debugOptions unused*/)
 {
-    if (!InitThread())
-        return nullptr;
-
-    TShHandleBase* base = static_cast<TShHandleBase*>(ConstructLinker(executable, debugOptions));
+    TShHandleBase* base = static_cast<TShHandleBase*>(ConstructLinker(executable, 0));
 
     return reinterpret_cast<void*>(base);
 }
 
 ShHandle ShConstructUniformMap()
 {
-    if (!InitThread())
-        return nullptr;
-
     TShHandleBase* base = static_cast<TShHandleBase*>(ConstructUniformMap());
 
     return reinterpret_cast<void*>(base);
@@ -1383,7 +1389,9 @@
 //
 int ShFinalize()
 {
+#ifndef DISABLE_THREAD_SUPPORT
     const std::lock_guard<std::mutex> lock(init_lock);
+#endif
     --NumberOfClients;
     assert(NumberOfClients >= 0);
     if (NumberOfClients > 0)
@@ -1420,11 +1428,6 @@
         PerProcessGPA = nullptr;
     }
 
-    glslang::TScanContext::deleteKeywordMap();
-#ifdef ENABLE_HLSL
-    glslang::HlslScanContext::deleteKeywordMap();
-#endif
-
     return 1;
 }
 
@@ -1446,7 +1449,8 @@
     int /*debugOptions*/,
     int defaultVersion,        // use 100 for ES environment, 110 for desktop
     bool forwardCompatible,    // give errors for use of deprecated features
-    EShMessages messages       // warnings/errors/AST; things to print out
+    EShMessages messages,       // warnings/errors/AST; things to print out,
+    const char *shaderFileName // the filename
     )
 {
     // Map the generic handle to the C++ object
@@ -1462,6 +1466,9 @@
 
     compiler->infoSink.info.erase();
     compiler->infoSink.debug.erase();
+    compiler->infoSink.info.setShaderFileName(shaderFileName);
+    compiler->infoSink.debug.setShaderFileName(shaderFileName);
+
 
     TIntermediate intermediate(compiler->getLanguage());
     TShader::ForbidIncluder includer;
@@ -1725,6 +1732,10 @@
     virtual bool compile(TIntermNode*, int = 0, EProfile = ENoProfile) { return true; }
 };
 
+TIoMapper* GetGlslIoMapper() {
+    return static_cast<TIoMapper*>(new TGlslIoMapper());
+}
+
 TShader::TShader(EShLanguage s)
     : stage(s), lengths(nullptr), stringNames(nullptr), preamble(""), overrideVersion(0)
 {
@@ -1857,6 +1868,9 @@
 void TShader::setAtomicCounterBlockName(const char* name) { intermediate->setAtomicCounterBlockName(name); }
 void TShader::setAtomicCounterBlockSet(unsigned int set) { intermediate->setAtomicCounterBlockSet(set); }
 
+void TShader::addSourceText(const char* text, size_t len) { intermediate->addSourceText(text, len); }
+void TShader::setSourceFile(const char* file) { intermediate->setSourceFile(file); }
+
 #ifdef ENABLE_HLSL
 // See comment above TDefaultHlslIoMapper in iomapper.cpp:
 void TShader::setHlslIoMapping(bool hlslIoMap)          { intermediate->setHlslIoMapping(hlslIoMap); }
@@ -1871,8 +1885,6 @@
 bool TShader::parse(const TBuiltInResource* builtInResources, int defaultVersion, EProfile defaultProfile, bool forceDefaultVersionAndProfile,
                     bool forwardCompatible, EShMessages messages, Includer& includer)
 {
-    if (! InitThread())
-        return false;
     SetThreadPoolAllocator(pool);
 
     if (! preamble)
@@ -1897,8 +1909,6 @@
                          std::string* output_string,
                          Includer& includer)
 {
-    if (! InitThread())
-        return false;
     SetThreadPoolAllocator(pool);
 
     if (! preamble)
@@ -2045,7 +2055,7 @@
 //
 // Return true if no errors.
 //
-bool TProgram::crossStageCheck(EShMessages) {
+bool TProgram::crossStageCheck(EShMessages messages) {
 
     // make temporary intermediates to hold the linkage symbols for each linking interface
     // while we do the checks
@@ -2100,6 +2110,13 @@
         error |= (activeStages[i - 1]->getNumErrors() != 0);
     }
 
+    // if requested, optimize cross stage IO
+    if (messages & EShMsgLinkTimeOptimization) {
+        for (unsigned int i = 1; i < activeStages.size(); ++i) {
+            activeStages[i - 1]->optimizeStageIO(*infoSink, *activeStages[i]);
+        }
+    }
+
     return !error;
 }
 
@@ -2117,11 +2134,15 @@
 // Reflection implementation.
 //
 
+unsigned int TObjectReflection::layoutLocation() const { return type->getQualifier().layoutLocation; }
+
 bool TProgram::buildReflection(int opts)
 {
     if (! linked || reflection != nullptr)
         return false;
 
+    SetThreadPoolAllocator(pool);
+
     int firstStage = EShLangVertex, lastStage = EShLangFragment;
 
     if (opts & EShReflectionIntermediateIO) {
@@ -2170,6 +2191,12 @@
 const TObjectReflection& TProgram::getAtomicCounter(int index) const  { return reflection->getAtomicCounter(index); }
 void TProgram::dumpReflection() { if (reflection != nullptr) reflection->dump(); }
 
+TIoMapResolver* TProgram::getGlslIoResolver(EShLanguage stage) {
+    auto *intermediate = getIntermediate(stage);
+    if (!intermediate)
+        return NULL;
+    return static_cast<TIoMapResolver*>(new TDefaultGlslIoResolver(*intermediate));
+}
 //
 // I/O mapping implementation.
 //
@@ -2177,6 +2204,9 @@
 {
     if (! linked)
         return false;
+
+    SetThreadPoolAllocator(pool);
+
     TIoMapper* ioMapper = nullptr;
     TIoMapper defaultIOMapper;
     if (pIoMapper == nullptr)
diff --git a/glslang/MachineIndependent/SymbolTable.cpp b/glslang/MachineIndependent/SymbolTable.cpp
index dae5a8b..8036260 100644
--- a/glslang/MachineIndependent/SymbolTable.cpp
+++ b/glslang/MachineIndependent/SymbolTable.cpp
@@ -78,6 +78,8 @@
     case EbtRayQuery:           mangledName += "rq";     break;
     case EbtSpirvType:          mangledName += "spv-t";  break;
     case EbtHitObjectNV:        mangledName += "ho";     break;
+    case EbtTensorLayoutNV:     mangledName += "tl";     break;
+    case EbtTensorViewNV:       mangledName += "tv";     break;
     case EbtSampler:
         switch (sampler.type) {
         case EbtFloat16: mangledName += "f16"; break;
@@ -149,6 +151,7 @@
             mangledName += '-';
             (*structure)[i].type->buildMangledName(mangledName);
         }
+        break;
     default:
         break;
     }
@@ -168,7 +171,7 @@
                 if (arraySizes->getDimNode(i)->getAsSymbolNode())
                     snprintf(buf, maxSize, "s%lld", arraySizes->getDimNode(i)->getAsSymbolNode()->getId());
                 else
-                    snprintf(buf, maxSize, "s%p", arraySizes->getDimNode(i));
+                    snprintf(buf, maxSize, "s%p", (void*)(arraySizes->getDimNode(i)));
             } else
                 snprintf(buf, maxSize, "%d", arraySizes->getDimSize(i));
             mangledName += '[';
@@ -343,6 +346,7 @@
 TSymbol::TSymbol(const TSymbol& copyOf)
 {
     name = NewPoolTString(copyOf.name->c_str());
+    mangledName = NewPoolTString(copyOf.mangledName->c_str());
     uniqueId = copyOf.uniqueId;
     writable = true;
 }
diff --git a/glslang/MachineIndependent/SymbolTable.h b/glslang/MachineIndependent/SymbolTable.h
index 94c3929..6d1a0c8 100644
--- a/glslang/MachineIndependent/SymbolTable.h
+++ b/glslang/MachineIndependent/SymbolTable.h
@@ -84,7 +84,8 @@
 class TSymbol {
 public:
     POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator())
-    explicit TSymbol(const TString *n) :  name(n), uniqueId(0), extensions(nullptr), writable(true) { }
+    explicit TSymbol(const TString *n, const TString *mn) :  name(n), mangledName(mn), uniqueId(0), extensions(nullptr), writable(true) { }
+    explicit TSymbol(const TString *n) : TSymbol(n, n) { }
     virtual TSymbol* clone() const = 0;
     virtual ~TSymbol() { }  // rely on all symbol owned memory coming from the pool
 
@@ -96,7 +97,7 @@
         newName.append(*name);
         changeName(NewPoolTString(newName.c_str()));
     }
-    virtual const TString& getMangledName() const { return getName(); }
+    virtual const TString& getMangledName() const { return *mangledName; }
     virtual TFunction* getAsFunction() { return nullptr; }
     virtual const TFunction* getAsFunction() const { return nullptr; }
     virtual TVariable* getAsVariable() { return nullptr; }
@@ -128,6 +129,7 @@
     TSymbol& operator=(const TSymbol&);
 
     const TString *name;
+    const TString *mangledName;
     unsigned long long uniqueId;      // For cross-scope comparing during code generation
 
     // For tracking what extensions must be present
@@ -154,7 +156,9 @@
 class TVariable : public TSymbol {
 public:
     TVariable(const TString *name, const TType& t, bool uT = false )
-        : TSymbol(name),
+        : TVariable(name, name, t, uT) {}
+    TVariable(const TString *name, const TString *mangledName, const TType& t, bool uT = false )
+        : TSymbol(name, mangledName),
           userType(uT),
           constSubtree(nullptr),
           memberExtensions(nullptr),
diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp
index bede716..cbfae6c 100644
--- a/glslang/MachineIndependent/Versions.cpp
+++ b/glslang/MachineIndependent/Versions.cpp
@@ -1,7 +1,7 @@
 //
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2013 LunarG, Inc.
-// Copyright (C) 2017 ARM Limited.
+// Copyright (C) 2017, 2022-2024 Arm Limited.
 // Copyright (C) 2015-2020 Google, Inc.
 // Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
 //
@@ -165,7 +165,8 @@
 
     const extensionData exts[] = { {E_GL_EXT_ray_tracing, EShTargetSpv_1_4},
                                    {E_GL_NV_ray_tracing_motion_blur, EShTargetSpv_1_4},
-                                   {E_GL_EXT_mesh_shader, EShTargetSpv_1_4}
+                                   {E_GL_EXT_mesh_shader, EShTargetSpv_1_4},
+                                   {E_GL_NV_cooperative_matrix2, EShTargetSpv_1_6}
                                  };
 
     for (size_t ii = 0; ii < sizeof(exts) / sizeof(exts[0]); ii++) {
@@ -235,6 +236,7 @@
     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_rotate]           = EBhDisable;
     extensionBehavior[E_GL_KHR_shader_subgroup_clustered]        = EBhDisable;
     extensionBehavior[E_GL_KHR_shader_subgroup_quad]             = EBhDisable;
     extensionBehavior[E_GL_KHR_memory_scope_semantics]           = EBhDisable;
@@ -258,14 +260,20 @@
     extensionBehavior[E_GL_EXT_shader_16bit_storage]                    = EBhDisable;
     extensionBehavior[E_GL_EXT_shader_8bit_storage]                     = EBhDisable;
     extensionBehavior[E_GL_EXT_subgroup_uniform_control_flow]           = EBhDisable;
+    extensionBehavior[E_GL_EXT_maximal_reconvergence]                   = EBhDisable;
 
     extensionBehavior[E_GL_EXT_fragment_shader_barycentric]             = EBhDisable;
+    extensionBehavior[E_GL_EXT_expect_assume]                           = EBhDisable;
+
+    extensionBehavior[E_GL_EXT_control_flow_attributes2]                = EBhDisable;
+    extensionBehavior[E_GL_EXT_spec_constant_composites]                = EBhDisable;
 
     extensionBehavior[E_GL_KHR_cooperative_matrix]                      = EBhDisable;
 
     // #line and #include
     extensionBehavior[E_GL_GOOGLE_cpp_style_line_directive]          = EBhDisable;
     extensionBehavior[E_GL_GOOGLE_include_directive]                 = EBhDisable;
+    extensionBehavior[E_GL_ARB_shading_language_include]             = EBhDisable;
 
     extensionBehavior[E_GL_AMD_shader_ballot]                        = EBhDisable;
     extensionBehavior[E_GL_AMD_shader_trinary_minmax]                = EBhDisable;
@@ -302,12 +310,15 @@
     extensionBehavior[E_GL_NV_integer_cooperative_matrix]            = EBhDisable;
     extensionBehavior[E_GL_NV_shader_invocation_reorder]             = EBhDisable;
     extensionBehavior[E_GL_NV_displacement_micromap]                 = EBhDisable;
+    extensionBehavior[E_GL_NV_shader_atomic_fp16_vector]             = EBhDisable;
+    extensionBehavior[E_GL_NV_cooperative_matrix2]                   = EBhDisable;
 
     // ARM
     extensionBehavior[E_GL_ARM_shader_core_builtins]                 = EBhDisable;
 
     // QCOM
     extensionBehavior[E_GL_QCOM_image_processing]                    = EBhDisable;
+    extensionBehavior[E_GL_QCOM_image_processing2]                   = EBhDisable;
 
     // AEP
     extensionBehavior[E_GL_ANDROID_extension_pack_es31a]             = EBhDisable;
@@ -356,9 +367,12 @@
     extensionBehavior[E_GL_EXT_spirv_intrinsics]            = EBhDisable;
     extensionBehavior[E_GL_EXT_mesh_shader]                 = EBhDisable;
     extensionBehavior[E_GL_EXT_opacity_micromap]            = EBhDisable;
+    extensionBehavior[E_GL_EXT_shader_quad_control]         = EBhDisable;
     extensionBehavior[E_GL_EXT_ray_tracing_position_fetch]  = EBhDisable;
     extensionBehavior[E_GL_EXT_shader_tile_image]           = EBhDisable;
     extensionBehavior[E_GL_EXT_texture_shadow_lod]          = EBhDisable;
+    extensionBehavior[E_GL_EXT_draw_instanced]              = EBhDisable;
+    extensionBehavior[E_GL_EXT_texture_array]               = EBhDisable;
 
     // OVR extensions
     extensionBehavior[E_GL_OVR_multiview]                = EBhDisable;
@@ -436,6 +450,7 @@
             "#define GL_EXT_shader_non_constant_global_initializers 1\n"
 
             "#define GL_QCOM_image_processing 1\n"
+            "#define GL_QCOM_image_processing2 1\n"
             ;
 
             if (version >= 300) {
@@ -444,6 +459,7 @@
             if (version >= 310) {
                 preamble += "#define GL_EXT_null_initializer 1\n";
                 preamble += "#define GL_EXT_subgroup_uniform_control_flow 1\n";
+                preamble += "#define GL_EXT_maximal_reconvergence 1\n";
             }
 
     } else { // !isEsProfile()
@@ -487,7 +503,7 @@
             "#define GL_ARB_vertex_attrib_64bit 1\n"
             "#define GL_ARB_draw_instanced 1\n"
             "#define GL_ARB_fragment_coord_conventions 1\n"
-            "#define GL_ARB_bindless_texture 1\n"
+
             "#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"
@@ -506,6 +522,7 @@
             "#define GL_EXT_fragment_shading_rate 1\n"
             "#define GL_EXT_shared_memory_block 1\n"
             "#define GL_EXT_shader_integer_mix 1\n"
+            "#define GL_EXT_spec_constant_composites 1\n"
 
             // GL_KHR_shader_subgroup
             "#define GL_KHR_shader_subgroup_basic 1\n"
@@ -559,8 +576,10 @@
             "#define GL_NV_cooperative_matrix 1\n"
             "#define GL_NV_integer_cooperative_matrix 1\n"
             "#define GL_NV_shader_invocation_reorder 1\n"
+            "#define GL_NV_cooperative_matrix2 1\n"
 
             "#define GL_QCOM_image_processing 1\n"
+            "#define GL_QCOM_image_processing2 1\n"
 
             "#define GL_EXT_shader_explicit_arithmetic_types 1\n"
             "#define GL_EXT_shader_explicit_arithmetic_types_int8 1\n"
@@ -580,8 +599,16 @@
             "#define GL_EXT_shader_atomic_float2 1\n"
 
             "#define GL_EXT_fragment_shader_barycentric 1\n"
+            "#define GL_EXT_shader_quad_control 1\n"
+            "#define GL_EXT_texture_array 1\n"
+
+            "#define GL_EXT_control_flow_attributes2 1\n"
             ;
 
+        if (spvVersion.spv == 0) {
+            preamble += "#define GL_ARB_bindless_texture 1\n";
+        }
+
         if (version >= 150) {
             // define GL_core_profile and GL_compatibility_profile
             preamble += "#define GL_core_profile 1\n";
@@ -592,6 +619,7 @@
         if (version >= 140) {
             preamble += "#define GL_EXT_null_initializer 1\n";
             preamble += "#define GL_EXT_subgroup_uniform_control_flow 1\n";
+            preamble += "#define GL_EXT_maximal_reconvergence 1\n";
         }
         if (version >= 130) {
             preamble +="#define GL_FRAGMENT_PRECISION_HIGH 1\n";
@@ -750,8 +778,8 @@
         for (int i = 0; i < numExtensions; ++i) {
             switch (getExtensionBehavior(extensions[i])) {
             case EBhWarn:
-                infoSink.info.message(EPrefixWarning, ("extension " + TString(extensions[i]) + " is being used for " + featureDesc).c_str(), loc);
-                // fall through
+                infoSink.info.message(EPrefixWarning, ("extension " + TString(extensions[i]) + " is being used for " + featureDesc).c_str(), loc, messages & EShMsgAbsolutePath, messages & EShMsgDisplayErrorColumn);
+                [[fallthrough]];
             case EBhRequire:
             case EBhEnable:
                 okay = true;
@@ -788,7 +816,8 @@
                 error(loc, "deprecated, may be removed in future release", featureDesc, "");
             else if (! suppressWarnings())
                 infoSink.info.message(EPrefixWarning, (TString(featureDesc) + " deprecated in version " +
-                                                       String(depVersion) + "; may be removed in future release").c_str(), loc);
+                                                       String(depVersion) + "; may be removed in future release").c_str(), 
+                                                       loc, messages & EShMsgAbsolutePath, messages & EShMsgDisplayErrorColumn);
         }
     }
 }
@@ -825,11 +854,14 @@
     for (int i = 0; i < numExtensions; ++i) {
         TExtensionBehavior behavior = getExtensionBehavior(extensions[i]);
         if (behavior == EBhDisable && relaxedErrors()) {
-            infoSink.info.message(EPrefixWarning, "The following extension must be enabled to use this feature:", loc);
+            infoSink.info.message(EPrefixWarning, "The following extension must be enabled to use this feature:", loc,
+                                  messages & EShMsgAbsolutePath, messages & EShMsgDisplayErrorColumn);
             behavior = EBhWarn;
         }
         if (behavior == EBhWarn) {
-            infoSink.info.message(EPrefixWarning, ("extension " + TString(extensions[i]) + " is being used for " + featureDesc).c_str(), loc);
+            infoSink.info.message(EPrefixWarning,
+                                  ("extension " + TString(extensions[i]) + " is being used for " + featureDesc).c_str(),
+                                  loc, messages & EShMsgAbsolutePath, messages & EShMsgDisplayErrorColumn);
             warned = true;
         }
     }
@@ -968,6 +1000,8 @@
         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);
+    else if (strcmp(extension, "GL_ARB_shading_language_include") == 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);
@@ -990,6 +1024,8 @@
         updateExtensionBehavior(line, "GL_EXT_buffer_reference", behaviorString);
     else if (strcmp(extension, "GL_NV_integer_cooperative_matrix") == 0)
         updateExtensionBehavior(line, "GL_NV_cooperative_matrix", behaviorString);
+    else if (strcmp(extension, "GL_NV_cooperative_matrix2") == 0)
+        updateExtensionBehavior(line, "GL_KHR_cooperative_matrix", behaviorString);
     // subgroup extended types to explicit types
     else if (strcmp(extension, "GL_EXT_shader_subgroup_extended_types_int8") == 0)
         updateExtensionBehavior(line, "GL_EXT_shader_explicit_arithmetic_types_int8", behaviorString);
@@ -1350,6 +1386,14 @@
     }
 }
 
+void TParseVersions::tensorLayoutViewCheck(const TSourceLoc& loc, const char* op, bool builtIn)
+{
+    if (!builtIn) {
+        const char* const extensions[] = {E_GL_NV_cooperative_matrix2};
+        requireExtensions(loc, sizeof(extensions)/sizeof(extensions[0]), extensions, op);
+    }
+}
+
 // Call for any operation removed because SPIR-V is in use.
 void TParseVersions::spvRemoved(const TSourceLoc& loc, const char* op)
 {
diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h
old mode 100755
new mode 100644
index 0ebace9..4541381
--- a/glslang/MachineIndependent/Versions.h
+++ b/glslang/MachineIndependent/Versions.h
@@ -1,7 +1,7 @@
 //
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2013 LunarG, Inc.
-// Copyright (C) 2017 ARM Limited.
+// Copyright (C) 2017, 2022-2024 Arm Limited.
 // Copyright (C) 2015-2018 Google, Inc.
 // Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
 //
@@ -171,6 +171,7 @@
 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_rotate           = "GL_KHR_shader_subgroup_rotate";
 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_KHR_memory_scope_semantics           = "GL_KHR_memory_scope_semantics";
@@ -215,6 +216,13 @@
 const char* const E_GL_EXT_fragment_shader_barycentric      = "GL_EXT_fragment_shader_barycentric";
 const char* const E_GL_EXT_mesh_shader                      = "GL_EXT_mesh_shader";
 const char* const E_GL_EXT_opacity_micromap                 = "GL_EXT_opacity_micromap";
+const char* const E_GL_EXT_shader_quad_control              = "GL_EXT_shader_quad_control";
+const char* const E_GL_EXT_draw_instanced                   = "GL_EXT_draw_instanced";
+const char* const E_GL_EXT_texture_array                    = "GL_EXT_texture_array";
+const char* const E_GL_EXT_maximal_reconvergence            = "GL_EXT_maximal_reconvergence";
+const char* const E_GL_EXT_expect_assume                    = "GL_EXT_expect_assume";
+const char* const E_GL_EXT_control_flow_attributes2         = "GL_EXT_control_flow_attributes2";
+const char* const E_GL_EXT_spec_constant_composites         = "GL_EXT_spec_constant_composites";
 
 // Arrays of extensions for the above viewportEXTs duplications
 
@@ -235,6 +243,7 @@
 // #line and #include
 const char* const E_GL_GOOGLE_cpp_style_line_directive          = "GL_GOOGLE_cpp_style_line_directive";
 const char* const E_GL_GOOGLE_include_directive                 = "GL_GOOGLE_include_directive";
+const char* const E_GL_ARB_shading_language_include             = "GL_ARB_shading_language_include";
 
 const char* const E_GL_AMD_shader_ballot                        = "GL_AMD_shader_ballot";
 const char* const E_GL_AMD_shader_trinary_minmax                = "GL_AMD_shader_trinary_minmax";
@@ -272,6 +281,8 @@
 const char* const E_GL_NV_shader_invocation_reorder             = "GL_NV_shader_invocation_reorder";
 const char* const E_GL_EXT_ray_tracing_position_fetch           = "GL_EXT_ray_tracing_position_fetch";
 const char* const E_GL_NV_displacement_micromap                 = "GL_NV_displacement_micromap";
+const char* const E_GL_NV_shader_atomic_fp16_vector             = "GL_NV_shader_atomic_fp16_vector";
+const char* const E_GL_NV_cooperative_matrix2                   = "GL_NV_cooperative_matrix2";
 
 // ARM
 const char* const E_GL_ARM_shader_core_builtins                 = "GL_ARM_shader_core_builtins";
@@ -283,6 +294,7 @@
 
 
 const char* const E_GL_QCOM_image_processing                    = "GL_QCOM_image_processing";
+const char* const E_GL_QCOM_image_processing2                   = "GL_QCOM_image_processing2";
 
 // AEP
 const char* const E_GL_ANDROID_extension_pack_es31a             = "GL_ANDROID_extension_pack_es31a";
diff --git a/glslang/MachineIndependent/attribute.cpp b/glslang/MachineIndependent/attribute.cpp
index a167c49..19e8faa 100644
--- a/glslang/MachineIndependent/attribute.cpp
+++ b/glslang/MachineIndependent/attribute.cpp
@@ -125,6 +125,8 @@
         return EatSubgroupUniformControlFlow;
     else if (name == "export")
         return EatExport;
+    else if (name == "maximally_reconverges")
+        return EatMaximallyReconverges;
     else
         return EatNone;
 }
@@ -360,6 +362,10 @@
             requireExtensions(loc, 1, &E_GL_EXT_subgroup_uniform_control_flow, "attribute");
             intermediate.setSubgroupUniformControlFlow();
             break;
+        case EatMaximallyReconverges:
+            requireExtensions(loc, 1, &E_GL_EXT_maximal_reconvergence, "attribute");
+            intermediate.setMaximallyReconverges();
+            break;
         default:
             warn(loc, "attribute does not apply to a function", "", "");
             break;
diff --git a/glslang/MachineIndependent/attribute.h b/glslang/MachineIndependent/attribute.h
index a0c4c43..3b480c6 100644
--- a/glslang/MachineIndependent/attribute.h
+++ b/glslang/MachineIndependent/attribute.h
@@ -121,6 +121,7 @@
         EatNonReadable,
         EatSubgroupUniformControlFlow,
         EatExport,
+        EatMaximallyReconverges,
     };
 
     class TIntermAggregate;
diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y
index 99f0d38..90ac3c8 100644
--- a/glslang/MachineIndependent/glslang.y
+++ b/glslang/MachineIndependent/glslang.y
@@ -110,13 +110,6 @@
 
 %{
 
-/* windows only pragma */
-#ifdef _MSC_VER
-    #pragma warning(disable : 4065)
-    #pragma warning(disable : 4127)
-    #pragma warning(disable : 4244)
-#endif
-
 #define parseContext (*pParseContext)
 #define yyerror(context, msg) context->parserError(msg)
 
@@ -186,6 +179,7 @@
 %token <lex> FCOOPMATNV ICOOPMATNV UCOOPMATNV
 %token <lex> COOPMAT
 %token <lex> HITOBJECTNV HITOBJECTATTRNV
+%token <lex> TENSORLAYOUTNV TENSORVIEWNV
 
 // combined image/sampler
 %token <lex> SAMPLERCUBEARRAY SAMPLERCUBEARRAYSHADOW
@@ -282,7 +276,7 @@
 
 %token <lex> DOUBLECONSTANT INT16CONSTANT UINT16CONSTANT FLOAT16CONSTANT INT32CONSTANT UINT32CONSTANT
 %token <lex> INT64CONSTANT UINT64CONSTANT
-%token <lex> SUBROUTINE DEMOTE
+%token <lex> SUBROUTINE DEMOTE FUNCTION
 %token <lex> PAYLOADNV PAYLOADINNV HITATTRNV CALLDATANV CALLDATAINNV 
 %token <lex> PAYLOADEXT PAYLOADINEXT HITATTREXT CALLDATAEXT CALLDATAINEXT
 %token <lex> PATCH SAMPLE NONUNIFORM
@@ -492,18 +486,44 @@
 
 function_call_header_with_parameters
     : function_call_header assignment_expression {
-        TParameter param = { 0, new TType };
-        param.type->shallowCopy($2->getType());
-        $1.function->addParameter(param);
-        $$.function = $1.function;
-        $$.intermNode = $2;
+        if (parseContext.spvVersion.vulkan > 0
+            && parseContext.spvVersion.vulkanRelaxed
+            && $2->getType().containsOpaque())
+        {
+            $$.intermNode = parseContext.vkRelaxedRemapFunctionArgument($$.loc, $1.function, $2);
+            $$.function = $1.function;
+        }
+        else
+        {
+            TParameter param = { 0, new TType, {} };
+            param.type->shallowCopy($2->getType());
+
+            $1.function->addParameter(param);
+            $$.function = $1.function;
+            $$.intermNode = $2;
+        }
     }
     | function_call_header_with_parameters COMMA assignment_expression {
-        TParameter param = { 0, new TType };
-        param.type->shallowCopy($3->getType());
-        $1.function->addParameter(param);
-        $$.function = $1.function;
-        $$.intermNode = parseContext.intermediate.growAggregate($1.intermNode, $3, $2.loc);
+        if (parseContext.spvVersion.vulkan > 0
+            && parseContext.spvVersion.vulkanRelaxed
+            && $3->getType().containsOpaque())
+        {
+            TIntermNode* remappedNode = parseContext.vkRelaxedRemapFunctionArgument($2.loc, $1.function, $3);
+            if (remappedNode == $3)
+                $$.intermNode = parseContext.intermediate.growAggregate($1.intermNode, $3, $2.loc);
+            else
+                $$.intermNode = parseContext.intermediate.mergeAggregate($1.intermNode, remappedNode, $2.loc);
+            $$.function = $1.function;
+        }
+        else
+        {
+            TParameter param = { 0, new TType, {} };
+            param.type->shallowCopy($3->getType());
+
+            $1.function->addParameter(param);
+            $$.function = $1.function;
+            $$.intermNode = parseContext.intermediate.growAggregate($1.intermNode, $3, $2.loc);
+        }
     }
     ;
 
@@ -948,18 +968,24 @@
         $$.function = $1;
         if (parseContext.compileOnly) $$.function->setExport();
         $$.loc = $2.loc;
+        const char * extensions[2] = { E_GL_EXT_subgroup_uniform_control_flow, E_GL_EXT_maximal_reconvergence };
+        parseContext.requireExtensions($2.loc, 2, extensions, "attribute");
         parseContext.handleFunctionAttributes($2.loc, *$3);
     }
     | attribute function_declarator RIGHT_PAREN {
         $$.function = $2;
         if (parseContext.compileOnly) $$.function->setExport();
         $$.loc = $3.loc;
+        const char * extensions[2] = { E_GL_EXT_subgroup_uniform_control_flow, E_GL_EXT_maximal_reconvergence };
+        parseContext.requireExtensions($3.loc, 2, extensions, "attribute");
         parseContext.handleFunctionAttributes($3.loc, *$1);
     }
     | attribute function_declarator RIGHT_PAREN attribute {
         $$.function = $2;
         if (parseContext.compileOnly) $$.function->setExport();
         $$.loc = $3.loc;
+        const char * extensions[2] = { E_GL_EXT_subgroup_uniform_control_flow, E_GL_EXT_maximal_reconvergence };
+        parseContext.requireExtensions($3.loc, 2, extensions, "attribute");
         parseContext.handleFunctionAttributes($3.loc, *$1);
         parseContext.handleFunctionAttributes($3.loc, *$4);
     }
@@ -980,7 +1006,12 @@
         // Add the parameter
         $$ = $1;
         if ($2.param.type->getBasicType() != EbtVoid)
-            $1->addParameter($2.param);
+        {
+            if (!(parseContext.spvVersion.vulkan > 0 && parseContext.spvVersion.vulkanRelaxed))
+                $1->addParameter($2.param);
+            else
+                parseContext.vkRelaxedRemapFunctionParameter($1, $2.param);
+        }
         else
             delete $2.param.type;
     }
@@ -998,7 +1029,10 @@
         } else {
             // Add the parameter
             $$ = $1;
-            $1->addParameter($3.param);
+            if (!(parseContext.spvVersion.vulkan > 0 && parseContext.spvVersion.vulkanRelaxed))
+                $1->addParameter($3.param);
+            else
+                parseContext.vkRelaxedRemapFunctionParameter($1, $3.param);
         }
     }
     ;
@@ -1038,7 +1072,7 @@
         }
         parseContext.reservedErrorCheck($2.loc, *$2.string);
 
-        TParameter param = {$2.string, new TType($1)};
+        TParameter param = {$2.string, new TType($1), {}};
         $$.loc = $2.loc;
         $$.param = param;
     }
@@ -1056,7 +1090,7 @@
         parseContext.arraySizeRequiredCheck($3.loc, *$3.arraySizes);
         parseContext.reservedErrorCheck($2.loc, *$2.string);
 
-        TParameter param = { $2.string, type };
+        TParameter param = { $2.string, type, {} };
 
         $$.loc = $2.loc;
         $$.param = param;
@@ -1109,7 +1143,7 @@
 
 parameter_type_specifier
     : type_specifier {
-        TParameter param = { 0, new TType($1) };
+        TParameter param = { 0, new TType($1), {} };
         $$.param = param;
         if ($1.arraySizes)
             parseContext.arraySizeRequiredCheck($1.loc, *$1.arraySizes);
@@ -1726,6 +1760,7 @@
     : type_specifier {
         $$ = new TTypeParameters;
         $$->arraySizes = new TArraySizes;
+        $$->spirvType = $1.spirvType;
         $$->basicType = $1.basicType;
     }
     | unary_expression {
@@ -3501,6 +3536,20 @@
         $$.coopmatNV = false;
         $$.coopmatKHR = true;
     }
+    | TENSORLAYOUTNV {
+        parseContext.tensorLayoutViewCheck($1.loc, "tensorLayoutNV", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtTensorLayoutNV;
+    }
+    | TENSORVIEWNV {
+        parseContext.tensorLayoutViewCheck($1.loc, "tensorViewNV", parseContext.symbolTable.atBuiltInLevel());
+        $$.init($1.loc, parseContext.symbolTable.atGlobalLevel());
+        $$.basicType = EbtTensorViewNV;
+    }
+    | FUNCTION {
+        $$.init($1.loc);
+        $$.basicType = EbtFunction;
+    }
     | spirv_type_specifier {
         parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V type specifier");
         $$ = $1;
@@ -3549,11 +3598,17 @@
 
 struct_specifier
     : STRUCT IDENTIFIER LEFT_BRACE { parseContext.nestedStructCheck($1.loc); } struct_declaration_list RIGHT_BRACE {
+
         TType* structure = new TType($5, *$2.string);
         parseContext.structArrayCheck($2.loc, *structure);
+
         TVariable* userTypeDef = new TVariable($2.string, *structure, true);
         if (! parseContext.symbolTable.insert(*userTypeDef))
             parseContext.error($2.loc, "redefinition", $2.string->c_str(), "struct");
+        else if (parseContext.spvVersion.vulkanRelaxed
+                 && structure->containsOpaque())
+            parseContext.relaxedSymbols.push_back(structure->getTypeName());
+
         $$.init($1.loc);
         $$.basicType = EbtStruct;
         $$.userDef = structure;
@@ -3733,8 +3788,10 @@
         --parseContext.statementNestingLevel;
     }
       RIGHT_BRACE {
-        if ($3 && $3->getAsAggregate())
+        if ($3 && $3->getAsAggregate()) {
             $3->getAsAggregate()->setOperator(parseContext.intermediate.getDebugInfo() ? EOpScope : EOpSequence);
+            $3->getAsAggregate()->setEndLoc($5.loc);
+        }
         $$ = $3;
     }
     ;
@@ -3770,8 +3827,10 @@
         $$ = 0;
     }
     | LEFT_BRACE statement_list RIGHT_BRACE {
-        if ($2 && $2->getAsAggregate())
+        if ($2 && $2->getAsAggregate()) {
             $2->getAsAggregate()->setOperator(EOpSequence);
+            $2->getAsAggregate()->setEndLoc($3.loc);
+        }
         $$ = $2;
     }
     ;
@@ -3914,7 +3973,8 @@
         $$ = $1;
     }
     | attribute iteration_statement_nonattributed {
-        parseContext.requireExtensions($2->getLoc(), 1, &E_GL_EXT_control_flow_attributes, "attribute");
+        const char * extensions[2] = { E_GL_EXT_control_flow_attributes, E_GL_EXT_control_flow_attributes2 };
+        parseContext.requireExtensions($2->getLoc(), 2, extensions, "attribute");
         parseContext.handleLoopAttributes(*$1, $2);
         $$ = $2;
     }
diff --git a/glslang/MachineIndependent/glslang_tab.cpp b/glslang/MachineIndependent/glslang_tab.cpp
index 534bee1..56e568b 100644
--- a/glslang/MachineIndependent/glslang_tab.cpp
+++ b/glslang/MachineIndependent/glslang_tab.cpp
@@ -290,434 +290,437 @@
   YYSYMBOL_COOPMAT = 166,                  /* COOPMAT  */
   YYSYMBOL_HITOBJECTNV = 167,              /* HITOBJECTNV  */
   YYSYMBOL_HITOBJECTATTRNV = 168,          /* HITOBJECTATTRNV  */
-  YYSYMBOL_SAMPLERCUBEARRAY = 169,         /* SAMPLERCUBEARRAY  */
-  YYSYMBOL_SAMPLERCUBEARRAYSHADOW = 170,   /* SAMPLERCUBEARRAYSHADOW  */
-  YYSYMBOL_ISAMPLERCUBEARRAY = 171,        /* ISAMPLERCUBEARRAY  */
-  YYSYMBOL_USAMPLERCUBEARRAY = 172,        /* USAMPLERCUBEARRAY  */
-  YYSYMBOL_SAMPLER1D = 173,                /* SAMPLER1D  */
-  YYSYMBOL_SAMPLER1DARRAY = 174,           /* SAMPLER1DARRAY  */
-  YYSYMBOL_SAMPLER1DARRAYSHADOW = 175,     /* SAMPLER1DARRAYSHADOW  */
-  YYSYMBOL_ISAMPLER1D = 176,               /* ISAMPLER1D  */
-  YYSYMBOL_SAMPLER1DSHADOW = 177,          /* SAMPLER1DSHADOW  */
-  YYSYMBOL_SAMPLER2DRECT = 178,            /* SAMPLER2DRECT  */
-  YYSYMBOL_SAMPLER2DRECTSHADOW = 179,      /* SAMPLER2DRECTSHADOW  */
-  YYSYMBOL_ISAMPLER2DRECT = 180,           /* ISAMPLER2DRECT  */
-  YYSYMBOL_USAMPLER2DRECT = 181,           /* USAMPLER2DRECT  */
-  YYSYMBOL_SAMPLERBUFFER = 182,            /* SAMPLERBUFFER  */
-  YYSYMBOL_ISAMPLERBUFFER = 183,           /* ISAMPLERBUFFER  */
-  YYSYMBOL_USAMPLERBUFFER = 184,           /* USAMPLERBUFFER  */
-  YYSYMBOL_SAMPLER2DMS = 185,              /* SAMPLER2DMS  */
-  YYSYMBOL_ISAMPLER2DMS = 186,             /* ISAMPLER2DMS  */
-  YYSYMBOL_USAMPLER2DMS = 187,             /* USAMPLER2DMS  */
-  YYSYMBOL_SAMPLER2DMSARRAY = 188,         /* SAMPLER2DMSARRAY  */
-  YYSYMBOL_ISAMPLER2DMSARRAY = 189,        /* ISAMPLER2DMSARRAY  */
-  YYSYMBOL_USAMPLER2DMSARRAY = 190,        /* USAMPLER2DMSARRAY  */
-  YYSYMBOL_SAMPLEREXTERNALOES = 191,       /* SAMPLEREXTERNALOES  */
-  YYSYMBOL_SAMPLEREXTERNAL2DY2YEXT = 192,  /* SAMPLEREXTERNAL2DY2YEXT  */
-  YYSYMBOL_ISAMPLER1DARRAY = 193,          /* ISAMPLER1DARRAY  */
-  YYSYMBOL_USAMPLER1D = 194,               /* USAMPLER1D  */
-  YYSYMBOL_USAMPLER1DARRAY = 195,          /* USAMPLER1DARRAY  */
-  YYSYMBOL_F16SAMPLER1D = 196,             /* F16SAMPLER1D  */
-  YYSYMBOL_F16SAMPLER2D = 197,             /* F16SAMPLER2D  */
-  YYSYMBOL_F16SAMPLER3D = 198,             /* F16SAMPLER3D  */
-  YYSYMBOL_F16SAMPLER2DRECT = 199,         /* F16SAMPLER2DRECT  */
-  YYSYMBOL_F16SAMPLERCUBE = 200,           /* F16SAMPLERCUBE  */
-  YYSYMBOL_F16SAMPLER1DARRAY = 201,        /* F16SAMPLER1DARRAY  */
-  YYSYMBOL_F16SAMPLER2DARRAY = 202,        /* F16SAMPLER2DARRAY  */
-  YYSYMBOL_F16SAMPLERCUBEARRAY = 203,      /* F16SAMPLERCUBEARRAY  */
-  YYSYMBOL_F16SAMPLERBUFFER = 204,         /* F16SAMPLERBUFFER  */
-  YYSYMBOL_F16SAMPLER2DMS = 205,           /* F16SAMPLER2DMS  */
-  YYSYMBOL_F16SAMPLER2DMSARRAY = 206,      /* F16SAMPLER2DMSARRAY  */
-  YYSYMBOL_F16SAMPLER1DSHADOW = 207,       /* F16SAMPLER1DSHADOW  */
-  YYSYMBOL_F16SAMPLER2DSHADOW = 208,       /* F16SAMPLER2DSHADOW  */
-  YYSYMBOL_F16SAMPLER1DARRAYSHADOW = 209,  /* F16SAMPLER1DARRAYSHADOW  */
-  YYSYMBOL_F16SAMPLER2DARRAYSHADOW = 210,  /* F16SAMPLER2DARRAYSHADOW  */
-  YYSYMBOL_F16SAMPLER2DRECTSHADOW = 211,   /* F16SAMPLER2DRECTSHADOW  */
-  YYSYMBOL_F16SAMPLERCUBESHADOW = 212,     /* F16SAMPLERCUBESHADOW  */
-  YYSYMBOL_F16SAMPLERCUBEARRAYSHADOW = 213, /* F16SAMPLERCUBEARRAYSHADOW  */
-  YYSYMBOL_IMAGE1D = 214,                  /* IMAGE1D  */
-  YYSYMBOL_IIMAGE1D = 215,                 /* IIMAGE1D  */
-  YYSYMBOL_UIMAGE1D = 216,                 /* UIMAGE1D  */
-  YYSYMBOL_IMAGE2D = 217,                  /* IMAGE2D  */
-  YYSYMBOL_IIMAGE2D = 218,                 /* IIMAGE2D  */
-  YYSYMBOL_UIMAGE2D = 219,                 /* UIMAGE2D  */
-  YYSYMBOL_IMAGE3D = 220,                  /* IMAGE3D  */
-  YYSYMBOL_IIMAGE3D = 221,                 /* IIMAGE3D  */
-  YYSYMBOL_UIMAGE3D = 222,                 /* UIMAGE3D  */
-  YYSYMBOL_IMAGE2DRECT = 223,              /* IMAGE2DRECT  */
-  YYSYMBOL_IIMAGE2DRECT = 224,             /* IIMAGE2DRECT  */
-  YYSYMBOL_UIMAGE2DRECT = 225,             /* UIMAGE2DRECT  */
-  YYSYMBOL_IMAGECUBE = 226,                /* IMAGECUBE  */
-  YYSYMBOL_IIMAGECUBE = 227,               /* IIMAGECUBE  */
-  YYSYMBOL_UIMAGECUBE = 228,               /* UIMAGECUBE  */
-  YYSYMBOL_IMAGEBUFFER = 229,              /* IMAGEBUFFER  */
-  YYSYMBOL_IIMAGEBUFFER = 230,             /* IIMAGEBUFFER  */
-  YYSYMBOL_UIMAGEBUFFER = 231,             /* UIMAGEBUFFER  */
-  YYSYMBOL_IMAGE1DARRAY = 232,             /* IMAGE1DARRAY  */
-  YYSYMBOL_IIMAGE1DARRAY = 233,            /* IIMAGE1DARRAY  */
-  YYSYMBOL_UIMAGE1DARRAY = 234,            /* UIMAGE1DARRAY  */
-  YYSYMBOL_IMAGE2DARRAY = 235,             /* IMAGE2DARRAY  */
-  YYSYMBOL_IIMAGE2DARRAY = 236,            /* IIMAGE2DARRAY  */
-  YYSYMBOL_UIMAGE2DARRAY = 237,            /* UIMAGE2DARRAY  */
-  YYSYMBOL_IMAGECUBEARRAY = 238,           /* IMAGECUBEARRAY  */
-  YYSYMBOL_IIMAGECUBEARRAY = 239,          /* IIMAGECUBEARRAY  */
-  YYSYMBOL_UIMAGECUBEARRAY = 240,          /* UIMAGECUBEARRAY  */
-  YYSYMBOL_IMAGE2DMS = 241,                /* IMAGE2DMS  */
-  YYSYMBOL_IIMAGE2DMS = 242,               /* IIMAGE2DMS  */
-  YYSYMBOL_UIMAGE2DMS = 243,               /* UIMAGE2DMS  */
-  YYSYMBOL_IMAGE2DMSARRAY = 244,           /* IMAGE2DMSARRAY  */
-  YYSYMBOL_IIMAGE2DMSARRAY = 245,          /* IIMAGE2DMSARRAY  */
-  YYSYMBOL_UIMAGE2DMSARRAY = 246,          /* UIMAGE2DMSARRAY  */
-  YYSYMBOL_F16IMAGE1D = 247,               /* F16IMAGE1D  */
-  YYSYMBOL_F16IMAGE2D = 248,               /* F16IMAGE2D  */
-  YYSYMBOL_F16IMAGE3D = 249,               /* F16IMAGE3D  */
-  YYSYMBOL_F16IMAGE2DRECT = 250,           /* F16IMAGE2DRECT  */
-  YYSYMBOL_F16IMAGECUBE = 251,             /* F16IMAGECUBE  */
-  YYSYMBOL_F16IMAGE1DARRAY = 252,          /* F16IMAGE1DARRAY  */
-  YYSYMBOL_F16IMAGE2DARRAY = 253,          /* F16IMAGE2DARRAY  */
-  YYSYMBOL_F16IMAGECUBEARRAY = 254,        /* F16IMAGECUBEARRAY  */
-  YYSYMBOL_F16IMAGEBUFFER = 255,           /* F16IMAGEBUFFER  */
-  YYSYMBOL_F16IMAGE2DMS = 256,             /* F16IMAGE2DMS  */
-  YYSYMBOL_F16IMAGE2DMSARRAY = 257,        /* F16IMAGE2DMSARRAY  */
-  YYSYMBOL_I64IMAGE1D = 258,               /* I64IMAGE1D  */
-  YYSYMBOL_U64IMAGE1D = 259,               /* U64IMAGE1D  */
-  YYSYMBOL_I64IMAGE2D = 260,               /* I64IMAGE2D  */
-  YYSYMBOL_U64IMAGE2D = 261,               /* U64IMAGE2D  */
-  YYSYMBOL_I64IMAGE3D = 262,               /* I64IMAGE3D  */
-  YYSYMBOL_U64IMAGE3D = 263,               /* U64IMAGE3D  */
-  YYSYMBOL_I64IMAGE2DRECT = 264,           /* I64IMAGE2DRECT  */
-  YYSYMBOL_U64IMAGE2DRECT = 265,           /* U64IMAGE2DRECT  */
-  YYSYMBOL_I64IMAGECUBE = 266,             /* I64IMAGECUBE  */
-  YYSYMBOL_U64IMAGECUBE = 267,             /* U64IMAGECUBE  */
-  YYSYMBOL_I64IMAGEBUFFER = 268,           /* I64IMAGEBUFFER  */
-  YYSYMBOL_U64IMAGEBUFFER = 269,           /* U64IMAGEBUFFER  */
-  YYSYMBOL_I64IMAGE1DARRAY = 270,          /* I64IMAGE1DARRAY  */
-  YYSYMBOL_U64IMAGE1DARRAY = 271,          /* U64IMAGE1DARRAY  */
-  YYSYMBOL_I64IMAGE2DARRAY = 272,          /* I64IMAGE2DARRAY  */
-  YYSYMBOL_U64IMAGE2DARRAY = 273,          /* U64IMAGE2DARRAY  */
-  YYSYMBOL_I64IMAGECUBEARRAY = 274,        /* I64IMAGECUBEARRAY  */
-  YYSYMBOL_U64IMAGECUBEARRAY = 275,        /* U64IMAGECUBEARRAY  */
-  YYSYMBOL_I64IMAGE2DMS = 276,             /* I64IMAGE2DMS  */
-  YYSYMBOL_U64IMAGE2DMS = 277,             /* U64IMAGE2DMS  */
-  YYSYMBOL_I64IMAGE2DMSARRAY = 278,        /* I64IMAGE2DMSARRAY  */
-  YYSYMBOL_U64IMAGE2DMSARRAY = 279,        /* U64IMAGE2DMSARRAY  */
-  YYSYMBOL_TEXTURECUBEARRAY = 280,         /* TEXTURECUBEARRAY  */
-  YYSYMBOL_ITEXTURECUBEARRAY = 281,        /* ITEXTURECUBEARRAY  */
-  YYSYMBOL_UTEXTURECUBEARRAY = 282,        /* UTEXTURECUBEARRAY  */
-  YYSYMBOL_TEXTURE1D = 283,                /* TEXTURE1D  */
-  YYSYMBOL_ITEXTURE1D = 284,               /* ITEXTURE1D  */
-  YYSYMBOL_UTEXTURE1D = 285,               /* UTEXTURE1D  */
-  YYSYMBOL_TEXTURE1DARRAY = 286,           /* TEXTURE1DARRAY  */
-  YYSYMBOL_ITEXTURE1DARRAY = 287,          /* ITEXTURE1DARRAY  */
-  YYSYMBOL_UTEXTURE1DARRAY = 288,          /* UTEXTURE1DARRAY  */
-  YYSYMBOL_TEXTURE2DRECT = 289,            /* TEXTURE2DRECT  */
-  YYSYMBOL_ITEXTURE2DRECT = 290,           /* ITEXTURE2DRECT  */
-  YYSYMBOL_UTEXTURE2DRECT = 291,           /* UTEXTURE2DRECT  */
-  YYSYMBOL_TEXTUREBUFFER = 292,            /* TEXTUREBUFFER  */
-  YYSYMBOL_ITEXTUREBUFFER = 293,           /* ITEXTUREBUFFER  */
-  YYSYMBOL_UTEXTUREBUFFER = 294,           /* UTEXTUREBUFFER  */
-  YYSYMBOL_TEXTURE2DMS = 295,              /* TEXTURE2DMS  */
-  YYSYMBOL_ITEXTURE2DMS = 296,             /* ITEXTURE2DMS  */
-  YYSYMBOL_UTEXTURE2DMS = 297,             /* UTEXTURE2DMS  */
-  YYSYMBOL_TEXTURE2DMSARRAY = 298,         /* TEXTURE2DMSARRAY  */
-  YYSYMBOL_ITEXTURE2DMSARRAY = 299,        /* ITEXTURE2DMSARRAY  */
-  YYSYMBOL_UTEXTURE2DMSARRAY = 300,        /* UTEXTURE2DMSARRAY  */
-  YYSYMBOL_F16TEXTURE1D = 301,             /* F16TEXTURE1D  */
-  YYSYMBOL_F16TEXTURE2D = 302,             /* F16TEXTURE2D  */
-  YYSYMBOL_F16TEXTURE3D = 303,             /* F16TEXTURE3D  */
-  YYSYMBOL_F16TEXTURE2DRECT = 304,         /* F16TEXTURE2DRECT  */
-  YYSYMBOL_F16TEXTURECUBE = 305,           /* F16TEXTURECUBE  */
-  YYSYMBOL_F16TEXTURE1DARRAY = 306,        /* F16TEXTURE1DARRAY  */
-  YYSYMBOL_F16TEXTURE2DARRAY = 307,        /* F16TEXTURE2DARRAY  */
-  YYSYMBOL_F16TEXTURECUBEARRAY = 308,      /* F16TEXTURECUBEARRAY  */
-  YYSYMBOL_F16TEXTUREBUFFER = 309,         /* F16TEXTUREBUFFER  */
-  YYSYMBOL_F16TEXTURE2DMS = 310,           /* F16TEXTURE2DMS  */
-  YYSYMBOL_F16TEXTURE2DMSARRAY = 311,      /* F16TEXTURE2DMSARRAY  */
-  YYSYMBOL_SUBPASSINPUT = 312,             /* SUBPASSINPUT  */
-  YYSYMBOL_SUBPASSINPUTMS = 313,           /* SUBPASSINPUTMS  */
-  YYSYMBOL_ISUBPASSINPUT = 314,            /* ISUBPASSINPUT  */
-  YYSYMBOL_ISUBPASSINPUTMS = 315,          /* ISUBPASSINPUTMS  */
-  YYSYMBOL_USUBPASSINPUT = 316,            /* USUBPASSINPUT  */
-  YYSYMBOL_USUBPASSINPUTMS = 317,          /* USUBPASSINPUTMS  */
-  YYSYMBOL_F16SUBPASSINPUT = 318,          /* F16SUBPASSINPUT  */
-  YYSYMBOL_F16SUBPASSINPUTMS = 319,        /* F16SUBPASSINPUTMS  */
-  YYSYMBOL_SPIRV_INSTRUCTION = 320,        /* SPIRV_INSTRUCTION  */
-  YYSYMBOL_SPIRV_EXECUTION_MODE = 321,     /* SPIRV_EXECUTION_MODE  */
-  YYSYMBOL_SPIRV_EXECUTION_MODE_ID = 322,  /* SPIRV_EXECUTION_MODE_ID  */
-  YYSYMBOL_SPIRV_DECORATE = 323,           /* SPIRV_DECORATE  */
-  YYSYMBOL_SPIRV_DECORATE_ID = 324,        /* SPIRV_DECORATE_ID  */
-  YYSYMBOL_SPIRV_DECORATE_STRING = 325,    /* SPIRV_DECORATE_STRING  */
-  YYSYMBOL_SPIRV_TYPE = 326,               /* SPIRV_TYPE  */
-  YYSYMBOL_SPIRV_STORAGE_CLASS = 327,      /* SPIRV_STORAGE_CLASS  */
-  YYSYMBOL_SPIRV_BY_REFERENCE = 328,       /* SPIRV_BY_REFERENCE  */
-  YYSYMBOL_SPIRV_LITERAL = 329,            /* SPIRV_LITERAL  */
-  YYSYMBOL_ATTACHMENTEXT = 330,            /* ATTACHMENTEXT  */
-  YYSYMBOL_IATTACHMENTEXT = 331,           /* IATTACHMENTEXT  */
-  YYSYMBOL_UATTACHMENTEXT = 332,           /* UATTACHMENTEXT  */
-  YYSYMBOL_LEFT_OP = 333,                  /* LEFT_OP  */
-  YYSYMBOL_RIGHT_OP = 334,                 /* RIGHT_OP  */
-  YYSYMBOL_INC_OP = 335,                   /* INC_OP  */
-  YYSYMBOL_DEC_OP = 336,                   /* DEC_OP  */
-  YYSYMBOL_LE_OP = 337,                    /* LE_OP  */
-  YYSYMBOL_GE_OP = 338,                    /* GE_OP  */
-  YYSYMBOL_EQ_OP = 339,                    /* EQ_OP  */
-  YYSYMBOL_NE_OP = 340,                    /* NE_OP  */
-  YYSYMBOL_AND_OP = 341,                   /* AND_OP  */
-  YYSYMBOL_OR_OP = 342,                    /* OR_OP  */
-  YYSYMBOL_XOR_OP = 343,                   /* XOR_OP  */
-  YYSYMBOL_MUL_ASSIGN = 344,               /* MUL_ASSIGN  */
-  YYSYMBOL_DIV_ASSIGN = 345,               /* DIV_ASSIGN  */
-  YYSYMBOL_ADD_ASSIGN = 346,               /* ADD_ASSIGN  */
-  YYSYMBOL_MOD_ASSIGN = 347,               /* MOD_ASSIGN  */
-  YYSYMBOL_LEFT_ASSIGN = 348,              /* LEFT_ASSIGN  */
-  YYSYMBOL_RIGHT_ASSIGN = 349,             /* RIGHT_ASSIGN  */
-  YYSYMBOL_AND_ASSIGN = 350,               /* AND_ASSIGN  */
-  YYSYMBOL_XOR_ASSIGN = 351,               /* XOR_ASSIGN  */
-  YYSYMBOL_OR_ASSIGN = 352,                /* OR_ASSIGN  */
-  YYSYMBOL_SUB_ASSIGN = 353,               /* SUB_ASSIGN  */
-  YYSYMBOL_STRING_LITERAL = 354,           /* STRING_LITERAL  */
-  YYSYMBOL_LEFT_PAREN = 355,               /* LEFT_PAREN  */
-  YYSYMBOL_RIGHT_PAREN = 356,              /* RIGHT_PAREN  */
-  YYSYMBOL_LEFT_BRACKET = 357,             /* LEFT_BRACKET  */
-  YYSYMBOL_RIGHT_BRACKET = 358,            /* RIGHT_BRACKET  */
-  YYSYMBOL_LEFT_BRACE = 359,               /* LEFT_BRACE  */
-  YYSYMBOL_RIGHT_BRACE = 360,              /* RIGHT_BRACE  */
-  YYSYMBOL_DOT = 361,                      /* DOT  */
-  YYSYMBOL_COMMA = 362,                    /* COMMA  */
-  YYSYMBOL_COLON = 363,                    /* COLON  */
-  YYSYMBOL_EQUAL = 364,                    /* EQUAL  */
-  YYSYMBOL_SEMICOLON = 365,                /* SEMICOLON  */
-  YYSYMBOL_BANG = 366,                     /* BANG  */
-  YYSYMBOL_DASH = 367,                     /* DASH  */
-  YYSYMBOL_TILDE = 368,                    /* TILDE  */
-  YYSYMBOL_PLUS = 369,                     /* PLUS  */
-  YYSYMBOL_STAR = 370,                     /* STAR  */
-  YYSYMBOL_SLASH = 371,                    /* SLASH  */
-  YYSYMBOL_PERCENT = 372,                  /* PERCENT  */
-  YYSYMBOL_LEFT_ANGLE = 373,               /* LEFT_ANGLE  */
-  YYSYMBOL_RIGHT_ANGLE = 374,              /* RIGHT_ANGLE  */
-  YYSYMBOL_VERTICAL_BAR = 375,             /* VERTICAL_BAR  */
-  YYSYMBOL_CARET = 376,                    /* CARET  */
-  YYSYMBOL_AMPERSAND = 377,                /* AMPERSAND  */
-  YYSYMBOL_QUESTION = 378,                 /* QUESTION  */
-  YYSYMBOL_INVARIANT = 379,                /* INVARIANT  */
-  YYSYMBOL_HIGH_PRECISION = 380,           /* HIGH_PRECISION  */
-  YYSYMBOL_MEDIUM_PRECISION = 381,         /* MEDIUM_PRECISION  */
-  YYSYMBOL_LOW_PRECISION = 382,            /* LOW_PRECISION  */
-  YYSYMBOL_PRECISION = 383,                /* PRECISION  */
-  YYSYMBOL_PACKED = 384,                   /* PACKED  */
-  YYSYMBOL_RESOURCE = 385,                 /* RESOURCE  */
-  YYSYMBOL_SUPERP = 386,                   /* SUPERP  */
-  YYSYMBOL_FLOATCONSTANT = 387,            /* FLOATCONSTANT  */
-  YYSYMBOL_INTCONSTANT = 388,              /* INTCONSTANT  */
-  YYSYMBOL_UINTCONSTANT = 389,             /* UINTCONSTANT  */
-  YYSYMBOL_BOOLCONSTANT = 390,             /* BOOLCONSTANT  */
-  YYSYMBOL_IDENTIFIER = 391,               /* IDENTIFIER  */
-  YYSYMBOL_TYPE_NAME = 392,                /* TYPE_NAME  */
-  YYSYMBOL_CENTROID = 393,                 /* CENTROID  */
-  YYSYMBOL_IN = 394,                       /* IN  */
-  YYSYMBOL_OUT = 395,                      /* OUT  */
-  YYSYMBOL_INOUT = 396,                    /* INOUT  */
-  YYSYMBOL_STRUCT = 397,                   /* STRUCT  */
-  YYSYMBOL_VOID = 398,                     /* VOID  */
-  YYSYMBOL_WHILE = 399,                    /* WHILE  */
-  YYSYMBOL_BREAK = 400,                    /* BREAK  */
-  YYSYMBOL_CONTINUE = 401,                 /* CONTINUE  */
-  YYSYMBOL_DO = 402,                       /* DO  */
-  YYSYMBOL_ELSE = 403,                     /* ELSE  */
-  YYSYMBOL_FOR = 404,                      /* FOR  */
-  YYSYMBOL_IF = 405,                       /* IF  */
-  YYSYMBOL_DISCARD = 406,                  /* DISCARD  */
-  YYSYMBOL_RETURN = 407,                   /* RETURN  */
-  YYSYMBOL_SWITCH = 408,                   /* SWITCH  */
-  YYSYMBOL_CASE = 409,                     /* CASE  */
-  YYSYMBOL_DEFAULT = 410,                  /* DEFAULT  */
-  YYSYMBOL_TERMINATE_INVOCATION = 411,     /* TERMINATE_INVOCATION  */
-  YYSYMBOL_TERMINATE_RAY = 412,            /* TERMINATE_RAY  */
-  YYSYMBOL_IGNORE_INTERSECTION = 413,      /* IGNORE_INTERSECTION  */
-  YYSYMBOL_UNIFORM = 414,                  /* UNIFORM  */
-  YYSYMBOL_SHARED = 415,                   /* SHARED  */
-  YYSYMBOL_BUFFER = 416,                   /* BUFFER  */
-  YYSYMBOL_TILEIMAGEEXT = 417,             /* TILEIMAGEEXT  */
-  YYSYMBOL_FLAT = 418,                     /* FLAT  */
-  YYSYMBOL_SMOOTH = 419,                   /* SMOOTH  */
-  YYSYMBOL_LAYOUT = 420,                   /* LAYOUT  */
-  YYSYMBOL_DOUBLECONSTANT = 421,           /* DOUBLECONSTANT  */
-  YYSYMBOL_INT16CONSTANT = 422,            /* INT16CONSTANT  */
-  YYSYMBOL_UINT16CONSTANT = 423,           /* UINT16CONSTANT  */
-  YYSYMBOL_FLOAT16CONSTANT = 424,          /* FLOAT16CONSTANT  */
-  YYSYMBOL_INT32CONSTANT = 425,            /* INT32CONSTANT  */
-  YYSYMBOL_UINT32CONSTANT = 426,           /* UINT32CONSTANT  */
-  YYSYMBOL_INT64CONSTANT = 427,            /* INT64CONSTANT  */
-  YYSYMBOL_UINT64CONSTANT = 428,           /* UINT64CONSTANT  */
-  YYSYMBOL_SUBROUTINE = 429,               /* SUBROUTINE  */
-  YYSYMBOL_DEMOTE = 430,                   /* DEMOTE  */
-  YYSYMBOL_PAYLOADNV = 431,                /* PAYLOADNV  */
-  YYSYMBOL_PAYLOADINNV = 432,              /* PAYLOADINNV  */
-  YYSYMBOL_HITATTRNV = 433,                /* HITATTRNV  */
-  YYSYMBOL_CALLDATANV = 434,               /* CALLDATANV  */
-  YYSYMBOL_CALLDATAINNV = 435,             /* CALLDATAINNV  */
-  YYSYMBOL_PAYLOADEXT = 436,               /* PAYLOADEXT  */
-  YYSYMBOL_PAYLOADINEXT = 437,             /* PAYLOADINEXT  */
-  YYSYMBOL_HITATTREXT = 438,               /* HITATTREXT  */
-  YYSYMBOL_CALLDATAEXT = 439,              /* CALLDATAEXT  */
-  YYSYMBOL_CALLDATAINEXT = 440,            /* CALLDATAINEXT  */
-  YYSYMBOL_PATCH = 441,                    /* PATCH  */
-  YYSYMBOL_SAMPLE = 442,                   /* SAMPLE  */
-  YYSYMBOL_NONUNIFORM = 443,               /* NONUNIFORM  */
-  YYSYMBOL_COHERENT = 444,                 /* COHERENT  */
-  YYSYMBOL_VOLATILE = 445,                 /* VOLATILE  */
-  YYSYMBOL_RESTRICT = 446,                 /* RESTRICT  */
-  YYSYMBOL_READONLY = 447,                 /* READONLY  */
-  YYSYMBOL_WRITEONLY = 448,                /* WRITEONLY  */
-  YYSYMBOL_DEVICECOHERENT = 449,           /* DEVICECOHERENT  */
-  YYSYMBOL_QUEUEFAMILYCOHERENT = 450,      /* QUEUEFAMILYCOHERENT  */
-  YYSYMBOL_WORKGROUPCOHERENT = 451,        /* WORKGROUPCOHERENT  */
-  YYSYMBOL_SUBGROUPCOHERENT = 452,         /* SUBGROUPCOHERENT  */
-  YYSYMBOL_NONPRIVATE = 453,               /* NONPRIVATE  */
-  YYSYMBOL_SHADERCALLCOHERENT = 454,       /* SHADERCALLCOHERENT  */
-  YYSYMBOL_NOPERSPECTIVE = 455,            /* NOPERSPECTIVE  */
-  YYSYMBOL_EXPLICITINTERPAMD = 456,        /* EXPLICITINTERPAMD  */
-  YYSYMBOL_PERVERTEXEXT = 457,             /* PERVERTEXEXT  */
-  YYSYMBOL_PERVERTEXNV = 458,              /* PERVERTEXNV  */
-  YYSYMBOL_PERPRIMITIVENV = 459,           /* PERPRIMITIVENV  */
-  YYSYMBOL_PERVIEWNV = 460,                /* PERVIEWNV  */
-  YYSYMBOL_PERTASKNV = 461,                /* PERTASKNV  */
-  YYSYMBOL_PERPRIMITIVEEXT = 462,          /* PERPRIMITIVEEXT  */
-  YYSYMBOL_TASKPAYLOADWORKGROUPEXT = 463,  /* TASKPAYLOADWORKGROUPEXT  */
-  YYSYMBOL_PRECISE = 464,                  /* PRECISE  */
-  YYSYMBOL_YYACCEPT = 465,                 /* $accept  */
-  YYSYMBOL_variable_identifier = 466,      /* variable_identifier  */
-  YYSYMBOL_primary_expression = 467,       /* primary_expression  */
-  YYSYMBOL_postfix_expression = 468,       /* postfix_expression  */
-  YYSYMBOL_integer_expression = 469,       /* integer_expression  */
-  YYSYMBOL_function_call = 470,            /* function_call  */
-  YYSYMBOL_function_call_or_method = 471,  /* function_call_or_method  */
-  YYSYMBOL_function_call_generic = 472,    /* function_call_generic  */
-  YYSYMBOL_function_call_header_no_parameters = 473, /* function_call_header_no_parameters  */
-  YYSYMBOL_function_call_header_with_parameters = 474, /* function_call_header_with_parameters  */
-  YYSYMBOL_function_call_header = 475,     /* function_call_header  */
-  YYSYMBOL_function_identifier = 476,      /* function_identifier  */
-  YYSYMBOL_unary_expression = 477,         /* unary_expression  */
-  YYSYMBOL_unary_operator = 478,           /* unary_operator  */
-  YYSYMBOL_multiplicative_expression = 479, /* multiplicative_expression  */
-  YYSYMBOL_additive_expression = 480,      /* additive_expression  */
-  YYSYMBOL_shift_expression = 481,         /* shift_expression  */
-  YYSYMBOL_relational_expression = 482,    /* relational_expression  */
-  YYSYMBOL_equality_expression = 483,      /* equality_expression  */
-  YYSYMBOL_and_expression = 484,           /* and_expression  */
-  YYSYMBOL_exclusive_or_expression = 485,  /* exclusive_or_expression  */
-  YYSYMBOL_inclusive_or_expression = 486,  /* inclusive_or_expression  */
-  YYSYMBOL_logical_and_expression = 487,   /* logical_and_expression  */
-  YYSYMBOL_logical_xor_expression = 488,   /* logical_xor_expression  */
-  YYSYMBOL_logical_or_expression = 489,    /* logical_or_expression  */
-  YYSYMBOL_conditional_expression = 490,   /* conditional_expression  */
-  YYSYMBOL_491_1 = 491,                    /* $@1  */
-  YYSYMBOL_assignment_expression = 492,    /* assignment_expression  */
-  YYSYMBOL_assignment_operator = 493,      /* assignment_operator  */
-  YYSYMBOL_expression = 494,               /* expression  */
-  YYSYMBOL_constant_expression = 495,      /* constant_expression  */
-  YYSYMBOL_declaration = 496,              /* declaration  */
-  YYSYMBOL_block_structure = 497,          /* block_structure  */
-  YYSYMBOL_498_2 = 498,                    /* $@2  */
-  YYSYMBOL_identifier_list = 499,          /* identifier_list  */
-  YYSYMBOL_function_prototype = 500,       /* function_prototype  */
-  YYSYMBOL_function_declarator = 501,      /* function_declarator  */
-  YYSYMBOL_function_header_with_parameters = 502, /* function_header_with_parameters  */
-  YYSYMBOL_function_header = 503,          /* function_header  */
-  YYSYMBOL_parameter_declarator = 504,     /* parameter_declarator  */
-  YYSYMBOL_parameter_declaration = 505,    /* parameter_declaration  */
-  YYSYMBOL_parameter_type_specifier = 506, /* parameter_type_specifier  */
-  YYSYMBOL_init_declarator_list = 507,     /* init_declarator_list  */
-  YYSYMBOL_single_declaration = 508,       /* single_declaration  */
-  YYSYMBOL_fully_specified_type = 509,     /* fully_specified_type  */
-  YYSYMBOL_invariant_qualifier = 510,      /* invariant_qualifier  */
-  YYSYMBOL_interpolation_qualifier = 511,  /* interpolation_qualifier  */
-  YYSYMBOL_layout_qualifier = 512,         /* layout_qualifier  */
-  YYSYMBOL_layout_qualifier_id_list = 513, /* layout_qualifier_id_list  */
-  YYSYMBOL_layout_qualifier_id = 514,      /* layout_qualifier_id  */
-  YYSYMBOL_precise_qualifier = 515,        /* precise_qualifier  */
-  YYSYMBOL_type_qualifier = 516,           /* type_qualifier  */
-  YYSYMBOL_single_type_qualifier = 517,    /* single_type_qualifier  */
-  YYSYMBOL_storage_qualifier = 518,        /* storage_qualifier  */
-  YYSYMBOL_non_uniform_qualifier = 519,    /* non_uniform_qualifier  */
-  YYSYMBOL_type_name_list = 520,           /* type_name_list  */
-  YYSYMBOL_type_specifier = 521,           /* type_specifier  */
-  YYSYMBOL_array_specifier = 522,          /* array_specifier  */
-  YYSYMBOL_type_parameter_specifier_opt = 523, /* type_parameter_specifier_opt  */
-  YYSYMBOL_type_parameter_specifier = 524, /* type_parameter_specifier  */
-  YYSYMBOL_type_parameter_specifier_list = 525, /* type_parameter_specifier_list  */
-  YYSYMBOL_type_specifier_nonarray = 526,  /* type_specifier_nonarray  */
-  YYSYMBOL_precision_qualifier = 527,      /* precision_qualifier  */
-  YYSYMBOL_struct_specifier = 528,         /* struct_specifier  */
-  YYSYMBOL_529_3 = 529,                    /* $@3  */
-  YYSYMBOL_530_4 = 530,                    /* $@4  */
-  YYSYMBOL_struct_declaration_list = 531,  /* struct_declaration_list  */
-  YYSYMBOL_struct_declaration = 532,       /* struct_declaration  */
-  YYSYMBOL_struct_declarator_list = 533,   /* struct_declarator_list  */
-  YYSYMBOL_struct_declarator = 534,        /* struct_declarator  */
-  YYSYMBOL_initializer = 535,              /* initializer  */
-  YYSYMBOL_initializer_list = 536,         /* initializer_list  */
-  YYSYMBOL_declaration_statement = 537,    /* declaration_statement  */
-  YYSYMBOL_statement = 538,                /* statement  */
-  YYSYMBOL_simple_statement = 539,         /* simple_statement  */
-  YYSYMBOL_demote_statement = 540,         /* demote_statement  */
-  YYSYMBOL_compound_statement = 541,       /* compound_statement  */
-  YYSYMBOL_542_5 = 542,                    /* $@5  */
-  YYSYMBOL_543_6 = 543,                    /* $@6  */
-  YYSYMBOL_statement_no_new_scope = 544,   /* statement_no_new_scope  */
-  YYSYMBOL_statement_scoped = 545,         /* statement_scoped  */
-  YYSYMBOL_546_7 = 546,                    /* $@7  */
-  YYSYMBOL_547_8 = 547,                    /* $@8  */
-  YYSYMBOL_compound_statement_no_new_scope = 548, /* compound_statement_no_new_scope  */
-  YYSYMBOL_statement_list = 549,           /* statement_list  */
-  YYSYMBOL_expression_statement = 550,     /* expression_statement  */
-  YYSYMBOL_selection_statement = 551,      /* selection_statement  */
-  YYSYMBOL_selection_statement_nonattributed = 552, /* selection_statement_nonattributed  */
-  YYSYMBOL_selection_rest_statement = 553, /* selection_rest_statement  */
-  YYSYMBOL_condition = 554,                /* condition  */
-  YYSYMBOL_switch_statement = 555,         /* switch_statement  */
-  YYSYMBOL_switch_statement_nonattributed = 556, /* switch_statement_nonattributed  */
-  YYSYMBOL_557_9 = 557,                    /* $@9  */
-  YYSYMBOL_switch_statement_list = 558,    /* switch_statement_list  */
-  YYSYMBOL_case_label = 559,               /* case_label  */
-  YYSYMBOL_iteration_statement = 560,      /* iteration_statement  */
-  YYSYMBOL_iteration_statement_nonattributed = 561, /* iteration_statement_nonattributed  */
-  YYSYMBOL_562_10 = 562,                   /* $@10  */
-  YYSYMBOL_563_11 = 563,                   /* $@11  */
-  YYSYMBOL_564_12 = 564,                   /* $@12  */
-  YYSYMBOL_for_init_statement = 565,       /* for_init_statement  */
-  YYSYMBOL_conditionopt = 566,             /* conditionopt  */
-  YYSYMBOL_for_rest_statement = 567,       /* for_rest_statement  */
-  YYSYMBOL_jump_statement = 568,           /* jump_statement  */
-  YYSYMBOL_translation_unit = 569,         /* translation_unit  */
-  YYSYMBOL_external_declaration = 570,     /* external_declaration  */
-  YYSYMBOL_function_definition = 571,      /* function_definition  */
-  YYSYMBOL_572_13 = 572,                   /* $@13  */
-  YYSYMBOL_attribute = 573,                /* attribute  */
-  YYSYMBOL_attribute_list = 574,           /* attribute_list  */
-  YYSYMBOL_single_attribute = 575,         /* single_attribute  */
-  YYSYMBOL_spirv_requirements_list = 576,  /* spirv_requirements_list  */
-  YYSYMBOL_spirv_requirements_parameter = 577, /* spirv_requirements_parameter  */
-  YYSYMBOL_spirv_extension_list = 578,     /* spirv_extension_list  */
-  YYSYMBOL_spirv_capability_list = 579,    /* spirv_capability_list  */
-  YYSYMBOL_spirv_execution_mode_qualifier = 580, /* spirv_execution_mode_qualifier  */
-  YYSYMBOL_spirv_execution_mode_parameter_list = 581, /* spirv_execution_mode_parameter_list  */
-  YYSYMBOL_spirv_execution_mode_parameter = 582, /* spirv_execution_mode_parameter  */
-  YYSYMBOL_spirv_execution_mode_id_parameter_list = 583, /* spirv_execution_mode_id_parameter_list  */
-  YYSYMBOL_spirv_storage_class_qualifier = 584, /* spirv_storage_class_qualifier  */
-  YYSYMBOL_spirv_decorate_qualifier = 585, /* spirv_decorate_qualifier  */
-  YYSYMBOL_spirv_decorate_parameter_list = 586, /* spirv_decorate_parameter_list  */
-  YYSYMBOL_spirv_decorate_parameter = 587, /* spirv_decorate_parameter  */
-  YYSYMBOL_spirv_decorate_id_parameter_list = 588, /* spirv_decorate_id_parameter_list  */
-  YYSYMBOL_spirv_decorate_id_parameter = 589, /* spirv_decorate_id_parameter  */
-  YYSYMBOL_spirv_decorate_string_parameter_list = 590, /* spirv_decorate_string_parameter_list  */
-  YYSYMBOL_spirv_type_specifier = 591,     /* spirv_type_specifier  */
-  YYSYMBOL_spirv_type_parameter_list = 592, /* spirv_type_parameter_list  */
-  YYSYMBOL_spirv_type_parameter = 593,     /* spirv_type_parameter  */
-  YYSYMBOL_spirv_instruction_qualifier = 594, /* spirv_instruction_qualifier  */
-  YYSYMBOL_spirv_instruction_qualifier_list = 595, /* spirv_instruction_qualifier_list  */
-  YYSYMBOL_spirv_instruction_qualifier_id = 596 /* spirv_instruction_qualifier_id  */
+  YYSYMBOL_TENSORLAYOUTNV = 169,           /* TENSORLAYOUTNV  */
+  YYSYMBOL_TENSORVIEWNV = 170,             /* TENSORVIEWNV  */
+  YYSYMBOL_SAMPLERCUBEARRAY = 171,         /* SAMPLERCUBEARRAY  */
+  YYSYMBOL_SAMPLERCUBEARRAYSHADOW = 172,   /* SAMPLERCUBEARRAYSHADOW  */
+  YYSYMBOL_ISAMPLERCUBEARRAY = 173,        /* ISAMPLERCUBEARRAY  */
+  YYSYMBOL_USAMPLERCUBEARRAY = 174,        /* USAMPLERCUBEARRAY  */
+  YYSYMBOL_SAMPLER1D = 175,                /* SAMPLER1D  */
+  YYSYMBOL_SAMPLER1DARRAY = 176,           /* SAMPLER1DARRAY  */
+  YYSYMBOL_SAMPLER1DARRAYSHADOW = 177,     /* SAMPLER1DARRAYSHADOW  */
+  YYSYMBOL_ISAMPLER1D = 178,               /* ISAMPLER1D  */
+  YYSYMBOL_SAMPLER1DSHADOW = 179,          /* SAMPLER1DSHADOW  */
+  YYSYMBOL_SAMPLER2DRECT = 180,            /* SAMPLER2DRECT  */
+  YYSYMBOL_SAMPLER2DRECTSHADOW = 181,      /* SAMPLER2DRECTSHADOW  */
+  YYSYMBOL_ISAMPLER2DRECT = 182,           /* ISAMPLER2DRECT  */
+  YYSYMBOL_USAMPLER2DRECT = 183,           /* USAMPLER2DRECT  */
+  YYSYMBOL_SAMPLERBUFFER = 184,            /* SAMPLERBUFFER  */
+  YYSYMBOL_ISAMPLERBUFFER = 185,           /* ISAMPLERBUFFER  */
+  YYSYMBOL_USAMPLERBUFFER = 186,           /* USAMPLERBUFFER  */
+  YYSYMBOL_SAMPLER2DMS = 187,              /* SAMPLER2DMS  */
+  YYSYMBOL_ISAMPLER2DMS = 188,             /* ISAMPLER2DMS  */
+  YYSYMBOL_USAMPLER2DMS = 189,             /* USAMPLER2DMS  */
+  YYSYMBOL_SAMPLER2DMSARRAY = 190,         /* SAMPLER2DMSARRAY  */
+  YYSYMBOL_ISAMPLER2DMSARRAY = 191,        /* ISAMPLER2DMSARRAY  */
+  YYSYMBOL_USAMPLER2DMSARRAY = 192,        /* USAMPLER2DMSARRAY  */
+  YYSYMBOL_SAMPLEREXTERNALOES = 193,       /* SAMPLEREXTERNALOES  */
+  YYSYMBOL_SAMPLEREXTERNAL2DY2YEXT = 194,  /* SAMPLEREXTERNAL2DY2YEXT  */
+  YYSYMBOL_ISAMPLER1DARRAY = 195,          /* ISAMPLER1DARRAY  */
+  YYSYMBOL_USAMPLER1D = 196,               /* USAMPLER1D  */
+  YYSYMBOL_USAMPLER1DARRAY = 197,          /* USAMPLER1DARRAY  */
+  YYSYMBOL_F16SAMPLER1D = 198,             /* F16SAMPLER1D  */
+  YYSYMBOL_F16SAMPLER2D = 199,             /* F16SAMPLER2D  */
+  YYSYMBOL_F16SAMPLER3D = 200,             /* F16SAMPLER3D  */
+  YYSYMBOL_F16SAMPLER2DRECT = 201,         /* F16SAMPLER2DRECT  */
+  YYSYMBOL_F16SAMPLERCUBE = 202,           /* F16SAMPLERCUBE  */
+  YYSYMBOL_F16SAMPLER1DARRAY = 203,        /* F16SAMPLER1DARRAY  */
+  YYSYMBOL_F16SAMPLER2DARRAY = 204,        /* F16SAMPLER2DARRAY  */
+  YYSYMBOL_F16SAMPLERCUBEARRAY = 205,      /* F16SAMPLERCUBEARRAY  */
+  YYSYMBOL_F16SAMPLERBUFFER = 206,         /* F16SAMPLERBUFFER  */
+  YYSYMBOL_F16SAMPLER2DMS = 207,           /* F16SAMPLER2DMS  */
+  YYSYMBOL_F16SAMPLER2DMSARRAY = 208,      /* F16SAMPLER2DMSARRAY  */
+  YYSYMBOL_F16SAMPLER1DSHADOW = 209,       /* F16SAMPLER1DSHADOW  */
+  YYSYMBOL_F16SAMPLER2DSHADOW = 210,       /* F16SAMPLER2DSHADOW  */
+  YYSYMBOL_F16SAMPLER1DARRAYSHADOW = 211,  /* F16SAMPLER1DARRAYSHADOW  */
+  YYSYMBOL_F16SAMPLER2DARRAYSHADOW = 212,  /* F16SAMPLER2DARRAYSHADOW  */
+  YYSYMBOL_F16SAMPLER2DRECTSHADOW = 213,   /* F16SAMPLER2DRECTSHADOW  */
+  YYSYMBOL_F16SAMPLERCUBESHADOW = 214,     /* F16SAMPLERCUBESHADOW  */
+  YYSYMBOL_F16SAMPLERCUBEARRAYSHADOW = 215, /* F16SAMPLERCUBEARRAYSHADOW  */
+  YYSYMBOL_IMAGE1D = 216,                  /* IMAGE1D  */
+  YYSYMBOL_IIMAGE1D = 217,                 /* IIMAGE1D  */
+  YYSYMBOL_UIMAGE1D = 218,                 /* UIMAGE1D  */
+  YYSYMBOL_IMAGE2D = 219,                  /* IMAGE2D  */
+  YYSYMBOL_IIMAGE2D = 220,                 /* IIMAGE2D  */
+  YYSYMBOL_UIMAGE2D = 221,                 /* UIMAGE2D  */
+  YYSYMBOL_IMAGE3D = 222,                  /* IMAGE3D  */
+  YYSYMBOL_IIMAGE3D = 223,                 /* IIMAGE3D  */
+  YYSYMBOL_UIMAGE3D = 224,                 /* UIMAGE3D  */
+  YYSYMBOL_IMAGE2DRECT = 225,              /* IMAGE2DRECT  */
+  YYSYMBOL_IIMAGE2DRECT = 226,             /* IIMAGE2DRECT  */
+  YYSYMBOL_UIMAGE2DRECT = 227,             /* UIMAGE2DRECT  */
+  YYSYMBOL_IMAGECUBE = 228,                /* IMAGECUBE  */
+  YYSYMBOL_IIMAGECUBE = 229,               /* IIMAGECUBE  */
+  YYSYMBOL_UIMAGECUBE = 230,               /* UIMAGECUBE  */
+  YYSYMBOL_IMAGEBUFFER = 231,              /* IMAGEBUFFER  */
+  YYSYMBOL_IIMAGEBUFFER = 232,             /* IIMAGEBUFFER  */
+  YYSYMBOL_UIMAGEBUFFER = 233,             /* UIMAGEBUFFER  */
+  YYSYMBOL_IMAGE1DARRAY = 234,             /* IMAGE1DARRAY  */
+  YYSYMBOL_IIMAGE1DARRAY = 235,            /* IIMAGE1DARRAY  */
+  YYSYMBOL_UIMAGE1DARRAY = 236,            /* UIMAGE1DARRAY  */
+  YYSYMBOL_IMAGE2DARRAY = 237,             /* IMAGE2DARRAY  */
+  YYSYMBOL_IIMAGE2DARRAY = 238,            /* IIMAGE2DARRAY  */
+  YYSYMBOL_UIMAGE2DARRAY = 239,            /* UIMAGE2DARRAY  */
+  YYSYMBOL_IMAGECUBEARRAY = 240,           /* IMAGECUBEARRAY  */
+  YYSYMBOL_IIMAGECUBEARRAY = 241,          /* IIMAGECUBEARRAY  */
+  YYSYMBOL_UIMAGECUBEARRAY = 242,          /* UIMAGECUBEARRAY  */
+  YYSYMBOL_IMAGE2DMS = 243,                /* IMAGE2DMS  */
+  YYSYMBOL_IIMAGE2DMS = 244,               /* IIMAGE2DMS  */
+  YYSYMBOL_UIMAGE2DMS = 245,               /* UIMAGE2DMS  */
+  YYSYMBOL_IMAGE2DMSARRAY = 246,           /* IMAGE2DMSARRAY  */
+  YYSYMBOL_IIMAGE2DMSARRAY = 247,          /* IIMAGE2DMSARRAY  */
+  YYSYMBOL_UIMAGE2DMSARRAY = 248,          /* UIMAGE2DMSARRAY  */
+  YYSYMBOL_F16IMAGE1D = 249,               /* F16IMAGE1D  */
+  YYSYMBOL_F16IMAGE2D = 250,               /* F16IMAGE2D  */
+  YYSYMBOL_F16IMAGE3D = 251,               /* F16IMAGE3D  */
+  YYSYMBOL_F16IMAGE2DRECT = 252,           /* F16IMAGE2DRECT  */
+  YYSYMBOL_F16IMAGECUBE = 253,             /* F16IMAGECUBE  */
+  YYSYMBOL_F16IMAGE1DARRAY = 254,          /* F16IMAGE1DARRAY  */
+  YYSYMBOL_F16IMAGE2DARRAY = 255,          /* F16IMAGE2DARRAY  */
+  YYSYMBOL_F16IMAGECUBEARRAY = 256,        /* F16IMAGECUBEARRAY  */
+  YYSYMBOL_F16IMAGEBUFFER = 257,           /* F16IMAGEBUFFER  */
+  YYSYMBOL_F16IMAGE2DMS = 258,             /* F16IMAGE2DMS  */
+  YYSYMBOL_F16IMAGE2DMSARRAY = 259,        /* F16IMAGE2DMSARRAY  */
+  YYSYMBOL_I64IMAGE1D = 260,               /* I64IMAGE1D  */
+  YYSYMBOL_U64IMAGE1D = 261,               /* U64IMAGE1D  */
+  YYSYMBOL_I64IMAGE2D = 262,               /* I64IMAGE2D  */
+  YYSYMBOL_U64IMAGE2D = 263,               /* U64IMAGE2D  */
+  YYSYMBOL_I64IMAGE3D = 264,               /* I64IMAGE3D  */
+  YYSYMBOL_U64IMAGE3D = 265,               /* U64IMAGE3D  */
+  YYSYMBOL_I64IMAGE2DRECT = 266,           /* I64IMAGE2DRECT  */
+  YYSYMBOL_U64IMAGE2DRECT = 267,           /* U64IMAGE2DRECT  */
+  YYSYMBOL_I64IMAGECUBE = 268,             /* I64IMAGECUBE  */
+  YYSYMBOL_U64IMAGECUBE = 269,             /* U64IMAGECUBE  */
+  YYSYMBOL_I64IMAGEBUFFER = 270,           /* I64IMAGEBUFFER  */
+  YYSYMBOL_U64IMAGEBUFFER = 271,           /* U64IMAGEBUFFER  */
+  YYSYMBOL_I64IMAGE1DARRAY = 272,          /* I64IMAGE1DARRAY  */
+  YYSYMBOL_U64IMAGE1DARRAY = 273,          /* U64IMAGE1DARRAY  */
+  YYSYMBOL_I64IMAGE2DARRAY = 274,          /* I64IMAGE2DARRAY  */
+  YYSYMBOL_U64IMAGE2DARRAY = 275,          /* U64IMAGE2DARRAY  */
+  YYSYMBOL_I64IMAGECUBEARRAY = 276,        /* I64IMAGECUBEARRAY  */
+  YYSYMBOL_U64IMAGECUBEARRAY = 277,        /* U64IMAGECUBEARRAY  */
+  YYSYMBOL_I64IMAGE2DMS = 278,             /* I64IMAGE2DMS  */
+  YYSYMBOL_U64IMAGE2DMS = 279,             /* U64IMAGE2DMS  */
+  YYSYMBOL_I64IMAGE2DMSARRAY = 280,        /* I64IMAGE2DMSARRAY  */
+  YYSYMBOL_U64IMAGE2DMSARRAY = 281,        /* U64IMAGE2DMSARRAY  */
+  YYSYMBOL_TEXTURECUBEARRAY = 282,         /* TEXTURECUBEARRAY  */
+  YYSYMBOL_ITEXTURECUBEARRAY = 283,        /* ITEXTURECUBEARRAY  */
+  YYSYMBOL_UTEXTURECUBEARRAY = 284,        /* UTEXTURECUBEARRAY  */
+  YYSYMBOL_TEXTURE1D = 285,                /* TEXTURE1D  */
+  YYSYMBOL_ITEXTURE1D = 286,               /* ITEXTURE1D  */
+  YYSYMBOL_UTEXTURE1D = 287,               /* UTEXTURE1D  */
+  YYSYMBOL_TEXTURE1DARRAY = 288,           /* TEXTURE1DARRAY  */
+  YYSYMBOL_ITEXTURE1DARRAY = 289,          /* ITEXTURE1DARRAY  */
+  YYSYMBOL_UTEXTURE1DARRAY = 290,          /* UTEXTURE1DARRAY  */
+  YYSYMBOL_TEXTURE2DRECT = 291,            /* TEXTURE2DRECT  */
+  YYSYMBOL_ITEXTURE2DRECT = 292,           /* ITEXTURE2DRECT  */
+  YYSYMBOL_UTEXTURE2DRECT = 293,           /* UTEXTURE2DRECT  */
+  YYSYMBOL_TEXTUREBUFFER = 294,            /* TEXTUREBUFFER  */
+  YYSYMBOL_ITEXTUREBUFFER = 295,           /* ITEXTUREBUFFER  */
+  YYSYMBOL_UTEXTUREBUFFER = 296,           /* UTEXTUREBUFFER  */
+  YYSYMBOL_TEXTURE2DMS = 297,              /* TEXTURE2DMS  */
+  YYSYMBOL_ITEXTURE2DMS = 298,             /* ITEXTURE2DMS  */
+  YYSYMBOL_UTEXTURE2DMS = 299,             /* UTEXTURE2DMS  */
+  YYSYMBOL_TEXTURE2DMSARRAY = 300,         /* TEXTURE2DMSARRAY  */
+  YYSYMBOL_ITEXTURE2DMSARRAY = 301,        /* ITEXTURE2DMSARRAY  */
+  YYSYMBOL_UTEXTURE2DMSARRAY = 302,        /* UTEXTURE2DMSARRAY  */
+  YYSYMBOL_F16TEXTURE1D = 303,             /* F16TEXTURE1D  */
+  YYSYMBOL_F16TEXTURE2D = 304,             /* F16TEXTURE2D  */
+  YYSYMBOL_F16TEXTURE3D = 305,             /* F16TEXTURE3D  */
+  YYSYMBOL_F16TEXTURE2DRECT = 306,         /* F16TEXTURE2DRECT  */
+  YYSYMBOL_F16TEXTURECUBE = 307,           /* F16TEXTURECUBE  */
+  YYSYMBOL_F16TEXTURE1DARRAY = 308,        /* F16TEXTURE1DARRAY  */
+  YYSYMBOL_F16TEXTURE2DARRAY = 309,        /* F16TEXTURE2DARRAY  */
+  YYSYMBOL_F16TEXTURECUBEARRAY = 310,      /* F16TEXTURECUBEARRAY  */
+  YYSYMBOL_F16TEXTUREBUFFER = 311,         /* F16TEXTUREBUFFER  */
+  YYSYMBOL_F16TEXTURE2DMS = 312,           /* F16TEXTURE2DMS  */
+  YYSYMBOL_F16TEXTURE2DMSARRAY = 313,      /* F16TEXTURE2DMSARRAY  */
+  YYSYMBOL_SUBPASSINPUT = 314,             /* SUBPASSINPUT  */
+  YYSYMBOL_SUBPASSINPUTMS = 315,           /* SUBPASSINPUTMS  */
+  YYSYMBOL_ISUBPASSINPUT = 316,            /* ISUBPASSINPUT  */
+  YYSYMBOL_ISUBPASSINPUTMS = 317,          /* ISUBPASSINPUTMS  */
+  YYSYMBOL_USUBPASSINPUT = 318,            /* USUBPASSINPUT  */
+  YYSYMBOL_USUBPASSINPUTMS = 319,          /* USUBPASSINPUTMS  */
+  YYSYMBOL_F16SUBPASSINPUT = 320,          /* F16SUBPASSINPUT  */
+  YYSYMBOL_F16SUBPASSINPUTMS = 321,        /* F16SUBPASSINPUTMS  */
+  YYSYMBOL_SPIRV_INSTRUCTION = 322,        /* SPIRV_INSTRUCTION  */
+  YYSYMBOL_SPIRV_EXECUTION_MODE = 323,     /* SPIRV_EXECUTION_MODE  */
+  YYSYMBOL_SPIRV_EXECUTION_MODE_ID = 324,  /* SPIRV_EXECUTION_MODE_ID  */
+  YYSYMBOL_SPIRV_DECORATE = 325,           /* SPIRV_DECORATE  */
+  YYSYMBOL_SPIRV_DECORATE_ID = 326,        /* SPIRV_DECORATE_ID  */
+  YYSYMBOL_SPIRV_DECORATE_STRING = 327,    /* SPIRV_DECORATE_STRING  */
+  YYSYMBOL_SPIRV_TYPE = 328,               /* SPIRV_TYPE  */
+  YYSYMBOL_SPIRV_STORAGE_CLASS = 329,      /* SPIRV_STORAGE_CLASS  */
+  YYSYMBOL_SPIRV_BY_REFERENCE = 330,       /* SPIRV_BY_REFERENCE  */
+  YYSYMBOL_SPIRV_LITERAL = 331,            /* SPIRV_LITERAL  */
+  YYSYMBOL_ATTACHMENTEXT = 332,            /* ATTACHMENTEXT  */
+  YYSYMBOL_IATTACHMENTEXT = 333,           /* IATTACHMENTEXT  */
+  YYSYMBOL_UATTACHMENTEXT = 334,           /* UATTACHMENTEXT  */
+  YYSYMBOL_LEFT_OP = 335,                  /* LEFT_OP  */
+  YYSYMBOL_RIGHT_OP = 336,                 /* RIGHT_OP  */
+  YYSYMBOL_INC_OP = 337,                   /* INC_OP  */
+  YYSYMBOL_DEC_OP = 338,                   /* DEC_OP  */
+  YYSYMBOL_LE_OP = 339,                    /* LE_OP  */
+  YYSYMBOL_GE_OP = 340,                    /* GE_OP  */
+  YYSYMBOL_EQ_OP = 341,                    /* EQ_OP  */
+  YYSYMBOL_NE_OP = 342,                    /* NE_OP  */
+  YYSYMBOL_AND_OP = 343,                   /* AND_OP  */
+  YYSYMBOL_OR_OP = 344,                    /* OR_OP  */
+  YYSYMBOL_XOR_OP = 345,                   /* XOR_OP  */
+  YYSYMBOL_MUL_ASSIGN = 346,               /* MUL_ASSIGN  */
+  YYSYMBOL_DIV_ASSIGN = 347,               /* DIV_ASSIGN  */
+  YYSYMBOL_ADD_ASSIGN = 348,               /* ADD_ASSIGN  */
+  YYSYMBOL_MOD_ASSIGN = 349,               /* MOD_ASSIGN  */
+  YYSYMBOL_LEFT_ASSIGN = 350,              /* LEFT_ASSIGN  */
+  YYSYMBOL_RIGHT_ASSIGN = 351,             /* RIGHT_ASSIGN  */
+  YYSYMBOL_AND_ASSIGN = 352,               /* AND_ASSIGN  */
+  YYSYMBOL_XOR_ASSIGN = 353,               /* XOR_ASSIGN  */
+  YYSYMBOL_OR_ASSIGN = 354,                /* OR_ASSIGN  */
+  YYSYMBOL_SUB_ASSIGN = 355,               /* SUB_ASSIGN  */
+  YYSYMBOL_STRING_LITERAL = 356,           /* STRING_LITERAL  */
+  YYSYMBOL_LEFT_PAREN = 357,               /* LEFT_PAREN  */
+  YYSYMBOL_RIGHT_PAREN = 358,              /* RIGHT_PAREN  */
+  YYSYMBOL_LEFT_BRACKET = 359,             /* LEFT_BRACKET  */
+  YYSYMBOL_RIGHT_BRACKET = 360,            /* RIGHT_BRACKET  */
+  YYSYMBOL_LEFT_BRACE = 361,               /* LEFT_BRACE  */
+  YYSYMBOL_RIGHT_BRACE = 362,              /* RIGHT_BRACE  */
+  YYSYMBOL_DOT = 363,                      /* DOT  */
+  YYSYMBOL_COMMA = 364,                    /* COMMA  */
+  YYSYMBOL_COLON = 365,                    /* COLON  */
+  YYSYMBOL_EQUAL = 366,                    /* EQUAL  */
+  YYSYMBOL_SEMICOLON = 367,                /* SEMICOLON  */
+  YYSYMBOL_BANG = 368,                     /* BANG  */
+  YYSYMBOL_DASH = 369,                     /* DASH  */
+  YYSYMBOL_TILDE = 370,                    /* TILDE  */
+  YYSYMBOL_PLUS = 371,                     /* PLUS  */
+  YYSYMBOL_STAR = 372,                     /* STAR  */
+  YYSYMBOL_SLASH = 373,                    /* SLASH  */
+  YYSYMBOL_PERCENT = 374,                  /* PERCENT  */
+  YYSYMBOL_LEFT_ANGLE = 375,               /* LEFT_ANGLE  */
+  YYSYMBOL_RIGHT_ANGLE = 376,              /* RIGHT_ANGLE  */
+  YYSYMBOL_VERTICAL_BAR = 377,             /* VERTICAL_BAR  */
+  YYSYMBOL_CARET = 378,                    /* CARET  */
+  YYSYMBOL_AMPERSAND = 379,                /* AMPERSAND  */
+  YYSYMBOL_QUESTION = 380,                 /* QUESTION  */
+  YYSYMBOL_INVARIANT = 381,                /* INVARIANT  */
+  YYSYMBOL_HIGH_PRECISION = 382,           /* HIGH_PRECISION  */
+  YYSYMBOL_MEDIUM_PRECISION = 383,         /* MEDIUM_PRECISION  */
+  YYSYMBOL_LOW_PRECISION = 384,            /* LOW_PRECISION  */
+  YYSYMBOL_PRECISION = 385,                /* PRECISION  */
+  YYSYMBOL_PACKED = 386,                   /* PACKED  */
+  YYSYMBOL_RESOURCE = 387,                 /* RESOURCE  */
+  YYSYMBOL_SUPERP = 388,                   /* SUPERP  */
+  YYSYMBOL_FLOATCONSTANT = 389,            /* FLOATCONSTANT  */
+  YYSYMBOL_INTCONSTANT = 390,              /* INTCONSTANT  */
+  YYSYMBOL_UINTCONSTANT = 391,             /* UINTCONSTANT  */
+  YYSYMBOL_BOOLCONSTANT = 392,             /* BOOLCONSTANT  */
+  YYSYMBOL_IDENTIFIER = 393,               /* IDENTIFIER  */
+  YYSYMBOL_TYPE_NAME = 394,                /* TYPE_NAME  */
+  YYSYMBOL_CENTROID = 395,                 /* CENTROID  */
+  YYSYMBOL_IN = 396,                       /* IN  */
+  YYSYMBOL_OUT = 397,                      /* OUT  */
+  YYSYMBOL_INOUT = 398,                    /* INOUT  */
+  YYSYMBOL_STRUCT = 399,                   /* STRUCT  */
+  YYSYMBOL_VOID = 400,                     /* VOID  */
+  YYSYMBOL_WHILE = 401,                    /* WHILE  */
+  YYSYMBOL_BREAK = 402,                    /* BREAK  */
+  YYSYMBOL_CONTINUE = 403,                 /* CONTINUE  */
+  YYSYMBOL_DO = 404,                       /* DO  */
+  YYSYMBOL_ELSE = 405,                     /* ELSE  */
+  YYSYMBOL_FOR = 406,                      /* FOR  */
+  YYSYMBOL_IF = 407,                       /* IF  */
+  YYSYMBOL_DISCARD = 408,                  /* DISCARD  */
+  YYSYMBOL_RETURN = 409,                   /* RETURN  */
+  YYSYMBOL_SWITCH = 410,                   /* SWITCH  */
+  YYSYMBOL_CASE = 411,                     /* CASE  */
+  YYSYMBOL_DEFAULT = 412,                  /* DEFAULT  */
+  YYSYMBOL_TERMINATE_INVOCATION = 413,     /* TERMINATE_INVOCATION  */
+  YYSYMBOL_TERMINATE_RAY = 414,            /* TERMINATE_RAY  */
+  YYSYMBOL_IGNORE_INTERSECTION = 415,      /* IGNORE_INTERSECTION  */
+  YYSYMBOL_UNIFORM = 416,                  /* UNIFORM  */
+  YYSYMBOL_SHARED = 417,                   /* SHARED  */
+  YYSYMBOL_BUFFER = 418,                   /* BUFFER  */
+  YYSYMBOL_TILEIMAGEEXT = 419,             /* TILEIMAGEEXT  */
+  YYSYMBOL_FLAT = 420,                     /* FLAT  */
+  YYSYMBOL_SMOOTH = 421,                   /* SMOOTH  */
+  YYSYMBOL_LAYOUT = 422,                   /* LAYOUT  */
+  YYSYMBOL_DOUBLECONSTANT = 423,           /* DOUBLECONSTANT  */
+  YYSYMBOL_INT16CONSTANT = 424,            /* INT16CONSTANT  */
+  YYSYMBOL_UINT16CONSTANT = 425,           /* UINT16CONSTANT  */
+  YYSYMBOL_FLOAT16CONSTANT = 426,          /* FLOAT16CONSTANT  */
+  YYSYMBOL_INT32CONSTANT = 427,            /* INT32CONSTANT  */
+  YYSYMBOL_UINT32CONSTANT = 428,           /* UINT32CONSTANT  */
+  YYSYMBOL_INT64CONSTANT = 429,            /* INT64CONSTANT  */
+  YYSYMBOL_UINT64CONSTANT = 430,           /* UINT64CONSTANT  */
+  YYSYMBOL_SUBROUTINE = 431,               /* SUBROUTINE  */
+  YYSYMBOL_DEMOTE = 432,                   /* DEMOTE  */
+  YYSYMBOL_FUNCTION = 433,                 /* FUNCTION  */
+  YYSYMBOL_PAYLOADNV = 434,                /* PAYLOADNV  */
+  YYSYMBOL_PAYLOADINNV = 435,              /* PAYLOADINNV  */
+  YYSYMBOL_HITATTRNV = 436,                /* HITATTRNV  */
+  YYSYMBOL_CALLDATANV = 437,               /* CALLDATANV  */
+  YYSYMBOL_CALLDATAINNV = 438,             /* CALLDATAINNV  */
+  YYSYMBOL_PAYLOADEXT = 439,               /* PAYLOADEXT  */
+  YYSYMBOL_PAYLOADINEXT = 440,             /* PAYLOADINEXT  */
+  YYSYMBOL_HITATTREXT = 441,               /* HITATTREXT  */
+  YYSYMBOL_CALLDATAEXT = 442,              /* CALLDATAEXT  */
+  YYSYMBOL_CALLDATAINEXT = 443,            /* CALLDATAINEXT  */
+  YYSYMBOL_PATCH = 444,                    /* PATCH  */
+  YYSYMBOL_SAMPLE = 445,                   /* SAMPLE  */
+  YYSYMBOL_NONUNIFORM = 446,               /* NONUNIFORM  */
+  YYSYMBOL_COHERENT = 447,                 /* COHERENT  */
+  YYSYMBOL_VOLATILE = 448,                 /* VOLATILE  */
+  YYSYMBOL_RESTRICT = 449,                 /* RESTRICT  */
+  YYSYMBOL_READONLY = 450,                 /* READONLY  */
+  YYSYMBOL_WRITEONLY = 451,                /* WRITEONLY  */
+  YYSYMBOL_DEVICECOHERENT = 452,           /* DEVICECOHERENT  */
+  YYSYMBOL_QUEUEFAMILYCOHERENT = 453,      /* QUEUEFAMILYCOHERENT  */
+  YYSYMBOL_WORKGROUPCOHERENT = 454,        /* WORKGROUPCOHERENT  */
+  YYSYMBOL_SUBGROUPCOHERENT = 455,         /* SUBGROUPCOHERENT  */
+  YYSYMBOL_NONPRIVATE = 456,               /* NONPRIVATE  */
+  YYSYMBOL_SHADERCALLCOHERENT = 457,       /* SHADERCALLCOHERENT  */
+  YYSYMBOL_NOPERSPECTIVE = 458,            /* NOPERSPECTIVE  */
+  YYSYMBOL_EXPLICITINTERPAMD = 459,        /* EXPLICITINTERPAMD  */
+  YYSYMBOL_PERVERTEXEXT = 460,             /* PERVERTEXEXT  */
+  YYSYMBOL_PERVERTEXNV = 461,              /* PERVERTEXNV  */
+  YYSYMBOL_PERPRIMITIVENV = 462,           /* PERPRIMITIVENV  */
+  YYSYMBOL_PERVIEWNV = 463,                /* PERVIEWNV  */
+  YYSYMBOL_PERTASKNV = 464,                /* PERTASKNV  */
+  YYSYMBOL_PERPRIMITIVEEXT = 465,          /* PERPRIMITIVEEXT  */
+  YYSYMBOL_TASKPAYLOADWORKGROUPEXT = 466,  /* TASKPAYLOADWORKGROUPEXT  */
+  YYSYMBOL_PRECISE = 467,                  /* PRECISE  */
+  YYSYMBOL_YYACCEPT = 468,                 /* $accept  */
+  YYSYMBOL_variable_identifier = 469,      /* variable_identifier  */
+  YYSYMBOL_primary_expression = 470,       /* primary_expression  */
+  YYSYMBOL_postfix_expression = 471,       /* postfix_expression  */
+  YYSYMBOL_integer_expression = 472,       /* integer_expression  */
+  YYSYMBOL_function_call = 473,            /* function_call  */
+  YYSYMBOL_function_call_or_method = 474,  /* function_call_or_method  */
+  YYSYMBOL_function_call_generic = 475,    /* function_call_generic  */
+  YYSYMBOL_function_call_header_no_parameters = 476, /* function_call_header_no_parameters  */
+  YYSYMBOL_function_call_header_with_parameters = 477, /* function_call_header_with_parameters  */
+  YYSYMBOL_function_call_header = 478,     /* function_call_header  */
+  YYSYMBOL_function_identifier = 479,      /* function_identifier  */
+  YYSYMBOL_unary_expression = 480,         /* unary_expression  */
+  YYSYMBOL_unary_operator = 481,           /* unary_operator  */
+  YYSYMBOL_multiplicative_expression = 482, /* multiplicative_expression  */
+  YYSYMBOL_additive_expression = 483,      /* additive_expression  */
+  YYSYMBOL_shift_expression = 484,         /* shift_expression  */
+  YYSYMBOL_relational_expression = 485,    /* relational_expression  */
+  YYSYMBOL_equality_expression = 486,      /* equality_expression  */
+  YYSYMBOL_and_expression = 487,           /* and_expression  */
+  YYSYMBOL_exclusive_or_expression = 488,  /* exclusive_or_expression  */
+  YYSYMBOL_inclusive_or_expression = 489,  /* inclusive_or_expression  */
+  YYSYMBOL_logical_and_expression = 490,   /* logical_and_expression  */
+  YYSYMBOL_logical_xor_expression = 491,   /* logical_xor_expression  */
+  YYSYMBOL_logical_or_expression = 492,    /* logical_or_expression  */
+  YYSYMBOL_conditional_expression = 493,   /* conditional_expression  */
+  YYSYMBOL_494_1 = 494,                    /* $@1  */
+  YYSYMBOL_assignment_expression = 495,    /* assignment_expression  */
+  YYSYMBOL_assignment_operator = 496,      /* assignment_operator  */
+  YYSYMBOL_expression = 497,               /* expression  */
+  YYSYMBOL_constant_expression = 498,      /* constant_expression  */
+  YYSYMBOL_declaration = 499,              /* declaration  */
+  YYSYMBOL_block_structure = 500,          /* block_structure  */
+  YYSYMBOL_501_2 = 501,                    /* $@2  */
+  YYSYMBOL_identifier_list = 502,          /* identifier_list  */
+  YYSYMBOL_function_prototype = 503,       /* function_prototype  */
+  YYSYMBOL_function_declarator = 504,      /* function_declarator  */
+  YYSYMBOL_function_header_with_parameters = 505, /* function_header_with_parameters  */
+  YYSYMBOL_function_header = 506,          /* function_header  */
+  YYSYMBOL_parameter_declarator = 507,     /* parameter_declarator  */
+  YYSYMBOL_parameter_declaration = 508,    /* parameter_declaration  */
+  YYSYMBOL_parameter_type_specifier = 509, /* parameter_type_specifier  */
+  YYSYMBOL_init_declarator_list = 510,     /* init_declarator_list  */
+  YYSYMBOL_single_declaration = 511,       /* single_declaration  */
+  YYSYMBOL_fully_specified_type = 512,     /* fully_specified_type  */
+  YYSYMBOL_invariant_qualifier = 513,      /* invariant_qualifier  */
+  YYSYMBOL_interpolation_qualifier = 514,  /* interpolation_qualifier  */
+  YYSYMBOL_layout_qualifier = 515,         /* layout_qualifier  */
+  YYSYMBOL_layout_qualifier_id_list = 516, /* layout_qualifier_id_list  */
+  YYSYMBOL_layout_qualifier_id = 517,      /* layout_qualifier_id  */
+  YYSYMBOL_precise_qualifier = 518,        /* precise_qualifier  */
+  YYSYMBOL_type_qualifier = 519,           /* type_qualifier  */
+  YYSYMBOL_single_type_qualifier = 520,    /* single_type_qualifier  */
+  YYSYMBOL_storage_qualifier = 521,        /* storage_qualifier  */
+  YYSYMBOL_non_uniform_qualifier = 522,    /* non_uniform_qualifier  */
+  YYSYMBOL_type_name_list = 523,           /* type_name_list  */
+  YYSYMBOL_type_specifier = 524,           /* type_specifier  */
+  YYSYMBOL_array_specifier = 525,          /* array_specifier  */
+  YYSYMBOL_type_parameter_specifier_opt = 526, /* type_parameter_specifier_opt  */
+  YYSYMBOL_type_parameter_specifier = 527, /* type_parameter_specifier  */
+  YYSYMBOL_type_parameter_specifier_list = 528, /* type_parameter_specifier_list  */
+  YYSYMBOL_type_specifier_nonarray = 529,  /* type_specifier_nonarray  */
+  YYSYMBOL_precision_qualifier = 530,      /* precision_qualifier  */
+  YYSYMBOL_struct_specifier = 531,         /* struct_specifier  */
+  YYSYMBOL_532_3 = 532,                    /* $@3  */
+  YYSYMBOL_533_4 = 533,                    /* $@4  */
+  YYSYMBOL_struct_declaration_list = 534,  /* struct_declaration_list  */
+  YYSYMBOL_struct_declaration = 535,       /* struct_declaration  */
+  YYSYMBOL_struct_declarator_list = 536,   /* struct_declarator_list  */
+  YYSYMBOL_struct_declarator = 537,        /* struct_declarator  */
+  YYSYMBOL_initializer = 538,              /* initializer  */
+  YYSYMBOL_initializer_list = 539,         /* initializer_list  */
+  YYSYMBOL_declaration_statement = 540,    /* declaration_statement  */
+  YYSYMBOL_statement = 541,                /* statement  */
+  YYSYMBOL_simple_statement = 542,         /* simple_statement  */
+  YYSYMBOL_demote_statement = 543,         /* demote_statement  */
+  YYSYMBOL_compound_statement = 544,       /* compound_statement  */
+  YYSYMBOL_545_5 = 545,                    /* $@5  */
+  YYSYMBOL_546_6 = 546,                    /* $@6  */
+  YYSYMBOL_statement_no_new_scope = 547,   /* statement_no_new_scope  */
+  YYSYMBOL_statement_scoped = 548,         /* statement_scoped  */
+  YYSYMBOL_549_7 = 549,                    /* $@7  */
+  YYSYMBOL_550_8 = 550,                    /* $@8  */
+  YYSYMBOL_compound_statement_no_new_scope = 551, /* compound_statement_no_new_scope  */
+  YYSYMBOL_statement_list = 552,           /* statement_list  */
+  YYSYMBOL_expression_statement = 553,     /* expression_statement  */
+  YYSYMBOL_selection_statement = 554,      /* selection_statement  */
+  YYSYMBOL_selection_statement_nonattributed = 555, /* selection_statement_nonattributed  */
+  YYSYMBOL_selection_rest_statement = 556, /* selection_rest_statement  */
+  YYSYMBOL_condition = 557,                /* condition  */
+  YYSYMBOL_switch_statement = 558,         /* switch_statement  */
+  YYSYMBOL_switch_statement_nonattributed = 559, /* switch_statement_nonattributed  */
+  YYSYMBOL_560_9 = 560,                    /* $@9  */
+  YYSYMBOL_switch_statement_list = 561,    /* switch_statement_list  */
+  YYSYMBOL_case_label = 562,               /* case_label  */
+  YYSYMBOL_iteration_statement = 563,      /* iteration_statement  */
+  YYSYMBOL_iteration_statement_nonattributed = 564, /* iteration_statement_nonattributed  */
+  YYSYMBOL_565_10 = 565,                   /* $@10  */
+  YYSYMBOL_566_11 = 566,                   /* $@11  */
+  YYSYMBOL_567_12 = 567,                   /* $@12  */
+  YYSYMBOL_for_init_statement = 568,       /* for_init_statement  */
+  YYSYMBOL_conditionopt = 569,             /* conditionopt  */
+  YYSYMBOL_for_rest_statement = 570,       /* for_rest_statement  */
+  YYSYMBOL_jump_statement = 571,           /* jump_statement  */
+  YYSYMBOL_translation_unit = 572,         /* translation_unit  */
+  YYSYMBOL_external_declaration = 573,     /* external_declaration  */
+  YYSYMBOL_function_definition = 574,      /* function_definition  */
+  YYSYMBOL_575_13 = 575,                   /* $@13  */
+  YYSYMBOL_attribute = 576,                /* attribute  */
+  YYSYMBOL_attribute_list = 577,           /* attribute_list  */
+  YYSYMBOL_single_attribute = 578,         /* single_attribute  */
+  YYSYMBOL_spirv_requirements_list = 579,  /* spirv_requirements_list  */
+  YYSYMBOL_spirv_requirements_parameter = 580, /* spirv_requirements_parameter  */
+  YYSYMBOL_spirv_extension_list = 581,     /* spirv_extension_list  */
+  YYSYMBOL_spirv_capability_list = 582,    /* spirv_capability_list  */
+  YYSYMBOL_spirv_execution_mode_qualifier = 583, /* spirv_execution_mode_qualifier  */
+  YYSYMBOL_spirv_execution_mode_parameter_list = 584, /* spirv_execution_mode_parameter_list  */
+  YYSYMBOL_spirv_execution_mode_parameter = 585, /* spirv_execution_mode_parameter  */
+  YYSYMBOL_spirv_execution_mode_id_parameter_list = 586, /* spirv_execution_mode_id_parameter_list  */
+  YYSYMBOL_spirv_storage_class_qualifier = 587, /* spirv_storage_class_qualifier  */
+  YYSYMBOL_spirv_decorate_qualifier = 588, /* spirv_decorate_qualifier  */
+  YYSYMBOL_spirv_decorate_parameter_list = 589, /* spirv_decorate_parameter_list  */
+  YYSYMBOL_spirv_decorate_parameter = 590, /* spirv_decorate_parameter  */
+  YYSYMBOL_spirv_decorate_id_parameter_list = 591, /* spirv_decorate_id_parameter_list  */
+  YYSYMBOL_spirv_decorate_id_parameter = 592, /* spirv_decorate_id_parameter  */
+  YYSYMBOL_spirv_decorate_string_parameter_list = 593, /* spirv_decorate_string_parameter_list  */
+  YYSYMBOL_spirv_type_specifier = 594,     /* spirv_type_specifier  */
+  YYSYMBOL_spirv_type_parameter_list = 595, /* spirv_type_parameter_list  */
+  YYSYMBOL_spirv_type_parameter = 596,     /* spirv_type_parameter  */
+  YYSYMBOL_spirv_instruction_qualifier = 597, /* spirv_instruction_qualifier  */
+  YYSYMBOL_spirv_instruction_qualifier_list = 598, /* spirv_instruction_qualifier_list  */
+  YYSYMBOL_spirv_instruction_qualifier_id = 599 /* spirv_instruction_qualifier_id  */
 };
 typedef enum yysymbol_kind_t yysymbol_kind_t;
 
@@ -726,20 +729,13 @@
 #line 111 "MachineIndependent/glslang.y"
 
 
-/* windows only pragma */
-#ifdef _MSC_VER
-    #pragma warning(disable : 4065)
-    #pragma warning(disable : 4127)
-    #pragma warning(disable : 4244)
-#endif
-
 #define parseContext (*pParseContext)
 #define yyerror(context, msg) context->parserError(msg)
 
 extern int yylex(YYSTYPE*, TParseContext&);
 
 
-#line 743 "MachineIndependent/glslang_tab.cpp"
+#line 739 "MachineIndependent/glslang_tab.cpp"
 
 
 #ifdef short
@@ -1061,21 +1057,21 @@
 #endif /* !YYCOPY_NEEDED */
 
 /* YYFINAL -- State number of the termination state.  */
-#define YYFINAL  452
+#define YYFINAL  455
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   12701
+#define YYLAST   12814
 
 /* YYNTOKENS -- Number of terminals.  */
-#define YYNTOKENS  465
+#define YYNTOKENS  468
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  132
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  700
+#define YYNRULES  703
 /* YYNSTATES -- Number of states.  */
-#define YYNSTATES  946
+#define YYNSTATES  949
 
 /* YYMAXUTOK -- Last valid token kind.  */
-#define YYMAXUTOK   719
+#define YYMAXUTOK   722
 
 
 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM
@@ -1160,84 +1156,85 @@
      425,   426,   427,   428,   429,   430,   431,   432,   433,   434,
      435,   436,   437,   438,   439,   440,   441,   442,   443,   444,
      445,   446,   447,   448,   449,   450,   451,   452,   453,   454,
-     455,   456,   457,   458,   459,   460,   461,   462,   463,   464
+     455,   456,   457,   458,   459,   460,   461,   462,   463,   464,
+     465,   466,   467
 };
 
 #if YYDEBUG
 /* YYRLINE[YYN] -- Source line where rule number YYN was defined.  */
 static const yytype_int16 yyrline[] =
 {
-       0,   362,   362,   368,   371,   376,   379,   382,   386,   389,
-     392,   396,   400,   404,   408,   412,   416,   422,   429,   432,
-     435,   438,   441,   446,   454,   461,   468,   474,   478,   485,
-     488,   494,   501,   511,   519,   524,   551,   559,   565,   569,
-     573,   593,   594,   595,   596,   602,   603,   608,   613,   622,
-     623,   628,   636,   637,   643,   652,   653,   658,   663,   668,
-     676,   677,   686,   698,   699,   708,   709,   718,   719,   728,
-     729,   737,   738,   746,   747,   755,   756,   756,   774,   775,
-     791,   795,   799,   803,   808,   812,   816,   820,   824,   828,
-     832,   839,   842,   853,   860,   865,   872,   877,   882,   889,
-     893,   897,   901,   906,   911,   920,   920,   931,   935,   942,
-     947,   953,   959,   969,   972,   979,   987,  1007,  1030,  1045,
-    1070,  1081,  1091,  1101,  1111,  1120,  1123,  1127,  1131,  1136,
-    1144,  1149,  1154,  1159,  1164,  1173,  1183,  1210,  1219,  1226,
-    1233,  1240,  1247,  1255,  1263,  1273,  1283,  1290,  1300,  1306,
-    1309,  1316,  1320,  1324,  1332,  1341,  1344,  1355,  1358,  1361,
-    1365,  1369,  1373,  1377,  1380,  1385,  1389,  1394,  1402,  1406,
-    1411,  1417,  1423,  1430,  1435,  1440,  1448,  1453,  1465,  1479,
-    1485,  1490,  1498,  1506,  1514,  1522,  1530,  1538,  1546,  1554,
-    1562,  1569,  1576,  1580,  1585,  1590,  1595,  1600,  1605,  1610,
-    1614,  1618,  1622,  1626,  1632,  1638,  1648,  1655,  1658,  1666,
-    1673,  1684,  1689,  1697,  1701,  1711,  1714,  1720,  1726,  1731,
-    1739,  1749,  1753,  1757,  1761,  1766,  1770,  1775,  1780,  1785,
-    1790,  1795,  1800,  1805,  1810,  1815,  1821,  1827,  1833,  1838,
-    1843,  1848,  1853,  1858,  1863,  1868,  1873,  1878,  1883,  1888,
-    1893,  1900,  1905,  1910,  1915,  1920,  1925,  1930,  1935,  1940,
-    1945,  1950,  1955,  1963,  1971,  1979,  1985,  1991,  1997,  2003,
-    2009,  2015,  2021,  2027,  2033,  2039,  2045,  2051,  2057,  2063,
-    2069,  2075,  2081,  2087,  2093,  2099,  2105,  2111,  2117,  2123,
-    2129,  2135,  2141,  2147,  2153,  2159,  2165,  2171,  2177,  2185,
-    2193,  2201,  2209,  2217,  2225,  2233,  2241,  2249,  2257,  2265,
-    2273,  2279,  2285,  2291,  2297,  2303,  2309,  2315,  2321,  2327,
-    2333,  2339,  2345,  2351,  2357,  2363,  2369,  2375,  2381,  2387,
-    2393,  2399,  2405,  2411,  2417,  2423,  2429,  2435,  2441,  2447,
-    2453,  2459,  2465,  2471,  2477,  2483,  2489,  2493,  2497,  2501,
-    2506,  2511,  2516,  2521,  2526,  2531,  2536,  2541,  2546,  2551,
-    2556,  2561,  2566,  2571,  2577,  2583,  2589,  2595,  2601,  2607,
-    2613,  2619,  2625,  2631,  2637,  2643,  2649,  2654,  2659,  2664,
-    2669,  2674,  2679,  2684,  2689,  2694,  2699,  2704,  2709,  2714,
-    2719,  2724,  2729,  2734,  2739,  2744,  2749,  2754,  2759,  2764,
-    2769,  2774,  2779,  2784,  2789,  2794,  2799,  2804,  2809,  2814,
-    2820,  2826,  2831,  2836,  2841,  2847,  2852,  2857,  2862,  2868,
-    2873,  2878,  2883,  2889,  2894,  2899,  2904,  2910,  2916,  2922,
-    2928,  2933,  2939,  2945,  2951,  2956,  2961,  2966,  2971,  2976,
-    2982,  2987,  2992,  2997,  3003,  3008,  3013,  3018,  3024,  3029,
-    3034,  3039,  3045,  3050,  3055,  3060,  3066,  3071,  3076,  3081,
-    3087,  3092,  3097,  3102,  3108,  3113,  3118,  3123,  3129,  3134,
-    3139,  3144,  3150,  3155,  3160,  3165,  3171,  3176,  3181,  3186,
-    3192,  3197,  3202,  3207,  3213,  3218,  3223,  3228,  3234,  3239,
-    3244,  3249,  3255,  3260,  3265,  3270,  3276,  3281,  3286,  3291,
-    3296,  3301,  3306,  3311,  3316,  3321,  3326,  3331,  3336,  3341,
-    3346,  3351,  3356,  3361,  3366,  3371,  3376,  3381,  3386,  3391,
-    3396,  3402,  3408,  3414,  3420,  3426,  3432,  3438,  3445,  3452,
-    3458,  3464,  3470,  3476,  3483,  3490,  3497,  3504,  3508,  3512,
-    3517,  3533,  3538,  3543,  3551,  3551,  3562,  3562,  3572,  3575,
-    3588,  3610,  3637,  3641,  3647,  3652,  3663,  3666,  3672,  3678,
-    3687,  3690,  3696,  3700,  3701,  3707,  3708,  3709,  3710,  3711,
-    3712,  3713,  3714,  3718,  3726,  3727,  3731,  3727,  3743,  3744,
-    3748,  3748,  3755,  3755,  3769,  3772,  3780,  3788,  3799,  3800,
-    3804,  3807,  3814,  3821,  3825,  3833,  3837,  3850,  3853,  3860,
-    3860,  3880,  3883,  3889,  3901,  3913,  3916,  3923,  3923,  3938,
-    3938,  3956,  3956,  3977,  3980,  3986,  3989,  3995,  3999,  4006,
-    4011,  4016,  4023,  4026,  4030,  4034,  4038,  4047,  4051,  4060,
-    4063,  4066,  4074,  4074,  4116,  4121,  4124,  4129,  4132,  4137,
-    4140,  4145,  4148,  4153,  4156,  4161,  4164,  4169,  4173,  4178,
-    4182,  4187,  4191,  4198,  4201,  4206,  4209,  4212,  4215,  4218,
-    4223,  4232,  4243,  4248,  4256,  4260,  4265,  4269,  4274,  4278,
-    4283,  4287,  4294,  4297,  4302,  4305,  4308,  4311,  4316,  4319,
-    4324,  4330,  4333,  4336,  4339,  4344,  4348,  4353,  4357,  4362,
-    4366,  4373,  4376,  4381,  4384,  4389,  4392,  4398,  4401,  4406,
-    4409
+       0,   356,   356,   362,   365,   370,   373,   376,   380,   383,
+     386,   390,   394,   398,   402,   406,   410,   416,   423,   426,
+     429,   432,   435,   440,   448,   455,   462,   468,   472,   479,
+     482,   488,   506,   531,   539,   544,   571,   579,   585,   589,
+     593,   613,   614,   615,   616,   622,   623,   628,   633,   642,
+     643,   648,   656,   657,   663,   672,   673,   678,   683,   688,
+     696,   697,   706,   718,   719,   728,   729,   738,   739,   748,
+     749,   757,   758,   766,   767,   775,   776,   776,   794,   795,
+     811,   815,   819,   823,   828,   832,   836,   840,   844,   848,
+     852,   859,   862,   873,   880,   885,   892,   897,   902,   909,
+     913,   917,   921,   926,   931,   940,   940,   951,   955,   962,
+     967,   975,   983,   995,   998,  1005,  1018,  1041,  1064,  1079,
+    1104,  1115,  1125,  1135,  1145,  1154,  1157,  1161,  1165,  1170,
+    1178,  1183,  1188,  1193,  1198,  1207,  1217,  1244,  1253,  1260,
+    1267,  1274,  1281,  1289,  1297,  1307,  1317,  1324,  1334,  1340,
+    1343,  1350,  1354,  1358,  1366,  1375,  1378,  1389,  1392,  1395,
+    1399,  1403,  1407,  1411,  1414,  1419,  1423,  1428,  1436,  1440,
+    1445,  1451,  1457,  1464,  1469,  1474,  1482,  1487,  1499,  1513,
+    1519,  1524,  1532,  1540,  1548,  1556,  1564,  1572,  1580,  1588,
+    1596,  1603,  1610,  1614,  1619,  1624,  1629,  1634,  1639,  1644,
+    1648,  1652,  1656,  1660,  1666,  1672,  1682,  1689,  1692,  1700,
+    1707,  1718,  1723,  1731,  1735,  1745,  1748,  1754,  1760,  1766,
+    1774,  1784,  1788,  1792,  1796,  1801,  1805,  1810,  1815,  1820,
+    1825,  1830,  1835,  1840,  1845,  1850,  1856,  1862,  1868,  1873,
+    1878,  1883,  1888,  1893,  1898,  1903,  1908,  1913,  1918,  1923,
+    1928,  1935,  1940,  1945,  1950,  1955,  1960,  1965,  1970,  1975,
+    1980,  1985,  1990,  1998,  2006,  2014,  2020,  2026,  2032,  2038,
+    2044,  2050,  2056,  2062,  2068,  2074,  2080,  2086,  2092,  2098,
+    2104,  2110,  2116,  2122,  2128,  2134,  2140,  2146,  2152,  2158,
+    2164,  2170,  2176,  2182,  2188,  2194,  2200,  2206,  2212,  2220,
+    2228,  2236,  2244,  2252,  2260,  2268,  2276,  2284,  2292,  2300,
+    2308,  2314,  2320,  2326,  2332,  2338,  2344,  2350,  2356,  2362,
+    2368,  2374,  2380,  2386,  2392,  2398,  2404,  2410,  2416,  2422,
+    2428,  2434,  2440,  2446,  2452,  2458,  2464,  2470,  2476,  2482,
+    2488,  2494,  2500,  2506,  2512,  2518,  2524,  2528,  2532,  2536,
+    2541,  2546,  2551,  2556,  2561,  2566,  2571,  2576,  2581,  2586,
+    2591,  2596,  2601,  2606,  2612,  2618,  2624,  2630,  2636,  2642,
+    2648,  2654,  2660,  2666,  2672,  2678,  2684,  2689,  2694,  2699,
+    2704,  2709,  2714,  2719,  2724,  2729,  2734,  2739,  2744,  2749,
+    2754,  2759,  2764,  2769,  2774,  2779,  2784,  2789,  2794,  2799,
+    2804,  2809,  2814,  2819,  2824,  2829,  2834,  2839,  2844,  2849,
+    2855,  2861,  2866,  2871,  2876,  2882,  2887,  2892,  2897,  2903,
+    2908,  2913,  2918,  2924,  2929,  2934,  2939,  2945,  2951,  2957,
+    2963,  2968,  2974,  2980,  2986,  2991,  2996,  3001,  3006,  3011,
+    3017,  3022,  3027,  3032,  3038,  3043,  3048,  3053,  3059,  3064,
+    3069,  3074,  3080,  3085,  3090,  3095,  3101,  3106,  3111,  3116,
+    3122,  3127,  3132,  3137,  3143,  3148,  3153,  3158,  3164,  3169,
+    3174,  3179,  3185,  3190,  3195,  3200,  3206,  3211,  3216,  3221,
+    3227,  3232,  3237,  3242,  3248,  3253,  3258,  3263,  3269,  3274,
+    3279,  3284,  3290,  3295,  3300,  3305,  3311,  3316,  3321,  3326,
+    3331,  3336,  3341,  3346,  3351,  3356,  3361,  3366,  3371,  3376,
+    3381,  3386,  3391,  3396,  3401,  3406,  3411,  3416,  3421,  3426,
+    3431,  3437,  3443,  3449,  3455,  3461,  3467,  3473,  3480,  3487,
+    3493,  3499,  3505,  3511,  3518,  3525,  3532,  3539,  3544,  3549,
+    3553,  3557,  3561,  3566,  3582,  3587,  3592,  3600,  3600,  3617,
+    3617,  3627,  3630,  3643,  3665,  3692,  3696,  3702,  3707,  3718,
+    3721,  3727,  3733,  3742,  3745,  3751,  3755,  3756,  3762,  3763,
+    3764,  3765,  3766,  3767,  3768,  3769,  3773,  3781,  3782,  3786,
+    3782,  3800,  3801,  3805,  3805,  3812,  3812,  3826,  3829,  3839,
+    3847,  3858,  3859,  3863,  3866,  3873,  3880,  3884,  3892,  3896,
+    3909,  3912,  3919,  3919,  3939,  3942,  3948,  3960,  3972,  3975,
+    3983,  3983,  3998,  3998,  4016,  4016,  4037,  4040,  4046,  4049,
+    4055,  4059,  4066,  4071,  4076,  4083,  4086,  4090,  4094,  4098,
+    4107,  4111,  4120,  4123,  4126,  4134,  4134,  4176,  4181,  4184,
+    4189,  4192,  4197,  4200,  4205,  4208,  4213,  4216,  4221,  4224,
+    4229,  4233,  4238,  4242,  4247,  4251,  4258,  4261,  4266,  4269,
+    4272,  4275,  4278,  4283,  4292,  4303,  4308,  4316,  4320,  4325,
+    4329,  4334,  4338,  4343,  4347,  4354,  4357,  4362,  4365,  4368,
+    4371,  4376,  4379,  4384,  4390,  4393,  4396,  4399,  4404,  4408,
+    4413,  4417,  4422,  4426,  4433,  4436,  4441,  4444,  4449,  4452,
+    4458,  4461,  4466,  4469
 };
 #endif
 
@@ -1283,16 +1280,16 @@
   "F64MAT2X4", "F64MAT3X2", "F64MAT3X3", "F64MAT3X4", "F64MAT4X2",
   "F64MAT4X3", "F64MAT4X4", "ATOMIC_UINT", "ACCSTRUCTNV", "ACCSTRUCTEXT",
   "RAYQUERYEXT", "FCOOPMATNV", "ICOOPMATNV", "UCOOPMATNV", "COOPMAT",
-  "HITOBJECTNV", "HITOBJECTATTRNV", "SAMPLERCUBEARRAY",
-  "SAMPLERCUBEARRAYSHADOW", "ISAMPLERCUBEARRAY", "USAMPLERCUBEARRAY",
-  "SAMPLER1D", "SAMPLER1DARRAY", "SAMPLER1DARRAYSHADOW", "ISAMPLER1D",
-  "SAMPLER1DSHADOW", "SAMPLER2DRECT", "SAMPLER2DRECTSHADOW",
-  "ISAMPLER2DRECT", "USAMPLER2DRECT", "SAMPLERBUFFER", "ISAMPLERBUFFER",
-  "USAMPLERBUFFER", "SAMPLER2DMS", "ISAMPLER2DMS", "USAMPLER2DMS",
-  "SAMPLER2DMSARRAY", "ISAMPLER2DMSARRAY", "USAMPLER2DMSARRAY",
-  "SAMPLEREXTERNALOES", "SAMPLEREXTERNAL2DY2YEXT", "ISAMPLER1DARRAY",
-  "USAMPLER1D", "USAMPLER1DARRAY", "F16SAMPLER1D", "F16SAMPLER2D",
-  "F16SAMPLER3D", "F16SAMPLER2DRECT", "F16SAMPLERCUBE",
+  "HITOBJECTNV", "HITOBJECTATTRNV", "TENSORLAYOUTNV", "TENSORVIEWNV",
+  "SAMPLERCUBEARRAY", "SAMPLERCUBEARRAYSHADOW", "ISAMPLERCUBEARRAY",
+  "USAMPLERCUBEARRAY", "SAMPLER1D", "SAMPLER1DARRAY",
+  "SAMPLER1DARRAYSHADOW", "ISAMPLER1D", "SAMPLER1DSHADOW", "SAMPLER2DRECT",
+  "SAMPLER2DRECTSHADOW", "ISAMPLER2DRECT", "USAMPLER2DRECT",
+  "SAMPLERBUFFER", "ISAMPLERBUFFER", "USAMPLERBUFFER", "SAMPLER2DMS",
+  "ISAMPLER2DMS", "USAMPLER2DMS", "SAMPLER2DMSARRAY", "ISAMPLER2DMSARRAY",
+  "USAMPLER2DMSARRAY", "SAMPLEREXTERNALOES", "SAMPLEREXTERNAL2DY2YEXT",
+  "ISAMPLER1DARRAY", "USAMPLER1D", "USAMPLER1DARRAY", "F16SAMPLER1D",
+  "F16SAMPLER2D", "F16SAMPLER3D", "F16SAMPLER2DRECT", "F16SAMPLERCUBE",
   "F16SAMPLER1DARRAY", "F16SAMPLER2DARRAY", "F16SAMPLERCUBEARRAY",
   "F16SAMPLERBUFFER", "F16SAMPLER2DMS", "F16SAMPLER2DMSARRAY",
   "F16SAMPLER1DSHADOW", "F16SAMPLER2DSHADOW", "F16SAMPLER1DARRAYSHADOW",
@@ -1347,8 +1344,8 @@
   "TILEIMAGEEXT", "FLAT", "SMOOTH", "LAYOUT", "DOUBLECONSTANT",
   "INT16CONSTANT", "UINT16CONSTANT", "FLOAT16CONSTANT", "INT32CONSTANT",
   "UINT32CONSTANT", "INT64CONSTANT", "UINT64CONSTANT", "SUBROUTINE",
-  "DEMOTE", "PAYLOADNV", "PAYLOADINNV", "HITATTRNV", "CALLDATANV",
-  "CALLDATAINNV", "PAYLOADEXT", "PAYLOADINEXT", "HITATTREXT",
+  "DEMOTE", "FUNCTION", "PAYLOADNV", "PAYLOADINNV", "HITATTRNV",
+  "CALLDATANV", "CALLDATAINNV", "PAYLOADEXT", "PAYLOADINEXT", "HITATTREXT",
   "CALLDATAEXT", "CALLDATAINEXT", "PATCH", "SAMPLE", "NONUNIFORM",
   "COHERENT", "VOLATILE", "RESTRICT", "READONLY", "WRITEONLY",
   "DEVICECOHERENT", "QUEUEFAMILYCOHERENT", "WORKGROUPCOHERENT",
@@ -1414,12 +1411,12 @@
 }
 #endif
 
-#define YYPACT_NINF (-872)
+#define YYPACT_NINF (-875)
 
 #define yypact_value_is_default(Yyn) \
   ((Yyn) == YYPACT_NINF)
 
-#define YYTABLE_NINF (-695)
+#define YYTABLE_NINF (-698)
 
 #define yytable_value_is_error(Yyn) \
   0
@@ -1428,101 +1425,101 @@
    STATE-NUM.  */
 static const yytype_int16 yypact[] =
 {
-    4648,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
-    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
-    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
-    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
-    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
-    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
-    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
-    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
-    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
-    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
-    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
-    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
-    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
-    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
-    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
-    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
-    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
-    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
-    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
-    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
-    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
-    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
-    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
-    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
-    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
-    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
-    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
-    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
-    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
-    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
-    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
-    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -305,  -301,
-    -289,  -276,  -246,  -238,  -227,  -182,  -872,  -872,  -872,  -872,
-    -872,  -168,  -872,  -872,  -872,  -872,  -872,   -55,  -872,  -872,
-    -872,  -872,  -872,  -319,  -872,  -872,  -872,  -872,  -872,  -872,
-    -872,  -135,  -120,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
-    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
-    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
-    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -327,  -114,
-     -81,  -124,  7882,  -313,  -872,  -101,  -872,  -872,  -872,  -872,
-    5572,  -872,  -872,  -872,  -872,   -94,  -872,  -872,   952,  -872,
-    -872,  7882,   -73,  -872,  -872,  -872,  6034,   -78,  -252,  -250,
-    -216,  -197,  -136,   -78,  -127,   -49, 12303,  -872,   -13,  -346,
-     -39,  -872,  -309,  -872,   -10,    -9,  7882,  -872,  -872,  -872,
-    7882,   -38,   -37,  -872,  -267,  -872,  -236,  -872,  -872, 10983,
-      -2,  -872,  -872,  -872,     3,   -35,  7882,  -872,    -8,    -6,
-      -1,  -872,  -256,  -872,  -255,    -4,     4,     7,     8,  -237,
-      10,    11,    13,    14,    15,    18,  -232,     9,    19,    27,
-    -188,  -872,    -3,  7882,  -872,    20,  -872,  -229,  -872,  -872,
-    -219,  9223,  -872,  -272,  1414,  -872,  -872,  -872,  -872,  -872,
-      -2,  -277,  -872,  9663,  -265,  -872,   -23,  -872,  -112, 10983,
-   10983,  -872, 10983,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
-    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
-    -872,  -872,  -253,  -872,  -872,  -872,    29,  -204, 11423,    28,
-    -872, 10983,  -872,    31,  -321,    17,    -9,    32,  -872,  -325,
-     -78,  -872,     5,  -872,  -330,    33,  -125, 10983,  -123,  -872,
-    -130,  -119,  -146,  -118,    34,  -103,   -78,  -872, 11863,  -872,
-     -74, 10983,    36,   -49,  -872,  7882,    24,  6496,  -872,  7882,
-   10983,  -872,  -346,  -872,    30,  -872,  -872,   -33,  -133,  -105,
-    -303,   -11,   -14,    21,    23,    48,    52,  -316,    41,  -872,
-   10103,  -872,    42,  -872,  -872,    46,    38,    40,  -872,    64,
-      67,    60, 10543,    74, 10983,    68,    65,    69,    70,    73,
-    -167,  -872,  -872,   -47,  -872,  -114,    77,    31,  -872,  -872,
-    -872,  -872,  -872,  1876,  -872,  -872,  -872,  -872,  -872,  -872,
-    -872,  -872,  -872,  5110,    17,  9663,  -261,  8343,  -872,  -872,
-    9663,  7882,  -872,    50,  -872,  -872,  -872,  -203,  -872,  -872,
-   10983,    51,  -872,  -872, 10983,    87,  -872,  -872,  -872, 10983,
-    -872,  -872,  -872,  -312,  -872,  -872,  -200,    80,  -872,  -872,
-    -872,  -872,  -872,  -872,  -199,  -872,  -196,  -872,  -872,  -195,
-      71,  -872,  -872,  -872,  -872,  -169,  -872,  -164,  -872,  -872,
-    -872,  -872,  -872,  -161,  -872,    83,  -872,  -160,    84,  -153,
-      80,  -872,  -278,  -152,  -872,    91,    94,  -872,  -872,    24,
-      -2,   -43,  -872,  -872,  -872,  6958,  -872,  -872,  -872, 10983,
-   10983, 10983, 10983, 10983, 10983, 10983, 10983, 10983, 10983, 10983,
-   10983, 10983, 10983, 10983, 10983, 10983, 10983, 10983,  -872,  -872,
-    -872,    93,  -872,  2338,  -872,  -872,  -872,  2338,  -872, 10983,
-    -872,  -872,   -42, 10983,   -32,  -872,  -872,  -872,  -872,  -872,
-    -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
-    -872, 10983, 10983,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
-    9663,  -872,  -872,   -76,  -872,  7420,  -872,  -872,    96,    95,
-    -872,  -872,  -872,  -872,  -872,  -132,  -131,  -872,  -311,  -872,
-    -330,  -872,  -330,  -872, 10983, 10983,  -872,  -130,  -872,  -130,
-    -872,  -146,  -146,  -872,   101,    34,  -872, 11863,  -872, 10983,
-    -872,  -872,   -41,    17,    24,  -872,  -872,  -872,  -872,  -872,
-     -33,   -33,  -133,  -133,  -105,  -105,  -105,  -105,  -303,  -303,
-     -11,   -14,    21,    23,    48,    52, 10983,  -872,  2338,  4186,
-      59,  3724,  -151,  -872,  -150,  -872,  -872,  -872,  -872,  -872,
-    8783,  -872,  -872,  -872,   105,  -872,    72,  -872,  -149,  -872,
-    -148,  -872,  -141,  -872,  -140,  -872,  -139,  -138,  -872,  -872,
-    -872,   -28,   102,    95,    75,   107,   106,  -872,  -872,  4186,
-     108,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
-    -872,  -872, 10983,  -872,   100,  2800, 10983,  -872,   104,   109,
-      76,   112,  3262,  -872,   113,  -872,  9663,  -872,  -872,  -872,
-    -137, 10983,  2800,   108,  -872,  -872,  2338,  -872,   110,    95,
-    -872,  -872,  2338,   114,  -872,  -872
+    4675,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,
+    -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,
+    -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,
+    -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,
+    -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,
+    -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,
+    -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,
+    -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,
+    -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,
+    -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,
+    -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,
+    -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,
+    -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,
+    -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,
+    -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,
+    -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,
+    -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,
+    -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,
+    -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,
+    -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,
+    -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,
+    -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,
+    -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,
+    -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,
+    -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,
+    -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,
+    -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,
+    -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,
+    -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,
+    -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,
+    -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,
+    -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,
+    -289,  -274,  -235,  -138,  -118,   -95,   -84,   -82,  -875,  -875,
+    -875,  -875,  -875,  -186,  -875,  -875,  -875,  -875,  -875,   -46,
+    -875,  -875,  -875,  -875,  -875,  -320,  -875,  -875,  -875,  -875,
+    -875,  -875,  -875,   -69,   -62,  -875,  -875,  -875,  -875,  -875,
+    -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,
+    -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,
+    -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,
+    -875,  -334,  -164,  -115,   -81,  7930,  -257,  -875,   -54,  -875,
+    -875,  -875,  -875,  5605,  -875,  -875,  -875,  -875,   -51,  -875,
+    -875,   955,  -875,  -875,  7930,   -36,  -875,  -875,  -875,  6070,
+     -52,  -248,  -161,  -149,  -127,  -126,   -52,  -119,   -45, 12381,
+    -875,   -12,  -361,   -43,  -875,  -312,  -875,   -10,    -7,  7930,
+    -875,  -875,  -875,  7930,   -40,   -39,  -875,  -309,  -875,  -258,
+    -875,  -875, 11052,    -4,  -875,  -875,  -875,    -2,   -33,  7930,
+    -875,    -8,    -9,    -1,  -875,  -267,  -875,  -253,     1,     4,
+       5,     7,  -246,     8,    11,    13,    14,    15,    16,  -243,
+      18,    19,    27,  -130,  -875,    -5,  7930,  -875,    20,  -875,
+    -241,  -875,  -875,  -239,  9280,  -875,  -277,  1420,  -875,  -875,
+    -875,  -875,  -875,    -4,  -270,  -875,  9723,  -265,  -875,   -28,
+    -875,   -85, 11052, 11052,  -875, 11052,  -875,  -875,  -875,  -875,
+    -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,
+    -875,  -875,  -875,  -875,  -875,  -259,  -875,  -875,  -875,    29,
+    -238, 11495,    28,  -875, 11052,  -875,    31,  -301,    30,    -7,
+      33,  -875,  -321,   -52,  -875,   -27,  -875,  -304,    32,  -106,
+   11052,  -101,  -875,  -136,  -100,  -165,   -74,    17,   -72,   -52,
+    -875, 11938,  -875,   -70, 11052,    10,   -45,  -875,  7930,    34,
+    6535,  -875,  7930, 11052,  -875,  -361,  -875,    35,  -875,  -875,
+     -29,  -219,  -282,  -310,  -212,   -15,    21,    23,    49,    48,
+    -313,    37,  -875, 10166,  -875,    36,  -875,  -875,    45,    38,
+      39,  -875,    51,    52,    43, 10609,    55, 11052,    57,    65,
+      67,    68,    69,  -157,  -875,  -875,   -42,  -875,  -164,    80,
+      31,  -875,  -875,  -875,  -875,  -875,  1885,  -875,  -875,  -875,
+    -875,  -875,  -875,  -875,  -875,  -875,  5140,    30,  9723,  -264,
+    8394,  -875,  -875,  9723,  7930,  -875,    53,  -875,  -875,  -875,
+    -231,  -875,  -875, 11052,    54,  -875,  -875, 11052,    66,  -875,
+    -875,  -875, 11052,  -875,  -875,  -875,  -328,  -875,  -875,  -227,
+      72,  -875,  -875,  -875,  -875,  -875,  -875,  -218,  -875,  -193,
+    -875,  -875,  -192,    77,  -875,  -875,  -875,  -875,  -184,  -875,
+    -183,  -875,  -875,  -875,  -875,  -875,  -182,  -875,    78,  -875,
+    -181,    81,  -180,    72,  -875,  -315,  -158,  -875,    86,    90,
+    -875,  -875,    34,    -4,   -38,  -875,  -875,  -875,  7000,  -875,
+    -875,  -875, 11052, 11052, 11052, 11052, 11052, 11052, 11052, 11052,
+   11052, 11052, 11052, 11052, 11052, 11052, 11052, 11052, 11052, 11052,
+   11052,  -875,  -875,  -875,    89,  -875,  2350,  -875,  -875,  -875,
+    2350,  -875, 11052,  -875,  -875,   -34, 11052,  -201,  -875,  -875,
+    -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,
+    -875,  -875,  -875,  -875, 11052, 11052,  -875,  -875,  -875,  -875,
+    -875,  -875,  -875,  9723,  -875,  -875,  -177,  -875,  7465,  -875,
+    -875,    94,    92,  -875,  -875,  -875,  -875,  -875,  -129,  -122,
+    -875,  -316,  -875,  -304,  -875,  -304,  -875, 11052, 11052,  -875,
+    -136,  -875,  -136,  -875,  -165,  -165,  -875,   101,    17,  -875,
+   11938,  -875, 11052,  -875,  -875,   -32,    30,    34,  -875,  -875,
+    -875,  -875,  -875,   -29,   -29,  -219,  -219,  -282,  -282,  -282,
+    -282,  -310,  -310,  -212,   -15,    21,    23,    49,    48, 11052,
+    -875,  2350,  4210,    59,  3745,  -156,  -875,  -154,  -875,  -875,
+    -875,  -875,  -875,  8837,  -875,  -875,  -875,   102,  -875,    60,
+    -875,  -153,  -875,  -151,  -875,  -146,  -875,  -144,  -875,  -143,
+    -142,  -875,  -875,  -875,  -114,    99,    92,    70,   104,   107,
+    -875,  -875,  4210,   105,  -875,  -875,  -875,  -875,  -875,  -875,
+    -875,  -875,  -875,  -875,  -875, 11052,  -875,   103,  2815, 11052,
+    -875,    98,   109,    71,   111,  3280,  -875,   112,  -875,  9723,
+    -875,  -875,  -875,  -141, 11052,  2815,   105,  -875,  -875,  2350,
+    -875,   108,    92,  -875,  -875,  2350,   115,  -875,  -875
 };
 
 /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -1546,123 +1543,123 @@
      313,   314,   315,   316,   317,   318,   319,   320,   321,   325,
      326,   327,   328,   329,   330,   331,   332,   333,   337,   338,
      339,   340,   341,   342,   343,   344,   345,   349,   346,   347,
-     348,   533,   534,   535,   536,   538,   182,   361,   362,   385,
-     388,   350,   359,   360,   376,   358,   407,   408,   411,   412,
-     413,   415,   416,   417,   419,   420,   421,   423,   424,   520,
-     521,   384,   386,   387,   363,   364,   365,   409,   366,   370,
-     371,   374,   414,   418,   422,   367,   368,   372,   373,   410,
-     369,   375,   454,   456,   457,   458,   460,   461,   462,   464,
-     465,   466,   468,   469,   470,   472,   473,   474,   476,   477,
-     478,   480,   481,   482,   484,   485,   486,   488,   489,   490,
-     492,   493,   494,   496,   497,   455,   459,   463,   467,   471,
-     479,   483,   487,   475,   491,   495,   498,   499,   500,   501,
-     502,   503,   504,   505,   506,   507,   508,   509,   510,   511,
-     512,   513,   514,   515,   516,   517,   518,   519,   389,   390,
-     391,   425,   434,   436,   430,   435,   437,   438,   440,   441,
-     442,   444,   445,   446,   448,   449,   450,   452,   453,   426,
-     427,   428,   439,   429,   431,   432,   433,   443,   447,   451,
-     525,   526,   529,   530,   531,   532,   527,   528,     0,     0,
-       0,     0,     0,     0,     0,     0,   166,   167,   522,   523,
-     524,     0,   631,   137,   541,   542,   543,     0,   540,   172,
-     170,   171,   169,     0,   221,   173,   175,   176,   174,   139,
-     138,     0,   203,   184,   186,   181,   188,   190,   185,   187,
-     183,   189,   191,   179,   180,   206,   192,   199,   200,   201,
-     202,   193,   194,   195,   196,   197,   198,   140,   141,   143,
-     142,   144,   146,   147,   145,   205,   154,   630,     0,   632,
-       0,   114,   113,     0,   125,   130,   161,   160,   158,   162,
-       0,   155,   157,   163,   135,   216,   159,   539,     0,   627,
-     629,     0,     0,   164,   165,   537,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   546,     0,     0,
-       0,    99,     0,    94,     0,   109,     0,   121,   115,   123,
-       0,   124,     0,    97,   131,   102,     0,   156,   136,     0,
-     209,   215,     1,   628,     0,     0,     0,    96,     0,     0,
-       0,   639,     0,   697,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   637,
-       0,   635,     0,     0,   544,   151,   153,     0,   149,   207,
-       0,     0,   100,     0,     0,   633,   110,   116,   120,   122,
-     118,   126,   117,     0,   132,   105,     0,   103,     0,     0,
-       0,     9,     0,    43,    42,    44,    41,     5,     6,     7,
-       8,     2,    16,    14,    15,    17,    10,    11,    12,    13,
-       3,    18,    37,    20,    25,    26,     0,     0,    30,     0,
-     219,     0,    36,   218,     0,   210,   111,     0,    95,     0,
-       0,   695,     0,   647,     0,     0,     0,     0,     0,   664,
-       0,     0,     0,     0,     0,     0,     0,   689,     0,   662,
-       0,     0,     0,     0,    98,     0,     0,     0,   548,     0,
-       0,   148,     0,   204,     0,   211,    45,    49,    52,    55,
-      60,    63,    65,    67,    69,    71,    73,    75,     0,    34,
-       0,   101,   575,   584,   588,     0,     0,     0,   609,     0,
+     348,   533,   534,   535,   536,   541,   182,   537,   538,   361,
+     362,   385,   388,   350,   359,   360,   376,   358,   407,   408,
+     411,   412,   413,   415,   416,   417,   419,   420,   421,   423,
+     424,   520,   521,   384,   386,   387,   363,   364,   365,   409,
+     366,   370,   371,   374,   414,   418,   422,   367,   368,   372,
+     373,   410,   369,   375,   454,   456,   457,   458,   460,   461,
+     462,   464,   465,   466,   468,   469,   470,   472,   473,   474,
+     476,   477,   478,   480,   481,   482,   484,   485,   486,   488,
+     489,   490,   492,   493,   494,   496,   497,   455,   459,   463,
+     467,   471,   479,   483,   487,   475,   491,   495,   498,   499,
+     500,   501,   502,   503,   504,   505,   506,   507,   508,   509,
+     510,   511,   512,   513,   514,   515,   516,   517,   518,   519,
+     389,   390,   391,   425,   434,   436,   430,   435,   437,   438,
+     440,   441,   442,   444,   445,   446,   448,   449,   450,   452,
+     453,   426,   427,   428,   439,   429,   431,   432,   433,   443,
+     447,   451,   525,   526,   529,   530,   531,   532,   527,   528,
+       0,     0,     0,     0,     0,     0,     0,     0,   166,   167,
+     522,   523,   524,     0,   634,   137,   544,   545,   546,     0,
+     543,   172,   170,   171,   169,     0,   221,   173,   175,   176,
+     174,   139,   138,     0,   203,   539,   184,   186,   181,   188,
+     190,   185,   187,   183,   189,   191,   179,   180,   206,   192,
+     199,   200,   201,   202,   193,   194,   195,   196,   197,   198,
+     140,   141,   143,   142,   144,   146,   147,   145,   205,   154,
+     633,     0,   635,     0,   114,   113,     0,   125,   130,   161,
+     160,   158,   162,     0,   155,   157,   163,   135,   216,   159,
+     542,     0,   630,   632,     0,     0,   164,   165,   540,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      45,    78,    91,     0,   562,     0,   163,   135,   565,   586,
-     564,   572,   563,     0,   566,   567,   590,   568,   597,   569,
-     570,   605,   571,     0,   119,     0,   127,     0,   556,   134,
-       0,     0,   107,     0,   104,    38,    39,     0,    22,    23,
-       0,     0,    28,    27,     0,   221,    31,    33,    40,     0,
-     217,   112,   699,     0,   700,   640,     0,     0,   698,   659,
-     655,   656,   657,   658,     0,   653,     0,    93,   660,     0,
-       0,   674,   675,   676,   677,     0,   672,     0,   681,   682,
-     683,   684,   680,     0,   678,     0,   685,     0,     0,     0,
-       2,   693,   216,     0,   691,     0,     0,   634,   636,     0,
-     554,     0,   552,   547,   549,     0,   152,   150,   208,     0,
+     549,     0,     0,     0,    99,     0,    94,     0,   109,     0,
+     121,   115,   123,     0,   124,     0,    97,   131,   102,     0,
+     156,   136,     0,   209,   215,     1,   631,     0,     0,     0,
+      96,     0,     0,     0,   642,     0,   700,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,    76,   212,
-     213,     0,   574,     0,   607,   620,   619,     0,   611,     0,
-     623,   621,     0,     0,     0,   604,   624,   625,   626,   573,
-      81,    82,    84,    83,    86,    87,    88,    89,    90,    85,
-      80,     0,     0,   589,   585,   587,   591,   598,   606,   129,
-       0,   559,   560,     0,   133,     0,   108,     4,     0,    24,
-      21,    32,   220,   643,   645,     0,     0,   696,     0,   649,
-       0,   648,     0,   651,     0,     0,   666,     0,   665,     0,
-     668,     0,     0,   670,     0,     0,   690,     0,   687,     0,
-     663,   638,     0,   555,     0,   550,   545,    46,    47,    48,
-      51,    50,    53,    54,    58,    59,    56,    57,    61,    62,
-      64,    66,    68,    70,    72,    74,     0,   214,   576,     0,
-       0,     0,     0,   622,     0,   603,    79,    92,   128,   557,
-       0,   106,    19,   641,     0,   642,     0,   654,     0,   661,
-       0,   673,     0,   679,     0,   686,     0,     0,   692,   551,
-     553,     0,     0,   595,     0,     0,     0,   614,   613,   616,
-     582,   599,   558,   561,   644,   646,   650,   652,   667,   669,
-     671,   688,     0,   577,     0,     0,     0,   615,     0,     0,
-     594,     0,     0,   592,     0,    77,     0,   579,   608,   578,
-       0,   617,     0,   582,   581,   583,   601,   596,     0,   618,
-     612,   593,   602,     0,   610,   600
+       0,     0,   640,     0,   638,     0,     0,   547,   151,   153,
+       0,   149,   207,     0,     0,   100,     0,     0,   636,   110,
+     116,   120,   122,   118,   126,   117,     0,   132,   105,     0,
+     103,     0,     0,     0,     9,     0,    43,    42,    44,    41,
+       5,     6,     7,     8,     2,    16,    14,    15,    17,    10,
+      11,    12,    13,     3,    18,    37,    20,    25,    26,     0,
+       0,    30,     0,   219,     0,    36,   218,     0,   210,   111,
+       0,    95,     0,     0,   698,     0,   650,     0,     0,     0,
+       0,     0,   667,     0,     0,     0,     0,     0,     0,     0,
+     692,     0,   665,     0,     0,     0,     0,    98,     0,     0,
+       0,   551,     0,     0,   148,     0,   204,     0,   211,    45,
+      49,    52,    55,    60,    63,    65,    67,    69,    71,    73,
+      75,     0,    34,     0,   101,   578,   587,   591,     0,     0,
+       0,   612,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,    45,    78,    91,     0,   565,     0,   163,
+     135,   568,   589,   567,   575,   566,     0,   569,   570,   593,
+     571,   600,   572,   573,   608,   574,     0,   119,     0,   127,
+       0,   559,   134,     0,     0,   107,     0,   104,    38,    39,
+       0,    22,    23,     0,     0,    28,    27,     0,   221,    31,
+      33,    40,     0,   217,   112,   702,     0,   703,   643,     0,
+       0,   701,   662,   658,   659,   660,   661,     0,   656,     0,
+      93,   663,     0,     0,   677,   678,   679,   680,     0,   675,
+       0,   684,   685,   686,   687,   683,     0,   681,     0,   688,
+       0,     0,     0,     2,   696,   216,     0,   694,     0,     0,
+     637,   639,     0,   557,     0,   555,   550,   552,     0,   152,
+     150,   208,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,    76,   212,   213,     0,   577,     0,   610,   623,   622,
+       0,   614,     0,   626,   624,     0,     0,     0,   607,   627,
+     628,   629,   576,    81,    82,    84,    83,    86,    87,    88,
+      89,    90,    85,    80,     0,     0,   592,   588,   590,   594,
+     601,   609,   129,     0,   562,   563,     0,   133,     0,   108,
+       4,     0,    24,    21,    32,   220,   646,   648,     0,     0,
+     699,     0,   652,     0,   651,     0,   654,     0,     0,   669,
+       0,   668,     0,   671,     0,     0,   673,     0,     0,   693,
+       0,   690,     0,   666,   641,     0,   558,     0,   553,   548,
+      46,    47,    48,    51,    50,    53,    54,    58,    59,    56,
+      57,    61,    62,    64,    66,    68,    70,    72,    74,     0,
+     214,   579,     0,     0,     0,     0,   625,     0,   606,    79,
+      92,   128,   560,     0,   106,    19,   644,     0,   645,     0,
+     657,     0,   664,     0,   676,     0,   682,     0,   689,     0,
+       0,   695,   554,   556,     0,     0,   598,     0,     0,     0,
+     617,   616,   619,   585,   602,   561,   564,   647,   649,   653,
+     655,   670,   672,   674,   691,     0,   580,     0,     0,     0,
+     618,     0,     0,   597,     0,     0,   595,     0,    77,     0,
+     582,   611,   581,     0,   620,     0,   585,   584,   586,   604,
+     599,     0,   621,   615,   596,   605,     0,   613,   603
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -872,  -544,  -872,  -872,  -872,  -872,  -872,  -872,  -872,  -872,
-    -872,  -872,  -436,  -872,  -392,  -391,  -490,  -390,  -269,  -266,
-    -268,  -264,  -262,  -260,  -872,  -482,  -872,  -499,  -872,  -492,
-    -534,     6,  -872,  -872,  -872,     1,  -403,  -872,  -872,    45,
-      44,    49,  -872,  -872,  -406,  -872,  -872,  -872,  -872,  -104,
-    -872,  -389,  -375,  -872,    12,  -872,     0,  -433,  -872,  -872,
-    -872,  -553,   145,  -872,  -872,  -872,  -560,  -556,  -233,  -344,
-    -614,  -872,  -373,  -626,  -871,  -872,  -430,  -872,  -872,  -440,
-    -437,  -872,  -872,    63,  -737,  -363,  -872,  -144,  -872,  -399,
-    -872,  -142,  -872,  -872,  -872,  -872,  -134,  -872,  -872,  -872,
-    -872,  -872,  -872,  -872,  -872,    97,  -872,  -872,     2,  -872,
-     -71,  -308,  -416,  -872,  -872,  -872,  -304,  -307,  -302,  -872,
-    -872,  -315,  -310,  -306,  -300,  -314,  -872,  -299,  -317,  -872,
-    -395,  -538
+    -875,  -548,  -875,  -875,  -875,  -875,  -875,  -875,  -875,  -875,
+    -875,  -875,  -436,  -875,  -478,  -469,  -493,  -397,  -275,  -272,
+    -269,  -268,  -262,  -271,  -875,  -490,  -875,  -499,  -875,  -501,
+    -537,     9,  -875,  -875,  -875,     6,  -401,  -875,  -875,    40,
+      42,    41,  -875,  -875,  -409,  -875,  -875,  -875,  -875,  -103,
+    -875,  -394,  -379,  -875,    12,  -875,     0,  -432,  -875,  -875,
+    -875,  -560,   146,  -875,  -875,  -875,  -555,  -558,  -234,  -348,
+    -614,  -875,  -374,  -628,  -874,  -875,  -433,  -875,  -875,  -443,
+    -442,  -875,  -875,    58,  -738,  -368,  -875,  -147,  -875,  -402,
+    -875,  -145,  -875,  -875,  -875,  -875,  -140,  -875,  -875,  -875,
+    -875,  -875,  -875,  -875,  -875,    91,  -875,  -875,     2,  -875,
+     -73,  -266,  -425,  -875,  -875,  -875,  -311,  -308,  -307,  -875,
+    -875,  -306,  -305,  -318,  -314,  -303,  -875,  -317,  -302,  -875,
+    -400,  -552
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-       0,   530,   531,   532,   798,   533,   534,   535,   536,   537,
-     538,   539,   620,   541,   587,   588,   589,   590,   591,   592,
-     593,   594,   595,   596,   597,   621,   856,   622,   781,   623,
-     711,   624,   388,   651,   508,   625,   390,   391,   392,   437,
-     438,   439,   393,   394,   395,   396,   397,   398,   487,   488,
-     399,   400,   401,   402,   542,   490,   599,   493,   450,   451,
-     544,   405,   406,   407,   579,   483,   577,   578,   721,   722,
-     649,   793,   628,   629,   630,   631,   632,   753,   892,   928,
-     920,   921,   922,   929,   633,   634,   635,   636,   923,   895,
-     637,   638,   924,   943,   639,   640,   641,   859,   757,   861,
-     899,   918,   919,   642,   408,   409,   410,   434,   643,   480,
-     481,   460,   461,   805,   806,   412,   684,   685,   689,   413,
-     414,   695,   696,   703,   704,   707,   415,   713,   714,   416,
-     462,   463
+       0,   533,   534,   535,   801,   536,   537,   538,   539,   540,
+     541,   542,   623,   544,   590,   591,   592,   593,   594,   595,
+     596,   597,   598,   599,   600,   624,   859,   625,   784,   626,
+     714,   627,   391,   654,   511,   628,   393,   394,   395,   440,
+     441,   442,   396,   397,   398,   399,   400,   401,   490,   491,
+     402,   403,   404,   405,   545,   493,   602,   496,   453,   454,
+     547,   408,   409,   410,   582,   486,   580,   581,   724,   725,
+     652,   796,   631,   632,   633,   634,   635,   756,   895,   931,
+     923,   924,   925,   932,   636,   637,   638,   639,   926,   898,
+     640,   641,   927,   946,   642,   643,   644,   862,   760,   864,
+     902,   921,   922,   645,   411,   412,   413,   437,   646,   483,
+     484,   463,   464,   808,   809,   415,   687,   688,   692,   416,
+     417,   698,   699,   706,   707,   710,   418,   716,   717,   419,
+     465,   466
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM.  If
@@ -1670,287 +1667,149 @@
    number is the opposite.  If YYTABLE_NINF, syntax error.  */
 static const yytype_int16 yytable[] =
 {
-     404,   389,   411,   440,   648,   455,   387,   785,   454,   598,
-     455,   504,   403,   540,   678,   712,   858,   545,   702,   725,
-     657,   724,   456,   688,   679,   447,   747,   456,   476,   672,
-     678,   789,   673,   792,   736,   737,   794,   716,   431,   666,
-     427,   669,   803,   672,   927,   485,   726,   440,   491,   442,
-     417,   935,   443,   670,   418,   586,   492,   680,   681,   682,
-     683,   927,   748,   674,   432,   447,   419,   644,   646,   486,
-     738,   739,   428,   655,   656,   687,   804,   674,  -694,   420,
-     491,   447,   658,   659,  -694,   600,   687,   645,   502,   687,
-     491,   795,   600,   601,   575,   449,   600,   503,   687,   650,
-     551,   553,   -35,   790,   660,   668,   552,   554,   661,   421,
-     466,   468,   470,   472,   474,   475,   478,   422,   751,   559,
-     762,   586,   764,   505,   567,   560,   506,   581,   423,   507,
-     568,   860,   586,   582,   675,   586,   464,   583,   467,   465,
-     675,   465,   675,   584,   586,   675,   648,   675,   648,   675,
-     675,   648,   663,   797,   675,   676,   807,   809,   664,   782,
-     811,   813,   552,   810,   586,   801,   812,   814,   799,   724,
-     572,   709,   469,   424,   573,   465,   868,   770,   771,   772,
-     773,   774,   775,   776,   777,   778,   779,   816,   575,   425,
-     575,   471,   818,   817,   465,   820,   823,   780,   819,   942,
-     447,   821,   824,   826,   828,   900,   901,   906,   907,   827,
-     829,   782,   782,   810,   814,   908,   909,   910,   911,   938,
-     429,   817,   821,   824,   829,   782,   873,   875,   734,   735,
-     874,   876,   785,   802,   732,   430,   733,   455,   436,   724,
-     454,   698,   699,   700,   701,   521,   844,   845,   846,   847,
-     653,   433,   473,   654,   456,   465,   903,   691,   692,   693,
-     694,   477,   575,   686,   465,   690,   465,   862,   465,   697,
-     705,   864,   465,   465,   712,   435,   712,   702,   702,   449,
-     879,   688,   866,   867,   869,   708,   870,   833,   465,   678,
-     444,   648,   457,   837,   838,   839,   586,   586,   586,   586,
-     586,   586,   586,   586,   586,   586,   586,   586,   586,   586,
-     586,   586,   937,   459,   715,   782,   785,   465,   783,   834,
-     782,   834,   835,   863,   889,   334,   335,   336,   740,   741,
-     782,   865,   687,   687,   782,   912,   575,   729,   730,   731,
-     840,   841,   479,   842,   843,   687,   484,   687,   331,   494,
-     848,   849,   489,   500,   501,   491,   547,   548,   549,   546,
-     555,   550,   574,   742,   891,   569,   556,   893,   652,   557,
-     558,   648,   561,   562,   600,   563,   564,   565,   586,   586,
-     566,   570,   571,   667,   580,   662,   -34,   502,   706,   745,
-     673,   586,   441,   586,   717,   746,   677,   743,   744,   749,
-     448,   754,   752,   755,   403,   756,   575,   893,   404,   389,
-     411,   404,   403,   925,   387,   720,   404,   458,   411,   758,
-     403,   728,   759,   403,   930,   760,   482,   648,   403,   763,
-     766,   765,   -36,   815,   767,   768,   441,   496,   769,   939,
-     441,   796,   800,   -29,   808,   822,   825,   830,   403,   543,
-     831,   857,   403,   894,   872,   885,   448,   782,   896,   904,
-     905,   916,   913,   915,   926,   932,   914,  -580,   403,   931,
-     456,   602,   936,   850,   945,   944,   852,   851,   727,   933,
-     497,   853,   426,   576,   854,   498,   832,   855,   897,   499,
-     890,   934,   940,   894,   627,   403,   941,   495,   898,   786,
-     917,   787,   718,   877,   882,   453,   626,   881,   878,   788,
-     456,   886,   888,   880,     0,     0,   884,     0,     0,     0,
-       0,   883,     0,     0,     0,     0,     0,     0,   887,     0,
+     407,   443,   414,   681,   601,   458,   392,   651,   788,   390,
+     458,   715,   406,   457,   660,   507,   543,   705,   861,   681,
+     459,   548,   727,   691,   450,   459,   479,   728,   806,   739,
+     740,   750,   488,   434,   792,   675,   795,   719,   676,   797,
+     675,   430,   669,  -697,   930,   443,   729,   494,   505,  -697,
+     494,   938,   682,   737,   738,   495,   489,   506,   589,   435,
+     452,   930,   807,   672,   450,   741,   742,   751,   420,   677,
+     690,   647,   649,   431,   677,   673,   658,   659,   661,   662,
+     450,   690,   603,   421,   690,   683,   684,   685,   686,   494,
+     604,   554,   578,   690,   603,   603,   648,   555,   -35,   798,
+     663,   653,   793,   508,   664,   556,   509,   445,   671,   510,
+     446,   557,   562,   754,   765,   570,   767,   584,   563,   586,
+     666,   571,   422,   585,   589,   587,   667,   800,   678,   743,
+     744,   810,   863,   785,   678,   589,   678,   555,   589,   678,
+     812,   678,   467,   678,   678,   468,   813,   589,   678,   651,
+     735,   651,   736,   679,   651,   469,   471,   473,   475,   477,
+     478,   481,   802,   785,   868,   814,   816,   589,   804,   712,
+     727,   815,   817,   428,   819,   821,   823,   826,   829,   871,
+     820,   822,   824,   827,   830,   872,   578,   873,   578,   773,
+     774,   775,   776,   777,   778,   779,   780,   781,   782,   450,
+     831,   945,   903,   436,   904,   909,   832,   910,   785,   783,
+     785,   813,   911,   817,   912,   913,   914,   941,   820,   423,
+     824,   827,   832,   785,   701,   702,   703,   704,   524,   470,
+     575,   876,   468,   788,   576,   877,   805,   458,   878,   424,
+     727,   472,   879,   438,   468,   457,   847,   848,   849,   850,
+     785,   915,   459,   694,   695,   696,   697,   843,   844,   906,
+     578,   865,   425,   474,   476,   867,   468,   468,   845,   846,
+     715,   480,   715,   426,   468,   427,   705,   705,   681,   656,
+     882,   691,   657,   439,   689,   869,   870,   468,   432,   693,
+     700,   836,   468,   468,   651,   433,   840,   841,   842,   589,
+     589,   589,   589,   589,   589,   589,   589,   589,   589,   589,
+     589,   589,   589,   589,   589,   940,   708,   788,   711,   468,
+     718,   468,   785,   468,   452,   786,   837,   690,   690,   838,
+     785,   460,   837,   866,   578,   892,   336,   337,   338,   447,
+     690,   462,   690,   732,   733,   734,   851,   852,   482,   487,
+     492,   497,   333,   503,   504,   494,   549,   552,   894,   551,
+     550,   896,   577,   553,   745,   655,   680,   558,   559,   560,
+     720,   561,   564,   709,   651,   565,   572,   566,   567,   568,
+     569,   589,   589,   573,   574,   670,   583,   665,   -34,   603,
+     505,   676,   748,   749,   589,   444,   589,   752,   755,   746,
+     747,   896,   757,   451,   578,   758,   759,   406,   761,   762,
+     763,   407,   766,   414,   407,   406,   928,   392,   933,   407,
+     390,   414,   768,   406,   -29,   461,   406,   723,   731,   485,
+     651,   406,   769,   942,   770,   771,   772,   -36,   811,   444,
+     499,   818,   825,   444,   833,   828,   799,   803,   834,   860,
+     908,   406,   546,   897,   875,   406,   785,   888,   907,   451,
+     899,   916,   918,   917,   919,   934,  -583,   935,   459,   929,
+     853,   406,   605,   939,   854,   947,   936,   948,   855,   858,
+     856,   500,   730,   501,   502,   429,   579,   857,   835,   893,
+     900,   937,   943,   897,   944,   498,   901,   630,   406,   789,
+     920,   790,   456,   721,   881,   880,   791,   887,   459,   629,
+     886,   883,     0,   890,     0,   884,   885,     0,     0,     0,
+       0,     0,     0,     0,     0,   889,     0,     0,     0,     0,
+     891,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   671,     0,
+       0,   674,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   719,     0,   576,     0,   576,
-       0,     0,     0,     0,     0,     0,     0,   403,     0,   403,
-       0,   403,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   722,     0,
+     579,     0,   579,     0,     0,     0,     0,     0,     0,     0,
+     406,     0,   406,     0,   406,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   627,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   404,     0,   626,     0,     0,     0,     0,
-       0,   576,     0,     0,     0,   403,     0,     0,     0,     0,
-       0,     0,     0,   403,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   630,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   407,     0,   629,     0,
+       0,     0,     0,     0,   579,     0,     0,     0,   406,     0,
+       0,     0,     0,     0,     0,     0,   406,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   576,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   403,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   579,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   627,     0,     0,     0,   627,     0,     0,
-       0,     0,     0,     0,     0,   626,     0,     0,     0,   626,
+     406,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   630,     0,     0,     0,
+     630,     0,     0,     0,     0,     0,     0,     0,   629,     0,
+       0,     0,   629,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   579,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   576,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   403,     0,     0,
+     406,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   627,   627,
-       0,   627,     0,   411,     0,     0,     0,     0,     0,     0,
-     626,   626,     0,   626,     0,     0,     0,     0,     0,     0,
+       0,   630,   630,     0,   630,     0,   414,     0,     0,     0,
+       0,     0,     0,   629,   629,     0,   629,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   627,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   626,     0,     0,     0,   627,     0,     0,     0,     0,
-       0,     0,   627,     0,     0,     0,     0,   626,     0,     0,
-       0,     0,   627,     0,   626,     0,   627,     0,     0,     0,
-       0,     0,   627,     0,   626,     0,     0,     0,   626,     0,
-       0,     0,   452,     0,   626,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   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,     0,     0,     0,     0,     0,
+       0,     0,   630,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   629,     0,     0,     0,   630,     0,
+       0,     0,     0,     0,     0,   630,     0,     0,     0,     0,
+     629,     0,     0,     0,     0,   630,     0,   629,     0,   630,
+       0,     0,     0,     0,     0,   630,     0,   629,     0,     0,
+       0,   629,     0,     0,     0,   455,     0,   629,     1,     2,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
+     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+     193,   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,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   331,
-       0,     0,     0,     0,     0,     0,     0,   332,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   333,   334,   335,   336,   337,     0,     0,     0,     0,
-       0,     0,     0,     0,   338,   339,   340,   341,   342,   343,
-     344,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   345,   346,   347,   348,
-     349,   350,   351,     0,     0,     0,     0,     0,     0,     0,
-       0,   352,     0,   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,     1,     2,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
-     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
-     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
-     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
-     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
-     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
-     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,     0,     0,   509,
-     510,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   511,   512,
-       0,   331,     0,   602,   603,     0,     0,     0,     0,   604,
-     513,   514,   515,   516,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   333,   334,   335,   336,   337,     0,     0,
-       0,   517,   518,   519,   520,   521,   338,   339,   340,   341,
-     342,   343,   344,   605,   606,   607,   608,     0,   609,   610,
-     611,   612,   613,   614,   615,   616,   617,   618,   345,   346,
-     347,   348,   349,   350,   351,   522,   523,   524,   525,   526,
-     527,   528,   529,   352,   619,   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,     1,
-       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
-     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
-     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
-     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
-     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
-     192,   193,   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,     0,
-       0,   509,   510,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   333,     0,     0,     0,     0,     0,
+       0,     0,   334,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   335,   336,   337,   338,
+     339,     0,     0,     0,     0,     0,     0,     0,     0,   340,
+     341,   342,   343,   344,   345,   346,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     511,   512,     0,   331,     0,   602,   784,     0,     0,     0,
-       0,   604,   513,   514,   515,   516,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   333,   334,   335,   336,   337,
-       0,     0,     0,   517,   518,   519,   520,   521,   338,   339,
-     340,   341,   342,   343,   344,   605,   606,   607,   608,     0,
-     609,   610,   611,   612,   613,   614,   615,   616,   617,   618,
-     345,   346,   347,   348,   349,   350,   351,   522,   523,   524,
-     525,   526,   527,   528,   529,   352,   619,   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,     1,     2,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
-      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
-     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
-     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
-     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
-     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
-     190,   191,   192,   193,   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,     0,     0,   509,   510,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   511,   512,     0,   331,     0,   602,     0,     0,
-       0,     0,     0,   604,   513,   514,   515,   516,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   333,   334,   335,
-     336,   337,     0,     0,     0,   517,   518,   519,   520,   521,
-     338,   339,   340,   341,   342,   343,   344,   605,   606,   607,
-     608,     0,   609,   610,   611,   612,   613,   614,   615,   616,
-     617,   618,   345,   346,   347,   348,   349,   350,   351,   522,
-     523,   524,   525,   526,   527,   528,   529,   352,   619,   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,     1,     2,     3,     4,     5,     6,     7,
+       0,   347,   348,   349,   350,   351,   352,   353,     0,     0,
+       0,     0,     0,     0,     0,     0,   354,     0,   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,     1,     2,     3,     4,     5,     6,     7,
        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
       18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
       28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
@@ -1983,72 +1842,677 @@
      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,     0,     0,   509,   510,     0,     0,     0,
+     328,   329,   330,   331,   332,     0,     0,   512,   513,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   511,   512,     0,   331,     0,   494,
-       0,     0,     0,     0,     0,   604,   513,   514,   515,   516,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   333,
-     334,   335,   336,   337,     0,     0,     0,   517,   518,   519,
-     520,   521,   338,   339,   340,   341,   342,   343,   344,   605,
-     606,   607,   608,     0,   609,   610,   611,   612,   613,   614,
-     615,   616,   617,   618,   345,   346,   347,   348,   349,   350,
-     351,   522,   523,   524,   525,   526,   527,   528,   529,   352,
-     619,   353,   354,   355,   356,   357,   358,   359,   360,   361,
+       0,     0,     0,     0,     0,     0,   514,   515,     0,   333,
+       0,   605,   606,     0,     0,     0,     0,   607,   516,   517,
+     518,   519,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   335,   336,   337,   338,   339,     0,     0,     0,   520,
+     521,   522,   523,   524,   340,   341,   342,   343,   344,   345,
+     346,   608,   609,   610,   611,     0,   612,   613,   614,   615,
+     616,   617,   618,   619,   620,   621,   347,   348,   349,   350,
+     351,   352,   353,   525,   526,   527,   528,   529,   530,   531,
+     532,   354,   622,   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,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   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,     0,     0,   509,   510,     0,
+     382,   383,   384,   385,   386,   387,   388,   389,     1,     2,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
+     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+     193,   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,
+       0,     0,   512,   513,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   511,   512,     0,   331,
-       0,     0,     0,     0,     0,     0,     0,   604,   513,   514,
-     515,   516,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   333,   334,   335,   336,   337,     0,     0,     0,   517,
-     518,   519,   520,   521,   338,   339,   340,   341,   342,   343,
-     344,   605,   606,   607,   608,     0,   609,   610,   611,   612,
-     613,   614,   615,   616,   617,   618,   345,   346,   347,   348,
-     349,   350,   351,   522,   523,   524,   525,   526,   527,   528,
-     529,   352,   619,   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,     1,     2,     3,
+       0,   514,   515,     0,   333,     0,   605,   787,     0,     0,
+       0,     0,   607,   516,   517,   518,   519,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   335,   336,   337,   338,
+     339,     0,     0,     0,   520,   521,   522,   523,   524,   340,
+     341,   342,   343,   344,   345,   346,   608,   609,   610,   611,
+       0,   612,   613,   614,   615,   616,   617,   618,   619,   620,
+     621,   347,   348,   349,   350,   351,   352,   353,   525,   526,
+     527,   528,   529,   530,   531,   532,   354,   622,   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,     1,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,   192,   193,   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,     0,     0,   512,   513,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   514,   515,     0,   333,
+       0,   605,     0,     0,     0,     0,     0,   607,   516,   517,
+     518,   519,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   335,   336,   337,   338,   339,     0,     0,     0,   520,
+     521,   522,   523,   524,   340,   341,   342,   343,   344,   345,
+     346,   608,   609,   610,   611,     0,   612,   613,   614,   615,
+     616,   617,   618,   619,   620,   621,   347,   348,   349,   350,
+     351,   352,   353,   525,   526,   527,   528,   529,   530,   531,
+     532,   354,   622,   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,     1,     2,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
+     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+     193,   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,
+       0,     0,   512,   513,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   514,   515,     0,   333,     0,   497,     0,     0,     0,
+       0,     0,   607,   516,   517,   518,   519,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   335,   336,   337,   338,
+     339,     0,     0,     0,   520,   521,   522,   523,   524,   340,
+     341,   342,   343,   344,   345,   346,   608,   609,   610,   611,
+       0,   612,   613,   614,   615,   616,   617,   618,   619,   620,
+     621,   347,   348,   349,   350,   351,   352,   353,   525,   526,
+     527,   528,   529,   530,   531,   532,   354,   622,   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,     1,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,   192,   193,   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,     0,     0,   512,   513,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   514,   515,     0,   333,
+       0,     0,     0,     0,     0,     0,     0,   607,   516,   517,
+     518,   519,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   335,   336,   337,   338,   339,     0,     0,     0,   520,
+     521,   522,   523,   524,   340,   341,   342,   343,   344,   345,
+     346,   608,   609,   610,   611,     0,   612,   613,   614,   615,
+     616,   617,   618,   619,   620,   621,   347,   348,   349,   350,
+     351,   352,   353,   525,   526,   527,   528,   529,   530,   531,
+     532,   354,   622,   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,     1,     2,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
+     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+     193,   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,
+       0,     0,   512,   513,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   514,   515,     0,   333,     0,     0,     0,     0,     0,
+       0,     0,   607,   516,   517,   518,   519,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   335,   336,   337,   338,
+     339,     0,     0,     0,   520,   521,   522,   523,   524,   340,
+     341,   342,   343,   344,   345,   346,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   347,   348,   349,   350,   351,   352,   353,   525,   526,
+     527,   528,   529,   530,   531,   532,   354,     0,   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,     1,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,   192,   193,   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,     0,     0,     0,   323,   324,   325,   326,   327,
+     328,   329,   330,   331,   332,     0,     0,   512,   513,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   514,   515,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   516,   517,
+     518,   519,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   335,   336,   337,   338,     0,     0,     0,     0,   520,
+     521,   522,   523,   524,   340,   341,   342,   343,   344,   345,
+     346,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   347,   348,   349,   350,
+     351,   352,   353,   525,   526,   527,   528,   529,   530,   531,
+     532,   354,     0,   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,     1,     2,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
+     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+     193,   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,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   333,     0,     0,     0,     0,     0,
+       0,     0,   334,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   335,   336,   337,   338,
+     339,     0,     0,     0,     0,     0,     0,     0,     0,   340,
+     341,   342,   343,   344,   345,   346,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   347,   348,   349,   350,   351,   352,   353,     0,     0,
+       0,     0,     0,     0,     0,     0,   354,     0,   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,     1,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,   192,   193,   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,     0,     0,     0,   323,   324,   325,   326,   327,
+     328,   329,   330,   331,   332,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   335,   336,   337,   338,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   340,   341,   342,   343,   344,   345,
+     346,   608,     0,     0,   611,     0,   612,   613,     0,     0,
+     616,     0,     0,     0,     0,     0,   347,   348,   349,   350,
+     351,   352,   353,     0,     0,     0,     0,     0,     0,     0,
+       0,   354,     0,   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,     1,     2,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
+     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+     193,   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,     0,     0,     0,
+     323,   324,   325,   326,   327,   328,   329,   330,   331,   332,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   448,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   335,   336,   337,   338,
+       0,     0,     0,     0,     0,     0,     0,     0,   449,   340,
+     341,   342,   343,   344,   345,   346,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   347,   348,   349,   350,   351,   352,   353,     0,     0,
+       0,     0,     0,     0,     0,     0,   354,     0,   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,     1,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,   192,   193,   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,     0,     0,     0,   323,   324,   325,   326,   327,
+     328,   329,   330,   331,   332,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     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,   335,   336,   337,   338,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   340,   341,   342,   343,   344,   345,
+     346,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   347,   348,   349,   350,
+     351,   352,   353,     0,     0,     0,     0,     0,     0,     0,
+       0,   354,     0,   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,     1,     2,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
+     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+     193,   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,     0,     0,     0,
+     323,   324,   325,   326,   327,   328,   329,   330,   331,   332,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   726,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   335,   336,   337,   338,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   340,
+     341,   342,   343,   344,   345,   346,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   347,   348,   349,   350,   351,   352,   353,     0,     0,
+       0,     0,     0,     0,     0,     0,   354,     0,   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,     1,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,   192,   193,   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,     0,     0,     0,   323,   324,   325,   326,   327,
+     328,   329,   330,   331,   332,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   839,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   335,   336,   337,   338,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   340,   341,   342,   343,   344,   345,
+     346,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   347,   348,   349,   350,
+     351,   352,   353,     0,     0,     0,     0,     0,     0,     0,
+       0,   354,     0,   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,     1,     2,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    98,    99,   100,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
+     113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
+     123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
+     133,   134,   135,   136,   137,   138,   139,   140,   141,   142,
+     143,   144,   145,   146,   147,   148,   149,   150,   151,   152,
+     153,   154,   155,   156,   157,   158,   159,   160,   161,   162,
+     163,   164,   165,   166,   167,   168,   169,   170,   171,   172,
+     173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
+     183,   184,   185,   186,   187,   188,   189,   190,   191,   192,
+     193,   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,     0,     0,     0,
+     323,   324,   325,   326,   327,   328,   329,   330,   331,   332,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   874,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   335,   336,   337,   338,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   340,
+     341,   342,   343,   344,   345,   346,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   347,   348,   349,   350,   351,   352,   353,     0,     0,
+       0,     0,     0,     0,     0,     0,   354,     0,   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,     1,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
+      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
+      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
+     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
+     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
+     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
+     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
+     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
+     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
+     188,   189,   190,   191,   192,   193,   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,     0,     0,     0,   323,   324,   325,   326,   327,
+     328,   329,   330,   331,   332,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   335,   336,   337,   338,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   340,   341,   342,   343,   344,   345,
+     346,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   347,   348,   349,   350,
+     351,   352,   353,     0,     0,     0,     0,     0,     0,     0,
+       0,   354,     0,   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,     2,     3,
        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
       24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
       34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
       44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      54,    55,    56,    57,    58,     0,     0,    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,
@@ -2059,7 +2523,7 @@
      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,
+     164,   165,     0,   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,
@@ -2074,27 +2538,158 @@
      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,     0,     0,   509,
-     510,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   511,   512,
-       0,   331,     0,     0,     0,     0,     0,     0,     0,   604,
-     513,   514,   515,   516,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   333,   334,   335,   336,   337,     0,     0,
-       0,   517,   518,   519,   520,   521,   338,   339,   340,   341,
-     342,   343,   344,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   345,   346,
-     347,   348,   349,   350,   351,   522,   523,   524,   525,   526,
-     527,   528,   529,   352,     0,   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,     1,
+     314,   315,   316,   317,   318,   319,     0,     0,     0,     0,
+       0,     0,   326,     0,     0,     0,   330,   331,   332,     0,
+       0,   512,   513,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     514,   515,     0,     0,     0,   650,   794,     0,     0,     0,
+       0,     0,   516,   517,   518,   519,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   520,   521,   522,   523,   524,   340,     0,
+       0,     0,     0,   345,   346,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   525,   526,   527,
+     528,   529,   530,   531,   532,     0,     0,   355,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     368,     2,     3,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,     0,     0,
+      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,     0,   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,     0,
+       0,     0,     0,     0,     0,   326,     0,     0,     0,   330,
+     331,   332,     0,     0,   512,   513,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   514,   515,     0,     0,     0,   650,   905,
+       0,     0,     0,     0,     0,   516,   517,   518,   519,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   520,   521,   522,   523,
+     524,   340,     0,     0,     0,     0,   345,   346,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     525,   526,   527,   528,   529,   530,   531,   532,     0,     0,
+     355,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   368,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,     0,     0,    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,     0,   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,     0,     0,     0,     0,     0,     0,   326,     0,
+       0,     0,   330,   331,   332,     0,     0,   512,   513,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   514,   515,     0,     0,
+     588,     0,     0,     0,     0,     0,     0,     0,   516,   517,
+     518,   519,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   520,
+     521,   522,   523,   524,   340,     0,     0,     0,     0,   345,
+     346,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   525,   526,   527,   528,   529,   530,   531,
+     532,     0,     0,   355,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   368,     2,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,     0,     0,    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,     0,   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,     0,     0,     0,     0,     0,
+       0,   326,     0,     0,     0,   330,   331,   332,     0,     0,
+     512,   513,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   514,
+     515,     0,     0,     0,   650,     0,     0,     0,     0,     0,
+       0,   516,   517,   518,   519,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   520,   521,   522,   523,   524,   340,     0,     0,
+       0,     0,   345,   346,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   525,   526,   527,   528,
+     529,   530,   531,   532,     0,     0,   355,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   368,
        2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
       22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
       32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
       42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
+      52,    53,    54,    55,    56,    57,    58,     0,     0,    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,
@@ -2105,7 +2700,7 @@
      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,
+     162,   163,   164,   165,     0,   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,
@@ -2120,28 +2715,159 @@
      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,     0,     0,     0,   321,
-     322,   323,   324,   325,   326,   327,   328,   329,   330,     0,
-       0,   509,   510,     0,     0,     0,     0,     0,     0,     0,
+     312,   313,   314,   315,   316,   317,   318,   319,     0,     0,
+       0,     0,     0,     0,   326,     0,     0,     0,   330,   331,
+     332,     0,     0,   512,   513,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     511,   512,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   513,   514,   515,   516,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   333,   334,   335,   336,     0,
-       0,     0,     0,   517,   518,   519,   520,   521,   338,   339,
-     340,   341,   342,   343,   344,     0,     0,     0,     0,     0,
+       0,     0,   514,   515,     0,     0,   753,     0,     0,     0,
+       0,     0,     0,     0,   516,   517,   518,   519,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     345,   346,   347,   348,   349,   350,   351,   522,   523,   524,
-     525,   526,   527,   528,   529,   352,     0,   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,     1,     2,     3,     4,     5,     6,     7,     8,     9,
+       0,     0,     0,     0,     0,   520,   521,   522,   523,   524,
+     340,     0,     0,     0,     0,   345,   346,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   525,
+     526,   527,   528,   529,   530,   531,   532,     0,     0,   355,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   368,     2,     3,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+       0,     0,    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,     0,   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,     0,     0,     0,     0,     0,     0,   326,     0,     0,
+       0,   330,   331,   332,     0,     0,   512,   513,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   514,   515,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   764,   516,   517,   518,
+     519,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   520,   521,
+     522,   523,   524,   340,     0,     0,     0,     0,   345,   346,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   525,   526,   527,   528,   529,   530,   531,   532,
+       0,     0,   355,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   368,     2,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,     0,     0,    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,
+       0,   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,     0,     0,     0,     0,     0,     0,
+     326,     0,     0,     0,   330,   331,   332,     0,     0,   512,
+     513,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   514,   515,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     516,   517,   518,   519,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   520,   521,   522,   523,   524,   340,     0,     0,     0,
+       0,   345,   346,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   525,   526,   527,   528,   529,
+     530,   531,   532,     0,     0,   355,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   368,     2,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,     0,     0,    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,     0,   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,     0,     0,     0,
+       0,     0,     0,   326,     0,     0,     0,   330,   331,   332,
+       0,     0,   512,   513,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   514,   515,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   516,   517,   518,   519,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   520,   521,   522,   523,   524,   340,
+       0,     0,     0,     0,   345,   668,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   525,   526,
+     527,   528,   529,   530,   531,   532,     0,     0,   355,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   368,     2,     3,     4,     5,     6,     7,     8,     9,
       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
       20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
       30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
       40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,     0,
+       0,    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,
@@ -2151,7 +2877,7 @@
      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,
+     160,   161,   162,   163,   164,   165,     0,   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,
@@ -2167,1065 +2893,209 @@
      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,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   326,     0,     0,     0,
+     330,   331,   332,     0,     0,   512,   513,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   331,     0,     0,     0,     0,
-       0,     0,     0,   332,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   333,   334,   335,
-     336,   337,     0,     0,     0,     0,     0,     0,     0,     0,
-     338,   339,   340,   341,   342,   343,   344,     0,     0,     0,
+       0,     0,     0,     0,   514,   515,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   516,   517,   518,   519,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   345,   346,   347,   348,   349,   350,   351,     0,
-       0,     0,     0,     0,     0,     0,     0,   352,     0,   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,     1,     2,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   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,
-       0,     0,     0,   321,   322,   323,   324,   325,   326,   327,
-     328,   329,   330,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,   520,   521,   522,
+     523,   713,   340,     0,     0,     0,     0,   345,   346,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   333,
-     334,   335,   336,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   338,   339,   340,   341,   342,   343,   344,   605,
-       0,     0,   608,     0,   609,   610,     0,     0,   613,     0,
-       0,     0,     0,     0,   345,   346,   347,   348,   349,   350,
-     351,     0,     0,     0,     0,     0,     0,     0,     0,   352,
-       0,   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,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   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,     0,     0,     0,   321,   322,   323,   324,   325,
-     326,   327,   328,   329,   330,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   445,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   333,   334,   335,   336,     0,     0,     0,     0,     0,
-       0,     0,     0,   446,   338,   339,   340,   341,   342,   343,
-     344,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   345,   346,   347,   348,
-     349,   350,   351,     0,     0,     0,     0,     0,     0,     0,
-       0,   352,     0,   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,     1,     2,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
-     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
-     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
-     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
-     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
-     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
-     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,     0,     0,     0,   321,   322,   323,
-     324,   325,   326,   327,   328,   329,   330,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   331,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   333,   334,   335,   336,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   338,   339,   340,   341,
-     342,   343,   344,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   345,   346,
-     347,   348,   349,   350,   351,     0,     0,     0,     0,     0,
-       0,     0,     0,   352,     0,   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,     1,
-       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
-     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
-     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
-     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
-     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
-     192,   193,   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,     0,     0,     0,   321,
-     322,   323,   324,   325,   326,   327,   328,   329,   330,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   723,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   333,   334,   335,   336,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   338,   339,
-     340,   341,   342,   343,   344,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     345,   346,   347,   348,   349,   350,   351,     0,     0,     0,
-       0,     0,     0,     0,     0,   352,     0,   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,     1,     2,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
-      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
-     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
-     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
-     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
-     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
-     190,   191,   192,   193,   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,     0,     0,
-       0,   321,   322,   323,   324,   325,   326,   327,   328,   329,
-     330,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   836,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   333,   334,   335,
-     336,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     338,   339,   340,   341,   342,   343,   344,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   345,   346,   347,   348,   349,   350,   351,     0,
-       0,     0,     0,     0,     0,     0,     0,   352,     0,   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,     1,     2,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   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,
-       0,     0,     0,   321,   322,   323,   324,   325,   326,   327,
-     328,   329,   330,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     871,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   333,
-     334,   335,   336,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   338,   339,   340,   341,   342,   343,   344,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   345,   346,   347,   348,   349,   350,
-     351,     0,     0,     0,     0,     0,     0,     0,     0,   352,
-       0,   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,     1,     2,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   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,     0,     0,     0,   321,   322,   323,   324,   325,
-     326,   327,   328,   329,   330,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   333,   334,   335,   336,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   338,   339,   340,   341,   342,   343,
-     344,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   345,   346,   347,   348,
-     349,   350,   351,     0,     0,     0,     0,     0,     0,     0,
-       0,   352,     0,   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,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,     0,     0,    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,     0,   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,     0,     0,     0,     0,     0,     0,   324,
-       0,     0,     0,   328,   329,   330,     0,     0,   509,   510,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   511,   512,     0,
-       0,     0,   647,   791,     0,     0,     0,     0,     0,   513,
-     514,   515,   516,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     517,   518,   519,   520,   521,   338,     0,     0,     0,     0,
-     343,   344,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   522,   523,   524,   525,   526,   527,
-     528,   529,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   365,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,     0,     0,    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,     0,   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,     0,     0,     0,     0,     0,     0,   324,
-       0,     0,     0,   328,   329,   330,     0,     0,   509,   510,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   511,   512,     0,
-       0,     0,   647,   902,     0,     0,     0,     0,     0,   513,
-     514,   515,   516,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     517,   518,   519,   520,   521,   338,     0,     0,     0,     0,
-     343,   344,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   522,   523,   524,   525,   526,   527,
-     528,   529,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   365,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,     0,     0,    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,     0,   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,     0,     0,     0,     0,     0,     0,   324,
-       0,     0,     0,   328,   329,   330,     0,     0,   509,   510,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   511,   512,     0,
-       0,   585,     0,     0,     0,     0,     0,     0,     0,   513,
-     514,   515,   516,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     517,   518,   519,   520,   521,   338,     0,     0,     0,     0,
-     343,   344,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   522,   523,   524,   525,   526,   527,
-     528,   529,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   365,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,     0,     0,    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,     0,   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,     0,     0,     0,     0,     0,     0,   324,
-       0,     0,     0,   328,   329,   330,     0,     0,   509,   510,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   511,   512,     0,
-       0,     0,   647,     0,     0,     0,     0,     0,     0,   513,
-     514,   515,   516,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     517,   518,   519,   520,   521,   338,     0,     0,     0,     0,
-     343,   344,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   522,   523,   524,   525,   526,   527,
-     528,   529,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   365,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,     0,     0,    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,     0,   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,     0,     0,     0,     0,     0,     0,   324,
-       0,     0,     0,   328,   329,   330,     0,     0,   509,   510,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   511,   512,     0,
-       0,   750,     0,     0,     0,     0,     0,     0,     0,   513,
-     514,   515,   516,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     517,   518,   519,   520,   521,   338,     0,     0,     0,     0,
-     343,   344,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   522,   523,   524,   525,   526,   527,
-     528,   529,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   365,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,     0,     0,    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,     0,   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,     0,     0,     0,     0,     0,     0,   324,
-       0,     0,     0,   328,   329,   330,     0,     0,   509,   510,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   511,   512,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   761,   513,
-     514,   515,   516,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     517,   518,   519,   520,   521,   338,     0,     0,     0,     0,
-     343,   344,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   522,   523,   524,   525,   526,   527,
-     528,   529,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   365,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,     0,     0,    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,     0,   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,     0,     0,     0,     0,     0,     0,   324,
-       0,     0,     0,   328,   329,   330,     0,     0,   509,   510,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   511,   512,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   513,
-     514,   515,   516,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     517,   518,   519,   520,   521,   338,     0,     0,     0,     0,
-     343,   344,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   522,   523,   524,   525,   526,   527,
-     528,   529,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   365,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,     0,     0,    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,     0,   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,     0,     0,     0,     0,     0,     0,   324,
-       0,     0,     0,   328,   329,   330,     0,     0,   509,   510,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   511,   512,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   513,
-     514,   515,   516,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     517,   518,   519,   520,   521,   338,     0,     0,     0,     0,
-     343,   665,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   522,   523,   524,   525,   526,   527,
-     528,   529,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   365,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,     0,     0,    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,     0,   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,     0,     0,     0,     0,     0,     0,   324,
-       0,     0,     0,   328,   329,   330,     0,     0,   509,   510,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   511,   512,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   513,
-     514,   515,   516,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     517,   518,   519,   520,   710,   338,     0,     0,     0,     0,
-     343,   344,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   522,   523,   524,   525,   526,   527,
-     528,   529,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   365,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,     0,     0,    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,     0,   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,     0,     0,     0,     0,     0,     0,   324,
-       0,     0,     0,   328,   329,   330,     0,     0,     0,     0,
+       0,   525,   526,   527,   528,   529,   530,   531,   532,     0,
+       0,   355,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   368,     2,     3,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,     0,     0,    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,     0,
+     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,     0,     0,     0,     0,     0,     0,   326,
+       0,     0,     0,   330,   331,   332,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   338,     0,     0,     0,     0,
-     343,   344
+       0,     0,     0,     0,     0,   340,     0,     0,     0,     0,
+     345,   346,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   355
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,     0,     0,   392,   503,   411,     0,   633,   411,   491,
-     416,   444,     0,   449,   552,   568,   753,   450,   562,   579,
-     512,   577,   411,   557,   354,   400,   342,   416,   423,   354,
-     568,   645,   357,   647,   337,   338,   650,   571,   365,   538,
-     359,   362,   354,   354,   915,   391,   580,   436,   357,   362,
-     355,   922,   365,   374,   355,   491,   365,   387,   388,   389,
-     390,   932,   378,   388,   391,   440,   355,   500,   501,   415,
-     373,   374,   391,   509,   510,   557,   388,   388,   356,   355,
-     357,   456,   335,   336,   362,   357,   568,   364,   355,   571,
-     357,   651,   357,   365,   483,   373,   357,   364,   580,   364,
-     356,   356,   355,   364,   357,   541,   362,   362,   361,   355,
-     418,   419,   420,   421,   422,   423,   424,   355,   600,   356,
-     612,   557,   614,   359,   356,   362,   362,   356,   355,   365,
-     362,   757,   568,   362,   550,   571,   388,   356,   388,   391,
-     556,   391,   558,   362,   580,   561,   645,   563,   647,   565,
-     566,   650,   356,   356,   570,   550,   356,   356,   362,   362,
-     356,   356,   362,   362,   600,   664,   362,   362,   660,   725,
-     358,   566,   388,   355,   362,   391,   790,   344,   345,   346,
-     347,   348,   349,   350,   351,   352,   353,   356,   577,   357,
-     579,   388,   356,   362,   391,   356,   356,   364,   362,   936,
-     575,   362,   362,   356,   356,   356,   356,   356,   356,   362,
-     362,   362,   362,   362,   362,   356,   356,   356,   356,   356,
-     355,   362,   362,   362,   362,   362,   358,   358,   333,   334,
-     362,   362,   858,   669,   367,   355,   369,   643,   362,   795,
-     643,   387,   388,   389,   390,   391,   736,   737,   738,   739,
-     362,   365,   388,   365,   643,   391,   870,   387,   388,   389,
-     390,   388,   651,   388,   391,   388,   391,   759,   391,   388,
-     388,   763,   391,   391,   827,   356,   829,   821,   822,   373,
-     814,   815,   781,   782,   360,   388,   362,   720,   391,   827,
-     391,   790,   365,   729,   730,   731,   732,   733,   734,   735,
+       0,   395,     0,   555,   494,   414,     0,   506,   636,     0,
+     419,   571,     0,   414,   515,   447,   452,   565,   756,   571,
+     414,   453,   580,   560,   403,   419,   426,   582,   356,   339,
+     340,   344,   393,   367,   648,   356,   650,   574,   359,   653,
+     356,   361,   541,   358,   918,   439,   583,   359,   357,   364,
+     359,   925,   356,   335,   336,   367,   417,   366,   494,   393,
+     375,   935,   390,   364,   443,   375,   376,   380,   357,   390,
+     560,   503,   504,   393,   390,   376,   512,   513,   337,   338,
+     459,   571,   359,   357,   574,   389,   390,   391,   392,   359,
+     367,   358,   486,   583,   359,   359,   366,   364,   357,   654,
+     359,   366,   366,   361,   363,   358,   364,   364,   544,   367,
+     367,   364,   358,   603,   615,   358,   617,   358,   364,   358,
+     358,   364,   357,   364,   560,   364,   364,   358,   553,   341,
+     342,   358,   760,   364,   559,   571,   561,   364,   574,   564,
+     358,   566,   390,   568,   569,   393,   364,   583,   573,   648,
+     369,   650,   371,   553,   653,   421,   422,   423,   424,   425,
+     426,   427,   663,   364,   365,   358,   358,   603,   667,   569,
+     728,   364,   364,   359,   358,   358,   358,   358,   358,   793,
+     364,   364,   364,   364,   364,   362,   580,   364,   582,   346,
+     347,   348,   349,   350,   351,   352,   353,   354,   355,   578,
+     358,   939,   358,   367,   358,   358,   364,   358,   364,   366,
+     364,   364,   358,   364,   358,   358,   358,   358,   364,   357,
+     364,   364,   364,   364,   389,   390,   391,   392,   393,   390,
+     360,   360,   393,   861,   364,   364,   672,   646,   360,   357,
+     798,   390,   364,   358,   393,   646,   739,   740,   741,   742,
+     364,   365,   646,   389,   390,   391,   392,   735,   736,   873,
+     654,   762,   357,   390,   390,   766,   393,   393,   737,   738,
+     830,   390,   832,   357,   393,   357,   824,   825,   830,   364,
+     817,   818,   367,   364,   390,   784,   785,   393,   357,   390,
+     390,   723,   393,   393,   793,   357,   732,   733,   734,   735,
      736,   737,   738,   739,   740,   741,   742,   743,   744,   745,
-     746,   747,   926,   391,   388,   362,   942,   391,   365,   362,
-     362,   362,   365,   365,   365,   380,   381,   382,   339,   340,
-     362,   363,   814,   815,   362,   363,   725,   370,   371,   372,
-     732,   733,   391,   734,   735,   827,   359,   829,   357,   359,
-     740,   741,   391,   391,   391,   357,   391,   365,   364,   356,
-     364,   362,   365,   377,   856,   356,   362,   859,   391,   362,
-     362,   870,   362,   362,   357,   362,   362,   362,   814,   815,
-     362,   362,   355,   355,   364,   356,   355,   355,   354,   341,
-     357,   827,   392,   829,   358,   343,   391,   376,   375,   358,
-     400,   355,   360,   365,   392,   365,   795,   899,   408,   408,
-     408,   411,   400,   912,   408,   391,   416,   416,   416,   355,
-     408,   391,   355,   411,   916,   365,   426,   926,   416,   355,
-     365,   363,   355,   362,   365,   365,   436,   435,   365,   931,
-     440,   391,   391,   356,   364,   362,   362,   356,   436,   449,
-     356,   358,   440,   859,   358,   354,   456,   362,   399,   354,
-     388,   355,   360,   356,   364,   356,   391,   359,   456,   365,
-     859,   359,   359,   742,   360,   365,   744,   743,   582,   403,
-     436,   745,   337,   483,   746,   440,   719,   747,   861,   440,
-     834,   921,   932,   899,   494,   483,   933,   434,   861,   643,
-     899,   643,   573,   810,   819,   408,   494,   817,   812,   643,
-     899,   825,   829,   815,    -1,    -1,   822,    -1,    -1,    -1,
-      -1,   821,    -1,    -1,    -1,    -1,    -1,    -1,   827,    -1,
+     746,   747,   748,   749,   750,   929,   390,   945,   390,   393,
+     390,   393,   364,   393,   375,   367,   364,   817,   818,   367,
+     364,   367,   364,   367,   728,   367,   382,   383,   384,   393,
+     830,   393,   832,   372,   373,   374,   743,   744,   393,   361,
+     393,   361,   359,   393,   393,   359,   358,   366,   859,   367,
+     393,   862,   367,   364,   379,   393,   393,   366,   364,   364,
+     360,   364,   364,   356,   873,   364,   358,   364,   364,   364,
+     364,   817,   818,   364,   357,   357,   366,   358,   357,   359,
+     357,   359,   343,   345,   830,   395,   832,   360,   362,   378,
+     377,   902,   357,   403,   798,   367,   367,   395,   357,   357,
+     367,   411,   357,   411,   414,   403,   915,   411,   919,   419,
+     411,   419,   365,   411,   358,   419,   414,   393,   393,   429,
+     929,   419,   367,   934,   367,   367,   367,   357,   366,   439,
+     438,   364,   364,   443,   358,   364,   393,   393,   358,   360,
+     390,   439,   452,   862,   360,   443,   364,   356,   356,   459,
+     401,   362,   358,   393,   357,   367,   361,   358,   862,   366,
+     745,   459,   361,   361,   746,   367,   405,   362,   747,   750,
+     748,   439,   585,   443,   443,   339,   486,   749,   722,   837,
+     864,   924,   935,   902,   936,   437,   864,   497,   486,   646,
+     902,   646,   411,   576,   815,   813,   646,   825,   902,   497,
+     824,   818,    -1,   830,    -1,   820,   822,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   828,    -1,    -1,    -1,    -1,
+     832,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   546,    -1,
+      -1,   549,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   575,    -1,   577,    -1,   579,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   575,    -1,   577,
-      -1,   579,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   578,    -1,
+     580,    -1,   582,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     578,    -1,   580,    -1,   582,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   633,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   643,    -1,   633,    -1,    -1,    -1,    -1,
-      -1,   651,    -1,    -1,    -1,   643,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   651,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   636,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   646,    -1,   636,    -1,
+      -1,    -1,    -1,    -1,   654,    -1,    -1,    -1,   646,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   654,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   725,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   725,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   728,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   753,    -1,    -1,    -1,   757,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   753,    -1,    -1,    -1,   757,
+     728,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   756,    -1,    -1,    -1,
+     760,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   756,    -1,
+      -1,    -1,   760,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   798,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   795,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   795,    -1,    -1,
+     798,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   858,   859,
-      -1,   861,    -1,   861,    -1,    -1,    -1,    -1,    -1,    -1,
-     858,   859,    -1,   861,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   861,   862,    -1,   864,    -1,   864,    -1,    -1,    -1,
+      -1,    -1,    -1,   861,   862,    -1,   864,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   899,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   899,    -1,    -1,    -1,   915,    -1,    -1,    -1,    -1,
-      -1,    -1,   922,    -1,    -1,    -1,    -1,   915,    -1,    -1,
-      -1,    -1,   932,    -1,   922,    -1,   936,    -1,    -1,    -1,
-      -1,    -1,   942,    -1,   932,    -1,    -1,    -1,   936,    -1,
-      -1,    -1,     0,    -1,   942,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   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,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   902,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   902,    -1,    -1,    -1,   918,    -1,
+      -1,    -1,    -1,    -1,    -1,   925,    -1,    -1,    -1,    -1,
+     918,    -1,    -1,    -1,    -1,   935,    -1,   925,    -1,   939,
+      -1,    -1,    -1,    -1,    -1,   945,    -1,   935,    -1,    -1,
+      -1,   939,    -1,    -1,    -1,     0,    -1,   945,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
+     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
+     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
+     185,   186,   187,   188,   189,   190,   191,   192,   193,   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,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   357,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   365,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   379,   380,   381,   382,   383,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   392,   393,   394,   395,   396,   397,
-     398,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   414,   415,   416,   417,
-     418,   419,   420,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   429,    -1,   431,   432,   433,   434,   435,   436,   437,
-     438,   439,   440,   441,   442,   443,   444,   445,   446,   447,
-     448,   449,   450,   451,   452,   453,   454,   455,   456,   457,
-     458,   459,   460,   461,   462,   463,   464,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   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,    -1,    -1,   335,
-     336,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   354,   355,
-      -1,   357,    -1,   359,   360,    -1,    -1,    -1,    -1,   365,
-     366,   367,   368,   369,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   379,   380,   381,   382,   383,    -1,    -1,
-      -1,   387,   388,   389,   390,   391,   392,   393,   394,   395,
-     396,   397,   398,   399,   400,   401,   402,    -1,   404,   405,
-     406,   407,   408,   409,   410,   411,   412,   413,   414,   415,
-     416,   417,   418,   419,   420,   421,   422,   423,   424,   425,
-     426,   427,   428,   429,   430,   431,   432,   433,   434,   435,
-     436,   437,   438,   439,   440,   441,   442,   443,   444,   445,
-     446,   447,   448,   449,   450,   451,   452,   453,   454,   455,
-     456,   457,   458,   459,   460,   461,   462,   463,   464,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
-     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
-     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
-     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
-     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
-     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
-     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,    -1,
-      -1,   335,   336,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   359,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   367,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   381,   382,   383,   384,
+     385,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   394,
+     395,   396,   397,   398,   399,   400,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     354,   355,    -1,   357,    -1,   359,   360,    -1,    -1,    -1,
-      -1,   365,   366,   367,   368,   369,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   379,   380,   381,   382,   383,
-      -1,    -1,    -1,   387,   388,   389,   390,   391,   392,   393,
-     394,   395,   396,   397,   398,   399,   400,   401,   402,    -1,
-     404,   405,   406,   407,   408,   409,   410,   411,   412,   413,
-     414,   415,   416,   417,   418,   419,   420,   421,   422,   423,
-     424,   425,   426,   427,   428,   429,   430,   431,   432,   433,
-     434,   435,   436,   437,   438,   439,   440,   441,   442,   443,
-     444,   445,   446,   447,   448,   449,   450,   451,   452,   453,
-     454,   455,   456,   457,   458,   459,   460,   461,   462,   463,
-     464,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
-     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
-     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
-     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
-     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
-     192,   193,   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,    -1,    -1,   335,   336,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   354,   355,    -1,   357,    -1,   359,    -1,    -1,
-      -1,    -1,    -1,   365,   366,   367,   368,   369,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   379,   380,   381,
-     382,   383,    -1,    -1,    -1,   387,   388,   389,   390,   391,
-     392,   393,   394,   395,   396,   397,   398,   399,   400,   401,
-     402,    -1,   404,   405,   406,   407,   408,   409,   410,   411,
-     412,   413,   414,   415,   416,   417,   418,   419,   420,   421,
-     422,   423,   424,   425,   426,   427,   428,   429,   430,   431,
-     432,   433,   434,   435,   436,   437,   438,   439,   440,   441,
-     442,   443,   444,   445,   446,   447,   448,   449,   450,   451,
-     452,   453,   454,   455,   456,   457,   458,   459,   460,   461,
-     462,   463,   464,     3,     4,     5,     6,     7,     8,     9,
+      -1,   416,   417,   418,   419,   420,   421,   422,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   431,    -1,   433,   434,
+     435,   436,   437,   438,   439,   440,   441,   442,   443,   444,
+     445,   446,   447,   448,   449,   450,   451,   452,   453,   454,
+     455,   456,   457,   458,   459,   460,   461,   462,   463,   464,
+     465,   466,   467,     3,     4,     5,     6,     7,     8,     9,
       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
       20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
       30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
@@ -3258,72 +3128,677 @@
      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,    -1,    -1,   335,   336,    -1,    -1,    -1,
+     330,   331,   332,   333,   334,    -1,    -1,   337,   338,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   354,   355,    -1,   357,    -1,   359,
-      -1,    -1,    -1,    -1,    -1,   365,   366,   367,   368,   369,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   379,
-     380,   381,   382,   383,    -1,    -1,    -1,   387,   388,   389,
+      -1,    -1,    -1,    -1,    -1,    -1,   356,   357,    -1,   359,
+      -1,   361,   362,    -1,    -1,    -1,    -1,   367,   368,   369,
+     370,   371,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   381,   382,   383,   384,   385,    -1,    -1,    -1,   389,
      390,   391,   392,   393,   394,   395,   396,   397,   398,   399,
-     400,   401,   402,    -1,   404,   405,   406,   407,   408,   409,
+     400,   401,   402,   403,   404,    -1,   406,   407,   408,   409,
      410,   411,   412,   413,   414,   415,   416,   417,   418,   419,
      420,   421,   422,   423,   424,   425,   426,   427,   428,   429,
      430,   431,   432,   433,   434,   435,   436,   437,   438,   439,
      440,   441,   442,   443,   444,   445,   446,   447,   448,   449,
      450,   451,   452,   453,   454,   455,   456,   457,   458,   459,
-     460,   461,   462,   463,   464,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   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,    -1,    -1,   335,   336,    -1,
+     460,   461,   462,   463,   464,   465,   466,   467,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
+     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
+     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
+     185,   186,   187,   188,   189,   190,   191,   192,   193,   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,
+      -1,    -1,   337,   338,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   354,   355,    -1,   357,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   365,   366,   367,
-     368,   369,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   379,   380,   381,   382,   383,    -1,    -1,    -1,   387,
-     388,   389,   390,   391,   392,   393,   394,   395,   396,   397,
-     398,   399,   400,   401,   402,    -1,   404,   405,   406,   407,
-     408,   409,   410,   411,   412,   413,   414,   415,   416,   417,
-     418,   419,   420,   421,   422,   423,   424,   425,   426,   427,
-     428,   429,   430,   431,   432,   433,   434,   435,   436,   437,
-     438,   439,   440,   441,   442,   443,   444,   445,   446,   447,
-     448,   449,   450,   451,   452,   453,   454,   455,   456,   457,
-     458,   459,   460,   461,   462,   463,   464,     3,     4,     5,
+      -1,   356,   357,    -1,   359,    -1,   361,   362,    -1,    -1,
+      -1,    -1,   367,   368,   369,   370,   371,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   381,   382,   383,   384,
+     385,    -1,    -1,    -1,   389,   390,   391,   392,   393,   394,
+     395,   396,   397,   398,   399,   400,   401,   402,   403,   404,
+      -1,   406,   407,   408,   409,   410,   411,   412,   413,   414,
+     415,   416,   417,   418,   419,   420,   421,   422,   423,   424,
+     425,   426,   427,   428,   429,   430,   431,   432,   433,   434,
+     435,   436,   437,   438,   439,   440,   441,   442,   443,   444,
+     445,   446,   447,   448,   449,   450,   451,   452,   453,   454,
+     455,   456,   457,   458,   459,   460,   461,   462,   463,   464,
+     465,   466,   467,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   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,    -1,    -1,   337,   338,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   356,   357,    -1,   359,
+      -1,   361,    -1,    -1,    -1,    -1,    -1,   367,   368,   369,
+     370,   371,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   381,   382,   383,   384,   385,    -1,    -1,    -1,   389,
+     390,   391,   392,   393,   394,   395,   396,   397,   398,   399,
+     400,   401,   402,   403,   404,    -1,   406,   407,   408,   409,
+     410,   411,   412,   413,   414,   415,   416,   417,   418,   419,
+     420,   421,   422,   423,   424,   425,   426,   427,   428,   429,
+     430,   431,   432,   433,   434,   435,   436,   437,   438,   439,
+     440,   441,   442,   443,   444,   445,   446,   447,   448,   449,
+     450,   451,   452,   453,   454,   455,   456,   457,   458,   459,
+     460,   461,   462,   463,   464,   465,   466,   467,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
+     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
+     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
+     185,   186,   187,   188,   189,   190,   191,   192,   193,   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,
+      -1,    -1,   337,   338,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   356,   357,    -1,   359,    -1,   361,    -1,    -1,    -1,
+      -1,    -1,   367,   368,   369,   370,   371,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   381,   382,   383,   384,
+     385,    -1,    -1,    -1,   389,   390,   391,   392,   393,   394,
+     395,   396,   397,   398,   399,   400,   401,   402,   403,   404,
+      -1,   406,   407,   408,   409,   410,   411,   412,   413,   414,
+     415,   416,   417,   418,   419,   420,   421,   422,   423,   424,
+     425,   426,   427,   428,   429,   430,   431,   432,   433,   434,
+     435,   436,   437,   438,   439,   440,   441,   442,   443,   444,
+     445,   446,   447,   448,   449,   450,   451,   452,   453,   454,
+     455,   456,   457,   458,   459,   460,   461,   462,   463,   464,
+     465,   466,   467,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   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,    -1,    -1,   337,   338,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   356,   357,    -1,   359,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   367,   368,   369,
+     370,   371,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   381,   382,   383,   384,   385,    -1,    -1,    -1,   389,
+     390,   391,   392,   393,   394,   395,   396,   397,   398,   399,
+     400,   401,   402,   403,   404,    -1,   406,   407,   408,   409,
+     410,   411,   412,   413,   414,   415,   416,   417,   418,   419,
+     420,   421,   422,   423,   424,   425,   426,   427,   428,   429,
+     430,   431,   432,   433,   434,   435,   436,   437,   438,   439,
+     440,   441,   442,   443,   444,   445,   446,   447,   448,   449,
+     450,   451,   452,   453,   454,   455,   456,   457,   458,   459,
+     460,   461,   462,   463,   464,   465,   466,   467,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
+     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
+     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
+     185,   186,   187,   188,   189,   190,   191,   192,   193,   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,
+      -1,    -1,   337,   338,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   356,   357,    -1,   359,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   367,   368,   369,   370,   371,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   381,   382,   383,   384,
+     385,    -1,    -1,    -1,   389,   390,   391,   392,   393,   394,
+     395,   396,   397,   398,   399,   400,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   416,   417,   418,   419,   420,   421,   422,   423,   424,
+     425,   426,   427,   428,   429,   430,   431,    -1,   433,   434,
+     435,   436,   437,   438,   439,   440,   441,   442,   443,   444,
+     445,   446,   447,   448,   449,   450,   451,   452,   453,   454,
+     455,   456,   457,   458,   459,   460,   461,   462,   463,   464,
+     465,   466,   467,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   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,    -1,   325,   326,   327,   328,   329,
+     330,   331,   332,   333,   334,    -1,    -1,   337,   338,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   356,   357,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   368,   369,
+     370,   371,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   381,   382,   383,   384,    -1,    -1,    -1,    -1,   389,
+     390,   391,   392,   393,   394,   395,   396,   397,   398,   399,
+     400,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   416,   417,   418,   419,
+     420,   421,   422,   423,   424,   425,   426,   427,   428,   429,
+     430,   431,    -1,   433,   434,   435,   436,   437,   438,   439,
+     440,   441,   442,   443,   444,   445,   446,   447,   448,   449,
+     450,   451,   452,   453,   454,   455,   456,   457,   458,   459,
+     460,   461,   462,   463,   464,   465,   466,   467,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
+     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
+     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
+     185,   186,   187,   188,   189,   190,   191,   192,   193,   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,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   359,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   367,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   381,   382,   383,   384,
+     385,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   394,
+     395,   396,   397,   398,   399,   400,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   416,   417,   418,   419,   420,   421,   422,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   431,    -1,   433,   434,
+     435,   436,   437,   438,   439,   440,   441,   442,   443,   444,
+     445,   446,   447,   448,   449,   450,   451,   452,   453,   454,
+     455,   456,   457,   458,   459,   460,   461,   462,   463,   464,
+     465,   466,   467,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   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,    -1,   325,   326,   327,   328,   329,
+     330,   331,   332,   333,   334,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   381,   382,   383,   384,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   394,   395,   396,   397,   398,   399,
+     400,   401,    -1,    -1,   404,    -1,   406,   407,    -1,    -1,
+     410,    -1,    -1,    -1,    -1,    -1,   416,   417,   418,   419,
+     420,   421,   422,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   431,    -1,   433,   434,   435,   436,   437,   438,   439,
+     440,   441,   442,   443,   444,   445,   446,   447,   448,   449,
+     450,   451,   452,   453,   454,   455,   456,   457,   458,   459,
+     460,   461,   462,   463,   464,   465,   466,   467,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
+     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
+     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
+     185,   186,   187,   188,   189,   190,   191,   192,   193,   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,    -1,
+     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   367,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   381,   382,   383,   384,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   393,   394,
+     395,   396,   397,   398,   399,   400,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   416,   417,   418,   419,   420,   421,   422,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   431,    -1,   433,   434,
+     435,   436,   437,   438,   439,   440,   441,   442,   443,   444,
+     445,   446,   447,   448,   449,   450,   451,   452,   453,   454,
+     455,   456,   457,   458,   459,   460,   461,   462,   463,   464,
+     465,   466,   467,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   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,    -1,   325,   326,   327,   328,   329,
+     330,   331,   332,   333,   334,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   359,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   381,   382,   383,   384,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   394,   395,   396,   397,   398,   399,
+     400,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   416,   417,   418,   419,
+     420,   421,   422,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   431,    -1,   433,   434,   435,   436,   437,   438,   439,
+     440,   441,   442,   443,   444,   445,   446,   447,   448,   449,
+     450,   451,   452,   453,   454,   455,   456,   457,   458,   459,
+     460,   461,   462,   463,   464,   465,   466,   467,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
+     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
+     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
+     185,   186,   187,   188,   189,   190,   191,   192,   193,   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,    -1,
+     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   362,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   381,   382,   383,   384,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   394,
+     395,   396,   397,   398,   399,   400,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   416,   417,   418,   419,   420,   421,   422,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   431,    -1,   433,   434,
+     435,   436,   437,   438,   439,   440,   441,   442,   443,   444,
+     445,   446,   447,   448,   449,   450,   451,   452,   453,   454,
+     455,   456,   457,   458,   459,   460,   461,   462,   463,   464,
+     465,   466,   467,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   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,    -1,   325,   326,   327,   328,   329,
+     330,   331,   332,   333,   334,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   362,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   381,   382,   383,   384,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   394,   395,   396,   397,   398,   399,
+     400,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   416,   417,   418,   419,
+     420,   421,   422,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   431,    -1,   433,   434,   435,   436,   437,   438,   439,
+     440,   441,   442,   443,   444,   445,   446,   447,   448,   449,
+     450,   451,   452,   453,   454,   455,   456,   457,   458,   459,
+     460,   461,   462,   463,   464,   465,   466,   467,     3,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
+     105,   106,   107,   108,   109,   110,   111,   112,   113,   114,
+     115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
+     125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
+     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
+     145,   146,   147,   148,   149,   150,   151,   152,   153,   154,
+     155,   156,   157,   158,   159,   160,   161,   162,   163,   164,
+     165,   166,   167,   168,   169,   170,   171,   172,   173,   174,
+     175,   176,   177,   178,   179,   180,   181,   182,   183,   184,
+     185,   186,   187,   188,   189,   190,   191,   192,   193,   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,    -1,
+     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   362,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   381,   382,   383,   384,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   394,
+     395,   396,   397,   398,   399,   400,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   416,   417,   418,   419,   420,   421,   422,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   431,    -1,   433,   434,
+     435,   436,   437,   438,   439,   440,   441,   442,   443,   444,
+     445,   446,   447,   448,   449,   450,   451,   452,   453,   454,
+     455,   456,   457,   458,   459,   460,   461,   462,   463,   464,
+     465,   466,   467,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
+     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
+     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
+     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
+     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
+     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
+     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
+     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
+     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
+     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
+     190,   191,   192,   193,   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,    -1,   325,   326,   327,   328,   329,
+     330,   331,   332,   333,   334,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   381,   382,   383,   384,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   394,   395,   396,   397,   398,   399,
+     400,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   416,   417,   418,   419,
+     420,   421,   422,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   431,    -1,   433,   434,   435,   436,   437,   438,   439,
+     440,   441,   442,   443,   444,   445,   446,   447,   448,   449,
+     450,   451,   452,   453,   454,   455,   456,   457,   458,   459,
+     460,   461,   462,   463,   464,   465,   466,   467,     4,     5,
        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
       26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
       36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
       46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
+      56,    57,    58,    59,    60,    -1,    -1,    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,
@@ -3334,7 +3809,7 @@
      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,
+     166,   167,    -1,   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,
@@ -3349,27 +3824,158 @@
      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,    -1,    -1,   335,
-     336,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   354,   355,
-      -1,   357,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   365,
-     366,   367,   368,   369,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   379,   380,   381,   382,   383,    -1,    -1,
-      -1,   387,   388,   389,   390,   391,   392,   393,   394,   395,
-     396,   397,   398,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   414,   415,
-     416,   417,   418,   419,   420,   421,   422,   423,   424,   425,
-     426,   427,   428,   429,    -1,   431,   432,   433,   434,   435,
-     436,   437,   438,   439,   440,   441,   442,   443,   444,   445,
-     446,   447,   448,   449,   450,   451,   452,   453,   454,   455,
-     456,   457,   458,   459,   460,   461,   462,   463,   464,     3,
+     316,   317,   318,   319,   320,   321,    -1,    -1,    -1,    -1,
+      -1,    -1,   328,    -1,    -1,    -1,   332,   333,   334,    -1,
+      -1,   337,   338,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     356,   357,    -1,    -1,    -1,   361,   362,    -1,    -1,    -1,
+      -1,    -1,   368,   369,   370,   371,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   389,   390,   391,   392,   393,   394,    -1,
+      -1,    -1,    -1,   399,   400,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   423,   424,   425,
+     426,   427,   428,   429,   430,    -1,    -1,   433,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     446,     4,     5,     6,     7,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    56,    57,    58,    59,    60,    -1,    -1,
+      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,    -1,   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,    -1,    -1,    -1,    -1,   328,    -1,    -1,    -1,   332,
+     333,   334,    -1,    -1,   337,   338,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   356,   357,    -1,    -1,    -1,   361,   362,
+      -1,    -1,    -1,    -1,    -1,   368,   369,   370,   371,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   389,   390,   391,   392,
+     393,   394,    -1,    -1,    -1,    -1,   399,   400,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     423,   424,   425,   426,   427,   428,   429,   430,    -1,    -1,
+     433,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   446,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      60,    -1,    -1,    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,    -1,   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,    -1,    -1,    -1,    -1,   328,    -1,
+      -1,    -1,   332,   333,   334,    -1,    -1,   337,   338,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   356,   357,    -1,    -1,
+     360,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   368,   369,
+     370,   371,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   389,
+     390,   391,   392,   393,   394,    -1,    -1,    -1,    -1,   399,
+     400,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   423,   424,   425,   426,   427,   428,   429,
+     430,    -1,    -1,   433,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   446,     4,     5,     6,
+       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
+      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
+      57,    58,    59,    60,    -1,    -1,    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,    -1,   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,    -1,    -1,    -1,
+      -1,   328,    -1,    -1,    -1,   332,   333,   334,    -1,    -1,
+     337,   338,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   356,
+     357,    -1,    -1,    -1,   361,    -1,    -1,    -1,    -1,    -1,
+      -1,   368,   369,   370,   371,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   389,   390,   391,   392,   393,   394,    -1,    -1,
+      -1,    -1,   399,   400,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   423,   424,   425,   426,
+     427,   428,   429,   430,    -1,    -1,   433,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   446,
        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
       24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
       34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
       44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+      54,    55,    56,    57,    58,    59,    60,    -1,    -1,    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,
@@ -3380,7 +3986,7 @@
      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,
+     164,   165,   166,   167,    -1,   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,
@@ -3395,28 +4001,159 @@
      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,    -1,    -1,    -1,   323,
-     324,   325,   326,   327,   328,   329,   330,   331,   332,    -1,
-      -1,   335,   336,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     314,   315,   316,   317,   318,   319,   320,   321,    -1,    -1,
+      -1,    -1,    -1,    -1,   328,    -1,    -1,    -1,   332,   333,
+     334,    -1,    -1,   337,   338,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     354,   355,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   366,   367,   368,   369,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   379,   380,   381,   382,    -1,
-      -1,    -1,    -1,   387,   388,   389,   390,   391,   392,   393,
-     394,   395,   396,   397,   398,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   356,   357,    -1,    -1,   360,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   368,   369,   370,   371,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     414,   415,   416,   417,   418,   419,   420,   421,   422,   423,
-     424,   425,   426,   427,   428,   429,    -1,   431,   432,   433,
-     434,   435,   436,   437,   438,   439,   440,   441,   442,   443,
-     444,   445,   446,   447,   448,   449,   450,   451,   452,   453,
-     454,   455,   456,   457,   458,   459,   460,   461,   462,   463,
-     464,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      -1,    -1,    -1,    -1,    -1,   389,   390,   391,   392,   393,
+     394,    -1,    -1,    -1,    -1,   399,   400,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   423,
+     424,   425,   426,   427,   428,   429,   430,    -1,    -1,   433,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   446,     4,     5,     6,     7,     8,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+      41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+      51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+      -1,    -1,    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,    -1,   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,    -1,    -1,    -1,    -1,   328,    -1,    -1,
+      -1,   332,   333,   334,    -1,    -1,   337,   338,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   356,   357,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   367,   368,   369,   370,
+     371,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   389,   390,
+     391,   392,   393,   394,    -1,    -1,    -1,    -1,   399,   400,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   423,   424,   425,   426,   427,   428,   429,   430,
+      -1,    -1,   433,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   446,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    60,    -1,    -1,    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,
+      -1,   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,    -1,    -1,    -1,    -1,
+     328,    -1,    -1,    -1,   332,   333,   334,    -1,    -1,   337,
+     338,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   356,   357,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     368,   369,   370,   371,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   389,   390,   391,   392,   393,   394,    -1,    -1,    -1,
+      -1,   399,   400,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   423,   424,   425,   426,   427,
+     428,   429,   430,    -1,    -1,   433,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   446,     4,
+       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+      35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+      55,    56,    57,    58,    59,    60,    -1,    -1,    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,    -1,   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,    -1,
+      -1,    -1,    -1,   328,    -1,    -1,    -1,   332,   333,   334,
+      -1,    -1,   337,   338,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   356,   357,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   368,   369,   370,   371,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   389,   390,   391,   392,   393,   394,
+      -1,    -1,    -1,    -1,   399,   400,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   423,   424,
+     425,   426,   427,   428,   429,   430,    -1,    -1,   433,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   446,     4,     5,     6,     7,     8,     9,    10,    11,
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
       22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
       32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
       42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
+      52,    53,    54,    55,    56,    57,    58,    59,    60,    -1,
+      -1,    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,
@@ -3426,7 +4163,7 @@
      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,
+     162,   163,   164,   165,   166,   167,    -1,   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,
@@ -3442,780 +4179,62 @@
      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,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   328,    -1,    -1,    -1,
+     332,   333,   334,    -1,    -1,   337,   338,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   357,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   365,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   379,   380,   381,
-     382,   383,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     392,   393,   394,   395,   396,   397,   398,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   356,   357,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   368,   369,   370,   371,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   414,   415,   416,   417,   418,   419,   420,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   429,    -1,   431,
-     432,   433,   434,   435,   436,   437,   438,   439,   440,   441,
-     442,   443,   444,   445,   446,   447,   448,   449,   450,   451,
-     452,   453,   454,   455,   456,   457,   458,   459,   460,   461,
-     462,   463,   464,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
-      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
-     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
-     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
-     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
-     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
-     190,   191,   192,   193,   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,
-      -1,    -1,    -1,   323,   324,   325,   326,   327,   328,   329,
-     330,   331,   332,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   389,   390,   391,
+     392,   393,   394,    -1,    -1,    -1,    -1,   399,   400,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   379,
-     380,   381,   382,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   392,   393,   394,   395,   396,   397,   398,   399,
-      -1,    -1,   402,    -1,   404,   405,    -1,    -1,   408,    -1,
-      -1,    -1,    -1,    -1,   414,   415,   416,   417,   418,   419,
-     420,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   429,
-      -1,   431,   432,   433,   434,   435,   436,   437,   438,   439,
-     440,   441,   442,   443,   444,   445,   446,   447,   448,   449,
-     450,   451,   452,   453,   454,   455,   456,   457,   458,   459,
-     460,   461,   462,   463,   464,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   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,    -1,    -1,    -1,   323,   324,   325,   326,   327,
-     328,   329,   330,   331,   332,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   365,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   379,   380,   381,   382,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   391,   392,   393,   394,   395,   396,   397,
-     398,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   414,   415,   416,   417,
-     418,   419,   420,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   429,    -1,   431,   432,   433,   434,   435,   436,   437,
-     438,   439,   440,   441,   442,   443,   444,   445,   446,   447,
-     448,   449,   450,   451,   452,   453,   454,   455,   456,   457,
-     458,   459,   460,   461,   462,   463,   464,     3,     4,     5,
-       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
-      16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
-      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,    42,    43,    44,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
-      56,    57,    58,    59,    60,    61,    62,    63,    64,    65,
-      66,    67,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    81,    82,    83,    84,    85,
-      86,    87,    88,    89,    90,    91,    92,    93,    94,    95,
-      96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   113,   114,   115,
-     116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
-     126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
-     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
-     146,   147,   148,   149,   150,   151,   152,   153,   154,   155,
-     156,   157,   158,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   170,   171,   172,   173,   174,   175,
-     176,   177,   178,   179,   180,   181,   182,   183,   184,   185,
-     186,   187,   188,   189,   190,   191,   192,   193,   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,    -1,    -1,    -1,   323,   324,   325,
-     326,   327,   328,   329,   330,   331,   332,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   357,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   379,   380,   381,   382,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   392,   393,   394,   395,
-     396,   397,   398,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   414,   415,
-     416,   417,   418,   419,   420,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   429,    -1,   431,   432,   433,   434,   435,
-     436,   437,   438,   439,   440,   441,   442,   443,   444,   445,
-     446,   447,   448,   449,   450,   451,   452,   453,   454,   455,
-     456,   457,   458,   459,   460,   461,   462,   463,   464,     3,
-       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
-      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
-      64,    65,    66,    67,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
-      94,    95,    96,    97,    98,    99,   100,   101,   102,   103,
-     104,   105,   106,   107,   108,   109,   110,   111,   112,   113,
-     114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
-     124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
-     134,   135,   136,   137,   138,   139,   140,   141,   142,   143,
-     144,   145,   146,   147,   148,   149,   150,   151,   152,   153,
-     154,   155,   156,   157,   158,   159,   160,   161,   162,   163,
-     164,   165,   166,   167,   168,   169,   170,   171,   172,   173,
-     174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
-     184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
-     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,    -1,    -1,    -1,   323,
-     324,   325,   326,   327,   328,   329,   330,   331,   332,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   360,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   379,   380,   381,   382,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   392,   393,
-     394,   395,   396,   397,   398,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     414,   415,   416,   417,   418,   419,   420,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   429,    -1,   431,   432,   433,
-     434,   435,   436,   437,   438,   439,   440,   441,   442,   443,
-     444,   445,   446,   447,   448,   449,   450,   451,   452,   453,
-     454,   455,   456,   457,   458,   459,   460,   461,   462,   463,
-     464,     3,     4,     5,     6,     7,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
-      42,    43,    44,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,    55,    56,    57,    58,    59,    60,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    71,
-      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
-      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
-      92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
-     102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
-     112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
-     122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
-     132,   133,   134,   135,   136,   137,   138,   139,   140,   141,
-     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   154,   155,   156,   157,   158,   159,   160,   161,
-     162,   163,   164,   165,   166,   167,   168,   169,   170,   171,
-     172,   173,   174,   175,   176,   177,   178,   179,   180,   181,
-     182,   183,   184,   185,   186,   187,   188,   189,   190,   191,
-     192,   193,   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,    -1,    -1,
-      -1,   323,   324,   325,   326,   327,   328,   329,   330,   331,
-     332,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   360,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   379,   380,   381,
-     382,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     392,   393,   394,   395,   396,   397,   398,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   414,   415,   416,   417,   418,   419,   420,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   429,    -1,   431,
-     432,   433,   434,   435,   436,   437,   438,   439,   440,   441,
-     442,   443,   444,   445,   446,   447,   448,   449,   450,   451,
-     452,   453,   454,   455,   456,   457,   458,   459,   460,   461,
-     462,   463,   464,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
-      60,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
-      90,    91,    92,    93,    94,    95,    96,    97,    98,    99,
-     100,   101,   102,   103,   104,   105,   106,   107,   108,   109,
-     110,   111,   112,   113,   114,   115,   116,   117,   118,   119,
-     120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
-     130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
-     140,   141,   142,   143,   144,   145,   146,   147,   148,   149,
-     150,   151,   152,   153,   154,   155,   156,   157,   158,   159,
-     160,   161,   162,   163,   164,   165,   166,   167,   168,   169,
-     170,   171,   172,   173,   174,   175,   176,   177,   178,   179,
-     180,   181,   182,   183,   184,   185,   186,   187,   188,   189,
-     190,   191,   192,   193,   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,
-      -1,    -1,    -1,   323,   324,   325,   326,   327,   328,   329,
-     330,   331,   332,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     360,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   379,
-     380,   381,   382,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   392,   393,   394,   395,   396,   397,   398,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   414,   415,   416,   417,   418,   419,
-     420,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   429,
-      -1,   431,   432,   433,   434,   435,   436,   437,   438,   439,
-     440,   441,   442,   443,   444,   445,   446,   447,   448,   449,
-     450,   451,   452,   453,   454,   455,   456,   457,   458,   459,
-     460,   461,   462,   463,   464,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
-      58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
-      78,    79,    80,    81,    82,    83,    84,    85,    86,    87,
-      88,    89,    90,    91,    92,    93,    94,    95,    96,    97,
-      98,    99,   100,   101,   102,   103,   104,   105,   106,   107,
-     108,   109,   110,   111,   112,   113,   114,   115,   116,   117,
-     118,   119,   120,   121,   122,   123,   124,   125,   126,   127,
-     128,   129,   130,   131,   132,   133,   134,   135,   136,   137,
-     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
-     148,   149,   150,   151,   152,   153,   154,   155,   156,   157,
-     158,   159,   160,   161,   162,   163,   164,   165,   166,   167,
-     168,   169,   170,   171,   172,   173,   174,   175,   176,   177,
-     178,   179,   180,   181,   182,   183,   184,   185,   186,   187,
-     188,   189,   190,   191,   192,   193,   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,    -1,    -1,    -1,   323,   324,   325,   326,   327,
-     328,   329,   330,   331,   332,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   379,   380,   381,   382,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   392,   393,   394,   395,   396,   397,
-     398,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   414,   415,   416,   417,
-     418,   419,   420,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   429,    -1,   431,   432,   433,   434,   435,   436,   437,
-     438,   439,   440,   441,   442,   443,   444,   445,   446,   447,
-     448,   449,   450,   451,   452,   453,   454,   455,   456,   457,
-     458,   459,   460,   461,   462,   463,   464,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    -1,    -1,    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,    -1,   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,    -1,    -1,    -1,    -1,    -1,    -1,   326,
-      -1,    -1,    -1,   330,   331,   332,    -1,    -1,   335,   336,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   354,   355,    -1,
-      -1,    -1,   359,   360,    -1,    -1,    -1,    -1,    -1,   366,
-     367,   368,   369,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     387,   388,   389,   390,   391,   392,    -1,    -1,    -1,    -1,
-     397,   398,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   421,   422,   423,   424,   425,   426,
-     427,   428,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   443,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    -1,    -1,    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,    -1,   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,    -1,    -1,    -1,    -1,    -1,    -1,   326,
-      -1,    -1,    -1,   330,   331,   332,    -1,    -1,   335,   336,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   354,   355,    -1,
-      -1,    -1,   359,   360,    -1,    -1,    -1,    -1,    -1,   366,
-     367,   368,   369,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     387,   388,   389,   390,   391,   392,    -1,    -1,    -1,    -1,
-     397,   398,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   421,   422,   423,   424,   425,   426,
-     427,   428,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   443,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    -1,    -1,    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,    -1,   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,    -1,    -1,    -1,    -1,    -1,    -1,   326,
-      -1,    -1,    -1,   330,   331,   332,    -1,    -1,   335,   336,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   354,   355,    -1,
-      -1,   358,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   366,
-     367,   368,   369,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     387,   388,   389,   390,   391,   392,    -1,    -1,    -1,    -1,
-     397,   398,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   421,   422,   423,   424,   425,   426,
-     427,   428,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   443,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    -1,    -1,    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,    -1,   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,    -1,    -1,    -1,    -1,    -1,    -1,   326,
-      -1,    -1,    -1,   330,   331,   332,    -1,    -1,   335,   336,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   354,   355,    -1,
-      -1,    -1,   359,    -1,    -1,    -1,    -1,    -1,    -1,   366,
-     367,   368,   369,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     387,   388,   389,   390,   391,   392,    -1,    -1,    -1,    -1,
-     397,   398,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   421,   422,   423,   424,   425,   426,
-     427,   428,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   443,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    -1,    -1,    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,    -1,   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,    -1,    -1,    -1,    -1,    -1,    -1,   326,
-      -1,    -1,    -1,   330,   331,   332,    -1,    -1,   335,   336,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   354,   355,    -1,
-      -1,   358,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   366,
-     367,   368,   369,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     387,   388,   389,   390,   391,   392,    -1,    -1,    -1,    -1,
-     397,   398,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   421,   422,   423,   424,   425,   426,
-     427,   428,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   443,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    -1,    -1,    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,    -1,   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,    -1,    -1,    -1,    -1,    -1,    -1,   326,
-      -1,    -1,    -1,   330,   331,   332,    -1,    -1,   335,   336,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   354,   355,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   365,   366,
-     367,   368,   369,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     387,   388,   389,   390,   391,   392,    -1,    -1,    -1,    -1,
-     397,   398,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   421,   422,   423,   424,   425,   426,
-     427,   428,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   443,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    -1,    -1,    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,    -1,   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,    -1,    -1,    -1,    -1,    -1,    -1,   326,
-      -1,    -1,    -1,   330,   331,   332,    -1,    -1,   335,   336,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   354,   355,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   366,
-     367,   368,   369,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     387,   388,   389,   390,   391,   392,    -1,    -1,    -1,    -1,
-     397,   398,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   421,   422,   423,   424,   425,   426,
-     427,   428,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   443,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    -1,    -1,    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,    -1,   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,    -1,    -1,    -1,    -1,    -1,    -1,   326,
-      -1,    -1,    -1,   330,   331,   332,    -1,    -1,   335,   336,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   354,   355,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   366,
-     367,   368,   369,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     387,   388,   389,   390,   391,   392,    -1,    -1,    -1,    -1,
-     397,   398,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   421,   422,   423,   424,   425,   426,
-     427,   428,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   443,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    -1,    -1,    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,    -1,   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,    -1,    -1,    -1,    -1,    -1,    -1,   326,
-      -1,    -1,    -1,   330,   331,   332,    -1,    -1,   335,   336,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   354,   355,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   366,
-     367,   368,   369,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     387,   388,   389,   390,   391,   392,    -1,    -1,    -1,    -1,
-     397,   398,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   421,   422,   423,   424,   425,   426,
-     427,   428,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   443,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    42,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    60,    -1,    -1,    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,    -1,   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,    -1,    -1,    -1,    -1,    -1,    -1,   326,
-      -1,    -1,    -1,   330,   331,   332,    -1,    -1,    -1,    -1,
+      -1,   423,   424,   425,   426,   427,   428,   429,   430,    -1,
+      -1,   433,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   446,     4,     5,     6,     7,     8,
+       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      59,    60,    -1,    -1,    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,    -1,
+     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,    -1,    -1,    -1,    -1,   328,
+      -1,    -1,    -1,   332,   333,   334,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   392,    -1,    -1,    -1,    -1,
-     397,   398
+      -1,    -1,    -1,    -1,    -1,   394,    -1,    -1,    -1,    -1,
+     399,   400,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   433
 };
 
 /* YYSTOS[STATE-NUM] -- The symbol kind of the accessing symbol of
@@ -4255,144 +4274,144 @@
      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,   357,   365,   379,   380,   381,   382,   383,   392,   393,
-     394,   395,   396,   397,   398,   414,   415,   416,   417,   418,
-     419,   420,   429,   431,   432,   433,   434,   435,   436,   437,
+     332,   333,   334,   359,   367,   381,   382,   383,   384,   385,
+     394,   395,   396,   397,   398,   399,   400,   416,   417,   418,
+     419,   420,   421,   422,   431,   433,   434,   435,   436,   437,
      438,   439,   440,   441,   442,   443,   444,   445,   446,   447,
      448,   449,   450,   451,   452,   453,   454,   455,   456,   457,
-     458,   459,   460,   461,   462,   463,   464,   496,   497,   500,
-     501,   502,   503,   507,   508,   509,   510,   511,   512,   515,
-     516,   517,   518,   519,   521,   526,   527,   528,   569,   570,
-     571,   573,   580,   584,   585,   591,   594,   355,   355,   355,
-     355,   355,   355,   355,   355,   357,   527,   359,   391,   355,
-     355,   365,   391,   365,   572,   356,   362,   504,   505,   506,
-     516,   521,   362,   365,   391,   365,   391,   517,   521,   373,
-     523,   524,     0,   570,   501,   509,   516,   365,   500,   391,
-     576,   577,   595,   596,   388,   391,   576,   388,   576,   388,
-     576,   388,   576,   388,   576,   576,   595,   388,   576,   391,
-     574,   575,   521,   530,   359,   391,   415,   513,   514,   391,
-     520,   357,   365,   522,   359,   548,   573,   505,   504,   506,
-     391,   391,   355,   364,   522,   359,   362,   365,   499,   335,
-     336,   354,   355,   366,   367,   368,   369,   387,   388,   389,
-     390,   391,   421,   422,   423,   424,   425,   426,   427,   428,
-     466,   467,   468,   470,   471,   472,   473,   474,   475,   476,
-     477,   478,   519,   521,   525,   522,   356,   391,   365,   364,
-     362,   356,   362,   356,   362,   364,   362,   362,   362,   356,
-     362,   362,   362,   362,   362,   362,   362,   356,   362,   356,
-     362,   355,   358,   362,   365,   516,   521,   531,   532,   529,
-     364,   356,   362,   356,   362,   358,   477,   479,   480,   481,
-     482,   483,   484,   485,   486,   487,   488,   489,   490,   521,
-     357,   365,   359,   360,   365,   399,   400,   401,   402,   404,
-     405,   406,   407,   408,   409,   410,   411,   412,   413,   430,
-     477,   490,   492,   494,   496,   500,   519,   521,   537,   538,
-     539,   540,   541,   549,   550,   551,   552,   555,   556,   559,
-     560,   561,   568,   573,   522,   364,   522,   359,   492,   535,
-     364,   498,   391,   362,   365,   477,   477,   494,   335,   336,
-     357,   361,   356,   356,   362,   398,   492,   355,   477,   362,
-     374,   573,   354,   357,   388,   577,   595,   391,   596,   354,
-     387,   388,   389,   390,   581,   582,   388,   490,   495,   583,
-     388,   387,   388,   389,   390,   586,   587,   388,   387,   388,
-     389,   390,   466,   588,   589,   388,   354,   590,   388,   595,
-     391,   495,   526,   592,   593,   388,   495,   358,   575,   521,
-     391,   533,   534,   360,   532,   531,   495,   514,   391,   370,
-     371,   372,   367,   369,   333,   334,   337,   338,   373,   374,
-     339,   340,   377,   376,   375,   341,   343,   342,   378,   358,
-     358,   490,   360,   542,   355,   365,   365,   563,   355,   355,
-     365,   365,   494,   355,   494,   363,   365,   365,   365,   365,
-     344,   345,   346,   347,   348,   349,   350,   351,   352,   353,
-     364,   493,   362,   365,   360,   538,   552,   556,   561,   535,
-     364,   360,   535,   536,   535,   531,   391,   356,   469,   494,
-     391,   492,   477,   354,   388,   578,   579,   356,   364,   356,
-     362,   356,   362,   356,   362,   362,   356,   362,   356,   362,
-     356,   362,   362,   356,   362,   362,   356,   362,   356,   362,
-     356,   356,   533,   522,   362,   365,   360,   477,   477,   477,
-     479,   479,   480,   480,   481,   481,   481,   481,   482,   482,
-     483,   484,   485,   486,   487,   488,   491,   358,   549,   562,
-     538,   564,   494,   365,   494,   363,   492,   492,   535,   360,
-     362,   360,   358,   358,   362,   358,   362,   582,   581,   495,
-     583,   587,   586,   589,   588,   354,   590,   592,   593,   365,
-     534,   494,   543,   494,   509,   554,   399,   537,   550,   565,
-     356,   356,   360,   535,   354,   388,   356,   356,   356,   356,
-     356,   356,   363,   360,   391,   356,   355,   554,   566,   567,
-     545,   546,   547,   553,   557,   492,   364,   539,   544,   548,
-     494,   365,   356,   403,   541,   539,   359,   535,   356,   494,
-     544,   545,   549,   558,   365,   360
+     458,   459,   460,   461,   462,   463,   464,   465,   466,   467,
+     499,   500,   503,   504,   505,   506,   510,   511,   512,   513,
+     514,   515,   518,   519,   520,   521,   522,   524,   529,   530,
+     531,   572,   573,   574,   576,   583,   587,   588,   594,   597,
+     357,   357,   357,   357,   357,   357,   357,   357,   359,   530,
+     361,   393,   357,   357,   367,   393,   367,   575,   358,   364,
+     507,   508,   509,   519,   524,   364,   367,   393,   367,   393,
+     520,   524,   375,   526,   527,     0,   573,   504,   512,   519,
+     367,   503,   393,   579,   580,   598,   599,   390,   393,   579,
+     390,   579,   390,   579,   390,   579,   390,   579,   579,   598,
+     390,   579,   393,   577,   578,   524,   533,   361,   393,   417,
+     516,   517,   393,   523,   359,   367,   525,   361,   551,   576,
+     508,   507,   509,   393,   393,   357,   366,   525,   361,   364,
+     367,   502,   337,   338,   356,   357,   368,   369,   370,   371,
+     389,   390,   391,   392,   393,   423,   424,   425,   426,   427,
+     428,   429,   430,   469,   470,   471,   473,   474,   475,   476,
+     477,   478,   479,   480,   481,   522,   524,   528,   525,   358,
+     393,   367,   366,   364,   358,   364,   358,   364,   366,   364,
+     364,   364,   358,   364,   364,   364,   364,   364,   364,   364,
+     358,   364,   358,   364,   357,   360,   364,   367,   519,   524,
+     534,   535,   532,   366,   358,   364,   358,   364,   360,   480,
+     482,   483,   484,   485,   486,   487,   488,   489,   490,   491,
+     492,   493,   524,   359,   367,   361,   362,   367,   401,   402,
+     403,   404,   406,   407,   408,   409,   410,   411,   412,   413,
+     414,   415,   432,   480,   493,   495,   497,   499,   503,   522,
+     524,   540,   541,   542,   543,   544,   552,   553,   554,   555,
+     558,   559,   562,   563,   564,   571,   576,   525,   366,   525,
+     361,   495,   538,   366,   501,   393,   364,   367,   480,   480,
+     497,   337,   338,   359,   363,   358,   358,   364,   400,   495,
+     357,   480,   364,   376,   576,   356,   359,   390,   580,   598,
+     393,   599,   356,   389,   390,   391,   392,   584,   585,   390,
+     493,   498,   586,   390,   389,   390,   391,   392,   589,   590,
+     390,   389,   390,   391,   392,   469,   591,   592,   390,   356,
+     593,   390,   598,   393,   498,   529,   595,   596,   390,   498,
+     360,   578,   524,   393,   536,   537,   362,   535,   534,   498,
+     517,   393,   372,   373,   374,   369,   371,   335,   336,   339,
+     340,   375,   376,   341,   342,   379,   378,   377,   343,   345,
+     344,   380,   360,   360,   493,   362,   545,   357,   367,   367,
+     566,   357,   357,   367,   367,   497,   357,   497,   365,   367,
+     367,   367,   367,   346,   347,   348,   349,   350,   351,   352,
+     353,   354,   355,   366,   496,   364,   367,   362,   541,   555,
+     559,   564,   538,   366,   362,   538,   539,   538,   534,   393,
+     358,   472,   497,   393,   495,   480,   356,   390,   581,   582,
+     358,   366,   358,   364,   358,   364,   358,   364,   364,   358,
+     364,   358,   364,   358,   364,   364,   358,   364,   364,   358,
+     364,   358,   364,   358,   358,   536,   525,   364,   367,   362,
+     480,   480,   480,   482,   482,   483,   483,   484,   484,   484,
+     484,   485,   485,   486,   487,   488,   489,   490,   491,   494,
+     360,   552,   565,   541,   567,   497,   367,   497,   365,   495,
+     495,   538,   362,   364,   362,   360,   360,   364,   360,   364,
+     585,   584,   498,   586,   590,   589,   592,   591,   356,   593,
+     595,   596,   367,   537,   497,   546,   497,   512,   557,   401,
+     540,   553,   568,   358,   358,   362,   538,   356,   390,   358,
+     358,   358,   358,   358,   358,   365,   362,   393,   358,   357,
+     557,   569,   570,   548,   549,   550,   556,   560,   495,   366,
+     542,   547,   551,   497,   367,   358,   405,   544,   542,   361,
+     538,   358,   497,   547,   548,   552,   561,   367,   362
 };
 
 /* YYR1[RULE-NUM] -- Symbol kind of the left-hand side of rule RULE-NUM.  */
 static const yytype_int16 yyr1[] =
 {
-       0,   465,   466,   467,   467,   467,   467,   467,   467,   467,
-     467,   467,   467,   467,   467,   467,   467,   467,   468,   468,
-     468,   468,   468,   468,   469,   470,   471,   472,   472,   473,
-     473,   474,   474,   475,   476,   476,   476,   477,   477,   477,
-     477,   478,   478,   478,   478,   479,   479,   479,   479,   480,
-     480,   480,   481,   481,   481,   482,   482,   482,   482,   482,
-     483,   483,   483,   484,   484,   485,   485,   486,   486,   487,
-     487,   488,   488,   489,   489,   490,   491,   490,   492,   492,
-     493,   493,   493,   493,   493,   493,   493,   493,   493,   493,
-     493,   494,   494,   495,   496,   496,   496,   496,   496,   496,
-     496,   496,   496,   496,   496,   498,   497,   499,   499,   500,
-     500,   500,   500,   501,   501,   502,   502,   503,   504,   504,
-     505,   505,   505,   505,   506,   507,   507,   507,   507,   507,
-     508,   508,   508,   508,   508,   509,   509,   510,   511,   511,
-     511,   511,   511,   511,   511,   511,   511,   511,   512,   513,
-     513,   514,   514,   514,   515,   516,   516,   517,   517,   517,
-     517,   517,   517,   517,   517,   517,   517,   517,   518,   518,
-     518,   518,   518,   518,   518,   518,   518,   518,   518,   518,
-     518,   518,   518,   518,   518,   518,   518,   518,   518,   518,
-     518,   518,   518,   518,   518,   518,   518,   518,   518,   518,
-     518,   518,   518,   518,   518,   518,   519,   520,   520,   521,
-     521,   522,   522,   522,   522,   523,   523,   524,   525,   525,
-     525,   526,   526,   526,   526,   526,   526,   526,   526,   526,
-     526,   526,   526,   526,   526,   526,   526,   526,   526,   526,
-     526,   526,   526,   526,   526,   526,   526,   526,   526,   526,
-     526,   526,   526,   526,   526,   526,   526,   526,   526,   526,
-     526,   526,   526,   526,   526,   526,   526,   526,   526,   526,
-     526,   526,   526,   526,   526,   526,   526,   526,   526,   526,
-     526,   526,   526,   526,   526,   526,   526,   526,   526,   526,
-     526,   526,   526,   526,   526,   526,   526,   526,   526,   526,
-     526,   526,   526,   526,   526,   526,   526,   526,   526,   526,
-     526,   526,   526,   526,   526,   526,   526,   526,   526,   526,
-     526,   526,   526,   526,   526,   526,   526,   526,   526,   526,
-     526,   526,   526,   526,   526,   526,   526,   526,   526,   526,
-     526,   526,   526,   526,   526,   526,   526,   526,   526,   526,
-     526,   526,   526,   526,   526,   526,   526,   526,   526,   526,
-     526,   526,   526,   526,   526,   526,   526,   526,   526,   526,
-     526,   526,   526,   526,   526,   526,   526,   526,   526,   526,
-     526,   526,   526,   526,   526,   526,   526,   526,   526,   526,
-     526,   526,   526,   526,   526,   526,   526,   526,   526,   526,
-     526,   526,   526,   526,   526,   526,   526,   526,   526,   526,
-     526,   526,   526,   526,   526,   526,   526,   526,   526,   526,
-     526,   526,   526,   526,   526,   526,   526,   526,   526,   526,
-     526,   526,   526,   526,   526,   526,   526,   526,   526,   526,
-     526,   526,   526,   526,   526,   526,   526,   526,   526,   526,
-     526,   526,   526,   526,   526,   526,   526,   526,   526,   526,
-     526,   526,   526,   526,   526,   526,   526,   526,   526,   526,
-     526,   526,   526,   526,   526,   526,   526,   526,   526,   526,
-     526,   526,   526,   526,   526,   526,   526,   526,   526,   526,
-     526,   526,   526,   526,   526,   526,   526,   526,   526,   526,
-     526,   526,   526,   526,   526,   526,   526,   526,   526,   526,
-     526,   526,   526,   526,   526,   526,   526,   526,   526,   526,
-     526,   526,   526,   526,   526,   526,   526,   526,   526,   526,
-     526,   526,   526,   526,   526,   526,   526,   526,   526,   526,
-     526,   527,   527,   527,   529,   528,   530,   528,   531,   531,
-     532,   532,   533,   533,   534,   534,   535,   535,   535,   535,
-     536,   536,   537,   538,   538,   539,   539,   539,   539,   539,
-     539,   539,   539,   540,   541,   542,   543,   541,   544,   544,
-     546,   545,   547,   545,   548,   548,   549,   549,   550,   550,
-     551,   551,   552,   553,   553,   554,   554,   555,   555,   557,
-     556,   558,   558,   559,   559,   560,   560,   562,   561,   563,
-     561,   564,   561,   565,   565,   566,   566,   567,   567,   568,
-     568,   568,   568,   568,   568,   568,   568,   569,   569,   570,
-     570,   570,   572,   571,   573,   574,   574,   575,   575,   576,
-     576,   577,   577,   578,   578,   579,   579,   580,   580,   580,
-     580,   580,   580,   581,   581,   582,   582,   582,   582,   582,
-     583,   583,   584,   584,   585,   585,   585,   585,   585,   585,
-     585,   585,   586,   586,   587,   587,   587,   587,   588,   588,
-     589,   589,   589,   589,   589,   590,   590,   591,   591,   591,
-     591,   592,   592,   593,   593,   594,   594,   595,   595,   596,
-     596
+       0,   468,   469,   470,   470,   470,   470,   470,   470,   470,
+     470,   470,   470,   470,   470,   470,   470,   470,   471,   471,
+     471,   471,   471,   471,   472,   473,   474,   475,   475,   476,
+     476,   477,   477,   478,   479,   479,   479,   480,   480,   480,
+     480,   481,   481,   481,   481,   482,   482,   482,   482,   483,
+     483,   483,   484,   484,   484,   485,   485,   485,   485,   485,
+     486,   486,   486,   487,   487,   488,   488,   489,   489,   490,
+     490,   491,   491,   492,   492,   493,   494,   493,   495,   495,
+     496,   496,   496,   496,   496,   496,   496,   496,   496,   496,
+     496,   497,   497,   498,   499,   499,   499,   499,   499,   499,
+     499,   499,   499,   499,   499,   501,   500,   502,   502,   503,
+     503,   503,   503,   504,   504,   505,   505,   506,   507,   507,
+     508,   508,   508,   508,   509,   510,   510,   510,   510,   510,
+     511,   511,   511,   511,   511,   512,   512,   513,   514,   514,
+     514,   514,   514,   514,   514,   514,   514,   514,   515,   516,
+     516,   517,   517,   517,   518,   519,   519,   520,   520,   520,
+     520,   520,   520,   520,   520,   520,   520,   520,   521,   521,
+     521,   521,   521,   521,   521,   521,   521,   521,   521,   521,
+     521,   521,   521,   521,   521,   521,   521,   521,   521,   521,
+     521,   521,   521,   521,   521,   521,   521,   521,   521,   521,
+     521,   521,   521,   521,   521,   521,   522,   523,   523,   524,
+     524,   525,   525,   525,   525,   526,   526,   527,   528,   528,
+     528,   529,   529,   529,   529,   529,   529,   529,   529,   529,
+     529,   529,   529,   529,   529,   529,   529,   529,   529,   529,
+     529,   529,   529,   529,   529,   529,   529,   529,   529,   529,
+     529,   529,   529,   529,   529,   529,   529,   529,   529,   529,
+     529,   529,   529,   529,   529,   529,   529,   529,   529,   529,
+     529,   529,   529,   529,   529,   529,   529,   529,   529,   529,
+     529,   529,   529,   529,   529,   529,   529,   529,   529,   529,
+     529,   529,   529,   529,   529,   529,   529,   529,   529,   529,
+     529,   529,   529,   529,   529,   529,   529,   529,   529,   529,
+     529,   529,   529,   529,   529,   529,   529,   529,   529,   529,
+     529,   529,   529,   529,   529,   529,   529,   529,   529,   529,
+     529,   529,   529,   529,   529,   529,   529,   529,   529,   529,
+     529,   529,   529,   529,   529,   529,   529,   529,   529,   529,
+     529,   529,   529,   529,   529,   529,   529,   529,   529,   529,
+     529,   529,   529,   529,   529,   529,   529,   529,   529,   529,
+     529,   529,   529,   529,   529,   529,   529,   529,   529,   529,
+     529,   529,   529,   529,   529,   529,   529,   529,   529,   529,
+     529,   529,   529,   529,   529,   529,   529,   529,   529,   529,
+     529,   529,   529,   529,   529,   529,   529,   529,   529,   529,
+     529,   529,   529,   529,   529,   529,   529,   529,   529,   529,
+     529,   529,   529,   529,   529,   529,   529,   529,   529,   529,
+     529,   529,   529,   529,   529,   529,   529,   529,   529,   529,
+     529,   529,   529,   529,   529,   529,   529,   529,   529,   529,
+     529,   529,   529,   529,   529,   529,   529,   529,   529,   529,
+     529,   529,   529,   529,   529,   529,   529,   529,   529,   529,
+     529,   529,   529,   529,   529,   529,   529,   529,   529,   529,
+     529,   529,   529,   529,   529,   529,   529,   529,   529,   529,
+     529,   529,   529,   529,   529,   529,   529,   529,   529,   529,
+     529,   529,   529,   529,   529,   529,   529,   529,   529,   529,
+     529,   529,   529,   529,   529,   529,   529,   529,   529,   529,
+     529,   529,   529,   529,   529,   529,   529,   529,   529,   529,
+     529,   529,   529,   529,   529,   529,   529,   529,   529,   529,
+     529,   529,   529,   529,   530,   530,   530,   532,   531,   533,
+     531,   534,   534,   535,   535,   536,   536,   537,   537,   538,
+     538,   538,   538,   539,   539,   540,   541,   541,   542,   542,
+     542,   542,   542,   542,   542,   542,   543,   544,   545,   546,
+     544,   547,   547,   549,   548,   550,   548,   551,   551,   552,
+     552,   553,   553,   554,   554,   555,   556,   556,   557,   557,
+     558,   558,   560,   559,   561,   561,   562,   562,   563,   563,
+     565,   564,   566,   564,   567,   564,   568,   568,   569,   569,
+     570,   570,   571,   571,   571,   571,   571,   571,   571,   571,
+     572,   572,   573,   573,   573,   575,   574,   576,   577,   577,
+     578,   578,   579,   579,   580,   580,   581,   581,   582,   582,
+     583,   583,   583,   583,   583,   583,   584,   584,   585,   585,
+     585,   585,   585,   586,   586,   587,   587,   588,   588,   588,
+     588,   588,   588,   588,   588,   589,   589,   590,   590,   590,
+     590,   591,   591,   592,   592,   592,   592,   592,   593,   593,
+     594,   594,   594,   594,   595,   595,   596,   596,   597,   597,
+     598,   598,   599,   599
 };
 
 /* YYR2[RULE-NUM] -- Number of symbols on the right-hand side of rule RULE-NUM.  */
@@ -4452,23 +4471,23 @@
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        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,     2,
-       1,     3,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     2,     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,     2,     2,     2,     1,     2,     1,
-       1,     1,     0,     3,     5,     1,     3,     1,     4,     1,
-       3,     5,     5,     1,     3,     1,     3,     4,     6,     6,
-       8,     6,     8,     1,     3,     1,     1,     1,     1,     1,
-       1,     3,     4,     6,     4,     6,     6,     8,     6,     8,
-       6,     8,     1,     3,     1,     1,     1,     1,     1,     3,
-       1,     1,     1,     1,     1,     1,     3,     6,     8,     4,
-       6,     1,     3,     1,     1,     4,     6,     1,     3,     3,
-       3
+       1,     1,     1,     1,     1,     1,     1,     0,     6,     0,
+       5,     1,     2,     3,     4,     1,     3,     1,     2,     1,
+       3,     4,     2,     1,     3,     1,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     2,     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,     2,     2,     2,
+       1,     2,     1,     1,     1,     0,     3,     5,     1,     3,
+       1,     4,     1,     3,     5,     5,     1,     3,     1,     3,
+       4,     6,     6,     8,     6,     8,     1,     3,     1,     1,
+       1,     1,     1,     1,     3,     4,     6,     4,     6,     6,
+       8,     6,     8,     6,     8,     1,     3,     1,     1,     1,
+       1,     1,     3,     1,     1,     1,     1,     1,     1,     3,
+       6,     8,     4,     6,     1,     3,     1,     1,     4,     6,
+       1,     3,     3,     3
 };
 
 
@@ -5210,302 +5229,328 @@
   switch (yyn)
     {
   case 2: /* variable_identifier: IDENTIFIER  */
-#line 362 "MachineIndependent/glslang.y"
+#line 356 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.intermTypedNode) = parseContext.handleVariable((yyvsp[0].lex).loc, (yyvsp[0].lex).symbol, (yyvsp[0].lex).string);
     }
-#line 5218 "MachineIndependent/glslang_tab.cpp"
+#line 5237 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 3: /* primary_expression: variable_identifier  */
-#line 368 "MachineIndependent/glslang.y"
+#line 362 "MachineIndependent/glslang.y"
                           {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 5226 "MachineIndependent/glslang_tab.cpp"
+#line 5245 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 4: /* primary_expression: LEFT_PAREN expression RIGHT_PAREN  */
-#line 371 "MachineIndependent/glslang.y"
+#line 365 "MachineIndependent/glslang.y"
                                         {
         (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode);
         if ((yyval.interm.intermTypedNode)->getAsConstantUnion())
             (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
     }
-#line 5236 "MachineIndependent/glslang_tab.cpp"
+#line 5255 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 5: /* primary_expression: FLOATCONSTANT  */
-#line 376 "MachineIndependent/glslang.y"
+#line 370 "MachineIndependent/glslang.y"
                     {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
     }
-#line 5244 "MachineIndependent/glslang_tab.cpp"
+#line 5263 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 6: /* primary_expression: INTCONSTANT  */
-#line 379 "MachineIndependent/glslang.y"
+#line 373 "MachineIndependent/glslang.y"
                   {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
     }
-#line 5252 "MachineIndependent/glslang_tab.cpp"
+#line 5271 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 7: /* primary_expression: UINTCONSTANT  */
-#line 382 "MachineIndependent/glslang.y"
+#line 376 "MachineIndependent/glslang.y"
                    {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned literal");
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
     }
-#line 5261 "MachineIndependent/glslang_tab.cpp"
+#line 5280 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 8: /* primary_expression: BOOLCONSTANT  */
-#line 386 "MachineIndependent/glslang.y"
+#line 380 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
     }
-#line 5269 "MachineIndependent/glslang_tab.cpp"
+#line 5288 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 9: /* primary_expression: STRING_LITERAL  */
-#line 389 "MachineIndependent/glslang.y"
+#line 383 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true);
     }
-#line 5277 "MachineIndependent/glslang_tab.cpp"
+#line 5296 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 10: /* primary_expression: INT32CONSTANT  */
-#line 392 "MachineIndependent/glslang.y"
+#line 386 "MachineIndependent/glslang.y"
                     {
         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 5286 "MachineIndependent/glslang_tab.cpp"
+#line 5305 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 11: /* primary_expression: UINT32CONSTANT  */
-#line 396 "MachineIndependent/glslang.y"
+#line 390 "MachineIndependent/glslang.y"
                      {
         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 5295 "MachineIndependent/glslang_tab.cpp"
+#line 5314 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 12: /* primary_expression: INT64CONSTANT  */
-#line 400 "MachineIndependent/glslang.y"
+#line 394 "MachineIndependent/glslang.y"
                     {
         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 5304 "MachineIndependent/glslang_tab.cpp"
+#line 5323 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 13: /* primary_expression: UINT64CONSTANT  */
-#line 404 "MachineIndependent/glslang.y"
+#line 398 "MachineIndependent/glslang.y"
                      {
         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 5313 "MachineIndependent/glslang_tab.cpp"
+#line 5332 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 14: /* primary_expression: INT16CONSTANT  */
-#line 408 "MachineIndependent/glslang.y"
+#line 402 "MachineIndependent/glslang.y"
                     {
         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 5322 "MachineIndependent/glslang_tab.cpp"
+#line 5341 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 15: /* primary_expression: UINT16CONSTANT  */
-#line 412 "MachineIndependent/glslang.y"
+#line 406 "MachineIndependent/glslang.y"
                      {
         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 5331 "MachineIndependent/glslang_tab.cpp"
+#line 5350 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 16: /* primary_expression: DOUBLECONSTANT  */
-#line 416 "MachineIndependent/glslang.y"
+#line 410 "MachineIndependent/glslang.y"
                      {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double literal");
         if (! parseContext.symbolTable.atBuiltInLevel())
             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 5342 "MachineIndependent/glslang_tab.cpp"
+#line 5361 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 17: /* primary_expression: FLOAT16CONSTANT  */
-#line 422 "MachineIndependent/glslang.y"
+#line 416 "MachineIndependent/glslang.y"
                       {
         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 5351 "MachineIndependent/glslang_tab.cpp"
+#line 5370 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 18: /* postfix_expression: primary_expression  */
-#line 429 "MachineIndependent/glslang.y"
+#line 423 "MachineIndependent/glslang.y"
                          {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 5359 "MachineIndependent/glslang_tab.cpp"
+#line 5378 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 19: /* postfix_expression: postfix_expression LEFT_BRACKET integer_expression RIGHT_BRACKET  */
-#line 432 "MachineIndependent/glslang.y"
+#line 426 "MachineIndependent/glslang.y"
                                                                        {
         (yyval.interm.intermTypedNode) = parseContext.handleBracketDereference((yyvsp[-2].lex).loc, (yyvsp[-3].interm.intermTypedNode), (yyvsp[-1].interm.intermTypedNode));
     }
-#line 5367 "MachineIndependent/glslang_tab.cpp"
+#line 5386 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 20: /* postfix_expression: function_call  */
-#line 435 "MachineIndependent/glslang.y"
+#line 429 "MachineIndependent/glslang.y"
                     {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 5375 "MachineIndependent/glslang_tab.cpp"
+#line 5394 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 21: /* postfix_expression: postfix_expression DOT IDENTIFIER  */
-#line 438 "MachineIndependent/glslang.y"
+#line 432 "MachineIndependent/glslang.y"
                                         {
         (yyval.interm.intermTypedNode) = parseContext.handleDotDereference((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode), *(yyvsp[0].lex).string);
     }
-#line 5383 "MachineIndependent/glslang_tab.cpp"
+#line 5402 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 22: /* postfix_expression: postfix_expression INC_OP  */
-#line 441 "MachineIndependent/glslang.y"
+#line 435 "MachineIndependent/glslang.y"
                                 {
         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 5393 "MachineIndependent/glslang_tab.cpp"
+#line 5412 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 23: /* postfix_expression: postfix_expression DEC_OP  */
-#line 446 "MachineIndependent/glslang.y"
+#line 440 "MachineIndependent/glslang.y"
                                 {
         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 5403 "MachineIndependent/glslang_tab.cpp"
+#line 5422 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 24: /* integer_expression: expression  */
-#line 454 "MachineIndependent/glslang.y"
+#line 448 "MachineIndependent/glslang.y"
                  {
         parseContext.integerCheck((yyvsp[0].interm.intermTypedNode), "[]");
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 5412 "MachineIndependent/glslang_tab.cpp"
+#line 5431 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 25: /* function_call: function_call_or_method  */
-#line 461 "MachineIndependent/glslang.y"
+#line 455 "MachineIndependent/glslang.y"
                               {
         (yyval.interm.intermTypedNode) = parseContext.handleFunctionCall((yyvsp[0].interm).loc, (yyvsp[0].interm).function, (yyvsp[0].interm).intermNode);
         delete (yyvsp[0].interm).function;
     }
-#line 5421 "MachineIndependent/glslang_tab.cpp"
+#line 5440 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 26: /* function_call_or_method: function_call_generic  */
-#line 468 "MachineIndependent/glslang.y"
+#line 462 "MachineIndependent/glslang.y"
                             {
         (yyval.interm) = (yyvsp[0].interm);
     }
-#line 5429 "MachineIndependent/glslang_tab.cpp"
+#line 5448 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 27: /* function_call_generic: function_call_header_with_parameters RIGHT_PAREN  */
-#line 474 "MachineIndependent/glslang.y"
+#line 468 "MachineIndependent/glslang.y"
                                                        {
         (yyval.interm) = (yyvsp[-1].interm);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 5438 "MachineIndependent/glslang_tab.cpp"
+#line 5457 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 28: /* function_call_generic: function_call_header_no_parameters RIGHT_PAREN  */
-#line 478 "MachineIndependent/glslang.y"
+#line 472 "MachineIndependent/glslang.y"
                                                      {
         (yyval.interm) = (yyvsp[-1].interm);
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 5447 "MachineIndependent/glslang_tab.cpp"
+#line 5466 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 29: /* function_call_header_no_parameters: function_call_header VOID  */
-#line 485 "MachineIndependent/glslang.y"
+#line 479 "MachineIndependent/glslang.y"
                                 {
         (yyval.interm) = (yyvsp[-1].interm);
     }
-#line 5455 "MachineIndependent/glslang_tab.cpp"
+#line 5474 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 30: /* function_call_header_no_parameters: function_call_header  */
-#line 488 "MachineIndependent/glslang.y"
+#line 482 "MachineIndependent/glslang.y"
                            {
         (yyval.interm) = (yyvsp[0].interm);
     }
-#line 5463 "MachineIndependent/glslang_tab.cpp"
+#line 5482 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 31: /* function_call_header_with_parameters: function_call_header assignment_expression  */
-#line 494 "MachineIndependent/glslang.y"
+#line 488 "MachineIndependent/glslang.y"
                                                  {
-        TParameter param = { 0, new TType };
-        param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType());
-        (yyvsp[-1].interm).function->addParameter(param);
-        (yyval.interm).function = (yyvsp[-1].interm).function;
-        (yyval.interm).intermNode = (yyvsp[0].interm.intermTypedNode);
+        if (parseContext.spvVersion.vulkan > 0
+            && parseContext.spvVersion.vulkanRelaxed
+            && (yyvsp[0].interm.intermTypedNode)->getType().containsOpaque())
+        {
+            (yyval.interm).intermNode = parseContext.vkRelaxedRemapFunctionArgument((yyval.interm).loc, (yyvsp[-1].interm).function, (yyvsp[0].interm.intermTypedNode));
+            (yyval.interm).function = (yyvsp[-1].interm).function;
+        }
+        else
+        {
+            TParameter param = { 0, new TType, {} };
+            param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType());
+
+            (yyvsp[-1].interm).function->addParameter(param);
+            (yyval.interm).function = (yyvsp[-1].interm).function;
+            (yyval.interm).intermNode = (yyvsp[0].interm.intermTypedNode);
+        }
     }
-#line 5475 "MachineIndependent/glslang_tab.cpp"
+#line 5505 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 32: /* function_call_header_with_parameters: function_call_header_with_parameters COMMA assignment_expression  */
-#line 501 "MachineIndependent/glslang.y"
+#line 506 "MachineIndependent/glslang.y"
                                                                        {
-        TParameter param = { 0, new TType };
-        param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType());
-        (yyvsp[-2].interm).function->addParameter(param);
-        (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);
+        if (parseContext.spvVersion.vulkan > 0
+            && parseContext.spvVersion.vulkanRelaxed
+            && (yyvsp[0].interm.intermTypedNode)->getType().containsOpaque())
+        {
+            TIntermNode* remappedNode = parseContext.vkRelaxedRemapFunctionArgument((yyvsp[-1].lex).loc, (yyvsp[-2].interm).function, (yyvsp[0].interm.intermTypedNode));
+            if (remappedNode == (yyvsp[0].interm.intermTypedNode))
+                (yyval.interm).intermNode = parseContext.intermediate.growAggregate((yyvsp[-2].interm).intermNode, (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc);
+            else
+                (yyval.interm).intermNode = parseContext.intermediate.mergeAggregate((yyvsp[-2].interm).intermNode, remappedNode, (yyvsp[-1].lex).loc);
+            (yyval.interm).function = (yyvsp[-2].interm).function;
+        }
+        else
+        {
+            TParameter param = { 0, new TType, {} };
+            param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType());
+
+            (yyvsp[-2].interm).function->addParameter(param);
+            (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 5487 "MachineIndependent/glslang_tab.cpp"
+#line 5532 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 33: /* function_call_header: function_identifier LEFT_PAREN  */
-#line 511 "MachineIndependent/glslang.y"
+#line 531 "MachineIndependent/glslang.y"
                                      {
         (yyval.interm) = (yyvsp[-1].interm);
     }
-#line 5495 "MachineIndependent/glslang_tab.cpp"
+#line 5540 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 34: /* function_identifier: type_specifier  */
-#line 519 "MachineIndependent/glslang.y"
+#line 539 "MachineIndependent/glslang.y"
                      {
         // Constructor
         (yyval.interm).intermNode = 0;
         (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type));
     }
-#line 5505 "MachineIndependent/glslang_tab.cpp"
+#line 5550 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 35: /* function_identifier: postfix_expression  */
-#line 524 "MachineIndependent/glslang.y"
+#line 544 "MachineIndependent/glslang.y"
                          {
         //
         // Should be a method or subroutine call, but we haven't recognized the arguments yet.
@@ -5533,50 +5578,50 @@
             (yyval.interm).function = new TFunction(empty, TType(EbtVoid), EOpNull);
         }
     }
-#line 5537 "MachineIndependent/glslang_tab.cpp"
+#line 5582 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 36: /* function_identifier: non_uniform_qualifier  */
-#line 551 "MachineIndependent/glslang.y"
+#line 571 "MachineIndependent/glslang.y"
                             {
         // Constructor
         (yyval.interm).intermNode = 0;
         (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type));
     }
-#line 5547 "MachineIndependent/glslang_tab.cpp"
+#line 5592 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 37: /* unary_expression: postfix_expression  */
-#line 559 "MachineIndependent/glslang.y"
+#line 579 "MachineIndependent/glslang.y"
                          {
         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 5558 "MachineIndependent/glslang_tab.cpp"
+#line 5603 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 38: /* unary_expression: INC_OP unary_expression  */
-#line 565 "MachineIndependent/glslang.y"
+#line 585 "MachineIndependent/glslang.y"
                               {
         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 5567 "MachineIndependent/glslang_tab.cpp"
+#line 5612 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 39: /* unary_expression: DEC_OP unary_expression  */
-#line 569 "MachineIndependent/glslang.y"
+#line 589 "MachineIndependent/glslang.y"
                               {
         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 5576 "MachineIndependent/glslang_tab.cpp"
+#line 5621 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 40: /* unary_expression: unary_operator unary_expression  */
-#line 573 "MachineIndependent/glslang.y"
+#line 593 "MachineIndependent/glslang.y"
                                       {
         if ((yyvsp[-1].interm).op != EOpNull) {
             char errorOp[2] = {0, 0};
@@ -5593,179 +5638,179 @@
                 (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression();
         }
     }
-#line 5597 "MachineIndependent/glslang_tab.cpp"
+#line 5642 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 41: /* unary_operator: PLUS  */
-#line 593 "MachineIndependent/glslang.y"
+#line 613 "MachineIndependent/glslang.y"
             { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; }
-#line 5603 "MachineIndependent/glslang_tab.cpp"
+#line 5648 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 42: /* unary_operator: DASH  */
-#line 594 "MachineIndependent/glslang.y"
+#line 614 "MachineIndependent/glslang.y"
             { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; }
-#line 5609 "MachineIndependent/glslang_tab.cpp"
+#line 5654 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 43: /* unary_operator: BANG  */
-#line 595 "MachineIndependent/glslang.y"
+#line 615 "MachineIndependent/glslang.y"
             { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; }
-#line 5615 "MachineIndependent/glslang_tab.cpp"
+#line 5660 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 44: /* unary_operator: TILDE  */
-#line 596 "MachineIndependent/glslang.y"
+#line 616 "MachineIndependent/glslang.y"
             { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpBitwiseNot;
               parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise not"); }
-#line 5622 "MachineIndependent/glslang_tab.cpp"
+#line 5667 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 45: /* multiplicative_expression: unary_expression  */
-#line 602 "MachineIndependent/glslang.y"
+#line 622 "MachineIndependent/glslang.y"
                        { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5628 "MachineIndependent/glslang_tab.cpp"
+#line 5673 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 46: /* multiplicative_expression: multiplicative_expression STAR unary_expression  */
-#line 603 "MachineIndependent/glslang.y"
+#line 623 "MachineIndependent/glslang.y"
                                                       {
         (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 5638 "MachineIndependent/glslang_tab.cpp"
+#line 5683 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 47: /* multiplicative_expression: multiplicative_expression SLASH unary_expression  */
-#line 608 "MachineIndependent/glslang.y"
+#line 628 "MachineIndependent/glslang.y"
                                                        {
         (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 5648 "MachineIndependent/glslang_tab.cpp"
+#line 5693 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 48: /* multiplicative_expression: multiplicative_expression PERCENT unary_expression  */
-#line 613 "MachineIndependent/glslang.y"
+#line 633 "MachineIndependent/glslang.y"
                                                          {
         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 5659 "MachineIndependent/glslang_tab.cpp"
+#line 5704 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 49: /* additive_expression: multiplicative_expression  */
-#line 622 "MachineIndependent/glslang.y"
+#line 642 "MachineIndependent/glslang.y"
                                 { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5665 "MachineIndependent/glslang_tab.cpp"
+#line 5710 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 50: /* additive_expression: additive_expression PLUS multiplicative_expression  */
-#line 623 "MachineIndependent/glslang.y"
+#line 643 "MachineIndependent/glslang.y"
                                                          {
         (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 5675 "MachineIndependent/glslang_tab.cpp"
+#line 5720 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 51: /* additive_expression: additive_expression DASH multiplicative_expression  */
-#line 628 "MachineIndependent/glslang.y"
+#line 648 "MachineIndependent/glslang.y"
                                                          {
         (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 5685 "MachineIndependent/glslang_tab.cpp"
+#line 5730 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 52: /* shift_expression: additive_expression  */
-#line 636 "MachineIndependent/glslang.y"
+#line 656 "MachineIndependent/glslang.y"
                           { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5691 "MachineIndependent/glslang_tab.cpp"
+#line 5736 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 53: /* shift_expression: shift_expression LEFT_OP additive_expression  */
-#line 637 "MachineIndependent/glslang.y"
+#line 657 "MachineIndependent/glslang.y"
                                                    {
         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 5702 "MachineIndependent/glslang_tab.cpp"
+#line 5747 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 54: /* shift_expression: shift_expression RIGHT_OP additive_expression  */
-#line 643 "MachineIndependent/glslang.y"
+#line 663 "MachineIndependent/glslang.y"
                                                     {
         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 5713 "MachineIndependent/glslang_tab.cpp"
+#line 5758 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 55: /* relational_expression: shift_expression  */
-#line 652 "MachineIndependent/glslang.y"
+#line 672 "MachineIndependent/glslang.y"
                        { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5719 "MachineIndependent/glslang_tab.cpp"
+#line 5764 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 56: /* relational_expression: relational_expression LEFT_ANGLE shift_expression  */
-#line 653 "MachineIndependent/glslang.y"
+#line 673 "MachineIndependent/glslang.y"
                                                         {
         (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 5729 "MachineIndependent/glslang_tab.cpp"
+#line 5774 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 57: /* relational_expression: relational_expression RIGHT_ANGLE shift_expression  */
-#line 658 "MachineIndependent/glslang.y"
+#line 678 "MachineIndependent/glslang.y"
                                                           {
         (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 5739 "MachineIndependent/glslang_tab.cpp"
+#line 5784 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 58: /* relational_expression: relational_expression LE_OP shift_expression  */
-#line 663 "MachineIndependent/glslang.y"
+#line 683 "MachineIndependent/glslang.y"
                                                     {
         (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 5749 "MachineIndependent/glslang_tab.cpp"
+#line 5794 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 59: /* relational_expression: relational_expression GE_OP shift_expression  */
-#line 668 "MachineIndependent/glslang.y"
+#line 688 "MachineIndependent/glslang.y"
                                                     {
         (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 5759 "MachineIndependent/glslang_tab.cpp"
+#line 5804 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 60: /* equality_expression: relational_expression  */
-#line 676 "MachineIndependent/glslang.y"
+#line 696 "MachineIndependent/glslang.y"
                             { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5765 "MachineIndependent/glslang_tab.cpp"
+#line 5810 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 61: /* equality_expression: equality_expression EQ_OP relational_expression  */
-#line 677 "MachineIndependent/glslang.y"
+#line 697 "MachineIndependent/glslang.y"
                                                        {
         parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison");
         parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "==");
@@ -5775,11 +5820,11 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 5779 "MachineIndependent/glslang_tab.cpp"
+#line 5824 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 62: /* equality_expression: equality_expression NE_OP relational_expression  */
-#line 686 "MachineIndependent/glslang.y"
+#line 706 "MachineIndependent/glslang.y"
                                                       {
         parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison");
         parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "!=");
@@ -5789,124 +5834,124 @@
         if ((yyval.interm.intermTypedNode) == 0)
             (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc);
     }
-#line 5793 "MachineIndependent/glslang_tab.cpp"
+#line 5838 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 63: /* and_expression: equality_expression  */
-#line 698 "MachineIndependent/glslang.y"
+#line 718 "MachineIndependent/glslang.y"
                           { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5799 "MachineIndependent/glslang_tab.cpp"
+#line 5844 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 64: /* and_expression: and_expression AMPERSAND equality_expression  */
-#line 699 "MachineIndependent/glslang.y"
+#line 719 "MachineIndependent/glslang.y"
                                                    {
         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 5810 "MachineIndependent/glslang_tab.cpp"
+#line 5855 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 65: /* exclusive_or_expression: and_expression  */
-#line 708 "MachineIndependent/glslang.y"
+#line 728 "MachineIndependent/glslang.y"
                      { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5816 "MachineIndependent/glslang_tab.cpp"
+#line 5861 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 66: /* exclusive_or_expression: exclusive_or_expression CARET and_expression  */
-#line 709 "MachineIndependent/glslang.y"
+#line 729 "MachineIndependent/glslang.y"
                                                    {
         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 5827 "MachineIndependent/glslang_tab.cpp"
+#line 5872 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 67: /* inclusive_or_expression: exclusive_or_expression  */
-#line 718 "MachineIndependent/glslang.y"
+#line 738 "MachineIndependent/glslang.y"
                               { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5833 "MachineIndependent/glslang_tab.cpp"
+#line 5878 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 68: /* inclusive_or_expression: inclusive_or_expression VERTICAL_BAR exclusive_or_expression  */
-#line 719 "MachineIndependent/glslang.y"
+#line 739 "MachineIndependent/glslang.y"
                                                                    {
         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 5844 "MachineIndependent/glslang_tab.cpp"
+#line 5889 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 69: /* logical_and_expression: inclusive_or_expression  */
-#line 728 "MachineIndependent/glslang.y"
+#line 748 "MachineIndependent/glslang.y"
                               { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5850 "MachineIndependent/glslang_tab.cpp"
+#line 5895 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 70: /* logical_and_expression: logical_and_expression AND_OP inclusive_or_expression  */
-#line 729 "MachineIndependent/glslang.y"
+#line 749 "MachineIndependent/glslang.y"
                                                             {
         (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 5860 "MachineIndependent/glslang_tab.cpp"
+#line 5905 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 71: /* logical_xor_expression: logical_and_expression  */
-#line 737 "MachineIndependent/glslang.y"
+#line 757 "MachineIndependent/glslang.y"
                              { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5866 "MachineIndependent/glslang_tab.cpp"
+#line 5911 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 72: /* logical_xor_expression: logical_xor_expression XOR_OP logical_and_expression  */
-#line 738 "MachineIndependent/glslang.y"
+#line 758 "MachineIndependent/glslang.y"
                                                             {
         (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 5876 "MachineIndependent/glslang_tab.cpp"
+#line 5921 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 73: /* logical_or_expression: logical_xor_expression  */
-#line 746 "MachineIndependent/glslang.y"
+#line 766 "MachineIndependent/glslang.y"
                              { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5882 "MachineIndependent/glslang_tab.cpp"
+#line 5927 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 74: /* logical_or_expression: logical_or_expression OR_OP logical_xor_expression  */
-#line 747 "MachineIndependent/glslang.y"
+#line 767 "MachineIndependent/glslang.y"
                                                           {
         (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 5892 "MachineIndependent/glslang_tab.cpp"
+#line 5937 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 75: /* conditional_expression: logical_or_expression  */
-#line 755 "MachineIndependent/glslang.y"
+#line 775 "MachineIndependent/glslang.y"
                             { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5898 "MachineIndependent/glslang_tab.cpp"
+#line 5943 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 76: /* $@1: %empty  */
-#line 756 "MachineIndependent/glslang.y"
+#line 776 "MachineIndependent/glslang.y"
                                      {
         ++parseContext.controlFlowNestingLevel;
     }
-#line 5906 "MachineIndependent/glslang_tab.cpp"
+#line 5951 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 77: /* conditional_expression: logical_or_expression QUESTION $@1 expression COLON assignment_expression  */
-#line 759 "MachineIndependent/glslang.y"
+#line 779 "MachineIndependent/glslang.y"
                                              {
         --parseContext.controlFlowNestingLevel;
         parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-5].interm.intermTypedNode));
@@ -5919,17 +5964,17 @@
             (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         }
     }
-#line 5923 "MachineIndependent/glslang_tab.cpp"
+#line 5968 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 78: /* assignment_expression: conditional_expression  */
-#line 774 "MachineIndependent/glslang.y"
+#line 794 "MachineIndependent/glslang.y"
                              { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); }
-#line 5929 "MachineIndependent/glslang_tab.cpp"
+#line 5974 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 79: /* assignment_expression: unary_expression assignment_operator assignment_expression  */
-#line 775 "MachineIndependent/glslang.y"
+#line 795 "MachineIndependent/glslang.y"
                                                                  {
         parseContext.arrayObjectCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array assignment");
         parseContext.opaqueCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "=");
@@ -5943,119 +5988,119 @@
             (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode);
         }
     }
-#line 5947 "MachineIndependent/glslang_tab.cpp"
+#line 5992 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 80: /* assignment_operator: EQUAL  */
-#line 791 "MachineIndependent/glslang.y"
+#line 811 "MachineIndependent/glslang.y"
             {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpAssign;
     }
-#line 5956 "MachineIndependent/glslang_tab.cpp"
+#line 6001 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 81: /* assignment_operator: MUL_ASSIGN  */
-#line 795 "MachineIndependent/glslang.y"
+#line 815 "MachineIndependent/glslang.y"
                  {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpMulAssign;
     }
-#line 5965 "MachineIndependent/glslang_tab.cpp"
+#line 6010 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 82: /* assignment_operator: DIV_ASSIGN  */
-#line 799 "MachineIndependent/glslang.y"
+#line 819 "MachineIndependent/glslang.y"
                  {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpDivAssign;
     }
-#line 5974 "MachineIndependent/glslang_tab.cpp"
+#line 6019 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 83: /* assignment_operator: MOD_ASSIGN  */
-#line 803 "MachineIndependent/glslang.y"
+#line 823 "MachineIndependent/glslang.y"
                  {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "%=");
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpModAssign;
     }
-#line 5984 "MachineIndependent/glslang_tab.cpp"
+#line 6029 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 84: /* assignment_operator: ADD_ASSIGN  */
-#line 808 "MachineIndependent/glslang.y"
+#line 828 "MachineIndependent/glslang.y"
                  {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpAddAssign;
     }
-#line 5993 "MachineIndependent/glslang_tab.cpp"
+#line 6038 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 85: /* assignment_operator: SUB_ASSIGN  */
-#line 812 "MachineIndependent/glslang.y"
+#line 832 "MachineIndependent/glslang.y"
                  {
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).op = EOpSubAssign;
     }
-#line 6002 "MachineIndependent/glslang_tab.cpp"
+#line 6047 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 86: /* assignment_operator: LEFT_ASSIGN  */
-#line 816 "MachineIndependent/glslang.y"
+#line 836 "MachineIndependent/glslang.y"
                   {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift left assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLeftShiftAssign;
     }
-#line 6011 "MachineIndependent/glslang_tab.cpp"
+#line 6056 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 87: /* assignment_operator: RIGHT_ASSIGN  */
-#line 820 "MachineIndependent/glslang.y"
+#line 840 "MachineIndependent/glslang.y"
                    {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift right assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpRightShiftAssign;
     }
-#line 6020 "MachineIndependent/glslang_tab.cpp"
+#line 6065 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 88: /* assignment_operator: AND_ASSIGN  */
-#line 824 "MachineIndependent/glslang.y"
+#line 844 "MachineIndependent/glslang.y"
                  {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-and assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAndAssign;
     }
-#line 6029 "MachineIndependent/glslang_tab.cpp"
+#line 6074 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 89: /* assignment_operator: XOR_ASSIGN  */
-#line 828 "MachineIndependent/glslang.y"
+#line 848 "MachineIndependent/glslang.y"
                  {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-xor assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpExclusiveOrAssign;
     }
-#line 6038 "MachineIndependent/glslang_tab.cpp"
+#line 6083 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 90: /* assignment_operator: OR_ASSIGN  */
-#line 832 "MachineIndependent/glslang.y"
+#line 852 "MachineIndependent/glslang.y"
                 {
         parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-or assign");
         (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpInclusiveOrAssign;
     }
-#line 6047 "MachineIndependent/glslang_tab.cpp"
+#line 6092 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 91: /* expression: assignment_expression  */
-#line 839 "MachineIndependent/glslang.y"
+#line 859 "MachineIndependent/glslang.y"
                             {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 6055 "MachineIndependent/glslang_tab.cpp"
+#line 6100 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 92: /* expression: expression COMMA assignment_expression  */
-#line 842 "MachineIndependent/glslang.y"
+#line 862 "MachineIndependent/glslang.y"
                                              {
         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);
@@ -6064,30 +6109,30 @@
             (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         }
     }
-#line 6068 "MachineIndependent/glslang_tab.cpp"
+#line 6113 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 93: /* constant_expression: conditional_expression  */
-#line 853 "MachineIndependent/glslang.y"
+#line 873 "MachineIndependent/glslang.y"
                              {
         parseContext.constantValueCheck((yyvsp[0].interm.intermTypedNode), "");
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 6077 "MachineIndependent/glslang_tab.cpp"
+#line 6122 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 94: /* declaration: function_prototype SEMICOLON  */
-#line 860 "MachineIndependent/glslang.y"
+#line 880 "MachineIndependent/glslang.y"
                                    {
         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 6087 "MachineIndependent/glslang_tab.cpp"
+#line 6132 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 95: /* declaration: spirv_instruction_qualifier function_prototype SEMICOLON  */
-#line 865 "MachineIndependent/glslang.y"
+#line 885 "MachineIndependent/glslang.y"
                                                                {
         parseContext.requireExtensions((yyvsp[-1].interm).loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V instruction qualifier");
         (yyvsp[-1].interm).function->setSpirvInstruction(*(yyvsp[-2].interm.spirvInst)); // Attach SPIR-V intruction qualifier
@@ -6095,31 +6140,31 @@
         (yyval.interm.intermNode) = 0;
         // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature
     }
-#line 6099 "MachineIndependent/glslang_tab.cpp"
+#line 6144 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 96: /* declaration: spirv_execution_mode_qualifier SEMICOLON  */
-#line 872 "MachineIndependent/glslang.y"
+#line 892 "MachineIndependent/glslang.y"
                                                {
         parseContext.globalCheck((yyvsp[0].lex).loc, "SPIR-V execution mode qualifier");
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V execution mode qualifier");
         (yyval.interm.intermNode) = 0;
     }
-#line 6109 "MachineIndependent/glslang_tab.cpp"
+#line 6154 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 97: /* declaration: init_declarator_list SEMICOLON  */
-#line 877 "MachineIndependent/glslang.y"
+#line 897 "MachineIndependent/glslang.y"
                                      {
         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 6119 "MachineIndependent/glslang_tab.cpp"
+#line 6164 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 98: /* declaration: PRECISION precision_qualifier type_specifier SEMICOLON  */
-#line 882 "MachineIndependent/glslang.y"
+#line 902 "MachineIndependent/glslang.y"
                                                              {
         parseContext.profileRequires((yyvsp[-3].lex).loc, ENoProfile, 130, 0, "precision statement");
         // lazy setting of the previous scope's defaults, has effect only the first time it is called in a particular scope
@@ -6127,75 +6172,75 @@
         parseContext.setDefaultPrecision((yyvsp[-3].lex).loc, (yyvsp[-1].interm.type), (yyvsp[-2].interm.type).qualifier.precision);
         (yyval.interm.intermNode) = 0;
     }
-#line 6131 "MachineIndependent/glslang_tab.cpp"
+#line 6176 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 99: /* declaration: block_structure SEMICOLON  */
-#line 889 "MachineIndependent/glslang.y"
+#line 909 "MachineIndependent/glslang.y"
                                 {
         parseContext.declareBlock((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).typeList);
         (yyval.interm.intermNode) = 0;
     }
-#line 6140 "MachineIndependent/glslang_tab.cpp"
+#line 6185 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 100: /* declaration: block_structure IDENTIFIER SEMICOLON  */
-#line 893 "MachineIndependent/glslang.y"
+#line 913 "MachineIndependent/glslang.y"
                                            {
         parseContext.declareBlock((yyvsp[-2].interm).loc, *(yyvsp[-2].interm).typeList, (yyvsp[-1].lex).string);
         (yyval.interm.intermNode) = 0;
     }
-#line 6149 "MachineIndependent/glslang_tab.cpp"
+#line 6194 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 101: /* declaration: block_structure IDENTIFIER array_specifier SEMICOLON  */
-#line 897 "MachineIndependent/glslang.y"
+#line 917 "MachineIndependent/glslang.y"
                                                            {
         parseContext.declareBlock((yyvsp[-3].interm).loc, *(yyvsp[-3].interm).typeList, (yyvsp[-2].lex).string, (yyvsp[-1].interm).arraySizes);
         (yyval.interm.intermNode) = 0;
     }
-#line 6158 "MachineIndependent/glslang_tab.cpp"
+#line 6203 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 102: /* declaration: type_qualifier SEMICOLON  */
-#line 901 "MachineIndependent/glslang.y"
+#line 921 "MachineIndependent/glslang.y"
                                {
         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 6168 "MachineIndependent/glslang_tab.cpp"
+#line 6213 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 103: /* declaration: type_qualifier IDENTIFIER SEMICOLON  */
-#line 906 "MachineIndependent/glslang.y"
+#line 926 "MachineIndependent/glslang.y"
                                           {
         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 6178 "MachineIndependent/glslang_tab.cpp"
+#line 6223 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 104: /* declaration: type_qualifier IDENTIFIER identifier_list SEMICOLON  */
-#line 911 "MachineIndependent/glslang.y"
+#line 931 "MachineIndependent/glslang.y"
                                                           {
         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 6189 "MachineIndependent/glslang_tab.cpp"
+#line 6234 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 105: /* $@2: %empty  */
-#line 920 "MachineIndependent/glslang.y"
+#line 940 "MachineIndependent/glslang.y"
                                            { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); }
-#line 6195 "MachineIndependent/glslang_tab.cpp"
+#line 6240 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 106: /* block_structure: type_qualifier IDENTIFIER LEFT_BRACE $@2 struct_declaration_list RIGHT_BRACE  */
-#line 920 "MachineIndependent/glslang.y"
+#line 940 "MachineIndependent/glslang.y"
                                                                                                                           {
         --parseContext.blockNestingLevel;
         parseContext.blockName = (yyvsp[-4].lex).string;
@@ -6205,102 +6250,113 @@
         (yyval.interm).loc = (yyvsp[-5].interm.type).loc;
         (yyval.interm).typeList = (yyvsp[-1].interm.typeList);
     }
-#line 6209 "MachineIndependent/glslang_tab.cpp"
+#line 6254 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 107: /* identifier_list: COMMA IDENTIFIER  */
-#line 931 "MachineIndependent/glslang.y"
+#line 951 "MachineIndependent/glslang.y"
                        {
         (yyval.interm.identifierList) = new TIdentifierList;
         (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
     }
-#line 6218 "MachineIndependent/glslang_tab.cpp"
+#line 6263 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 108: /* identifier_list: identifier_list COMMA IDENTIFIER  */
-#line 935 "MachineIndependent/glslang.y"
+#line 955 "MachineIndependent/glslang.y"
                                        {
         (yyval.interm.identifierList) = (yyvsp[-2].interm.identifierList);
         (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string);
     }
-#line 6227 "MachineIndependent/glslang_tab.cpp"
+#line 6272 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 109: /* function_prototype: function_declarator RIGHT_PAREN  */
-#line 942 "MachineIndependent/glslang.y"
+#line 962 "MachineIndependent/glslang.y"
                                        {
         (yyval.interm).function = (yyvsp[-1].interm.function);
         if (parseContext.compileOnly) (yyval.interm).function->setExport();
         (yyval.interm).loc = (yyvsp[0].lex).loc;
     }
-#line 6237 "MachineIndependent/glslang_tab.cpp"
+#line 6282 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 110: /* function_prototype: function_declarator RIGHT_PAREN attribute  */
-#line 947 "MachineIndependent/glslang.y"
+#line 967 "MachineIndependent/glslang.y"
                                                 {
         (yyval.interm).function = (yyvsp[-2].interm.function);
         if (parseContext.compileOnly) (yyval.interm).function->setExport();
         (yyval.interm).loc = (yyvsp[-1].lex).loc;
+        const char * extensions[2] = { E_GL_EXT_subgroup_uniform_control_flow, E_GL_EXT_maximal_reconvergence };
+        parseContext.requireExtensions((yyvsp[-1].lex).loc, 2, extensions, "attribute");
         parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[0].interm.attributes));
     }
-#line 6248 "MachineIndependent/glslang_tab.cpp"
+#line 6295 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 111: /* function_prototype: attribute function_declarator RIGHT_PAREN  */
-#line 953 "MachineIndependent/glslang.y"
+#line 975 "MachineIndependent/glslang.y"
                                                 {
         (yyval.interm).function = (yyvsp[-1].interm.function);
         if (parseContext.compileOnly) (yyval.interm).function->setExport();
         (yyval.interm).loc = (yyvsp[0].lex).loc;
+        const char * extensions[2] = { E_GL_EXT_subgroup_uniform_control_flow, E_GL_EXT_maximal_reconvergence };
+        parseContext.requireExtensions((yyvsp[0].lex).loc, 2, extensions, "attribute");
         parseContext.handleFunctionAttributes((yyvsp[0].lex).loc, *(yyvsp[-2].interm.attributes));
     }
-#line 6259 "MachineIndependent/glslang_tab.cpp"
+#line 6308 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 112: /* function_prototype: attribute function_declarator RIGHT_PAREN attribute  */
-#line 959 "MachineIndependent/glslang.y"
+#line 983 "MachineIndependent/glslang.y"
                                                           {
         (yyval.interm).function = (yyvsp[-2].interm.function);
         if (parseContext.compileOnly) (yyval.interm).function->setExport();
         (yyval.interm).loc = (yyvsp[-1].lex).loc;
+        const char * extensions[2] = { E_GL_EXT_subgroup_uniform_control_flow, E_GL_EXT_maximal_reconvergence };
+        parseContext.requireExtensions((yyvsp[-1].lex).loc, 2, extensions, "attribute");
         parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[-3].interm.attributes));
         parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[0].interm.attributes));
     }
-#line 6271 "MachineIndependent/glslang_tab.cpp"
+#line 6322 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 113: /* function_declarator: function_header  */
-#line 969 "MachineIndependent/glslang.y"
+#line 995 "MachineIndependent/glslang.y"
                       {
         (yyval.interm.function) = (yyvsp[0].interm.function);
     }
-#line 6279 "MachineIndependent/glslang_tab.cpp"
+#line 6330 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 114: /* function_declarator: function_header_with_parameters  */
-#line 972 "MachineIndependent/glslang.y"
+#line 998 "MachineIndependent/glslang.y"
                                       {
         (yyval.interm.function) = (yyvsp[0].interm.function);
     }
-#line 6287 "MachineIndependent/glslang_tab.cpp"
+#line 6338 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 115: /* function_header_with_parameters: function_header parameter_declaration  */
-#line 979 "MachineIndependent/glslang.y"
+#line 1005 "MachineIndependent/glslang.y"
                                             {
         // Add the parameter
         (yyval.interm.function) = (yyvsp[-1].interm.function);
         if ((yyvsp[0].interm).param.type->getBasicType() != EbtVoid)
-            (yyvsp[-1].interm.function)->addParameter((yyvsp[0].interm).param);
+        {
+            if (!(parseContext.spvVersion.vulkan > 0 && parseContext.spvVersion.vulkanRelaxed))
+                (yyvsp[-1].interm.function)->addParameter((yyvsp[0].interm).param);
+            else
+                parseContext.vkRelaxedRemapFunctionParameter((yyvsp[-1].interm.function), (yyvsp[0].interm).param);
+        }
         else
             delete (yyvsp[0].interm).param.type;
     }
-#line 6300 "MachineIndependent/glslang_tab.cpp"
+#line 6356 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 116: /* function_header_with_parameters: function_header_with_parameters COMMA parameter_declaration  */
-#line 987 "MachineIndependent/glslang.y"
+#line 1018 "MachineIndependent/glslang.y"
                                                                   {
         //
         // Only first parameter of one-parameter functions can be void
@@ -6315,14 +6371,17 @@
         } else {
             // Add the parameter
             (yyval.interm.function) = (yyvsp[-2].interm.function);
-            (yyvsp[-2].interm.function)->addParameter((yyvsp[0].interm).param);
+            if (!(parseContext.spvVersion.vulkan > 0 && parseContext.spvVersion.vulkanRelaxed))
+                (yyvsp[-2].interm.function)->addParameter((yyvsp[0].interm).param);
+            else
+                parseContext.vkRelaxedRemapFunctionParameter((yyvsp[-2].interm.function), (yyvsp[0].interm).param);
         }
     }
-#line 6322 "MachineIndependent/glslang_tab.cpp"
+#line 6381 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 117: /* function_header: fully_specified_type IDENTIFIER LEFT_PAREN  */
-#line 1007 "MachineIndependent/glslang.y"
+#line 1041 "MachineIndependent/glslang.y"
                                                  {
         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",
@@ -6342,11 +6401,11 @@
         function = new TFunction((yyvsp[-1].lex).string, type);
         (yyval.interm.function) = function;
     }
-#line 6346 "MachineIndependent/glslang_tab.cpp"
+#line 6405 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 118: /* parameter_declarator: type_specifier IDENTIFIER  */
-#line 1030 "MachineIndependent/glslang.y"
+#line 1064 "MachineIndependent/glslang.y"
                                 {
         if ((yyvsp[-1].interm.type).arraySizes) {
             parseContext.profileRequires((yyvsp[-1].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
@@ -6358,15 +6417,15 @@
         }
         parseContext.reservedErrorCheck((yyvsp[0].lex).loc, *(yyvsp[0].lex).string);
 
-        TParameter param = {(yyvsp[0].lex).string, new TType((yyvsp[-1].interm.type))};
+        TParameter param = {(yyvsp[0].lex).string, new TType((yyvsp[-1].interm.type)), {}};
         (yyval.interm).loc = (yyvsp[0].lex).loc;
         (yyval.interm).param = param;
     }
-#line 6366 "MachineIndependent/glslang_tab.cpp"
+#line 6425 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 119: /* parameter_declarator: type_specifier IDENTIFIER array_specifier  */
-#line 1045 "MachineIndependent/glslang.y"
+#line 1079 "MachineIndependent/glslang.y"
                                                 {
         if ((yyvsp[-2].interm.type).arraySizes) {
             parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
@@ -6381,16 +6440,16 @@
         parseContext.arraySizeRequiredCheck((yyvsp[0].interm).loc, *(yyvsp[0].interm).arraySizes);
         parseContext.reservedErrorCheck((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string);
 
-        TParameter param = { (yyvsp[-1].lex).string, type };
+        TParameter param = { (yyvsp[-1].lex).string, type, {} };
 
         (yyval.interm).loc = (yyvsp[-1].lex).loc;
         (yyval.interm).param = param;
     }
-#line 6390 "MachineIndependent/glslang_tab.cpp"
+#line 6449 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 120: /* parameter_declaration: type_qualifier parameter_declarator  */
-#line 1070 "MachineIndependent/glslang.y"
+#line 1104 "MachineIndependent/glslang.y"
                                           {
         (yyval.interm) = (yyvsp[0].interm);
         if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone)
@@ -6402,11 +6461,11 @@
         parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type);
 
     }
-#line 6406 "MachineIndependent/glslang_tab.cpp"
+#line 6465 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 121: /* parameter_declaration: parameter_declarator  */
-#line 1081 "MachineIndependent/glslang.y"
+#line 1115 "MachineIndependent/glslang.y"
                            {
         (yyval.interm) = (yyvsp[0].interm);
 
@@ -6414,11 +6473,11 @@
         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(), (yyval.interm).param.type->isCoopMat());
     }
-#line 6418 "MachineIndependent/glslang_tab.cpp"
+#line 6477 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 122: /* parameter_declaration: type_qualifier parameter_type_specifier  */
-#line 1091 "MachineIndependent/glslang.y"
+#line 1125 "MachineIndependent/glslang.y"
                                               {
         (yyval.interm) = (yyvsp[0].interm);
         if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone)
@@ -6429,11 +6488,11 @@
         parseContext.parameterTypeCheck((yyvsp[0].interm).loc, (yyvsp[-1].interm.type).qualifier.storage, *(yyval.interm).param.type);
         parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type);
     }
-#line 6433 "MachineIndependent/glslang_tab.cpp"
+#line 6492 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 123: /* parameter_declaration: parameter_type_specifier  */
-#line 1101 "MachineIndependent/glslang.y"
+#line 1135 "MachineIndependent/glslang.y"
                                {
         (yyval.interm) = (yyvsp[0].interm);
 
@@ -6441,118 +6500,118 @@
         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(), (yyval.interm).param.type->isCoopMat());
     }
-#line 6445 "MachineIndependent/glslang_tab.cpp"
+#line 6504 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 124: /* parameter_type_specifier: type_specifier  */
-#line 1111 "MachineIndependent/glslang.y"
+#line 1145 "MachineIndependent/glslang.y"
                      {
-        TParameter param = { 0, new TType((yyvsp[0].interm.type)) };
+        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 6456 "MachineIndependent/glslang_tab.cpp"
+#line 6515 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 125: /* init_declarator_list: single_declaration  */
-#line 1120 "MachineIndependent/glslang.y"
+#line 1154 "MachineIndependent/glslang.y"
                          {
         (yyval.interm) = (yyvsp[0].interm);
     }
-#line 6464 "MachineIndependent/glslang_tab.cpp"
+#line 6523 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 126: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER  */
-#line 1123 "MachineIndependent/glslang.y"
+#line 1157 "MachineIndependent/glslang.y"
                                             {
         (yyval.interm) = (yyvsp[-2].interm);
         parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-2].interm).type);
     }
-#line 6473 "MachineIndependent/glslang_tab.cpp"
+#line 6532 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 127: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER array_specifier  */
-#line 1127 "MachineIndependent/glslang.y"
+#line 1161 "MachineIndependent/glslang.y"
                                                             {
         (yyval.interm) = (yyvsp[-3].interm);
         parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-3].interm).type, (yyvsp[0].interm).arraySizes);
     }
-#line 6482 "MachineIndependent/glslang_tab.cpp"
+#line 6541 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 128: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER array_specifier EQUAL initializer  */
-#line 1131 "MachineIndependent/glslang.y"
+#line 1165 "MachineIndependent/glslang.y"
                                                                               {
         (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 6492 "MachineIndependent/glslang_tab.cpp"
+#line 6551 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 129: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER EQUAL initializer  */
-#line 1136 "MachineIndependent/glslang.y"
+#line 1170 "MachineIndependent/glslang.y"
                                                               {
         (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 6502 "MachineIndependent/glslang_tab.cpp"
+#line 6561 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 130: /* single_declaration: fully_specified_type  */
-#line 1144 "MachineIndependent/glslang.y"
+#line 1178 "MachineIndependent/glslang.y"
                            {
         (yyval.interm).type = (yyvsp[0].interm.type);
         (yyval.interm).intermNode = 0;
         parseContext.declareTypeDefaults((yyval.interm).loc, (yyval.interm).type);
     }
-#line 6512 "MachineIndependent/glslang_tab.cpp"
+#line 6571 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 131: /* single_declaration: fully_specified_type IDENTIFIER  */
-#line 1149 "MachineIndependent/glslang.y"
+#line 1183 "MachineIndependent/glslang.y"
                                       {
         (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 6522 "MachineIndependent/glslang_tab.cpp"
+#line 6581 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 132: /* single_declaration: fully_specified_type IDENTIFIER array_specifier  */
-#line 1154 "MachineIndependent/glslang.y"
+#line 1188 "MachineIndependent/glslang.y"
                                                       {
         (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 6532 "MachineIndependent/glslang_tab.cpp"
+#line 6591 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 133: /* single_declaration: fully_specified_type IDENTIFIER array_specifier EQUAL initializer  */
-#line 1159 "MachineIndependent/glslang.y"
+#line 1193 "MachineIndependent/glslang.y"
                                                                         {
         (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 6542 "MachineIndependent/glslang_tab.cpp"
+#line 6601 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 134: /* single_declaration: fully_specified_type IDENTIFIER EQUAL initializer  */
-#line 1164 "MachineIndependent/glslang.y"
+#line 1198 "MachineIndependent/glslang.y"
                                                         {
         (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 6552 "MachineIndependent/glslang_tab.cpp"
+#line 6611 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 135: /* fully_specified_type: type_specifier  */
-#line 1173 "MachineIndependent/glslang.y"
+#line 1207 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.type) = (yyvsp[0].interm.type);
 
@@ -6563,11 +6622,11 @@
         }
         parseContext.precisionQualifierCheck((yyval.interm.type).loc, (yyval.interm.type).basicType, (yyval.interm.type).qualifier, (yyval.interm.type).isCoopmat());
     }
-#line 6567 "MachineIndependent/glslang_tab.cpp"
+#line 6626 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 136: /* fully_specified_type: type_qualifier type_specifier  */
-#line 1183 "MachineIndependent/glslang.y"
+#line 1217 "MachineIndependent/glslang.y"
                                      {
         parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, false, &(yyvsp[0].interm.type));
         parseContext.globalQualifierTypeCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, (yyvsp[0].interm.type));
@@ -6592,22 +6651,22 @@
              (parseContext.language == EShLangFragment && (yyval.interm.type).qualifier.storage == EvqVaryingIn)))
             (yyval.interm.type).qualifier.smooth = true;
     }
-#line 6596 "MachineIndependent/glslang_tab.cpp"
+#line 6655 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 137: /* invariant_qualifier: INVARIANT  */
-#line 1210 "MachineIndependent/glslang.y"
+#line 1244 "MachineIndependent/glslang.y"
                 {
         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 6607 "MachineIndependent/glslang_tab.cpp"
+#line 6666 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 138: /* interpolation_qualifier: SMOOTH  */
-#line 1219 "MachineIndependent/glslang.y"
+#line 1253 "MachineIndependent/glslang.y"
              {
         parseContext.globalCheck((yyvsp[0].lex).loc, "smooth");
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "smooth");
@@ -6615,11 +6674,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.smooth = true;
     }
-#line 6619 "MachineIndependent/glslang_tab.cpp"
+#line 6678 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 139: /* interpolation_qualifier: FLAT  */
-#line 1226 "MachineIndependent/glslang.y"
+#line 1260 "MachineIndependent/glslang.y"
            {
         parseContext.globalCheck((yyvsp[0].lex).loc, "flat");
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "flat");
@@ -6627,11 +6686,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.flat = true;
     }
-#line 6631 "MachineIndependent/glslang_tab.cpp"
+#line 6690 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 140: /* interpolation_qualifier: NOPERSPECTIVE  */
-#line 1233 "MachineIndependent/glslang.y"
+#line 1267 "MachineIndependent/glslang.y"
                     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "noperspective");
         parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 0, E_GL_NV_shader_noperspective_interpolation, "noperspective");
@@ -6639,11 +6698,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.nopersp = true;
     }
-#line 6643 "MachineIndependent/glslang_tab.cpp"
+#line 6702 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 141: /* interpolation_qualifier: EXPLICITINTERPAMD  */
-#line 1240 "MachineIndependent/glslang.y"
+#line 1274 "MachineIndependent/glslang.y"
                         {
         parseContext.globalCheck((yyvsp[0].lex).loc, "__explicitInterpAMD");
         parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation");
@@ -6651,11 +6710,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.explicitInterp = true;
     }
-#line 6655 "MachineIndependent/glslang_tab.cpp"
+#line 6714 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 142: /* interpolation_qualifier: PERVERTEXNV  */
-#line 1247 "MachineIndependent/glslang.y"
+#line 1281 "MachineIndependent/glslang.y"
                   {
         parseContext.globalCheck((yyvsp[0].lex).loc, "pervertexNV");
         parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric");
@@ -6664,11 +6723,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.pervertexNV = true;
     }
-#line 6668 "MachineIndependent/glslang_tab.cpp"
+#line 6727 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 143: /* interpolation_qualifier: PERVERTEXEXT  */
-#line 1255 "MachineIndependent/glslang.y"
+#line 1289 "MachineIndependent/glslang.y"
                    {
         parseContext.globalCheck((yyvsp[0].lex).loc, "pervertexEXT");
         parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 0, E_GL_EXT_fragment_shader_barycentric, "fragment shader barycentric");
@@ -6677,11 +6736,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.pervertexEXT = true;
     }
-#line 6681 "MachineIndependent/glslang_tab.cpp"
+#line 6740 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 144: /* interpolation_qualifier: PERPRIMITIVENV  */
-#line 1263 "MachineIndependent/glslang.y"
+#line 1297 "MachineIndependent/glslang.y"
                      {
         // No need for profile version or extension check. Shader stage already checks both.
         parseContext.globalCheck((yyvsp[0].lex).loc, "perprimitiveNV");
@@ -6692,11 +6751,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.perPrimitiveNV = true;
     }
-#line 6696 "MachineIndependent/glslang_tab.cpp"
+#line 6755 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 145: /* interpolation_qualifier: PERPRIMITIVEEXT  */
-#line 1273 "MachineIndependent/glslang.y"
+#line 1307 "MachineIndependent/glslang.y"
                       {
         // No need for profile version or extension check. Shader stage already checks both.
         parseContext.globalCheck((yyvsp[0].lex).loc, "perprimitiveEXT");
@@ -6707,11 +6766,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.perPrimitiveNV = true;
     }
-#line 6711 "MachineIndependent/glslang_tab.cpp"
+#line 6770 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 146: /* interpolation_qualifier: PERVIEWNV  */
-#line 1283 "MachineIndependent/glslang.y"
+#line 1317 "MachineIndependent/glslang.y"
                 {
         // No need for profile version or extension check. Shader stage already checks both.
         parseContext.globalCheck((yyvsp[0].lex).loc, "perviewNV");
@@ -6719,11 +6778,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.perViewNV = true;
     }
-#line 6723 "MachineIndependent/glslang_tab.cpp"
+#line 6782 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 147: /* interpolation_qualifier: PERTASKNV  */
-#line 1290 "MachineIndependent/glslang.y"
+#line 1324 "MachineIndependent/glslang.y"
                 {
         // No need for profile version or extension check. Shader stage already checks both.
         parseContext.globalCheck((yyvsp[0].lex).loc, "taskNV");
@@ -6731,84 +6790,84 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.perTaskNV = true;
     }
-#line 6735 "MachineIndependent/glslang_tab.cpp"
+#line 6794 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 148: /* layout_qualifier: LAYOUT LEFT_PAREN layout_qualifier_id_list RIGHT_PAREN  */
-#line 1300 "MachineIndependent/glslang.y"
+#line 1334 "MachineIndependent/glslang.y"
                                                              {
         (yyval.interm.type) = (yyvsp[-1].interm.type);
     }
-#line 6743 "MachineIndependent/glslang_tab.cpp"
+#line 6802 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 149: /* layout_qualifier_id_list: layout_qualifier_id  */
-#line 1306 "MachineIndependent/glslang.y"
+#line 1340 "MachineIndependent/glslang.y"
                           {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 6751 "MachineIndependent/glslang_tab.cpp"
+#line 6810 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 150: /* layout_qualifier_id_list: layout_qualifier_id_list COMMA layout_qualifier_id  */
-#line 1309 "MachineIndependent/glslang.y"
+#line 1343 "MachineIndependent/glslang.y"
                                                          {
         (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 6761 "MachineIndependent/glslang_tab.cpp"
+#line 6820 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 151: /* layout_qualifier_id: IDENTIFIER  */
-#line 1316 "MachineIndependent/glslang.y"
+#line 1350 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), *(yyvsp[0].lex).string);
     }
-#line 6770 "MachineIndependent/glslang_tab.cpp"
+#line 6829 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 152: /* layout_qualifier_id: IDENTIFIER EQUAL constant_expression  */
-#line 1320 "MachineIndependent/glslang.y"
+#line 1354 "MachineIndependent/glslang.y"
                                            {
         (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 6779 "MachineIndependent/glslang_tab.cpp"
+#line 6838 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 153: /* layout_qualifier_id: SHARED  */
-#line 1324 "MachineIndependent/glslang.y"
+#line 1358 "MachineIndependent/glslang.y"
              { // 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 6789 "MachineIndependent/glslang_tab.cpp"
+#line 6848 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 154: /* precise_qualifier: PRECISE  */
-#line 1332 "MachineIndependent/glslang.y"
+#line 1366 "MachineIndependent/glslang.y"
               {
         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 6800 "MachineIndependent/glslang_tab.cpp"
+#line 6859 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 155: /* type_qualifier: single_type_qualifier  */
-#line 1341 "MachineIndependent/glslang.y"
+#line 1375 "MachineIndependent/glslang.y"
                             {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 6808 "MachineIndependent/glslang_tab.cpp"
+#line 6867 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 156: /* type_qualifier: type_qualifier single_type_qualifier  */
-#line 1344 "MachineIndependent/glslang.y"
+#line 1378 "MachineIndependent/glslang.y"
                                            {
         (yyval.interm.type) = (yyvsp[-1].interm.type);
         if ((yyval.interm.type).basicType == EbtVoid)
@@ -6817,151 +6876,151 @@
         (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 6821 "MachineIndependent/glslang_tab.cpp"
+#line 6880 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 157: /* single_type_qualifier: storage_qualifier  */
-#line 1355 "MachineIndependent/glslang.y"
+#line 1389 "MachineIndependent/glslang.y"
                         {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 6829 "MachineIndependent/glslang_tab.cpp"
+#line 6888 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 158: /* single_type_qualifier: layout_qualifier  */
-#line 1358 "MachineIndependent/glslang.y"
+#line 1392 "MachineIndependent/glslang.y"
                        {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 6837 "MachineIndependent/glslang_tab.cpp"
+#line 6896 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 159: /* single_type_qualifier: precision_qualifier  */
-#line 1361 "MachineIndependent/glslang.y"
+#line 1395 "MachineIndependent/glslang.y"
                           {
         parseContext.checkPrecisionQualifier((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier.precision);
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 6846 "MachineIndependent/glslang_tab.cpp"
+#line 6905 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 160: /* single_type_qualifier: interpolation_qualifier  */
-#line 1365 "MachineIndependent/glslang.y"
+#line 1399 "MachineIndependent/glslang.y"
                               {
         // allow inheritance of storage qualifier from block declaration
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 6855 "MachineIndependent/glslang_tab.cpp"
+#line 6914 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 161: /* single_type_qualifier: invariant_qualifier  */
-#line 1369 "MachineIndependent/glslang.y"
+#line 1403 "MachineIndependent/glslang.y"
                           {
         // allow inheritance of storage qualifier from block declaration
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 6864 "MachineIndependent/glslang_tab.cpp"
+#line 6923 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 162: /* single_type_qualifier: precise_qualifier  */
-#line 1373 "MachineIndependent/glslang.y"
+#line 1407 "MachineIndependent/glslang.y"
                         {
         // allow inheritance of storage qualifier from block declaration
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 6873 "MachineIndependent/glslang_tab.cpp"
+#line 6932 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 163: /* single_type_qualifier: non_uniform_qualifier  */
-#line 1377 "MachineIndependent/glslang.y"
+#line 1411 "MachineIndependent/glslang.y"
                             {
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 6881 "MachineIndependent/glslang_tab.cpp"
+#line 6940 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 164: /* single_type_qualifier: spirv_storage_class_qualifier  */
-#line 1380 "MachineIndependent/glslang.y"
+#line 1414 "MachineIndependent/glslang.y"
                                     {
         parseContext.globalCheck((yyvsp[0].interm.type).loc, "spirv_storage_class");
         parseContext.requireExtensions((yyvsp[0].interm.type).loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V storage class qualifier");
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 6891 "MachineIndependent/glslang_tab.cpp"
+#line 6950 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 165: /* single_type_qualifier: spirv_decorate_qualifier  */
-#line 1385 "MachineIndependent/glslang.y"
+#line 1419 "MachineIndependent/glslang.y"
                                {
         parseContext.requireExtensions((yyvsp[0].interm.type).loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V decorate qualifier");
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 6900 "MachineIndependent/glslang_tab.cpp"
+#line 6959 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 166: /* single_type_qualifier: SPIRV_BY_REFERENCE  */
-#line 1389 "MachineIndependent/glslang.y"
+#line 1423 "MachineIndependent/glslang.y"
                          {
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_spirv_intrinsics, "spirv_by_reference");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.setSpirvByReference();
     }
-#line 6910 "MachineIndependent/glslang_tab.cpp"
+#line 6969 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 167: /* single_type_qualifier: SPIRV_LITERAL  */
-#line 1394 "MachineIndependent/glslang.y"
+#line 1428 "MachineIndependent/glslang.y"
                     {
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_spirv_intrinsics, "spirv_by_literal");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.setSpirvLiteral();
     }
-#line 6920 "MachineIndependent/glslang_tab.cpp"
+#line 6979 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 168: /* storage_qualifier: CONST  */
-#line 1402 "MachineIndependent/glslang.y"
+#line 1436 "MachineIndependent/glslang.y"
             {
         (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 6929 "MachineIndependent/glslang_tab.cpp"
+#line 6988 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 169: /* storage_qualifier: INOUT  */
-#line 1406 "MachineIndependent/glslang.y"
+#line 1440 "MachineIndependent/glslang.y"
             {
         parseContext.globalCheck((yyvsp[0].lex).loc, "inout");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqInOut;
     }
-#line 6939 "MachineIndependent/glslang_tab.cpp"
+#line 6998 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 170: /* storage_qualifier: IN  */
-#line 1411 "MachineIndependent/glslang.y"
+#line 1445 "MachineIndependent/glslang.y"
          {
         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 6950 "MachineIndependent/glslang_tab.cpp"
+#line 7009 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 171: /* storage_qualifier: OUT  */
-#line 1417 "MachineIndependent/glslang.y"
+#line 1451 "MachineIndependent/glslang.y"
           {
         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 6961 "MachineIndependent/glslang_tab.cpp"
+#line 7020 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 172: /* storage_qualifier: CENTROID  */
-#line 1423 "MachineIndependent/glslang.y"
+#line 1457 "MachineIndependent/glslang.y"
                {
         parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 120, 0, "centroid");
         parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "centroid");
@@ -6969,31 +7028,31 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.centroid = true;
     }
-#line 6973 "MachineIndependent/glslang_tab.cpp"
+#line 7032 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 173: /* storage_qualifier: UNIFORM  */
-#line 1430 "MachineIndependent/glslang.y"
+#line 1464 "MachineIndependent/glslang.y"
               {
         parseContext.globalCheck((yyvsp[0].lex).loc, "uniform");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqUniform;
     }
-#line 6983 "MachineIndependent/glslang_tab.cpp"
+#line 7042 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 174: /* storage_qualifier: TILEIMAGEEXT  */
-#line 1435 "MachineIndependent/glslang.y"
+#line 1469 "MachineIndependent/glslang.y"
                    {
         parseContext.globalCheck((yyvsp[0].lex).loc, "tileImageEXT");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqTileImageEXT;
     }
-#line 6993 "MachineIndependent/glslang_tab.cpp"
+#line 7052 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 175: /* storage_qualifier: SHARED  */
-#line 1440 "MachineIndependent/glslang.y"
+#line 1474 "MachineIndependent/glslang.y"
              {
         parseContext.globalCheck((yyvsp[0].lex).loc, "shared");
         parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared");
@@ -7002,21 +7061,21 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqShared;
     }
-#line 7006 "MachineIndependent/glslang_tab.cpp"
+#line 7065 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 176: /* storage_qualifier: BUFFER  */
-#line 1448 "MachineIndependent/glslang.y"
+#line 1482 "MachineIndependent/glslang.y"
              {
         parseContext.globalCheck((yyvsp[0].lex).loc, "buffer");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqBuffer;
     }
-#line 7016 "MachineIndependent/glslang_tab.cpp"
+#line 7075 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 177: /* storage_qualifier: ATTRIBUTE  */
-#line 1453 "MachineIndependent/glslang.y"
+#line 1487 "MachineIndependent/glslang.y"
                 {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangVertex, "attribute");
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "attribute");
@@ -7029,11 +7088,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqVaryingIn;
     }
-#line 7033 "MachineIndependent/glslang_tab.cpp"
+#line 7092 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 178: /* storage_qualifier: VARYING  */
-#line 1465 "MachineIndependent/glslang.y"
+#line 1499 "MachineIndependent/glslang.y"
               {
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ENoProfile, 130, "varying");
         parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "varying");
@@ -7048,32 +7107,32 @@
         else
             (yyval.interm.type).qualifier.storage = EvqVaryingIn;
     }
-#line 7052 "MachineIndependent/glslang_tab.cpp"
+#line 7111 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 179: /* storage_qualifier: PATCH  */
-#line 1479 "MachineIndependent/glslang.y"
+#line 1513 "MachineIndependent/glslang.y"
             {
         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 7063 "MachineIndependent/glslang_tab.cpp"
+#line 7122 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 180: /* storage_qualifier: SAMPLE  */
-#line 1485 "MachineIndependent/glslang.y"
+#line 1519 "MachineIndependent/glslang.y"
              {
         parseContext.globalCheck((yyvsp[0].lex).loc, "sample");
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.sample = true;
     }
-#line 7073 "MachineIndependent/glslang_tab.cpp"
+#line 7132 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 181: /* storage_qualifier: HITATTRNV  */
-#line 1490 "MachineIndependent/glslang.y"
+#line 1524 "MachineIndependent/glslang.y"
                 {
         parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeNV");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask
@@ -7082,11 +7141,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqHitAttr;
     }
-#line 7086 "MachineIndependent/glslang_tab.cpp"
+#line 7145 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 182: /* storage_qualifier: HITOBJECTATTRNV  */
-#line 1498 "MachineIndependent/glslang.y"
+#line 1532 "MachineIndependent/glslang.y"
                           {
         parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeNV");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask
@@ -7095,11 +7154,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqHitObjectAttrNV;
 	}
-#line 7099 "MachineIndependent/glslang_tab.cpp"
+#line 7158 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 183: /* storage_qualifier: HITATTREXT  */
-#line 1506 "MachineIndependent/glslang.y"
+#line 1540 "MachineIndependent/glslang.y"
                  {
         parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeEXT");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask
@@ -7108,11 +7167,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqHitAttr;
     }
-#line 7112 "MachineIndependent/glslang_tab.cpp"
+#line 7171 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 184: /* storage_qualifier: PAYLOADNV  */
-#line 1514 "MachineIndependent/glslang.y"
+#line 1548 "MachineIndependent/glslang.y"
                 {
         parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadNV");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask |
@@ -7121,11 +7180,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqPayload;
     }
-#line 7125 "MachineIndependent/glslang_tab.cpp"
+#line 7184 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 185: /* storage_qualifier: PAYLOADEXT  */
-#line 1522 "MachineIndependent/glslang.y"
+#line 1556 "MachineIndependent/glslang.y"
                  {
         parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadEXT");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask |
@@ -7134,11 +7193,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqPayload;
     }
-#line 7138 "MachineIndependent/glslang_tab.cpp"
+#line 7197 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 186: /* storage_qualifier: PAYLOADINNV  */
-#line 1530 "MachineIndependent/glslang.y"
+#line 1564 "MachineIndependent/glslang.y"
                   {
         parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInNV");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask |
@@ -7147,11 +7206,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqPayloadIn;
     }
-#line 7151 "MachineIndependent/glslang_tab.cpp"
+#line 7210 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 187: /* storage_qualifier: PAYLOADINEXT  */
-#line 1538 "MachineIndependent/glslang.y"
+#line 1572 "MachineIndependent/glslang.y"
                    {
         parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInEXT");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask |
@@ -7160,11 +7219,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqPayloadIn;
     }
-#line 7164 "MachineIndependent/glslang_tab.cpp"
+#line 7223 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 188: /* storage_qualifier: CALLDATANV  */
-#line 1546 "MachineIndependent/glslang.y"
+#line 1580 "MachineIndependent/glslang.y"
                  {
         parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataNV");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask |
@@ -7173,11 +7232,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqCallableData;
     }
-#line 7177 "MachineIndependent/glslang_tab.cpp"
+#line 7236 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 189: /* storage_qualifier: CALLDATAEXT  */
-#line 1554 "MachineIndependent/glslang.y"
+#line 1588 "MachineIndependent/glslang.y"
                   {
         parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataEXT");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask |
@@ -7186,11 +7245,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqCallableData;
     }
-#line 7190 "MachineIndependent/glslang_tab.cpp"
+#line 7249 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 190: /* storage_qualifier: CALLDATAINNV  */
-#line 1562 "MachineIndependent/glslang.y"
+#line 1596 "MachineIndependent/glslang.y"
                    {
         parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInNV");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInNV");
@@ -7198,11 +7257,11 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqCallableDataIn;
     }
-#line 7202 "MachineIndependent/glslang_tab.cpp"
+#line 7261 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 191: /* storage_qualifier: CALLDATAINEXT  */
-#line 1569 "MachineIndependent/glslang.y"
+#line 1603 "MachineIndependent/glslang.y"
                     {
         parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInEXT");
         parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInEXT");
@@ -7210,138 +7269,138 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqCallableDataIn;
     }
-#line 7214 "MachineIndependent/glslang_tab.cpp"
+#line 7273 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 192: /* storage_qualifier: COHERENT  */
-#line 1576 "MachineIndependent/glslang.y"
+#line 1610 "MachineIndependent/glslang.y"
                {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.coherent = true;
     }
-#line 7223 "MachineIndependent/glslang_tab.cpp"
+#line 7282 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 193: /* storage_qualifier: DEVICECOHERENT  */
-#line 1580 "MachineIndependent/glslang.y"
+#line 1614 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "devicecoherent");
         (yyval.interm.type).qualifier.devicecoherent = true;
     }
-#line 7233 "MachineIndependent/glslang_tab.cpp"
+#line 7292 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 194: /* storage_qualifier: QUEUEFAMILYCOHERENT  */
-#line 1585 "MachineIndependent/glslang.y"
+#line 1619 "MachineIndependent/glslang.y"
                           {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "queuefamilycoherent");
         (yyval.interm.type).qualifier.queuefamilycoherent = true;
     }
-#line 7243 "MachineIndependent/glslang_tab.cpp"
+#line 7302 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 195: /* storage_qualifier: WORKGROUPCOHERENT  */
-#line 1590 "MachineIndependent/glslang.y"
+#line 1624 "MachineIndependent/glslang.y"
                         {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "workgroupcoherent");
         (yyval.interm.type).qualifier.workgroupcoherent = true;
     }
-#line 7253 "MachineIndependent/glslang_tab.cpp"
+#line 7312 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 196: /* storage_qualifier: SUBGROUPCOHERENT  */
-#line 1595 "MachineIndependent/glslang.y"
+#line 1629 "MachineIndependent/glslang.y"
                        {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "subgroupcoherent");
         (yyval.interm.type).qualifier.subgroupcoherent = true;
     }
-#line 7263 "MachineIndependent/glslang_tab.cpp"
+#line 7322 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 197: /* storage_qualifier: NONPRIVATE  */
-#line 1600 "MachineIndependent/glslang.y"
+#line 1634 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "nonprivate");
         (yyval.interm.type).qualifier.nonprivate = true;
     }
-#line 7273 "MachineIndependent/glslang_tab.cpp"
+#line 7332 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 198: /* storage_qualifier: SHADERCALLCOHERENT  */
-#line 1605 "MachineIndependent/glslang.y"
+#line 1639 "MachineIndependent/glslang.y"
                          {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_ray_tracing, "shadercallcoherent");
         (yyval.interm.type).qualifier.shadercallcoherent = true;
     }
-#line 7283 "MachineIndependent/glslang_tab.cpp"
+#line 7342 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 199: /* storage_qualifier: VOLATILE  */
-#line 1610 "MachineIndependent/glslang.y"
+#line 1644 "MachineIndependent/glslang.y"
                {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.volatil = true;
     }
-#line 7292 "MachineIndependent/glslang_tab.cpp"
+#line 7351 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 200: /* storage_qualifier: RESTRICT  */
-#line 1614 "MachineIndependent/glslang.y"
+#line 1648 "MachineIndependent/glslang.y"
                {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.restrict = true;
     }
-#line 7301 "MachineIndependent/glslang_tab.cpp"
+#line 7360 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 201: /* storage_qualifier: READONLY  */
-#line 1618 "MachineIndependent/glslang.y"
+#line 1652 "MachineIndependent/glslang.y"
                {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.readonly = true;
     }
-#line 7310 "MachineIndependent/glslang_tab.cpp"
+#line 7369 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 202: /* storage_qualifier: WRITEONLY  */
-#line 1622 "MachineIndependent/glslang.y"
+#line 1656 "MachineIndependent/glslang.y"
                 {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.writeonly = true;
     }
-#line 7319 "MachineIndependent/glslang_tab.cpp"
+#line 7378 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 203: /* storage_qualifier: SUBROUTINE  */
-#line 1626 "MachineIndependent/glslang.y"
+#line 1660 "MachineIndependent/glslang.y"
                  {
         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 7330 "MachineIndependent/glslang_tab.cpp"
+#line 7389 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 204: /* storage_qualifier: SUBROUTINE LEFT_PAREN type_name_list RIGHT_PAREN  */
-#line 1632 "MachineIndependent/glslang.y"
+#line 1666 "MachineIndependent/glslang.y"
                                                        {
         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 7341 "MachineIndependent/glslang_tab.cpp"
+#line 7400 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 205: /* storage_qualifier: TASKPAYLOADWORKGROUPEXT  */
-#line 1638 "MachineIndependent/glslang.y"
+#line 1672 "MachineIndependent/glslang.y"
                               {
         // No need for profile version or extension check. Shader stage already checks both.
         parseContext.globalCheck((yyvsp[0].lex).loc, "taskPayloadSharedEXT");
@@ -7349,38 +7408,38 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqtaskPayloadSharedEXT;
     }
-#line 7353 "MachineIndependent/glslang_tab.cpp"
+#line 7412 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 206: /* non_uniform_qualifier: NONUNIFORM  */
-#line 1648 "MachineIndependent/glslang.y"
+#line 1682 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc);
         (yyval.interm.type).qualifier.nonUniform = true;
     }
-#line 7362 "MachineIndependent/glslang_tab.cpp"
+#line 7421 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 207: /* type_name_list: IDENTIFIER  */
-#line 1655 "MachineIndependent/glslang.y"
+#line 1689 "MachineIndependent/glslang.y"
                  {
         // TODO
     }
-#line 7370 "MachineIndependent/glslang_tab.cpp"
+#line 7429 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 208: /* type_name_list: type_name_list COMMA IDENTIFIER  */
-#line 1658 "MachineIndependent/glslang.y"
+#line 1692 "MachineIndependent/glslang.y"
                                       {
         // 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 7380 "MachineIndependent/glslang_tab.cpp"
+#line 7439 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 209: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt  */
-#line 1666 "MachineIndependent/glslang.y"
+#line 1700 "MachineIndependent/glslang.y"
                                                            {
         (yyval.interm.type) = (yyvsp[-1].interm.type);
         (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type));
@@ -7388,11 +7447,11 @@
         parseContext.coopMatTypeParametersCheck((yyvsp[-1].interm.type).loc, (yyval.interm.type));
 
     }
-#line 7392 "MachineIndependent/glslang_tab.cpp"
+#line 7451 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 210: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt array_specifier  */
-#line 1673 "MachineIndependent/glslang.y"
+#line 1707 "MachineIndependent/glslang.y"
                                                                            {
         parseContext.arrayOfArrayVersionCheck((yyvsp[0].interm).loc, (yyvsp[0].interm).arraySizes);
         (yyval.interm.type) = (yyvsp[-2].interm.type);
@@ -7401,21 +7460,21 @@
         (yyval.interm.type).arraySizes = (yyvsp[0].interm).arraySizes;
         parseContext.coopMatTypeParametersCheck((yyvsp[-2].interm.type).loc, (yyval.interm.type));
     }
-#line 7405 "MachineIndependent/glslang_tab.cpp"
+#line 7464 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 211: /* array_specifier: LEFT_BRACKET RIGHT_BRACKET  */
-#line 1684 "MachineIndependent/glslang.y"
+#line 1718 "MachineIndependent/glslang.y"
                                  {
         (yyval.interm).loc = (yyvsp[-1].lex).loc;
         (yyval.interm).arraySizes = new TArraySizes;
         (yyval.interm).arraySizes->addInnerSize();
     }
-#line 7415 "MachineIndependent/glslang_tab.cpp"
+#line 7474 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 212: /* array_specifier: LEFT_BRACKET conditional_expression RIGHT_BRACKET  */
-#line 1689 "MachineIndependent/glslang.y"
+#line 1723 "MachineIndependent/glslang.y"
                                                         {
         (yyval.interm).loc = (yyvsp[-2].lex).loc;
         (yyval.interm).arraySizes = new TArraySizes;
@@ -7424,20 +7483,20 @@
         parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size");
         (yyval.interm).arraySizes->addInnerSize(size);
     }
-#line 7428 "MachineIndependent/glslang_tab.cpp"
+#line 7487 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 213: /* array_specifier: array_specifier LEFT_BRACKET RIGHT_BRACKET  */
-#line 1697 "MachineIndependent/glslang.y"
+#line 1731 "MachineIndependent/glslang.y"
                                                  {
         (yyval.interm) = (yyvsp[-2].interm);
         (yyval.interm).arraySizes->addInnerSize();
     }
-#line 7437 "MachineIndependent/glslang_tab.cpp"
+#line 7496 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 214: /* array_specifier: array_specifier LEFT_BRACKET conditional_expression RIGHT_BRACKET  */
-#line 1701 "MachineIndependent/glslang.y"
+#line 1735 "MachineIndependent/glslang.y"
                                                                         {
         (yyval.interm) = (yyvsp[-3].interm);
 
@@ -7445,45 +7504,46 @@
         parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size");
         (yyval.interm).arraySizes->addInnerSize(size);
     }
-#line 7449 "MachineIndependent/glslang_tab.cpp"
+#line 7508 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 215: /* type_parameter_specifier_opt: type_parameter_specifier  */
-#line 1711 "MachineIndependent/glslang.y"
+#line 1745 "MachineIndependent/glslang.y"
                                {
         (yyval.interm.typeParameters) = (yyvsp[0].interm.typeParameters);
     }
-#line 7457 "MachineIndependent/glslang_tab.cpp"
+#line 7516 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 216: /* type_parameter_specifier_opt: %empty  */
-#line 1714 "MachineIndependent/glslang.y"
+#line 1748 "MachineIndependent/glslang.y"
                         {
         (yyval.interm.typeParameters) = 0;
     }
-#line 7465 "MachineIndependent/glslang_tab.cpp"
+#line 7524 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 217: /* type_parameter_specifier: LEFT_ANGLE type_parameter_specifier_list RIGHT_ANGLE  */
-#line 1720 "MachineIndependent/glslang.y"
+#line 1754 "MachineIndependent/glslang.y"
                                                            {
         (yyval.interm.typeParameters) = (yyvsp[-1].interm.typeParameters);
     }
-#line 7473 "MachineIndependent/glslang_tab.cpp"
+#line 7532 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 218: /* type_parameter_specifier_list: type_specifier  */
-#line 1726 "MachineIndependent/glslang.y"
+#line 1760 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.typeParameters) = new TTypeParameters;
         (yyval.interm.typeParameters)->arraySizes = new TArraySizes;
+        (yyval.interm.typeParameters)->spirvType = (yyvsp[0].interm.type).spirvType;
         (yyval.interm.typeParameters)->basicType = (yyvsp[0].interm.type).basicType;
     }
-#line 7483 "MachineIndependent/glslang_tab.cpp"
+#line 7543 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 219: /* type_parameter_specifier_list: unary_expression  */
-#line 1731 "MachineIndependent/glslang.y"
+#line 1766 "MachineIndependent/glslang.y"
                        {
         (yyval.interm.typeParameters) = new TTypeParameters;
         (yyval.interm.typeParameters)->arraySizes = new TArraySizes;
@@ -7492,11 +7552,11 @@
         parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter", true);
         (yyval.interm.typeParameters)->arraySizes->addInnerSize(size);
     }
-#line 7496 "MachineIndependent/glslang_tab.cpp"
+#line 7556 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 220: /* type_parameter_specifier_list: type_parameter_specifier_list COMMA unary_expression  */
-#line 1739 "MachineIndependent/glslang.y"
+#line 1774 "MachineIndependent/glslang.y"
                                                            {
         (yyval.interm.typeParameters) = (yyvsp[-2].interm.typeParameters);
 
@@ -7504,251 +7564,191 @@
         parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter", true);
         (yyval.interm.typeParameters)->arraySizes->addInnerSize(size);
     }
-#line 7508 "MachineIndependent/glslang_tab.cpp"
+#line 7568 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 221: /* type_specifier_nonarray: VOID  */
-#line 1749 "MachineIndependent/glslang.y"
+#line 1784 "MachineIndependent/glslang.y"
            {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtVoid;
     }
-#line 7517 "MachineIndependent/glslang_tab.cpp"
+#line 7577 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 222: /* type_specifier_nonarray: FLOAT  */
-#line 1753 "MachineIndependent/glslang.y"
+#line 1788 "MachineIndependent/glslang.y"
             {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
     }
-#line 7526 "MachineIndependent/glslang_tab.cpp"
+#line 7586 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 223: /* type_specifier_nonarray: INT  */
-#line 1757 "MachineIndependent/glslang.y"
+#line 1792 "MachineIndependent/glslang.y"
           {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtInt;
     }
-#line 7535 "MachineIndependent/glslang_tab.cpp"
+#line 7595 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 224: /* type_specifier_nonarray: UINT  */
-#line 1761 "MachineIndependent/glslang.y"
+#line 1796 "MachineIndependent/glslang.y"
            {
         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 7545 "MachineIndependent/glslang_tab.cpp"
+#line 7605 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 225: /* type_specifier_nonarray: BOOL  */
-#line 1766 "MachineIndependent/glslang.y"
+#line 1801 "MachineIndependent/glslang.y"
            {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtBool;
     }
-#line 7554 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 226: /* type_specifier_nonarray: VEC2  */
-#line 1770 "MachineIndependent/glslang.y"
-           {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setVector(2);
-    }
-#line 7564 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 227: /* type_specifier_nonarray: VEC3  */
-#line 1775 "MachineIndependent/glslang.y"
-           {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setVector(3);
-    }
-#line 7574 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 228: /* type_specifier_nonarray: VEC4  */
-#line 1780 "MachineIndependent/glslang.y"
-           {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setVector(4);
-    }
-#line 7584 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 229: /* type_specifier_nonarray: BVEC2  */
-#line 1785 "MachineIndependent/glslang.y"
-            {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtBool;
-        (yyval.interm.type).setVector(2);
-    }
-#line 7594 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 230: /* type_specifier_nonarray: BVEC3  */
-#line 1790 "MachineIndependent/glslang.y"
-            {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtBool;
-        (yyval.interm.type).setVector(3);
-    }
-#line 7604 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 231: /* type_specifier_nonarray: BVEC4  */
-#line 1795 "MachineIndependent/glslang.y"
-            {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtBool;
-        (yyval.interm.type).setVector(4);
-    }
 #line 7614 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 232: /* type_specifier_nonarray: IVEC2  */
-#line 1800 "MachineIndependent/glslang.y"
-            {
+  case 226: /* type_specifier_nonarray: VEC2  */
+#line 1805 "MachineIndependent/glslang.y"
+           {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(2);
     }
 #line 7624 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 233: /* type_specifier_nonarray: IVEC3  */
-#line 1805 "MachineIndependent/glslang.y"
-            {
+  case 227: /* type_specifier_nonarray: VEC3  */
+#line 1810 "MachineIndependent/glslang.y"
+           {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(3);
     }
 #line 7634 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 234: /* type_specifier_nonarray: IVEC4  */
-#line 1810 "MachineIndependent/glslang.y"
-            {
+  case 228: /* type_specifier_nonarray: VEC4  */
+#line 1815 "MachineIndependent/glslang.y"
+           {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setVector(4);
     }
 #line 7644 "MachineIndependent/glslang_tab.cpp"
     break;
 
+  case 229: /* type_specifier_nonarray: BVEC2  */
+#line 1820 "MachineIndependent/glslang.y"
+            {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtBool;
+        (yyval.interm.type).setVector(2);
+    }
+#line 7654 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 230: /* type_specifier_nonarray: BVEC3  */
+#line 1825 "MachineIndependent/glslang.y"
+            {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtBool;
+        (yyval.interm.type).setVector(3);
+    }
+#line 7664 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 231: /* type_specifier_nonarray: BVEC4  */
+#line 1830 "MachineIndependent/glslang.y"
+            {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtBool;
+        (yyval.interm.type).setVector(4);
+    }
+#line 7674 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 232: /* type_specifier_nonarray: IVEC2  */
+#line 1835 "MachineIndependent/glslang.y"
+            {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).setVector(2);
+    }
+#line 7684 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 233: /* type_specifier_nonarray: IVEC3  */
+#line 1840 "MachineIndependent/glslang.y"
+            {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).setVector(3);
+    }
+#line 7694 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 234: /* type_specifier_nonarray: IVEC4  */
+#line 1845 "MachineIndependent/glslang.y"
+            {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtInt;
+        (yyval.interm.type).setVector(4);
+    }
+#line 7704 "MachineIndependent/glslang_tab.cpp"
+    break;
+
   case 235: /* type_specifier_nonarray: UVEC2  */
-#line 1815 "MachineIndependent/glslang.y"
+#line 1850 "MachineIndependent/glslang.y"
             {
         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 7655 "MachineIndependent/glslang_tab.cpp"
+#line 7715 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 236: /* type_specifier_nonarray: UVEC3  */
-#line 1821 "MachineIndependent/glslang.y"
+#line 1856 "MachineIndependent/glslang.y"
             {
         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 7666 "MachineIndependent/glslang_tab.cpp"
+#line 7726 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 237: /* type_specifier_nonarray: UVEC4  */
-#line 1827 "MachineIndependent/glslang.y"
+#line 1862 "MachineIndependent/glslang.y"
             {
         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 7677 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 238: /* type_specifier_nonarray: MAT2  */
-#line 1833 "MachineIndependent/glslang.y"
-           {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(2, 2);
-    }
-#line 7687 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 239: /* type_specifier_nonarray: MAT3  */
-#line 1838 "MachineIndependent/glslang.y"
-           {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(3, 3);
-    }
-#line 7697 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 240: /* type_specifier_nonarray: MAT4  */
-#line 1843 "MachineIndependent/glslang.y"
-           {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(4, 4);
-    }
-#line 7707 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 241: /* type_specifier_nonarray: MAT2X2  */
-#line 1848 "MachineIndependent/glslang.y"
-             {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(2, 2);
-    }
-#line 7717 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 242: /* type_specifier_nonarray: MAT2X3  */
-#line 1853 "MachineIndependent/glslang.y"
-             {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(2, 3);
-    }
-#line 7727 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 243: /* type_specifier_nonarray: MAT2X4  */
-#line 1858 "MachineIndependent/glslang.y"
-             {
-        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-        (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(2, 4);
-    }
 #line 7737 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 244: /* type_specifier_nonarray: MAT3X2  */
-#line 1863 "MachineIndependent/glslang.y"
-             {
+  case 238: /* type_specifier_nonarray: MAT2  */
+#line 1868 "MachineIndependent/glslang.y"
+           {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
-        (yyval.interm.type).setMatrix(3, 2);
+        (yyval.interm.type).setMatrix(2, 2);
     }
 #line 7747 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 245: /* type_specifier_nonarray: MAT3X3  */
-#line 1868 "MachineIndependent/glslang.y"
-             {
+  case 239: /* type_specifier_nonarray: MAT3  */
+#line 1873 "MachineIndependent/glslang.y"
+           {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 3);
@@ -7756,48 +7756,108 @@
 #line 7757 "MachineIndependent/glslang_tab.cpp"
     break;
 
+  case 240: /* type_specifier_nonarray: MAT4  */
+#line 1878 "MachineIndependent/glslang.y"
+           {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(4, 4);
+    }
+#line 7767 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 241: /* type_specifier_nonarray: MAT2X2  */
+#line 1883 "MachineIndependent/glslang.y"
+             {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(2, 2);
+    }
+#line 7777 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 242: /* type_specifier_nonarray: MAT2X3  */
+#line 1888 "MachineIndependent/glslang.y"
+             {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(2, 3);
+    }
+#line 7787 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 243: /* type_specifier_nonarray: MAT2X4  */
+#line 1893 "MachineIndependent/glslang.y"
+             {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(2, 4);
+    }
+#line 7797 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 244: /* type_specifier_nonarray: MAT3X2  */
+#line 1898 "MachineIndependent/glslang.y"
+             {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(3, 2);
+    }
+#line 7807 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 245: /* type_specifier_nonarray: MAT3X3  */
+#line 1903 "MachineIndependent/glslang.y"
+             {
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtFloat;
+        (yyval.interm.type).setMatrix(3, 3);
+    }
+#line 7817 "MachineIndependent/glslang_tab.cpp"
+    break;
+
   case 246: /* type_specifier_nonarray: MAT3X4  */
-#line 1873 "MachineIndependent/glslang.y"
+#line 1908 "MachineIndependent/glslang.y"
              {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 7767 "MachineIndependent/glslang_tab.cpp"
+#line 7827 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 247: /* type_specifier_nonarray: MAT4X2  */
-#line 1878 "MachineIndependent/glslang.y"
+#line 1913 "MachineIndependent/glslang.y"
              {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 7777 "MachineIndependent/glslang_tab.cpp"
+#line 7837 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 248: /* type_specifier_nonarray: MAT4X3  */
-#line 1883 "MachineIndependent/glslang.y"
+#line 1918 "MachineIndependent/glslang.y"
              {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 7787 "MachineIndependent/glslang_tab.cpp"
+#line 7847 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 249: /* type_specifier_nonarray: MAT4X4  */
-#line 1888 "MachineIndependent/glslang.y"
+#line 1923 "MachineIndependent/glslang.y"
              {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtFloat;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 7797 "MachineIndependent/glslang_tab.cpp"
+#line 7857 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 250: /* type_specifier_nonarray: DOUBLE  */
-#line 1893 "MachineIndependent/glslang.y"
+#line 1928 "MachineIndependent/glslang.y"
              {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -7805,121 +7865,121 @@
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtDouble;
     }
-#line 7809 "MachineIndependent/glslang_tab.cpp"
+#line 7869 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 251: /* type_specifier_nonarray: FLOAT16_T  */
-#line 1900 "MachineIndependent/glslang.y"
+#line 1935 "MachineIndependent/glslang.y"
                 {
         parseContext.float16ScalarVectorCheck((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;
     }
-#line 7819 "MachineIndependent/glslang_tab.cpp"
+#line 7879 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 252: /* type_specifier_nonarray: FLOAT32_T  */
-#line 1905 "MachineIndependent/glslang.y"
+#line 1940 "MachineIndependent/glslang.y"
                 {
         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 7829 "MachineIndependent/glslang_tab.cpp"
+#line 7889 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 253: /* type_specifier_nonarray: FLOAT64_T  */
-#line 1910 "MachineIndependent/glslang.y"
+#line 1945 "MachineIndependent/glslang.y"
                 {
         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 7839 "MachineIndependent/glslang_tab.cpp"
+#line 7899 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 254: /* type_specifier_nonarray: INT8_T  */
-#line 1915 "MachineIndependent/glslang.y"
+#line 1950 "MachineIndependent/glslang.y"
              {
         parseContext.int8ScalarVectorCheck((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 7849 "MachineIndependent/glslang_tab.cpp"
+#line 7909 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 255: /* type_specifier_nonarray: UINT8_T  */
-#line 1920 "MachineIndependent/glslang.y"
+#line 1955 "MachineIndependent/glslang.y"
               {
         parseContext.int8ScalarVectorCheck((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 7859 "MachineIndependent/glslang_tab.cpp"
+#line 7919 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 256: /* type_specifier_nonarray: INT16_T  */
-#line 1925 "MachineIndependent/glslang.y"
+#line 1960 "MachineIndependent/glslang.y"
               {
         parseContext.int16ScalarVectorCheck((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 7869 "MachineIndependent/glslang_tab.cpp"
+#line 7929 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 257: /* type_specifier_nonarray: UINT16_T  */
-#line 1930 "MachineIndependent/glslang.y"
+#line 1965 "MachineIndependent/glslang.y"
                {
         parseContext.int16ScalarVectorCheck((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 7879 "MachineIndependent/glslang_tab.cpp"
+#line 7939 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 258: /* type_specifier_nonarray: INT32_T  */
-#line 1935 "MachineIndependent/glslang.y"
+#line 1970 "MachineIndependent/glslang.y"
               {
         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 7889 "MachineIndependent/glslang_tab.cpp"
+#line 7949 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 259: /* type_specifier_nonarray: UINT32_T  */
-#line 1940 "MachineIndependent/glslang.y"
+#line 1975 "MachineIndependent/glslang.y"
                {
         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 7899 "MachineIndependent/glslang_tab.cpp"
+#line 7959 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 260: /* type_specifier_nonarray: INT64_T  */
-#line 1945 "MachineIndependent/glslang.y"
+#line 1980 "MachineIndependent/glslang.y"
               {
         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 7909 "MachineIndependent/glslang_tab.cpp"
+#line 7969 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 261: /* type_specifier_nonarray: UINT64_T  */
-#line 1950 "MachineIndependent/glslang.y"
+#line 1985 "MachineIndependent/glslang.y"
                {
         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 7919 "MachineIndependent/glslang_tab.cpp"
+#line 7979 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 262: /* type_specifier_nonarray: DVEC2  */
-#line 1955 "MachineIndependent/glslang.y"
+#line 1990 "MachineIndependent/glslang.y"
             {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -7928,11 +7988,11 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(2);
     }
-#line 7932 "MachineIndependent/glslang_tab.cpp"
+#line 7992 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 263: /* type_specifier_nonarray: DVEC3  */
-#line 1963 "MachineIndependent/glslang.y"
+#line 1998 "MachineIndependent/glslang.y"
             {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -7941,11 +8001,11 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(3);
     }
-#line 7945 "MachineIndependent/glslang_tab.cpp"
+#line 8005 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 264: /* type_specifier_nonarray: DVEC4  */
-#line 1971 "MachineIndependent/glslang.y"
+#line 2006 "MachineIndependent/glslang.y"
             {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -7954,374 +8014,374 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setVector(4);
     }
-#line 7958 "MachineIndependent/glslang_tab.cpp"
+#line 8018 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 265: /* type_specifier_nonarray: F16VEC2  */
-#line 1979 "MachineIndependent/glslang.y"
+#line 2014 "MachineIndependent/glslang.y"
               {
         parseContext.float16ScalarVectorCheck((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);
     }
-#line 7969 "MachineIndependent/glslang_tab.cpp"
+#line 8029 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 266: /* type_specifier_nonarray: F16VEC3  */
-#line 1985 "MachineIndependent/glslang.y"
+#line 2020 "MachineIndependent/glslang.y"
               {
         parseContext.float16ScalarVectorCheck((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);
     }
-#line 7980 "MachineIndependent/glslang_tab.cpp"
+#line 8040 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 267: /* type_specifier_nonarray: F16VEC4  */
-#line 1991 "MachineIndependent/glslang.y"
+#line 2026 "MachineIndependent/glslang.y"
               {
         parseContext.float16ScalarVectorCheck((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);
     }
-#line 7991 "MachineIndependent/glslang_tab.cpp"
+#line 8051 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 268: /* type_specifier_nonarray: F32VEC2  */
-#line 1997 "MachineIndependent/glslang.y"
+#line 2032 "MachineIndependent/glslang.y"
               {
         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 8002 "MachineIndependent/glslang_tab.cpp"
+#line 8062 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 269: /* type_specifier_nonarray: F32VEC3  */
-#line 2003 "MachineIndependent/glslang.y"
+#line 2038 "MachineIndependent/glslang.y"
               {
         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 8013 "MachineIndependent/glslang_tab.cpp"
+#line 8073 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 270: /* type_specifier_nonarray: F32VEC4  */
-#line 2009 "MachineIndependent/glslang.y"
+#line 2044 "MachineIndependent/glslang.y"
               {
         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 8024 "MachineIndependent/glslang_tab.cpp"
+#line 8084 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 271: /* type_specifier_nonarray: F64VEC2  */
-#line 2015 "MachineIndependent/glslang.y"
+#line 2050 "MachineIndependent/glslang.y"
               {
         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 8035 "MachineIndependent/glslang_tab.cpp"
+#line 8095 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 272: /* type_specifier_nonarray: F64VEC3  */
-#line 2021 "MachineIndependent/glslang.y"
+#line 2056 "MachineIndependent/glslang.y"
               {
         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 8046 "MachineIndependent/glslang_tab.cpp"
+#line 8106 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 273: /* type_specifier_nonarray: F64VEC4  */
-#line 2027 "MachineIndependent/glslang.y"
+#line 2062 "MachineIndependent/glslang.y"
               {
         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 8057 "MachineIndependent/glslang_tab.cpp"
+#line 8117 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 274: /* type_specifier_nonarray: I8VEC2  */
-#line 2033 "MachineIndependent/glslang.y"
+#line 2068 "MachineIndependent/glslang.y"
              {
         parseContext.int8ScalarVectorCheck((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 8068 "MachineIndependent/glslang_tab.cpp"
+#line 8128 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 275: /* type_specifier_nonarray: I8VEC3  */
-#line 2039 "MachineIndependent/glslang.y"
+#line 2074 "MachineIndependent/glslang.y"
              {
         parseContext.int8ScalarVectorCheck((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 8079 "MachineIndependent/glslang_tab.cpp"
+#line 8139 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 276: /* type_specifier_nonarray: I8VEC4  */
-#line 2045 "MachineIndependent/glslang.y"
+#line 2080 "MachineIndependent/glslang.y"
              {
         parseContext.int8ScalarVectorCheck((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 8090 "MachineIndependent/glslang_tab.cpp"
+#line 8150 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 277: /* type_specifier_nonarray: I16VEC2  */
-#line 2051 "MachineIndependent/glslang.y"
+#line 2086 "MachineIndependent/glslang.y"
               {
         parseContext.int16ScalarVectorCheck((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 8101 "MachineIndependent/glslang_tab.cpp"
+#line 8161 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 278: /* type_specifier_nonarray: I16VEC3  */
-#line 2057 "MachineIndependent/glslang.y"
+#line 2092 "MachineIndependent/glslang.y"
               {
         parseContext.int16ScalarVectorCheck((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 8112 "MachineIndependent/glslang_tab.cpp"
+#line 8172 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 279: /* type_specifier_nonarray: I16VEC4  */
-#line 2063 "MachineIndependent/glslang.y"
+#line 2098 "MachineIndependent/glslang.y"
               {
         parseContext.int16ScalarVectorCheck((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 8123 "MachineIndependent/glslang_tab.cpp"
+#line 8183 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 280: /* type_specifier_nonarray: I32VEC2  */
-#line 2069 "MachineIndependent/glslang.y"
+#line 2104 "MachineIndependent/glslang.y"
               {
         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 8134 "MachineIndependent/glslang_tab.cpp"
+#line 8194 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 281: /* type_specifier_nonarray: I32VEC3  */
-#line 2075 "MachineIndependent/glslang.y"
+#line 2110 "MachineIndependent/glslang.y"
               {
         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 8145 "MachineIndependent/glslang_tab.cpp"
+#line 8205 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 282: /* type_specifier_nonarray: I32VEC4  */
-#line 2081 "MachineIndependent/glslang.y"
+#line 2116 "MachineIndependent/glslang.y"
               {
         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 8156 "MachineIndependent/glslang_tab.cpp"
+#line 8216 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 283: /* type_specifier_nonarray: I64VEC2  */
-#line 2087 "MachineIndependent/glslang.y"
+#line 2122 "MachineIndependent/glslang.y"
               {
         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 8167 "MachineIndependent/glslang_tab.cpp"
+#line 8227 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 284: /* type_specifier_nonarray: I64VEC3  */
-#line 2093 "MachineIndependent/glslang.y"
+#line 2128 "MachineIndependent/glslang.y"
               {
         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 8178 "MachineIndependent/glslang_tab.cpp"
+#line 8238 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 285: /* type_specifier_nonarray: I64VEC4  */
-#line 2099 "MachineIndependent/glslang.y"
+#line 2134 "MachineIndependent/glslang.y"
               {
         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 8189 "MachineIndependent/glslang_tab.cpp"
+#line 8249 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 286: /* type_specifier_nonarray: U8VEC2  */
-#line 2105 "MachineIndependent/glslang.y"
+#line 2140 "MachineIndependent/glslang.y"
              {
         parseContext.int8ScalarVectorCheck((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 8200 "MachineIndependent/glslang_tab.cpp"
+#line 8260 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 287: /* type_specifier_nonarray: U8VEC3  */
-#line 2111 "MachineIndependent/glslang.y"
+#line 2146 "MachineIndependent/glslang.y"
              {
         parseContext.int8ScalarVectorCheck((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(3);
     }
-#line 8211 "MachineIndependent/glslang_tab.cpp"
+#line 8271 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 288: /* type_specifier_nonarray: U8VEC4  */
-#line 2117 "MachineIndependent/glslang.y"
+#line 2152 "MachineIndependent/glslang.y"
              {
         parseContext.int8ScalarVectorCheck((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 8222 "MachineIndependent/glslang_tab.cpp"
+#line 8282 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 289: /* type_specifier_nonarray: U16VEC2  */
-#line 2123 "MachineIndependent/glslang.y"
+#line 2158 "MachineIndependent/glslang.y"
               {
         parseContext.int16ScalarVectorCheck((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 8233 "MachineIndependent/glslang_tab.cpp"
+#line 8293 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 290: /* type_specifier_nonarray: U16VEC3  */
-#line 2129 "MachineIndependent/glslang.y"
+#line 2164 "MachineIndependent/glslang.y"
               {
         parseContext.int16ScalarVectorCheck((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 8244 "MachineIndependent/glslang_tab.cpp"
+#line 8304 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 291: /* type_specifier_nonarray: U16VEC4  */
-#line 2135 "MachineIndependent/glslang.y"
+#line 2170 "MachineIndependent/glslang.y"
               {
         parseContext.int16ScalarVectorCheck((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 8255 "MachineIndependent/glslang_tab.cpp"
+#line 8315 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 292: /* type_specifier_nonarray: U32VEC2  */
-#line 2141 "MachineIndependent/glslang.y"
+#line 2176 "MachineIndependent/glslang.y"
               {
         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 8266 "MachineIndependent/glslang_tab.cpp"
+#line 8326 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 293: /* type_specifier_nonarray: U32VEC3  */
-#line 2147 "MachineIndependent/glslang.y"
+#line 2182 "MachineIndependent/glslang.y"
               {
         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 8277 "MachineIndependent/glslang_tab.cpp"
+#line 8337 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 294: /* type_specifier_nonarray: U32VEC4  */
-#line 2153 "MachineIndependent/glslang.y"
+#line 2188 "MachineIndependent/glslang.y"
               {
         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 8288 "MachineIndependent/glslang_tab.cpp"
+#line 8348 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 295: /* type_specifier_nonarray: U64VEC2  */
-#line 2159 "MachineIndependent/glslang.y"
+#line 2194 "MachineIndependent/glslang.y"
               {
         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 8299 "MachineIndependent/glslang_tab.cpp"
+#line 8359 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 296: /* type_specifier_nonarray: U64VEC3  */
-#line 2165 "MachineIndependent/glslang.y"
+#line 2200 "MachineIndependent/glslang.y"
               {
         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 8310 "MachineIndependent/glslang_tab.cpp"
+#line 8370 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 297: /* type_specifier_nonarray: U64VEC4  */
-#line 2171 "MachineIndependent/glslang.y"
+#line 2206 "MachineIndependent/glslang.y"
               {
         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 8321 "MachineIndependent/glslang_tab.cpp"
+#line 8381 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 298: /* type_specifier_nonarray: DMAT2  */
-#line 2177 "MachineIndependent/glslang.y"
+#line 2212 "MachineIndependent/glslang.y"
             {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -8330,11 +8390,11 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 8334 "MachineIndependent/glslang_tab.cpp"
+#line 8394 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 299: /* type_specifier_nonarray: DMAT3  */
-#line 2185 "MachineIndependent/glslang.y"
+#line 2220 "MachineIndependent/glslang.y"
             {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -8343,11 +8403,11 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 8347 "MachineIndependent/glslang_tab.cpp"
+#line 8407 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 300: /* type_specifier_nonarray: DMAT4  */
-#line 2193 "MachineIndependent/glslang.y"
+#line 2228 "MachineIndependent/glslang.y"
             {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -8356,11 +8416,11 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 8360 "MachineIndependent/glslang_tab.cpp"
+#line 8420 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 301: /* type_specifier_nonarray: DMAT2X2  */
-#line 2201 "MachineIndependent/glslang.y"
+#line 2236 "MachineIndependent/glslang.y"
               {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -8369,11 +8429,11 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 2);
     }
-#line 8373 "MachineIndependent/glslang_tab.cpp"
+#line 8433 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 302: /* type_specifier_nonarray: DMAT2X3  */
-#line 2209 "MachineIndependent/glslang.y"
+#line 2244 "MachineIndependent/glslang.y"
               {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -8382,11 +8442,11 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 3);
     }
-#line 8386 "MachineIndependent/glslang_tab.cpp"
+#line 8446 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 303: /* type_specifier_nonarray: DMAT2X4  */
-#line 2217 "MachineIndependent/glslang.y"
+#line 2252 "MachineIndependent/glslang.y"
               {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -8395,11 +8455,11 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(2, 4);
     }
-#line 8399 "MachineIndependent/glslang_tab.cpp"
+#line 8459 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 304: /* type_specifier_nonarray: DMAT3X2  */
-#line 2225 "MachineIndependent/glslang.y"
+#line 2260 "MachineIndependent/glslang.y"
               {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -8408,11 +8468,11 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 2);
     }
-#line 8412 "MachineIndependent/glslang_tab.cpp"
+#line 8472 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 305: /* type_specifier_nonarray: DMAT3X3  */
-#line 2233 "MachineIndependent/glslang.y"
+#line 2268 "MachineIndependent/glslang.y"
               {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -8421,11 +8481,11 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 3);
     }
-#line 8425 "MachineIndependent/glslang_tab.cpp"
+#line 8485 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 306: /* type_specifier_nonarray: DMAT3X4  */
-#line 2241 "MachineIndependent/glslang.y"
+#line 2276 "MachineIndependent/glslang.y"
               {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -8434,11 +8494,11 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(3, 4);
     }
-#line 8438 "MachineIndependent/glslang_tab.cpp"
+#line 8498 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 307: /* type_specifier_nonarray: DMAT4X2  */
-#line 2249 "MachineIndependent/glslang.y"
+#line 2284 "MachineIndependent/glslang.y"
               {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -8447,11 +8507,11 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 2);
     }
-#line 8451 "MachineIndependent/glslang_tab.cpp"
+#line 8511 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 308: /* type_specifier_nonarray: DMAT4X3  */
-#line 2257 "MachineIndependent/glslang.y"
+#line 2292 "MachineIndependent/glslang.y"
               {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -8460,11 +8520,11 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 3);
     }
-#line 8464 "MachineIndependent/glslang_tab.cpp"
+#line 8524 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 309: /* type_specifier_nonarray: DMAT4X4  */
-#line 2265 "MachineIndependent/glslang.y"
+#line 2300 "MachineIndependent/glslang.y"
               {
         parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix");
         if (! parseContext.symbolTable.atBuiltInLevel())
@@ -8473,2261 +8533,2261 @@
         (yyval.interm.type).basicType = EbtDouble;
         (yyval.interm.type).setMatrix(4, 4);
     }
-#line 8477 "MachineIndependent/glslang_tab.cpp"
+#line 8537 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 310: /* type_specifier_nonarray: F16MAT2  */
-#line 2273 "MachineIndependent/glslang.y"
+#line 2308 "MachineIndependent/glslang.y"
               {
         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);
     }
-#line 8488 "MachineIndependent/glslang_tab.cpp"
+#line 8548 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 311: /* type_specifier_nonarray: F16MAT3  */
-#line 2279 "MachineIndependent/glslang.y"
+#line 2314 "MachineIndependent/glslang.y"
               {
         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 8499 "MachineIndependent/glslang_tab.cpp"
+#line 8559 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 312: /* type_specifier_nonarray: F16MAT4  */
-#line 2285 "MachineIndependent/glslang.y"
+#line 2320 "MachineIndependent/glslang.y"
               {
         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 8510 "MachineIndependent/glslang_tab.cpp"
+#line 8570 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 313: /* type_specifier_nonarray: F16MAT2X2  */
-#line 2291 "MachineIndependent/glslang.y"
+#line 2326 "MachineIndependent/glslang.y"
                 {
         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);
     }
-#line 8521 "MachineIndependent/glslang_tab.cpp"
+#line 8581 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 314: /* type_specifier_nonarray: F16MAT2X3  */
-#line 2297 "MachineIndependent/glslang.y"
+#line 2332 "MachineIndependent/glslang.y"
                 {
         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 8532 "MachineIndependent/glslang_tab.cpp"
+#line 8592 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 315: /* type_specifier_nonarray: F16MAT2X4  */
-#line 2303 "MachineIndependent/glslang.y"
+#line 2338 "MachineIndependent/glslang.y"
                 {
         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 8543 "MachineIndependent/glslang_tab.cpp"
+#line 8603 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 316: /* type_specifier_nonarray: F16MAT3X2  */
-#line 2309 "MachineIndependent/glslang.y"
+#line 2344 "MachineIndependent/glslang.y"
                 {
         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 8554 "MachineIndependent/glslang_tab.cpp"
+#line 8614 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 317: /* type_specifier_nonarray: F16MAT3X3  */
-#line 2315 "MachineIndependent/glslang.y"
+#line 2350 "MachineIndependent/glslang.y"
                 {
         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 8565 "MachineIndependent/glslang_tab.cpp"
+#line 8625 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 318: /* type_specifier_nonarray: F16MAT3X4  */
-#line 2321 "MachineIndependent/glslang.y"
+#line 2356 "MachineIndependent/glslang.y"
                 {
         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 8576 "MachineIndependent/glslang_tab.cpp"
+#line 8636 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 319: /* type_specifier_nonarray: F16MAT4X2  */
-#line 2327 "MachineIndependent/glslang.y"
+#line 2362 "MachineIndependent/glslang.y"
                 {
         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 8587 "MachineIndependent/glslang_tab.cpp"
+#line 8647 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 320: /* type_specifier_nonarray: F16MAT4X3  */
-#line 2333 "MachineIndependent/glslang.y"
+#line 2368 "MachineIndependent/glslang.y"
                 {
         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 8598 "MachineIndependent/glslang_tab.cpp"
+#line 8658 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 321: /* type_specifier_nonarray: F16MAT4X4  */
-#line 2339 "MachineIndependent/glslang.y"
+#line 2374 "MachineIndependent/glslang.y"
                 {
         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 8609 "MachineIndependent/glslang_tab.cpp"
+#line 8669 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 322: /* type_specifier_nonarray: F32MAT2  */
-#line 2345 "MachineIndependent/glslang.y"
+#line 2380 "MachineIndependent/glslang.y"
               {
         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 8620 "MachineIndependent/glslang_tab.cpp"
+#line 8680 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 323: /* type_specifier_nonarray: F32MAT3  */
-#line 2351 "MachineIndependent/glslang.y"
+#line 2386 "MachineIndependent/glslang.y"
               {
         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 8631 "MachineIndependent/glslang_tab.cpp"
+#line 8691 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 324: /* type_specifier_nonarray: F32MAT4  */
-#line 2357 "MachineIndependent/glslang.y"
+#line 2392 "MachineIndependent/glslang.y"
               {
         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 8642 "MachineIndependent/glslang_tab.cpp"
+#line 8702 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 325: /* type_specifier_nonarray: F32MAT2X2  */
-#line 2363 "MachineIndependent/glslang.y"
+#line 2398 "MachineIndependent/glslang.y"
                 {
         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 8653 "MachineIndependent/glslang_tab.cpp"
+#line 8713 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 326: /* type_specifier_nonarray: F32MAT2X3  */
-#line 2369 "MachineIndependent/glslang.y"
+#line 2404 "MachineIndependent/glslang.y"
                 {
         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 8664 "MachineIndependent/glslang_tab.cpp"
+#line 8724 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 327: /* type_specifier_nonarray: F32MAT2X4  */
-#line 2375 "MachineIndependent/glslang.y"
+#line 2410 "MachineIndependent/glslang.y"
                 {
         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 8675 "MachineIndependent/glslang_tab.cpp"
+#line 8735 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 328: /* type_specifier_nonarray: F32MAT3X2  */
-#line 2381 "MachineIndependent/glslang.y"
+#line 2416 "MachineIndependent/glslang.y"
                 {
         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 8686 "MachineIndependent/glslang_tab.cpp"
+#line 8746 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 329: /* type_specifier_nonarray: F32MAT3X3  */
-#line 2387 "MachineIndependent/glslang.y"
+#line 2422 "MachineIndependent/glslang.y"
                 {
         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 8697 "MachineIndependent/glslang_tab.cpp"
+#line 8757 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 330: /* type_specifier_nonarray: F32MAT3X4  */
-#line 2393 "MachineIndependent/glslang.y"
+#line 2428 "MachineIndependent/glslang.y"
                 {
         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 8708 "MachineIndependent/glslang_tab.cpp"
+#line 8768 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 331: /* type_specifier_nonarray: F32MAT4X2  */
-#line 2399 "MachineIndependent/glslang.y"
+#line 2434 "MachineIndependent/glslang.y"
                 {
         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 8719 "MachineIndependent/glslang_tab.cpp"
+#line 8779 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 332: /* type_specifier_nonarray: F32MAT4X3  */
-#line 2405 "MachineIndependent/glslang.y"
+#line 2440 "MachineIndependent/glslang.y"
                 {
         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 8730 "MachineIndependent/glslang_tab.cpp"
+#line 8790 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 333: /* type_specifier_nonarray: F32MAT4X4  */
-#line 2411 "MachineIndependent/glslang.y"
+#line 2446 "MachineIndependent/glslang.y"
                 {
         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 8741 "MachineIndependent/glslang_tab.cpp"
+#line 8801 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 334: /* type_specifier_nonarray: F64MAT2  */
-#line 2417 "MachineIndependent/glslang.y"
+#line 2452 "MachineIndependent/glslang.y"
               {
         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 8752 "MachineIndependent/glslang_tab.cpp"
+#line 8812 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 335: /* type_specifier_nonarray: F64MAT3  */
-#line 2423 "MachineIndependent/glslang.y"
+#line 2458 "MachineIndependent/glslang.y"
               {
         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 8763 "MachineIndependent/glslang_tab.cpp"
+#line 8823 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 336: /* type_specifier_nonarray: F64MAT4  */
-#line 2429 "MachineIndependent/glslang.y"
+#line 2464 "MachineIndependent/glslang.y"
               {
         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 8774 "MachineIndependent/glslang_tab.cpp"
+#line 8834 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 337: /* type_specifier_nonarray: F64MAT2X2  */
-#line 2435 "MachineIndependent/glslang.y"
+#line 2470 "MachineIndependent/glslang.y"
                 {
         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 8785 "MachineIndependent/glslang_tab.cpp"
+#line 8845 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 338: /* type_specifier_nonarray: F64MAT2X3  */
-#line 2441 "MachineIndependent/glslang.y"
+#line 2476 "MachineIndependent/glslang.y"
                 {
         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 8796 "MachineIndependent/glslang_tab.cpp"
+#line 8856 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 339: /* type_specifier_nonarray: F64MAT2X4  */
-#line 2447 "MachineIndependent/glslang.y"
+#line 2482 "MachineIndependent/glslang.y"
                 {
         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 8807 "MachineIndependent/glslang_tab.cpp"
+#line 8867 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 340: /* type_specifier_nonarray: F64MAT3X2  */
-#line 2453 "MachineIndependent/glslang.y"
+#line 2488 "MachineIndependent/glslang.y"
                 {
         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 8818 "MachineIndependent/glslang_tab.cpp"
+#line 8878 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 341: /* type_specifier_nonarray: F64MAT3X3  */
-#line 2459 "MachineIndependent/glslang.y"
+#line 2494 "MachineIndependent/glslang.y"
                 {
         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 8829 "MachineIndependent/glslang_tab.cpp"
+#line 8889 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 342: /* type_specifier_nonarray: F64MAT3X4  */
-#line 2465 "MachineIndependent/glslang.y"
+#line 2500 "MachineIndependent/glslang.y"
                 {
         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 8840 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 343: /* type_specifier_nonarray: F64MAT4X2  */
-#line 2471 "MachineIndependent/glslang.y"
-                {
-        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 8851 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 344: /* type_specifier_nonarray: F64MAT4X3  */
-#line 2477 "MachineIndependent/glslang.y"
-                {
-        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 8862 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 345: /* type_specifier_nonarray: F64MAT4X4  */
-#line 2483 "MachineIndependent/glslang.y"
-                {
-        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 8873 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 346: /* type_specifier_nonarray: ACCSTRUCTNV  */
-#line 2489 "MachineIndependent/glslang.y"
-                  {
-       (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-       (yyval.interm.type).basicType = EbtAccStruct;
-    }
-#line 8882 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 347: /* type_specifier_nonarray: ACCSTRUCTEXT  */
-#line 2493 "MachineIndependent/glslang.y"
-                   {
-       (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-       (yyval.interm.type).basicType = EbtAccStruct;
-    }
-#line 8891 "MachineIndependent/glslang_tab.cpp"
-    break;
-
-  case 348: /* type_specifier_nonarray: RAYQUERYEXT  */
-#line 2497 "MachineIndependent/glslang.y"
-                  {
-       (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
-       (yyval.interm.type).basicType = EbtRayQuery;
-    }
 #line 8900 "MachineIndependent/glslang_tab.cpp"
     break;
 
+  case 343: /* type_specifier_nonarray: F64MAT4X2  */
+#line 2506 "MachineIndependent/glslang.y"
+                {
+        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 8911 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 344: /* type_specifier_nonarray: F64MAT4X3  */
+#line 2512 "MachineIndependent/glslang.y"
+                {
+        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 8922 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 345: /* type_specifier_nonarray: F64MAT4X4  */
+#line 2518 "MachineIndependent/glslang.y"
+                {
+        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 8933 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 346: /* type_specifier_nonarray: ACCSTRUCTNV  */
+#line 2524 "MachineIndependent/glslang.y"
+                  {
+       (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+       (yyval.interm.type).basicType = EbtAccStruct;
+    }
+#line 8942 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 347: /* type_specifier_nonarray: ACCSTRUCTEXT  */
+#line 2528 "MachineIndependent/glslang.y"
+                   {
+       (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+       (yyval.interm.type).basicType = EbtAccStruct;
+    }
+#line 8951 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 348: /* type_specifier_nonarray: RAYQUERYEXT  */
+#line 2532 "MachineIndependent/glslang.y"
+                  {
+       (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+       (yyval.interm.type).basicType = EbtRayQuery;
+    }
+#line 8960 "MachineIndependent/glslang_tab.cpp"
+    break;
+
   case 349: /* type_specifier_nonarray: ATOMIC_UINT  */
-#line 2501 "MachineIndependent/glslang.y"
+#line 2536 "MachineIndependent/glslang.y"
                   {
         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 8910 "MachineIndependent/glslang_tab.cpp"
+#line 8970 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 350: /* type_specifier_nonarray: SAMPLER1D  */
-#line 2506 "MachineIndependent/glslang.y"
+#line 2541 "MachineIndependent/glslang.y"
                 {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd1D);
     }
-#line 8920 "MachineIndependent/glslang_tab.cpp"
+#line 8980 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 351: /* type_specifier_nonarray: SAMPLER2D  */
-#line 2511 "MachineIndependent/glslang.y"
+#line 2546 "MachineIndependent/glslang.y"
                 {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd2D);
     }
-#line 8930 "MachineIndependent/glslang_tab.cpp"
+#line 8990 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 352: /* type_specifier_nonarray: SAMPLER3D  */
-#line 2516 "MachineIndependent/glslang.y"
+#line 2551 "MachineIndependent/glslang.y"
                 {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, Esd3D);
     }
-#line 8940 "MachineIndependent/glslang_tab.cpp"
+#line 9000 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 353: /* type_specifier_nonarray: SAMPLERCUBE  */
-#line 2521 "MachineIndependent/glslang.y"
+#line 2556 "MachineIndependent/glslang.y"
                   {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdCube);
     }
-#line 8950 "MachineIndependent/glslang_tab.cpp"
+#line 9010 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 354: /* type_specifier_nonarray: SAMPLER2DSHADOW  */
-#line 2526 "MachineIndependent/glslang.y"
+#line 2561 "MachineIndependent/glslang.y"
                       {
         (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 8960 "MachineIndependent/glslang_tab.cpp"
+#line 9020 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 355: /* type_specifier_nonarray: SAMPLERCUBESHADOW  */
-#line 2531 "MachineIndependent/glslang.y"
+#line 2566 "MachineIndependent/glslang.y"
                         {
         (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 8970 "MachineIndependent/glslang_tab.cpp"
+#line 9030 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 356: /* type_specifier_nonarray: SAMPLER2DARRAY  */
-#line 2536 "MachineIndependent/glslang.y"
+#line 2571 "MachineIndependent/glslang.y"
                      {
         (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 8980 "MachineIndependent/glslang_tab.cpp"
+#line 9040 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 357: /* type_specifier_nonarray: SAMPLER2DARRAYSHADOW  */
-#line 2541 "MachineIndependent/glslang.y"
+#line 2576 "MachineIndependent/glslang.y"
                            {
         (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 8990 "MachineIndependent/glslang_tab.cpp"
+#line 9050 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 358: /* type_specifier_nonarray: SAMPLER1DSHADOW  */
-#line 2546 "MachineIndependent/glslang.y"
+#line 2581 "MachineIndependent/glslang.y"
                       {
         (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 9000 "MachineIndependent/glslang_tab.cpp"
+#line 9060 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 359: /* type_specifier_nonarray: SAMPLER1DARRAY  */
-#line 2551 "MachineIndependent/glslang.y"
+#line 2586 "MachineIndependent/glslang.y"
                      {
         (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 9010 "MachineIndependent/glslang_tab.cpp"
+#line 9070 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 360: /* type_specifier_nonarray: SAMPLER1DARRAYSHADOW  */
-#line 2556 "MachineIndependent/glslang.y"
+#line 2591 "MachineIndependent/glslang.y"
                            {
         (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 9020 "MachineIndependent/glslang_tab.cpp"
+#line 9080 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 361: /* type_specifier_nonarray: SAMPLERCUBEARRAY  */
-#line 2561 "MachineIndependent/glslang.y"
+#line 2596 "MachineIndependent/glslang.y"
                        {
         (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 9030 "MachineIndependent/glslang_tab.cpp"
+#line 9090 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 362: /* type_specifier_nonarray: SAMPLERCUBEARRAYSHADOW  */
-#line 2566 "MachineIndependent/glslang.y"
+#line 2601 "MachineIndependent/glslang.y"
                              {
         (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 9040 "MachineIndependent/glslang_tab.cpp"
+#line 9100 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 363: /* type_specifier_nonarray: F16SAMPLER1D  */
-#line 2571 "MachineIndependent/glslang.y"
+#line 2606 "MachineIndependent/glslang.y"
                    {
         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);
     }
-#line 9051 "MachineIndependent/glslang_tab.cpp"
+#line 9111 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 364: /* type_specifier_nonarray: F16SAMPLER2D  */
-#line 2577 "MachineIndependent/glslang.y"
+#line 2612 "MachineIndependent/glslang.y"
                    {
         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);
     }
-#line 9062 "MachineIndependent/glslang_tab.cpp"
+#line 9122 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 365: /* type_specifier_nonarray: F16SAMPLER3D  */
-#line 2583 "MachineIndependent/glslang.y"
+#line 2618 "MachineIndependent/glslang.y"
                    {
         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);
     }
-#line 9073 "MachineIndependent/glslang_tab.cpp"
+#line 9133 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 366: /* type_specifier_nonarray: F16SAMPLERCUBE  */
-#line 2589 "MachineIndependent/glslang.y"
+#line 2624 "MachineIndependent/glslang.y"
                      {
         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);
     }
-#line 9084 "MachineIndependent/glslang_tab.cpp"
+#line 9144 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 367: /* type_specifier_nonarray: F16SAMPLER1DSHADOW  */
-#line 2595 "MachineIndependent/glslang.y"
+#line 2630 "MachineIndependent/glslang.y"
                          {
         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);
     }
-#line 9095 "MachineIndependent/glslang_tab.cpp"
+#line 9155 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 368: /* type_specifier_nonarray: F16SAMPLER2DSHADOW  */
-#line 2601 "MachineIndependent/glslang.y"
+#line 2636 "MachineIndependent/glslang.y"
                          {
         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);
     }
-#line 9106 "MachineIndependent/glslang_tab.cpp"
+#line 9166 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 369: /* type_specifier_nonarray: F16SAMPLERCUBESHADOW  */
-#line 2607 "MachineIndependent/glslang.y"
+#line 2642 "MachineIndependent/glslang.y"
                            {
         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);
     }
-#line 9117 "MachineIndependent/glslang_tab.cpp"
+#line 9177 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 370: /* type_specifier_nonarray: F16SAMPLER1DARRAY  */
-#line 2613 "MachineIndependent/glslang.y"
+#line 2648 "MachineIndependent/glslang.y"
                         {
         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);
     }
-#line 9128 "MachineIndependent/glslang_tab.cpp"
+#line 9188 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 371: /* type_specifier_nonarray: F16SAMPLER2DARRAY  */
-#line 2619 "MachineIndependent/glslang.y"
+#line 2654 "MachineIndependent/glslang.y"
                         {
         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);
     }
-#line 9139 "MachineIndependent/glslang_tab.cpp"
+#line 9199 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 372: /* type_specifier_nonarray: F16SAMPLER1DARRAYSHADOW  */
-#line 2625 "MachineIndependent/glslang.y"
+#line 2660 "MachineIndependent/glslang.y"
                               {
         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);
     }
-#line 9150 "MachineIndependent/glslang_tab.cpp"
+#line 9210 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 373: /* type_specifier_nonarray: F16SAMPLER2DARRAYSHADOW  */
-#line 2631 "MachineIndependent/glslang.y"
+#line 2666 "MachineIndependent/glslang.y"
                               {
         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);
     }
-#line 9161 "MachineIndependent/glslang_tab.cpp"
+#line 9221 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 374: /* type_specifier_nonarray: F16SAMPLERCUBEARRAY  */
-#line 2637 "MachineIndependent/glslang.y"
+#line 2672 "MachineIndependent/glslang.y"
                           {
         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);
     }
-#line 9172 "MachineIndependent/glslang_tab.cpp"
+#line 9232 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 375: /* type_specifier_nonarray: F16SAMPLERCUBEARRAYSHADOW  */
-#line 2643 "MachineIndependent/glslang.y"
+#line 2678 "MachineIndependent/glslang.y"
                                 {
         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);
     }
-#line 9183 "MachineIndependent/glslang_tab.cpp"
+#line 9243 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 376: /* type_specifier_nonarray: ISAMPLER1D  */
-#line 2649 "MachineIndependent/glslang.y"
+#line 2684 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd1D);
     }
-#line 9193 "MachineIndependent/glslang_tab.cpp"
+#line 9253 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 377: /* type_specifier_nonarray: ISAMPLER2D  */
-#line 2654 "MachineIndependent/glslang.y"
+#line 2689 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd2D);
     }
-#line 9203 "MachineIndependent/glslang_tab.cpp"
+#line 9263 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 378: /* type_specifier_nonarray: ISAMPLER3D  */
-#line 2659 "MachineIndependent/glslang.y"
+#line 2694 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, Esd3D);
     }
-#line 9213 "MachineIndependent/glslang_tab.cpp"
+#line 9273 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 379: /* type_specifier_nonarray: ISAMPLERCUBE  */
-#line 2664 "MachineIndependent/glslang.y"
+#line 2699 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, EsdCube);
     }
-#line 9223 "MachineIndependent/glslang_tab.cpp"
+#line 9283 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 380: /* type_specifier_nonarray: ISAMPLER2DARRAY  */
-#line 2669 "MachineIndependent/glslang.y"
+#line 2704 "MachineIndependent/glslang.y"
                       {
         (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 9233 "MachineIndependent/glslang_tab.cpp"
+#line 9293 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 381: /* type_specifier_nonarray: USAMPLER2D  */
-#line 2674 "MachineIndependent/glslang.y"
+#line 2709 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd2D);
     }
-#line 9243 "MachineIndependent/glslang_tab.cpp"
+#line 9303 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 382: /* type_specifier_nonarray: USAMPLER3D  */
-#line 2679 "MachineIndependent/glslang.y"
+#line 2714 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd3D);
     }
-#line 9253 "MachineIndependent/glslang_tab.cpp"
+#line 9313 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 383: /* type_specifier_nonarray: USAMPLERCUBE  */
-#line 2684 "MachineIndependent/glslang.y"
+#line 2719 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdCube);
     }
-#line 9263 "MachineIndependent/glslang_tab.cpp"
+#line 9323 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 384: /* type_specifier_nonarray: ISAMPLER1DARRAY  */
-#line 2689 "MachineIndependent/glslang.y"
+#line 2724 "MachineIndependent/glslang.y"
                       {
         (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 9273 "MachineIndependent/glslang_tab.cpp"
+#line 9333 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 385: /* type_specifier_nonarray: ISAMPLERCUBEARRAY  */
-#line 2694 "MachineIndependent/glslang.y"
+#line 2729 "MachineIndependent/glslang.y"
                         {
         (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 9283 "MachineIndependent/glslang_tab.cpp"
+#line 9343 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 386: /* type_specifier_nonarray: USAMPLER1D  */
-#line 2699 "MachineIndependent/glslang.y"
+#line 2734 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, Esd1D);
     }
-#line 9293 "MachineIndependent/glslang_tab.cpp"
+#line 9353 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 387: /* type_specifier_nonarray: USAMPLER1DARRAY  */
-#line 2704 "MachineIndependent/glslang.y"
+#line 2739 "MachineIndependent/glslang.y"
                       {
         (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 9303 "MachineIndependent/glslang_tab.cpp"
+#line 9363 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 388: /* type_specifier_nonarray: USAMPLERCUBEARRAY  */
-#line 2709 "MachineIndependent/glslang.y"
+#line 2744 "MachineIndependent/glslang.y"
                         {
         (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 9313 "MachineIndependent/glslang_tab.cpp"
+#line 9373 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 389: /* type_specifier_nonarray: TEXTURECUBEARRAY  */
-#line 2714 "MachineIndependent/glslang.y"
+#line 2749 "MachineIndependent/glslang.y"
                        {
         (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 9323 "MachineIndependent/glslang_tab.cpp"
+#line 9383 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 390: /* type_specifier_nonarray: ITEXTURECUBEARRAY  */
-#line 2719 "MachineIndependent/glslang.y"
+#line 2754 "MachineIndependent/glslang.y"
                         {
         (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 9333 "MachineIndependent/glslang_tab.cpp"
+#line 9393 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 391: /* type_specifier_nonarray: UTEXTURECUBEARRAY  */
-#line 2724 "MachineIndependent/glslang.y"
+#line 2759 "MachineIndependent/glslang.y"
                         {
         (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 9343 "MachineIndependent/glslang_tab.cpp"
+#line 9403 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 392: /* type_specifier_nonarray: USAMPLER2DARRAY  */
-#line 2729 "MachineIndependent/glslang.y"
+#line 2764 "MachineIndependent/glslang.y"
                       {
         (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 9353 "MachineIndependent/glslang_tab.cpp"
+#line 9413 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 393: /* type_specifier_nonarray: TEXTURE2D  */
-#line 2734 "MachineIndependent/glslang.y"
+#line 2769 "MachineIndependent/glslang.y"
                 {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D);
     }
-#line 9363 "MachineIndependent/glslang_tab.cpp"
+#line 9423 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 394: /* type_specifier_nonarray: TEXTURE3D  */
-#line 2739 "MachineIndependent/glslang.y"
+#line 2774 "MachineIndependent/glslang.y"
                 {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd3D);
     }
-#line 9373 "MachineIndependent/glslang_tab.cpp"
+#line 9433 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 395: /* type_specifier_nonarray: TEXTURE2DARRAY  */
-#line 2744 "MachineIndependent/glslang.y"
+#line 2779 "MachineIndependent/glslang.y"
                      {
         (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 9383 "MachineIndependent/glslang_tab.cpp"
+#line 9443 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 396: /* type_specifier_nonarray: TEXTURECUBE  */
-#line 2749 "MachineIndependent/glslang.y"
+#line 2784 "MachineIndependent/glslang.y"
                   {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube);
     }
-#line 9393 "MachineIndependent/glslang_tab.cpp"
+#line 9453 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 397: /* type_specifier_nonarray: ITEXTURE2D  */
-#line 2754 "MachineIndependent/glslang.y"
+#line 2789 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D);
     }
-#line 9403 "MachineIndependent/glslang_tab.cpp"
+#line 9463 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 398: /* type_specifier_nonarray: ITEXTURE3D  */
-#line 2759 "MachineIndependent/glslang.y"
+#line 2794 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd3D);
     }
-#line 9413 "MachineIndependent/glslang_tab.cpp"
+#line 9473 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 399: /* type_specifier_nonarray: ITEXTURECUBE  */
-#line 2764 "MachineIndependent/glslang.y"
+#line 2799 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube);
     }
-#line 9423 "MachineIndependent/glslang_tab.cpp"
+#line 9483 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 400: /* type_specifier_nonarray: ITEXTURE2DARRAY  */
-#line 2769 "MachineIndependent/glslang.y"
+#line 2804 "MachineIndependent/glslang.y"
                       {
         (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 9433 "MachineIndependent/glslang_tab.cpp"
+#line 9493 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 401: /* type_specifier_nonarray: UTEXTURE2D  */
-#line 2774 "MachineIndependent/glslang.y"
+#line 2809 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D);
     }
-#line 9443 "MachineIndependent/glslang_tab.cpp"
+#line 9503 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 402: /* type_specifier_nonarray: UTEXTURE3D  */
-#line 2779 "MachineIndependent/glslang.y"
+#line 2814 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd3D);
     }
-#line 9453 "MachineIndependent/glslang_tab.cpp"
+#line 9513 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 403: /* type_specifier_nonarray: UTEXTURECUBE  */
-#line 2784 "MachineIndependent/glslang.y"
+#line 2819 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube);
     }
-#line 9463 "MachineIndependent/glslang_tab.cpp"
+#line 9523 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 404: /* type_specifier_nonarray: UTEXTURE2DARRAY  */
-#line 2789 "MachineIndependent/glslang.y"
+#line 2824 "MachineIndependent/glslang.y"
                       {
         (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 9473 "MachineIndependent/glslang_tab.cpp"
+#line 9533 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 405: /* type_specifier_nonarray: SAMPLER  */
-#line 2794 "MachineIndependent/glslang.y"
+#line 2829 "MachineIndependent/glslang.y"
               {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setPureSampler(false);
     }
-#line 9483 "MachineIndependent/glslang_tab.cpp"
+#line 9543 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 406: /* type_specifier_nonarray: SAMPLERSHADOW  */
-#line 2799 "MachineIndependent/glslang.y"
+#line 2834 "MachineIndependent/glslang.y"
                     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setPureSampler(true);
     }
-#line 9493 "MachineIndependent/glslang_tab.cpp"
+#line 9553 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 407: /* type_specifier_nonarray: SAMPLER2DRECT  */
-#line 2804 "MachineIndependent/glslang.y"
+#line 2839 "MachineIndependent/glslang.y"
                     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdRect);
     }
-#line 9503 "MachineIndependent/glslang_tab.cpp"
+#line 9563 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 408: /* type_specifier_nonarray: SAMPLER2DRECTSHADOW  */
-#line 2809 "MachineIndependent/glslang.y"
+#line 2844 "MachineIndependent/glslang.y"
                           {
         (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 9513 "MachineIndependent/glslang_tab.cpp"
+#line 9573 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 409: /* type_specifier_nonarray: F16SAMPLER2DRECT  */
-#line 2814 "MachineIndependent/glslang.y"
+#line 2849 "MachineIndependent/glslang.y"
                        {
         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);
     }
-#line 9524 "MachineIndependent/glslang_tab.cpp"
+#line 9584 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 410: /* type_specifier_nonarray: F16SAMPLER2DRECTSHADOW  */
-#line 2820 "MachineIndependent/glslang.y"
+#line 2855 "MachineIndependent/glslang.y"
                              {
         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);
     }
-#line 9535 "MachineIndependent/glslang_tab.cpp"
+#line 9595 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 411: /* type_specifier_nonarray: ISAMPLER2DRECT  */
-#line 2826 "MachineIndependent/glslang.y"
+#line 2861 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, EsdRect);
     }
-#line 9545 "MachineIndependent/glslang_tab.cpp"
+#line 9605 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 412: /* type_specifier_nonarray: USAMPLER2DRECT  */
-#line 2831 "MachineIndependent/glslang.y"
+#line 2866 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdRect);
     }
-#line 9555 "MachineIndependent/glslang_tab.cpp"
+#line 9615 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 413: /* type_specifier_nonarray: SAMPLERBUFFER  */
-#line 2836 "MachineIndependent/glslang.y"
+#line 2871 "MachineIndependent/glslang.y"
                     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtFloat, EsdBuffer);
     }
-#line 9565 "MachineIndependent/glslang_tab.cpp"
+#line 9625 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 414: /* type_specifier_nonarray: F16SAMPLERBUFFER  */
-#line 2841 "MachineIndependent/glslang.y"
+#line 2876 "MachineIndependent/glslang.y"
                        {
         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);
     }
-#line 9576 "MachineIndependent/glslang_tab.cpp"
+#line 9636 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 415: /* type_specifier_nonarray: ISAMPLERBUFFER  */
-#line 2847 "MachineIndependent/glslang.y"
+#line 2882 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtInt, EsdBuffer);
     }
-#line 9586 "MachineIndependent/glslang_tab.cpp"
+#line 9646 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 416: /* type_specifier_nonarray: USAMPLERBUFFER  */
-#line 2852 "MachineIndependent/glslang.y"
+#line 2887 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.set(EbtUint, EsdBuffer);
     }
-#line 9596 "MachineIndependent/glslang_tab.cpp"
+#line 9656 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 417: /* type_specifier_nonarray: SAMPLER2DMS  */
-#line 2857 "MachineIndependent/glslang.y"
+#line 2892 "MachineIndependent/glslang.y"
                   {
         (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 9606 "MachineIndependent/glslang_tab.cpp"
+#line 9666 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 418: /* type_specifier_nonarray: F16SAMPLER2DMS  */
-#line 2862 "MachineIndependent/glslang.y"
+#line 2897 "MachineIndependent/glslang.y"
                      {
         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);
     }
-#line 9617 "MachineIndependent/glslang_tab.cpp"
+#line 9677 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 419: /* type_specifier_nonarray: ISAMPLER2DMS  */
-#line 2868 "MachineIndependent/glslang.y"
+#line 2903 "MachineIndependent/glslang.y"
                    {
         (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 9627 "MachineIndependent/glslang_tab.cpp"
+#line 9687 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 420: /* type_specifier_nonarray: USAMPLER2DMS  */
-#line 2873 "MachineIndependent/glslang.y"
+#line 2908 "MachineIndependent/glslang.y"
                    {
         (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 9637 "MachineIndependent/glslang_tab.cpp"
+#line 9697 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 421: /* type_specifier_nonarray: SAMPLER2DMSARRAY  */
-#line 2878 "MachineIndependent/glslang.y"
+#line 2913 "MachineIndependent/glslang.y"
                        {
         (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 9647 "MachineIndependent/glslang_tab.cpp"
+#line 9707 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 422: /* type_specifier_nonarray: F16SAMPLER2DMSARRAY  */
-#line 2883 "MachineIndependent/glslang.y"
+#line 2918 "MachineIndependent/glslang.y"
                           {
         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);
     }
-#line 9658 "MachineIndependent/glslang_tab.cpp"
+#line 9718 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 423: /* type_specifier_nonarray: ISAMPLER2DMSARRAY  */
-#line 2889 "MachineIndependent/glslang.y"
+#line 2924 "MachineIndependent/glslang.y"
                         {
         (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 9668 "MachineIndependent/glslang_tab.cpp"
+#line 9728 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 424: /* type_specifier_nonarray: USAMPLER2DMSARRAY  */
-#line 2894 "MachineIndependent/glslang.y"
+#line 2929 "MachineIndependent/glslang.y"
                         {
         (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 9678 "MachineIndependent/glslang_tab.cpp"
+#line 9738 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 425: /* type_specifier_nonarray: TEXTURE1D  */
-#line 2899 "MachineIndependent/glslang.y"
+#line 2934 "MachineIndependent/glslang.y"
                 {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D);
     }
-#line 9688 "MachineIndependent/glslang_tab.cpp"
+#line 9748 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 426: /* type_specifier_nonarray: F16TEXTURE1D  */
-#line 2904 "MachineIndependent/glslang.y"
+#line 2939 "MachineIndependent/glslang.y"
                    {
         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);
     }
-#line 9699 "MachineIndependent/glslang_tab.cpp"
+#line 9759 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 427: /* type_specifier_nonarray: F16TEXTURE2D  */
-#line 2910 "MachineIndependent/glslang.y"
+#line 2945 "MachineIndependent/glslang.y"
                    {
         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);
     }
-#line 9710 "MachineIndependent/glslang_tab.cpp"
+#line 9770 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 428: /* type_specifier_nonarray: F16TEXTURE3D  */
-#line 2916 "MachineIndependent/glslang.y"
+#line 2951 "MachineIndependent/glslang.y"
                    {
         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);
     }
-#line 9721 "MachineIndependent/glslang_tab.cpp"
+#line 9781 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 429: /* type_specifier_nonarray: F16TEXTURECUBE  */
-#line 2922 "MachineIndependent/glslang.y"
+#line 2957 "MachineIndependent/glslang.y"
                      {
         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);
     }
-#line 9732 "MachineIndependent/glslang_tab.cpp"
+#line 9792 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 430: /* type_specifier_nonarray: TEXTURE1DARRAY  */
-#line 2928 "MachineIndependent/glslang.y"
+#line 2963 "MachineIndependent/glslang.y"
                      {
         (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 9742 "MachineIndependent/glslang_tab.cpp"
+#line 9802 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 431: /* type_specifier_nonarray: F16TEXTURE1DARRAY  */
-#line 2933 "MachineIndependent/glslang.y"
+#line 2968 "MachineIndependent/glslang.y"
                         {
         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);
     }
-#line 9753 "MachineIndependent/glslang_tab.cpp"
+#line 9813 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 432: /* type_specifier_nonarray: F16TEXTURE2DARRAY  */
-#line 2939 "MachineIndependent/glslang.y"
+#line 2974 "MachineIndependent/glslang.y"
                         {
         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);
     }
-#line 9764 "MachineIndependent/glslang_tab.cpp"
+#line 9824 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 433: /* type_specifier_nonarray: F16TEXTURECUBEARRAY  */
-#line 2945 "MachineIndependent/glslang.y"
+#line 2980 "MachineIndependent/glslang.y"
                           {
         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);
     }
-#line 9775 "MachineIndependent/glslang_tab.cpp"
+#line 9835 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 434: /* type_specifier_nonarray: ITEXTURE1D  */
-#line 2951 "MachineIndependent/glslang.y"
+#line 2986 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D);
     }
-#line 9785 "MachineIndependent/glslang_tab.cpp"
+#line 9845 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 435: /* type_specifier_nonarray: ITEXTURE1DARRAY  */
-#line 2956 "MachineIndependent/glslang.y"
+#line 2991 "MachineIndependent/glslang.y"
                       {
         (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 9795 "MachineIndependent/glslang_tab.cpp"
+#line 9855 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 436: /* type_specifier_nonarray: UTEXTURE1D  */
-#line 2961 "MachineIndependent/glslang.y"
+#line 2996 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D);
     }
-#line 9805 "MachineIndependent/glslang_tab.cpp"
+#line 9865 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 437: /* type_specifier_nonarray: UTEXTURE1DARRAY  */
-#line 2966 "MachineIndependent/glslang.y"
+#line 3001 "MachineIndependent/glslang.y"
                       {
         (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 9815 "MachineIndependent/glslang_tab.cpp"
+#line 9875 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 438: /* type_specifier_nonarray: TEXTURE2DRECT  */
-#line 2971 "MachineIndependent/glslang.y"
+#line 3006 "MachineIndependent/glslang.y"
                     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, EsdRect);
     }
-#line 9825 "MachineIndependent/glslang_tab.cpp"
+#line 9885 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 439: /* type_specifier_nonarray: F16TEXTURE2DRECT  */
-#line 2976 "MachineIndependent/glslang.y"
+#line 3011 "MachineIndependent/glslang.y"
                        {
         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);
     }
-#line 9836 "MachineIndependent/glslang_tab.cpp"
+#line 9896 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 440: /* type_specifier_nonarray: ITEXTURE2DRECT  */
-#line 2982 "MachineIndependent/glslang.y"
+#line 3017 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, EsdRect);
     }
-#line 9846 "MachineIndependent/glslang_tab.cpp"
+#line 9906 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 441: /* type_specifier_nonarray: UTEXTURE2DRECT  */
-#line 2987 "MachineIndependent/glslang.y"
+#line 3022 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, EsdRect);
     }
-#line 9856 "MachineIndependent/glslang_tab.cpp"
+#line 9916 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 442: /* type_specifier_nonarray: TEXTUREBUFFER  */
-#line 2992 "MachineIndependent/glslang.y"
+#line 3027 "MachineIndependent/glslang.y"
                     {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtFloat, EsdBuffer);
     }
-#line 9866 "MachineIndependent/glslang_tab.cpp"
+#line 9926 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 443: /* type_specifier_nonarray: F16TEXTUREBUFFER  */
-#line 2997 "MachineIndependent/glslang.y"
+#line 3032 "MachineIndependent/glslang.y"
                        {
         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);
     }
-#line 9877 "MachineIndependent/glslang_tab.cpp"
+#line 9937 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 444: /* type_specifier_nonarray: ITEXTUREBUFFER  */
-#line 3003 "MachineIndependent/glslang.y"
+#line 3038 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtInt, EsdBuffer);
     }
-#line 9887 "MachineIndependent/glslang_tab.cpp"
+#line 9947 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 445: /* type_specifier_nonarray: UTEXTUREBUFFER  */
-#line 3008 "MachineIndependent/glslang.y"
+#line 3043 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setTexture(EbtUint, EsdBuffer);
     }
-#line 9897 "MachineIndependent/glslang_tab.cpp"
+#line 9957 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 446: /* type_specifier_nonarray: TEXTURE2DMS  */
-#line 3013 "MachineIndependent/glslang.y"
+#line 3048 "MachineIndependent/glslang.y"
                   {
         (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 9907 "MachineIndependent/glslang_tab.cpp"
+#line 9967 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 447: /* type_specifier_nonarray: F16TEXTURE2DMS  */
-#line 3018 "MachineIndependent/glslang.y"
+#line 3053 "MachineIndependent/glslang.y"
                      {
         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);
     }
-#line 9918 "MachineIndependent/glslang_tab.cpp"
+#line 9978 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 448: /* type_specifier_nonarray: ITEXTURE2DMS  */
-#line 3024 "MachineIndependent/glslang.y"
+#line 3059 "MachineIndependent/glslang.y"
                    {
         (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 9928 "MachineIndependent/glslang_tab.cpp"
+#line 9988 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 449: /* type_specifier_nonarray: UTEXTURE2DMS  */
-#line 3029 "MachineIndependent/glslang.y"
+#line 3064 "MachineIndependent/glslang.y"
                    {
         (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 9938 "MachineIndependent/glslang_tab.cpp"
+#line 9998 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 450: /* type_specifier_nonarray: TEXTURE2DMSARRAY  */
-#line 3034 "MachineIndependent/glslang.y"
+#line 3069 "MachineIndependent/glslang.y"
                        {
         (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 9948 "MachineIndependent/glslang_tab.cpp"
+#line 10008 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 451: /* type_specifier_nonarray: F16TEXTURE2DMSARRAY  */
-#line 3039 "MachineIndependent/glslang.y"
+#line 3074 "MachineIndependent/glslang.y"
                           {
         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);
     }
-#line 9959 "MachineIndependent/glslang_tab.cpp"
+#line 10019 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 452: /* type_specifier_nonarray: ITEXTURE2DMSARRAY  */
-#line 3045 "MachineIndependent/glslang.y"
+#line 3080 "MachineIndependent/glslang.y"
                         {
         (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 9969 "MachineIndependent/glslang_tab.cpp"
+#line 10029 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 453: /* type_specifier_nonarray: UTEXTURE2DMSARRAY  */
-#line 3050 "MachineIndependent/glslang.y"
+#line 3085 "MachineIndependent/glslang.y"
                         {
         (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 9979 "MachineIndependent/glslang_tab.cpp"
+#line 10039 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 454: /* type_specifier_nonarray: IMAGE1D  */
-#line 3055 "MachineIndependent/glslang.y"
+#line 3090 "MachineIndependent/glslang.y"
               {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D);
     }
-#line 9989 "MachineIndependent/glslang_tab.cpp"
+#line 10049 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 455: /* type_specifier_nonarray: F16IMAGE1D  */
-#line 3060 "MachineIndependent/glslang.y"
+#line 3095 "MachineIndependent/glslang.y"
                  {
         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);
     }
-#line 10000 "MachineIndependent/glslang_tab.cpp"
+#line 10060 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 456: /* type_specifier_nonarray: IIMAGE1D  */
-#line 3066 "MachineIndependent/glslang.y"
+#line 3101 "MachineIndependent/glslang.y"
                {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd1D);
     }
-#line 10010 "MachineIndependent/glslang_tab.cpp"
+#line 10070 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 457: /* type_specifier_nonarray: UIMAGE1D  */
-#line 3071 "MachineIndependent/glslang.y"
+#line 3106 "MachineIndependent/glslang.y"
                {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd1D);
     }
-#line 10020 "MachineIndependent/glslang_tab.cpp"
+#line 10080 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 458: /* type_specifier_nonarray: IMAGE2D  */
-#line 3076 "MachineIndependent/glslang.y"
+#line 3111 "MachineIndependent/glslang.y"
               {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D);
     }
-#line 10030 "MachineIndependent/glslang_tab.cpp"
+#line 10090 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 459: /* type_specifier_nonarray: F16IMAGE2D  */
-#line 3081 "MachineIndependent/glslang.y"
+#line 3116 "MachineIndependent/glslang.y"
                  {
         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);
     }
-#line 10041 "MachineIndependent/glslang_tab.cpp"
+#line 10101 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 460: /* type_specifier_nonarray: IIMAGE2D  */
-#line 3087 "MachineIndependent/glslang.y"
+#line 3122 "MachineIndependent/glslang.y"
                {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd2D);
     }
-#line 10051 "MachineIndependent/glslang_tab.cpp"
+#line 10111 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 461: /* type_specifier_nonarray: UIMAGE2D  */
-#line 3092 "MachineIndependent/glslang.y"
+#line 3127 "MachineIndependent/glslang.y"
                {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd2D);
     }
-#line 10061 "MachineIndependent/glslang_tab.cpp"
+#line 10121 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 462: /* type_specifier_nonarray: IMAGE3D  */
-#line 3097 "MachineIndependent/glslang.y"
+#line 3132 "MachineIndependent/glslang.y"
               {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, Esd3D);
     }
-#line 10071 "MachineIndependent/glslang_tab.cpp"
+#line 10131 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 463: /* type_specifier_nonarray: F16IMAGE3D  */
-#line 3102 "MachineIndependent/glslang.y"
+#line 3137 "MachineIndependent/glslang.y"
                  {
         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);
     }
-#line 10082 "MachineIndependent/glslang_tab.cpp"
+#line 10142 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 464: /* type_specifier_nonarray: IIMAGE3D  */
-#line 3108 "MachineIndependent/glslang.y"
+#line 3143 "MachineIndependent/glslang.y"
                {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, Esd3D);
     }
-#line 10092 "MachineIndependent/glslang_tab.cpp"
+#line 10152 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 465: /* type_specifier_nonarray: UIMAGE3D  */
-#line 3113 "MachineIndependent/glslang.y"
+#line 3148 "MachineIndependent/glslang.y"
                {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, Esd3D);
     }
-#line 10102 "MachineIndependent/glslang_tab.cpp"
+#line 10162 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 466: /* type_specifier_nonarray: IMAGE2DRECT  */
-#line 3118 "MachineIndependent/glslang.y"
+#line 3153 "MachineIndependent/glslang.y"
                   {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, EsdRect);
     }
-#line 10112 "MachineIndependent/glslang_tab.cpp"
+#line 10172 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 467: /* type_specifier_nonarray: F16IMAGE2DRECT  */
-#line 3123 "MachineIndependent/glslang.y"
+#line 3158 "MachineIndependent/glslang.y"
                      {
         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);
     }
-#line 10123 "MachineIndependent/glslang_tab.cpp"
+#line 10183 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 468: /* type_specifier_nonarray: IIMAGE2DRECT  */
-#line 3129 "MachineIndependent/glslang.y"
+#line 3164 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, EsdRect);
     }
-#line 10133 "MachineIndependent/glslang_tab.cpp"
+#line 10193 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 469: /* type_specifier_nonarray: UIMAGE2DRECT  */
-#line 3134 "MachineIndependent/glslang.y"
+#line 3169 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, EsdRect);
     }
-#line 10143 "MachineIndependent/glslang_tab.cpp"
+#line 10203 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 470: /* type_specifier_nonarray: IMAGECUBE  */
-#line 3139 "MachineIndependent/glslang.y"
+#line 3174 "MachineIndependent/glslang.y"
                 {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube);
     }
-#line 10153 "MachineIndependent/glslang_tab.cpp"
+#line 10213 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 471: /* type_specifier_nonarray: F16IMAGECUBE  */
-#line 3144 "MachineIndependent/glslang.y"
+#line 3179 "MachineIndependent/glslang.y"
                    {
         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);
     }
-#line 10164 "MachineIndependent/glslang_tab.cpp"
+#line 10224 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 472: /* type_specifier_nonarray: IIMAGECUBE  */
-#line 3150 "MachineIndependent/glslang.y"
+#line 3185 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, EsdCube);
     }
-#line 10174 "MachineIndependent/glslang_tab.cpp"
+#line 10234 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 473: /* type_specifier_nonarray: UIMAGECUBE  */
-#line 3155 "MachineIndependent/glslang.y"
+#line 3190 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, EsdCube);
     }
-#line 10184 "MachineIndependent/glslang_tab.cpp"
+#line 10244 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 474: /* type_specifier_nonarray: IMAGEBUFFER  */
-#line 3160 "MachineIndependent/glslang.y"
+#line 3195 "MachineIndependent/glslang.y"
                   {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtFloat, EsdBuffer);
     }
-#line 10194 "MachineIndependent/glslang_tab.cpp"
+#line 10254 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 475: /* type_specifier_nonarray: F16IMAGEBUFFER  */
-#line 3165 "MachineIndependent/glslang.y"
+#line 3200 "MachineIndependent/glslang.y"
                      {
         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);
     }
-#line 10205 "MachineIndependent/glslang_tab.cpp"
+#line 10265 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 476: /* type_specifier_nonarray: IIMAGEBUFFER  */
-#line 3171 "MachineIndependent/glslang.y"
+#line 3206 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt, EsdBuffer);
     }
-#line 10215 "MachineIndependent/glslang_tab.cpp"
+#line 10275 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 477: /* type_specifier_nonarray: UIMAGEBUFFER  */
-#line 3176 "MachineIndependent/glslang.y"
+#line 3211 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint, EsdBuffer);
     }
-#line 10225 "MachineIndependent/glslang_tab.cpp"
+#line 10285 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 478: /* type_specifier_nonarray: IMAGE1DARRAY  */
-#line 3181 "MachineIndependent/glslang.y"
+#line 3216 "MachineIndependent/glslang.y"
                    {
         (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 10235 "MachineIndependent/glslang_tab.cpp"
+#line 10295 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 479: /* type_specifier_nonarray: F16IMAGE1DARRAY  */
-#line 3186 "MachineIndependent/glslang.y"
+#line 3221 "MachineIndependent/glslang.y"
                       {
         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);
     }
-#line 10246 "MachineIndependent/glslang_tab.cpp"
+#line 10306 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 480: /* type_specifier_nonarray: IIMAGE1DARRAY  */
-#line 3192 "MachineIndependent/glslang.y"
+#line 3227 "MachineIndependent/glslang.y"
                     {
         (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 10256 "MachineIndependent/glslang_tab.cpp"
+#line 10316 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 481: /* type_specifier_nonarray: UIMAGE1DARRAY  */
-#line 3197 "MachineIndependent/glslang.y"
+#line 3232 "MachineIndependent/glslang.y"
                     {
         (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 10266 "MachineIndependent/glslang_tab.cpp"
+#line 10326 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 482: /* type_specifier_nonarray: IMAGE2DARRAY  */
-#line 3202 "MachineIndependent/glslang.y"
+#line 3237 "MachineIndependent/glslang.y"
                    {
         (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 10276 "MachineIndependent/glslang_tab.cpp"
+#line 10336 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 483: /* type_specifier_nonarray: F16IMAGE2DARRAY  */
-#line 3207 "MachineIndependent/glslang.y"
+#line 3242 "MachineIndependent/glslang.y"
                       {
         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);
     }
-#line 10287 "MachineIndependent/glslang_tab.cpp"
+#line 10347 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 484: /* type_specifier_nonarray: IIMAGE2DARRAY  */
-#line 3213 "MachineIndependent/glslang.y"
+#line 3248 "MachineIndependent/glslang.y"
                     {
         (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 10297 "MachineIndependent/glslang_tab.cpp"
+#line 10357 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 485: /* type_specifier_nonarray: UIMAGE2DARRAY  */
-#line 3218 "MachineIndependent/glslang.y"
+#line 3253 "MachineIndependent/glslang.y"
                     {
         (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 10307 "MachineIndependent/glslang_tab.cpp"
+#line 10367 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 486: /* type_specifier_nonarray: IMAGECUBEARRAY  */
-#line 3223 "MachineIndependent/glslang.y"
+#line 3258 "MachineIndependent/glslang.y"
                      {
         (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 10317 "MachineIndependent/glslang_tab.cpp"
+#line 10377 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 487: /* type_specifier_nonarray: F16IMAGECUBEARRAY  */
-#line 3228 "MachineIndependent/glslang.y"
+#line 3263 "MachineIndependent/glslang.y"
                         {
         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);
     }
-#line 10328 "MachineIndependent/glslang_tab.cpp"
+#line 10388 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 488: /* type_specifier_nonarray: IIMAGECUBEARRAY  */
-#line 3234 "MachineIndependent/glslang.y"
+#line 3269 "MachineIndependent/glslang.y"
                       {
         (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 10338 "MachineIndependent/glslang_tab.cpp"
+#line 10398 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 489: /* type_specifier_nonarray: UIMAGECUBEARRAY  */
-#line 3239 "MachineIndependent/glslang.y"
+#line 3274 "MachineIndependent/glslang.y"
                       {
         (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 10348 "MachineIndependent/glslang_tab.cpp"
+#line 10408 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 490: /* type_specifier_nonarray: IMAGE2DMS  */
-#line 3244 "MachineIndependent/glslang.y"
+#line 3279 "MachineIndependent/glslang.y"
                 {
         (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 10358 "MachineIndependent/glslang_tab.cpp"
+#line 10418 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 491: /* type_specifier_nonarray: F16IMAGE2DMS  */
-#line 3249 "MachineIndependent/glslang.y"
+#line 3284 "MachineIndependent/glslang.y"
                    {
         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);
     }
-#line 10369 "MachineIndependent/glslang_tab.cpp"
+#line 10429 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 492: /* type_specifier_nonarray: IIMAGE2DMS  */
-#line 3255 "MachineIndependent/glslang.y"
+#line 3290 "MachineIndependent/glslang.y"
                  {
         (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 10379 "MachineIndependent/glslang_tab.cpp"
+#line 10439 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 493: /* type_specifier_nonarray: UIMAGE2DMS  */
-#line 3260 "MachineIndependent/glslang.y"
+#line 3295 "MachineIndependent/glslang.y"
                  {
         (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 10389 "MachineIndependent/glslang_tab.cpp"
+#line 10449 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 494: /* type_specifier_nonarray: IMAGE2DMSARRAY  */
-#line 3265 "MachineIndependent/glslang.y"
+#line 3300 "MachineIndependent/glslang.y"
                      {
         (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 10399 "MachineIndependent/glslang_tab.cpp"
+#line 10459 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 495: /* type_specifier_nonarray: F16IMAGE2DMSARRAY  */
-#line 3270 "MachineIndependent/glslang.y"
+#line 3305 "MachineIndependent/glslang.y"
                         {
         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);
     }
-#line 10410 "MachineIndependent/glslang_tab.cpp"
+#line 10470 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 496: /* type_specifier_nonarray: IIMAGE2DMSARRAY  */
-#line 3276 "MachineIndependent/glslang.y"
+#line 3311 "MachineIndependent/glslang.y"
                       {
         (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 10420 "MachineIndependent/glslang_tab.cpp"
+#line 10480 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 497: /* type_specifier_nonarray: UIMAGE2DMSARRAY  */
-#line 3281 "MachineIndependent/glslang.y"
+#line 3316 "MachineIndependent/glslang.y"
                       {
         (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 10430 "MachineIndependent/glslang_tab.cpp"
+#line 10490 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 498: /* type_specifier_nonarray: I64IMAGE1D  */
-#line 3286 "MachineIndependent/glslang.y"
+#line 3321 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt64, Esd1D);
     }
-#line 10440 "MachineIndependent/glslang_tab.cpp"
+#line 10500 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 499: /* type_specifier_nonarray: U64IMAGE1D  */
-#line 3291 "MachineIndependent/glslang.y"
+#line 3326 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint64, Esd1D);
     }
-#line 10450 "MachineIndependent/glslang_tab.cpp"
+#line 10510 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 500: /* type_specifier_nonarray: I64IMAGE2D  */
-#line 3296 "MachineIndependent/glslang.y"
+#line 3331 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D);
     }
-#line 10460 "MachineIndependent/glslang_tab.cpp"
+#line 10520 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 501: /* type_specifier_nonarray: U64IMAGE2D  */
-#line 3301 "MachineIndependent/glslang.y"
+#line 3336 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D);
     }
-#line 10470 "MachineIndependent/glslang_tab.cpp"
+#line 10530 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 502: /* type_specifier_nonarray: I64IMAGE3D  */
-#line 3306 "MachineIndependent/glslang.y"
+#line 3341 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt64, Esd3D);
     }
-#line 10480 "MachineIndependent/glslang_tab.cpp"
+#line 10540 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 503: /* type_specifier_nonarray: U64IMAGE3D  */
-#line 3311 "MachineIndependent/glslang.y"
+#line 3346 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint64, Esd3D);
     }
-#line 10490 "MachineIndependent/glslang_tab.cpp"
+#line 10550 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 504: /* type_specifier_nonarray: I64IMAGE2DRECT  */
-#line 3316 "MachineIndependent/glslang.y"
+#line 3351 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt64, EsdRect);
     }
-#line 10500 "MachineIndependent/glslang_tab.cpp"
+#line 10560 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 505: /* type_specifier_nonarray: U64IMAGE2DRECT  */
-#line 3321 "MachineIndependent/glslang.y"
+#line 3356 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint64, EsdRect);
     }
-#line 10510 "MachineIndependent/glslang_tab.cpp"
+#line 10570 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 506: /* type_specifier_nonarray: I64IMAGECUBE  */
-#line 3326 "MachineIndependent/glslang.y"
+#line 3361 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt64, EsdCube);
     }
-#line 10520 "MachineIndependent/glslang_tab.cpp"
+#line 10580 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 507: /* type_specifier_nonarray: U64IMAGECUBE  */
-#line 3331 "MachineIndependent/glslang.y"
+#line 3366 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint64, EsdCube);
     }
-#line 10530 "MachineIndependent/glslang_tab.cpp"
+#line 10590 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 508: /* type_specifier_nonarray: I64IMAGEBUFFER  */
-#line 3336 "MachineIndependent/glslang.y"
+#line 3371 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt64, EsdBuffer);
     }
-#line 10540 "MachineIndependent/glslang_tab.cpp"
+#line 10600 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 509: /* type_specifier_nonarray: U64IMAGEBUFFER  */
-#line 3341 "MachineIndependent/glslang.y"
+#line 3376 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint64, EsdBuffer);
     }
-#line 10550 "MachineIndependent/glslang_tab.cpp"
+#line 10610 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 510: /* type_specifier_nonarray: I64IMAGE1DARRAY  */
-#line 3346 "MachineIndependent/glslang.y"
+#line 3381 "MachineIndependent/glslang.y"
                       {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt64, Esd1D, true);
     }
-#line 10560 "MachineIndependent/glslang_tab.cpp"
+#line 10620 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 511: /* type_specifier_nonarray: U64IMAGE1DARRAY  */
-#line 3351 "MachineIndependent/glslang.y"
+#line 3386 "MachineIndependent/glslang.y"
                       {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint64, Esd1D, true);
     }
-#line 10570 "MachineIndependent/glslang_tab.cpp"
+#line 10630 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 512: /* type_specifier_nonarray: I64IMAGE2DARRAY  */
-#line 3356 "MachineIndependent/glslang.y"
+#line 3391 "MachineIndependent/glslang.y"
                       {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D, true);
     }
-#line 10580 "MachineIndependent/glslang_tab.cpp"
+#line 10640 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 513: /* type_specifier_nonarray: U64IMAGE2DARRAY  */
-#line 3361 "MachineIndependent/glslang.y"
+#line 3396 "MachineIndependent/glslang.y"
                       {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D, true);
     }
-#line 10590 "MachineIndependent/glslang_tab.cpp"
+#line 10650 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 514: /* type_specifier_nonarray: I64IMAGECUBEARRAY  */
-#line 3366 "MachineIndependent/glslang.y"
+#line 3401 "MachineIndependent/glslang.y"
                         {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt64, EsdCube, true);
     }
-#line 10600 "MachineIndependent/glslang_tab.cpp"
+#line 10660 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 515: /* type_specifier_nonarray: U64IMAGECUBEARRAY  */
-#line 3371 "MachineIndependent/glslang.y"
+#line 3406 "MachineIndependent/glslang.y"
                         {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint64, EsdCube, true);
     }
-#line 10610 "MachineIndependent/glslang_tab.cpp"
+#line 10670 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 516: /* type_specifier_nonarray: I64IMAGE2DMS  */
-#line 3376 "MachineIndependent/glslang.y"
+#line 3411 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D, false, false, true);
     }
-#line 10620 "MachineIndependent/glslang_tab.cpp"
+#line 10680 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 517: /* type_specifier_nonarray: U64IMAGE2DMS  */
-#line 3381 "MachineIndependent/glslang.y"
+#line 3416 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D, false, false, true);
     }
-#line 10630 "MachineIndependent/glslang_tab.cpp"
+#line 10690 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 518: /* type_specifier_nonarray: I64IMAGE2DMSARRAY  */
-#line 3386 "MachineIndependent/glslang.y"
+#line 3421 "MachineIndependent/glslang.y"
                         {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D, true, false, true);
     }
-#line 10640 "MachineIndependent/glslang_tab.cpp"
+#line 10700 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 519: /* type_specifier_nonarray: U64IMAGE2DMSARRAY  */
-#line 3391 "MachineIndependent/glslang.y"
+#line 3426 "MachineIndependent/glslang.y"
                         {
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D, true, false, true);
     }
-#line 10650 "MachineIndependent/glslang_tab.cpp"
+#line 10710 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 520: /* type_specifier_nonarray: SAMPLEREXTERNALOES  */
-#line 3396 "MachineIndependent/glslang.y"
+#line 3431 "MachineIndependent/glslang.y"
                          {  // 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 10661 "MachineIndependent/glslang_tab.cpp"
+#line 10721 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 521: /* type_specifier_nonarray: SAMPLEREXTERNAL2DY2YEXT  */
-#line 3402 "MachineIndependent/glslang.y"
+#line 3437 "MachineIndependent/glslang.y"
                               { // GL_EXT_YUV_target
         (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.yuv = true;
     }
-#line 10672 "MachineIndependent/glslang_tab.cpp"
+#line 10732 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 522: /* type_specifier_nonarray: ATTACHMENTEXT  */
-#line 3408 "MachineIndependent/glslang.y"
+#line 3443 "MachineIndependent/glslang.y"
                     {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "attachmentEXT input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setAttachmentEXT(EbtFloat);
     }
-#line 10683 "MachineIndependent/glslang_tab.cpp"
+#line 10743 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 523: /* type_specifier_nonarray: IATTACHMENTEXT  */
-#line 3414 "MachineIndependent/glslang.y"
+#line 3449 "MachineIndependent/glslang.y"
                      {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "attachmentEXT input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setAttachmentEXT(EbtInt);
     }
-#line 10694 "MachineIndependent/glslang_tab.cpp"
+#line 10754 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 524: /* type_specifier_nonarray: UATTACHMENTEXT  */
-#line 3420 "MachineIndependent/glslang.y"
+#line 3455 "MachineIndependent/glslang.y"
                      {
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "attachmentEXT input");
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setAttachmentEXT(EbtUint);
     }
-#line 10705 "MachineIndependent/glslang_tab.cpp"
+#line 10765 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 525: /* type_specifier_nonarray: SUBPASSINPUT  */
-#line 3426 "MachineIndependent/glslang.y"
+#line 3461 "MachineIndependent/glslang.y"
                    {
         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 10716 "MachineIndependent/glslang_tab.cpp"
+#line 10776 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 526: /* type_specifier_nonarray: SUBPASSINPUTMS  */
-#line 3432 "MachineIndependent/glslang.y"
+#line 3467 "MachineIndependent/glslang.y"
                      {
         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 10727 "MachineIndependent/glslang_tab.cpp"
+#line 10787 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 527: /* type_specifier_nonarray: F16SUBPASSINPUT  */
-#line 3438 "MachineIndependent/glslang.y"
+#line 3473 "MachineIndependent/glslang.y"
                       {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel());
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
@@ -10735,11 +10795,11 @@
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtFloat16);
     }
-#line 10739 "MachineIndependent/glslang_tab.cpp"
+#line 10799 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 528: /* type_specifier_nonarray: F16SUBPASSINPUTMS  */
-#line 3445 "MachineIndependent/glslang.y"
+#line 3480 "MachineIndependent/glslang.y"
                         {
         parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel());
         parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input");
@@ -10747,55 +10807,55 @@
         (yyval.interm.type).basicType = EbtSampler;
         (yyval.interm.type).sampler.setSubpass(EbtFloat16, true);
     }
-#line 10751 "MachineIndependent/glslang_tab.cpp"
+#line 10811 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 529: /* type_specifier_nonarray: ISUBPASSINPUT  */
-#line 3452 "MachineIndependent/glslang.y"
+#line 3487 "MachineIndependent/glslang.y"
                     {
         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 10762 "MachineIndependent/glslang_tab.cpp"
+#line 10822 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 530: /* type_specifier_nonarray: ISUBPASSINPUTMS  */
-#line 3458 "MachineIndependent/glslang.y"
+#line 3493 "MachineIndependent/glslang.y"
                       {
         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 10773 "MachineIndependent/glslang_tab.cpp"
+#line 10833 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 531: /* type_specifier_nonarray: USUBPASSINPUT  */
-#line 3464 "MachineIndependent/glslang.y"
+#line 3499 "MachineIndependent/glslang.y"
                     {
         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 10784 "MachineIndependent/glslang_tab.cpp"
+#line 10844 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 532: /* type_specifier_nonarray: USUBPASSINPUTMS  */
-#line 3470 "MachineIndependent/glslang.y"
+#line 3505 "MachineIndependent/glslang.y"
                       {
         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 10795 "MachineIndependent/glslang_tab.cpp"
+#line 10855 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 533: /* type_specifier_nonarray: FCOOPMATNV  */
-#line 3476 "MachineIndependent/glslang.y"
+#line 3511 "MachineIndependent/glslang.y"
                  {
         parseContext.fcoopmatCheckNV((yyvsp[0].lex).loc, "fcoopmatNV", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
@@ -10803,11 +10863,11 @@
         (yyval.interm.type).coopmatNV = true;
         (yyval.interm.type).coopmatKHR = false;
     }
-#line 10807 "MachineIndependent/glslang_tab.cpp"
+#line 10867 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 534: /* type_specifier_nonarray: ICOOPMATNV  */
-#line 3483 "MachineIndependent/glslang.y"
+#line 3518 "MachineIndependent/glslang.y"
                  {
         parseContext.intcoopmatCheckNV((yyvsp[0].lex).loc, "icoopmatNV", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
@@ -10815,11 +10875,11 @@
         (yyval.interm.type).coopmatNV = true;
         (yyval.interm.type).coopmatKHR = false;
     }
-#line 10819 "MachineIndependent/glslang_tab.cpp"
+#line 10879 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 535: /* type_specifier_nonarray: UCOOPMATNV  */
-#line 3490 "MachineIndependent/glslang.y"
+#line 3525 "MachineIndependent/glslang.y"
                  {
         parseContext.intcoopmatCheckNV((yyvsp[0].lex).loc, "ucoopmatNV", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
@@ -10827,11 +10887,11 @@
         (yyval.interm.type).coopmatNV = true;
         (yyval.interm.type).coopmatKHR = false;
     }
-#line 10831 "MachineIndependent/glslang_tab.cpp"
+#line 10891 "MachineIndependent/glslang_tab.cpp"
     break;
 
   case 536: /* type_specifier_nonarray: COOPMAT  */
-#line 3497 "MachineIndependent/glslang.y"
+#line 3532 "MachineIndependent/glslang.y"
               {
         parseContext.coopmatCheck((yyvsp[0].lex).loc, "coopmat", parseContext.symbolTable.atBuiltInLevel());
         (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
@@ -10839,39 +10899,68 @@
         (yyval.interm.type).coopmatNV = false;
         (yyval.interm.type).coopmatKHR = true;
     }
-#line 10843 "MachineIndependent/glslang_tab.cpp"
+#line 10903 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 537: /* type_specifier_nonarray: spirv_type_specifier  */
-#line 3504 "MachineIndependent/glslang.y"
+  case 537: /* type_specifier_nonarray: TENSORLAYOUTNV  */
+#line 3539 "MachineIndependent/glslang.y"
+                     {
+        parseContext.tensorLayoutViewCheck((yyvsp[0].lex).loc, "tensorLayoutNV", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtTensorLayoutNV;
+    }
+#line 10913 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 538: /* type_specifier_nonarray: TENSORVIEWNV  */
+#line 3544 "MachineIndependent/glslang.y"
+                   {
+        parseContext.tensorLayoutViewCheck((yyvsp[0].lex).loc, "tensorViewNV", parseContext.symbolTable.atBuiltInLevel());
+        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
+        (yyval.interm.type).basicType = EbtTensorViewNV;
+    }
+#line 10923 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 539: /* type_specifier_nonarray: FUNCTION  */
+#line 3549 "MachineIndependent/glslang.y"
+               {
+        (yyval.interm.type).init((yyvsp[0].lex).loc);
+        (yyval.interm.type).basicType = EbtFunction;
+    }
+#line 10932 "MachineIndependent/glslang_tab.cpp"
+    break;
+
+  case 540: /* type_specifier_nonarray: spirv_type_specifier  */
+#line 3553 "MachineIndependent/glslang.y"
                            {
         parseContext.requireExtensions((yyvsp[0].interm.type).loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V type specifier");
         (yyval.interm.type) = (yyvsp[0].interm.type);
     }
-#line 10852 "MachineIndependent/glslang_tab.cpp"
+#line 10941 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 538: /* type_specifier_nonarray: HITOBJECTNV  */
-#line 3508 "MachineIndependent/glslang.y"
+  case 541: /* type_specifier_nonarray: HITOBJECTNV  */
+#line 3557 "MachineIndependent/glslang.y"
                       {
        (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel());
        (yyval.interm.type).basicType = EbtHitObjectNV;
 	}
-#line 10861 "MachineIndependent/glslang_tab.cpp"
+#line 10950 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 539: /* type_specifier_nonarray: struct_specifier  */
-#line 3512 "MachineIndependent/glslang.y"
+  case 542: /* type_specifier_nonarray: struct_specifier  */
+#line 3561 "MachineIndependent/glslang.y"
                        {
         (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 10871 "MachineIndependent/glslang_tab.cpp"
+#line 10960 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 540: /* type_specifier_nonarray: TYPE_NAME  */
-#line 3517 "MachineIndependent/glslang.y"
+  case 543: /* type_specifier_nonarray: TYPE_NAME  */
+#line 3566 "MachineIndependent/glslang.y"
                 {
         //
         // This is for user defined type names.  The lexical phase looked up the
@@ -10885,69 +10974,75 @@
         } else
             parseContext.error((yyvsp[0].lex).loc, "expected type name", (yyvsp[0].lex).string->c_str(), "");
     }
-#line 10889 "MachineIndependent/glslang_tab.cpp"
+#line 10978 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 541: /* precision_qualifier: HIGH_PRECISION  */
-#line 3533 "MachineIndependent/glslang.y"
+  case 544: /* precision_qualifier: HIGH_PRECISION  */
+#line 3582 "MachineIndependent/glslang.y"
                      {
         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 10899 "MachineIndependent/glslang_tab.cpp"
+#line 10988 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 542: /* precision_qualifier: MEDIUM_PRECISION  */
-#line 3538 "MachineIndependent/glslang.y"
+  case 545: /* precision_qualifier: MEDIUM_PRECISION  */
+#line 3587 "MachineIndependent/glslang.y"
                        {
         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 10909 "MachineIndependent/glslang_tab.cpp"
+#line 10998 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 543: /* precision_qualifier: LOW_PRECISION  */
-#line 3543 "MachineIndependent/glslang.y"
+  case 546: /* precision_qualifier: LOW_PRECISION  */
+#line 3592 "MachineIndependent/glslang.y"
                     {
         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 10919 "MachineIndependent/glslang_tab.cpp"
+#line 11008 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 544: /* $@3: %empty  */
-#line 3551 "MachineIndependent/glslang.y"
+  case 547: /* $@3: %empty  */
+#line 3600 "MachineIndependent/glslang.y"
                                    { parseContext.nestedStructCheck((yyvsp[-2].lex).loc); }
-#line 10925 "MachineIndependent/glslang_tab.cpp"
+#line 11014 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 545: /* struct_specifier: STRUCT IDENTIFIER LEFT_BRACE $@3 struct_declaration_list RIGHT_BRACE  */
-#line 3551 "MachineIndependent/glslang.y"
+  case 548: /* struct_specifier: STRUCT IDENTIFIER LEFT_BRACE $@3 struct_declaration_list RIGHT_BRACE  */
+#line 3600 "MachineIndependent/glslang.y"
                                                                                                                    {
+
         TType* structure = new TType((yyvsp[-1].interm.typeList), *(yyvsp[-4].lex).string);
         parseContext.structArrayCheck((yyvsp[-4].lex).loc, *structure);
+
         TVariable* userTypeDef = new TVariable((yyvsp[-4].lex).string, *structure, true);
         if (! parseContext.symbolTable.insert(*userTypeDef))
             parseContext.error((yyvsp[-4].lex).loc, "redefinition", (yyvsp[-4].lex).string->c_str(), "struct");
+        else if (parseContext.spvVersion.vulkanRelaxed
+                 && structure->containsOpaque())
+            parseContext.relaxedSymbols.push_back(structure->getTypeName());
+
         (yyval.interm.type).init((yyvsp[-5].lex).loc);
         (yyval.interm.type).basicType = EbtStruct;
         (yyval.interm.type).userDef = structure;
         --parseContext.structNestingLevel;
     }
-#line 10941 "MachineIndependent/glslang_tab.cpp"
+#line 11036 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 546: /* $@4: %empty  */
-#line 3562 "MachineIndependent/glslang.y"
+  case 549: /* $@4: %empty  */
+#line 3617 "MachineIndependent/glslang.y"
                         { parseContext.nestedStructCheck((yyvsp[-1].lex).loc); }
-#line 10947 "MachineIndependent/glslang_tab.cpp"
+#line 11042 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 547: /* struct_specifier: STRUCT LEFT_BRACE $@4 struct_declaration_list RIGHT_BRACE  */
-#line 3562 "MachineIndependent/glslang.y"
+  case 550: /* struct_specifier: STRUCT LEFT_BRACE $@4 struct_declaration_list RIGHT_BRACE  */
+#line 3617 "MachineIndependent/glslang.y"
                                                                                                         {
         TType* structure = new TType((yyvsp[-1].interm.typeList), TString(""));
         (yyval.interm.type).init((yyvsp[-4].lex).loc);
@@ -10955,19 +11050,19 @@
         (yyval.interm.type).userDef = structure;
         --parseContext.structNestingLevel;
     }
-#line 10959 "MachineIndependent/glslang_tab.cpp"
+#line 11054 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 548: /* struct_declaration_list: struct_declaration  */
-#line 3572 "MachineIndependent/glslang.y"
+  case 551: /* struct_declaration_list: struct_declaration  */
+#line 3627 "MachineIndependent/glslang.y"
                          {
         (yyval.interm.typeList) = (yyvsp[0].interm.typeList);
     }
-#line 10967 "MachineIndependent/glslang_tab.cpp"
+#line 11062 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 549: /* struct_declaration_list: struct_declaration_list struct_declaration  */
-#line 3575 "MachineIndependent/glslang.y"
+  case 552: /* struct_declaration_list: struct_declaration_list struct_declaration  */
+#line 3630 "MachineIndependent/glslang.y"
                                                  {
         (yyval.interm.typeList) = (yyvsp[-1].interm.typeList);
         for (unsigned int i = 0; i < (yyvsp[0].interm.typeList)->size(); ++i) {
@@ -10978,11 +11073,11 @@
             (yyval.interm.typeList)->push_back((*(yyvsp[0].interm.typeList))[i]);
         }
     }
-#line 10982 "MachineIndependent/glslang_tab.cpp"
+#line 11077 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 550: /* struct_declaration: type_specifier struct_declarator_list SEMICOLON  */
-#line 3588 "MachineIndependent/glslang.y"
+  case 553: /* struct_declaration: type_specifier struct_declarator_list SEMICOLON  */
+#line 3643 "MachineIndependent/glslang.y"
                                                       {
         if ((yyvsp[-2].interm.type).arraySizes) {
             parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
@@ -11005,11 +11100,11 @@
             (*(yyval.interm.typeList))[i].type->shallowCopy(type);
         }
     }
-#line 11009 "MachineIndependent/glslang_tab.cpp"
+#line 11104 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 551: /* struct_declaration: type_qualifier type_specifier struct_declarator_list SEMICOLON  */
-#line 3610 "MachineIndependent/glslang.y"
+  case 554: /* struct_declaration: type_qualifier type_specifier struct_declarator_list SEMICOLON  */
+#line 3665 "MachineIndependent/glslang.y"
                                                                      {
         if ((yyvsp[-2].interm.type).arraySizes) {
             parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type");
@@ -11034,38 +11129,38 @@
             (*(yyval.interm.typeList))[i].type->shallowCopy(type);
         }
     }
-#line 11038 "MachineIndependent/glslang_tab.cpp"
+#line 11133 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 552: /* struct_declarator_list: struct_declarator  */
-#line 3637 "MachineIndependent/glslang.y"
+  case 555: /* struct_declarator_list: struct_declarator  */
+#line 3692 "MachineIndependent/glslang.y"
                         {
         (yyval.interm.typeList) = new TTypeList;
         (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
     }
-#line 11047 "MachineIndependent/glslang_tab.cpp"
+#line 11142 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 553: /* struct_declarator_list: struct_declarator_list COMMA struct_declarator  */
-#line 3641 "MachineIndependent/glslang.y"
+  case 556: /* struct_declarator_list: struct_declarator_list COMMA struct_declarator  */
+#line 3696 "MachineIndependent/glslang.y"
                                                      {
         (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine));
     }
-#line 11055 "MachineIndependent/glslang_tab.cpp"
+#line 11150 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 554: /* struct_declarator: IDENTIFIER  */
-#line 3647 "MachineIndependent/glslang.y"
+  case 557: /* struct_declarator: IDENTIFIER  */
+#line 3702 "MachineIndependent/glslang.y"
                  {
         (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 11065 "MachineIndependent/glslang_tab.cpp"
+#line 11160 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 555: /* struct_declarator: IDENTIFIER array_specifier  */
-#line 3652 "MachineIndependent/glslang.y"
+  case 558: /* struct_declarator: IDENTIFIER array_specifier  */
+#line 3707 "MachineIndependent/glslang.y"
                                  {
         parseContext.arrayOfArrayVersionCheck((yyvsp[-1].lex).loc, (yyvsp[0].interm).arraySizes);
 
@@ -11074,246 +11169,250 @@
         (yyval.interm.typeLine).type->setFieldName(*(yyvsp[-1].lex).string);
         (yyval.interm.typeLine).type->transferArraySizes((yyvsp[0].interm).arraySizes);
     }
-#line 11078 "MachineIndependent/glslang_tab.cpp"
+#line 11173 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 556: /* initializer: assignment_expression  */
-#line 3663 "MachineIndependent/glslang.y"
+  case 559: /* initializer: assignment_expression  */
+#line 3718 "MachineIndependent/glslang.y"
                             {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 11086 "MachineIndependent/glslang_tab.cpp"
+#line 11181 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 557: /* initializer: LEFT_BRACE initializer_list RIGHT_BRACE  */
-#line 3666 "MachineIndependent/glslang.y"
+  case 560: /* initializer: LEFT_BRACE initializer_list RIGHT_BRACE  */
+#line 3721 "MachineIndependent/glslang.y"
                                               {
         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 11097 "MachineIndependent/glslang_tab.cpp"
+#line 11192 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 558: /* initializer: LEFT_BRACE initializer_list COMMA RIGHT_BRACE  */
-#line 3672 "MachineIndependent/glslang.y"
+  case 561: /* initializer: LEFT_BRACE initializer_list COMMA RIGHT_BRACE  */
+#line 3727 "MachineIndependent/glslang.y"
                                                     {
         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 11108 "MachineIndependent/glslang_tab.cpp"
+#line 11203 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 559: /* initializer: LEFT_BRACE RIGHT_BRACE  */
-#line 3678 "MachineIndependent/glslang.y"
+  case 562: /* initializer: LEFT_BRACE RIGHT_BRACE  */
+#line 3733 "MachineIndependent/glslang.y"
                              {
         const char* initFeature = "empty { } initializer";
         parseContext.profileRequires((yyvsp[-1].lex).loc, EEsProfile, 0, E_GL_EXT_null_initializer, initFeature);
         parseContext.profileRequires((yyvsp[-1].lex).loc, ~EEsProfile, 0, E_GL_EXT_null_initializer, initFeature);
         (yyval.interm.intermTypedNode) = parseContext.intermediate.makeAggregate((yyvsp[-1].lex).loc);
     }
-#line 11119 "MachineIndependent/glslang_tab.cpp"
+#line 11214 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 560: /* initializer_list: initializer  */
-#line 3687 "MachineIndependent/glslang.y"
+  case 563: /* initializer_list: initializer  */
+#line 3742 "MachineIndependent/glslang.y"
                   {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate(0, (yyvsp[0].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)->getLoc());
     }
-#line 11127 "MachineIndependent/glslang_tab.cpp"
+#line 11222 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 561: /* initializer_list: initializer_list COMMA initializer  */
-#line 3690 "MachineIndependent/glslang.y"
+  case 564: /* initializer_list: initializer_list COMMA initializer  */
+#line 3745 "MachineIndependent/glslang.y"
                                          {
         (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode));
     }
-#line 11135 "MachineIndependent/glslang_tab.cpp"
+#line 11230 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 562: /* declaration_statement: declaration  */
-#line 3696 "MachineIndependent/glslang.y"
+  case 565: /* declaration_statement: declaration  */
+#line 3751 "MachineIndependent/glslang.y"
                   { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11141 "MachineIndependent/glslang_tab.cpp"
+#line 11236 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 563: /* statement: compound_statement  */
-#line 3700 "MachineIndependent/glslang.y"
+  case 566: /* statement: compound_statement  */
+#line 3755 "MachineIndependent/glslang.y"
                           { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11147 "MachineIndependent/glslang_tab.cpp"
+#line 11242 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 564: /* statement: simple_statement  */
-#line 3701 "MachineIndependent/glslang.y"
+  case 567: /* statement: simple_statement  */
+#line 3756 "MachineIndependent/glslang.y"
                           { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11153 "MachineIndependent/glslang_tab.cpp"
+#line 11248 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 565: /* simple_statement: declaration_statement  */
-#line 3707 "MachineIndependent/glslang.y"
+  case 568: /* simple_statement: declaration_statement  */
+#line 3762 "MachineIndependent/glslang.y"
                             { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11159 "MachineIndependent/glslang_tab.cpp"
+#line 11254 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 566: /* simple_statement: expression_statement  */
-#line 3708 "MachineIndependent/glslang.y"
+  case 569: /* simple_statement: expression_statement  */
+#line 3763 "MachineIndependent/glslang.y"
                             { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11165 "MachineIndependent/glslang_tab.cpp"
+#line 11260 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 567: /* simple_statement: selection_statement  */
-#line 3709 "MachineIndependent/glslang.y"
+  case 570: /* simple_statement: selection_statement  */
+#line 3764 "MachineIndependent/glslang.y"
                             { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11171 "MachineIndependent/glslang_tab.cpp"
+#line 11266 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 568: /* simple_statement: switch_statement  */
-#line 3710 "MachineIndependent/glslang.y"
+  case 571: /* simple_statement: switch_statement  */
+#line 3765 "MachineIndependent/glslang.y"
                             { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11177 "MachineIndependent/glslang_tab.cpp"
+#line 11272 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 569: /* simple_statement: case_label  */
-#line 3711 "MachineIndependent/glslang.y"
+  case 572: /* simple_statement: case_label  */
+#line 3766 "MachineIndependent/glslang.y"
                             { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11183 "MachineIndependent/glslang_tab.cpp"
+#line 11278 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 570: /* simple_statement: iteration_statement  */
-#line 3712 "MachineIndependent/glslang.y"
+  case 573: /* simple_statement: iteration_statement  */
+#line 3767 "MachineIndependent/glslang.y"
                             { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11189 "MachineIndependent/glslang_tab.cpp"
+#line 11284 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 571: /* simple_statement: jump_statement  */
-#line 3713 "MachineIndependent/glslang.y"
+  case 574: /* simple_statement: jump_statement  */
+#line 3768 "MachineIndependent/glslang.y"
                             { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11195 "MachineIndependent/glslang_tab.cpp"
+#line 11290 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 572: /* simple_statement: demote_statement  */
-#line 3714 "MachineIndependent/glslang.y"
+  case 575: /* simple_statement: demote_statement  */
+#line 3769 "MachineIndependent/glslang.y"
                             { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11201 "MachineIndependent/glslang_tab.cpp"
+#line 11296 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 573: /* demote_statement: DEMOTE SEMICOLON  */
-#line 3718 "MachineIndependent/glslang.y"
+  case 576: /* demote_statement: DEMOTE SEMICOLON  */
+#line 3773 "MachineIndependent/glslang.y"
                        {
         parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "demote");
         parseContext.requireExtensions((yyvsp[-1].lex).loc, 1, &E_GL_EXT_demote_to_helper_invocation, "demote");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDemote, (yyvsp[-1].lex).loc);
     }
-#line 11211 "MachineIndependent/glslang_tab.cpp"
+#line 11306 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 574: /* compound_statement: LEFT_BRACE RIGHT_BRACE  */
-#line 3726 "MachineIndependent/glslang.y"
+  case 577: /* compound_statement: LEFT_BRACE RIGHT_BRACE  */
+#line 3781 "MachineIndependent/glslang.y"
                              { (yyval.interm.intermNode) = 0; }
-#line 11217 "MachineIndependent/glslang_tab.cpp"
+#line 11312 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 575: /* $@5: %empty  */
-#line 3727 "MachineIndependent/glslang.y"
+  case 578: /* $@5: %empty  */
+#line 3782 "MachineIndependent/glslang.y"
                  {
         parseContext.symbolTable.push();
         ++parseContext.statementNestingLevel;
     }
-#line 11226 "MachineIndependent/glslang_tab.cpp"
+#line 11321 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 576: /* $@6: %empty  */
-#line 3731 "MachineIndependent/glslang.y"
+  case 579: /* $@6: %empty  */
+#line 3786 "MachineIndependent/glslang.y"
                      {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         --parseContext.statementNestingLevel;
     }
-#line 11235 "MachineIndependent/glslang_tab.cpp"
+#line 11330 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 577: /* compound_statement: LEFT_BRACE $@5 statement_list $@6 RIGHT_BRACE  */
-#line 3735 "MachineIndependent/glslang.y"
+  case 580: /* compound_statement: LEFT_BRACE $@5 statement_list $@6 RIGHT_BRACE  */
+#line 3790 "MachineIndependent/glslang.y"
                   {
-        if ((yyvsp[-2].interm.intermNode) && (yyvsp[-2].interm.intermNode)->getAsAggregate())
+        if ((yyvsp[-2].interm.intermNode) && (yyvsp[-2].interm.intermNode)->getAsAggregate()) {
             (yyvsp[-2].interm.intermNode)->getAsAggregate()->setOperator(parseContext.intermediate.getDebugInfo() ? EOpScope : EOpSequence);
+            (yyvsp[-2].interm.intermNode)->getAsAggregate()->setEndLoc((yyvsp[0].lex).loc);
+        }
         (yyval.interm.intermNode) = (yyvsp[-2].interm.intermNode);
     }
-#line 11245 "MachineIndependent/glslang_tab.cpp"
+#line 11342 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 578: /* statement_no_new_scope: compound_statement_no_new_scope  */
-#line 3743 "MachineIndependent/glslang.y"
+  case 581: /* statement_no_new_scope: compound_statement_no_new_scope  */
+#line 3800 "MachineIndependent/glslang.y"
                                       { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11251 "MachineIndependent/glslang_tab.cpp"
+#line 11348 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 579: /* statement_no_new_scope: simple_statement  */
-#line 3744 "MachineIndependent/glslang.y"
+  case 582: /* statement_no_new_scope: simple_statement  */
+#line 3801 "MachineIndependent/glslang.y"
                                       { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); }
-#line 11257 "MachineIndependent/glslang_tab.cpp"
+#line 11354 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 580: /* $@7: %empty  */
-#line 3748 "MachineIndependent/glslang.y"
+  case 583: /* $@7: %empty  */
+#line 3805 "MachineIndependent/glslang.y"
       {
         ++parseContext.controlFlowNestingLevel;
     }
-#line 11265 "MachineIndependent/glslang_tab.cpp"
+#line 11362 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 581: /* statement_scoped: $@7 compound_statement  */
-#line 3751 "MachineIndependent/glslang.y"
+  case 584: /* statement_scoped: $@7 compound_statement  */
+#line 3808 "MachineIndependent/glslang.y"
                           {
         --parseContext.controlFlowNestingLevel;
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11274 "MachineIndependent/glslang_tab.cpp"
+#line 11371 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 582: /* $@8: %empty  */
-#line 3755 "MachineIndependent/glslang.y"
+  case 585: /* $@8: %empty  */
+#line 3812 "MachineIndependent/glslang.y"
       {
         parseContext.symbolTable.push();
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 11284 "MachineIndependent/glslang_tab.cpp"
+#line 11381 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 583: /* statement_scoped: $@8 simple_statement  */
-#line 3760 "MachineIndependent/glslang.y"
+  case 586: /* statement_scoped: $@8 simple_statement  */
+#line 3817 "MachineIndependent/glslang.y"
                        {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11295 "MachineIndependent/glslang_tab.cpp"
+#line 11392 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 584: /* compound_statement_no_new_scope: LEFT_BRACE RIGHT_BRACE  */
-#line 3769 "MachineIndependent/glslang.y"
+  case 587: /* compound_statement_no_new_scope: LEFT_BRACE RIGHT_BRACE  */
+#line 3826 "MachineIndependent/glslang.y"
                              {
         (yyval.interm.intermNode) = 0;
     }
-#line 11303 "MachineIndependent/glslang_tab.cpp"
+#line 11400 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 585: /* compound_statement_no_new_scope: LEFT_BRACE statement_list RIGHT_BRACE  */
-#line 3772 "MachineIndependent/glslang.y"
+  case 588: /* compound_statement_no_new_scope: LEFT_BRACE statement_list RIGHT_BRACE  */
+#line 3829 "MachineIndependent/glslang.y"
                                             {
-        if ((yyvsp[-1].interm.intermNode) && (yyvsp[-1].interm.intermNode)->getAsAggregate())
+        if ((yyvsp[-1].interm.intermNode) && (yyvsp[-1].interm.intermNode)->getAsAggregate()) {
             (yyvsp[-1].interm.intermNode)->getAsAggregate()->setOperator(EOpSequence);
+            (yyvsp[-1].interm.intermNode)->getAsAggregate()->setEndLoc((yyvsp[0].lex).loc);
+        }
         (yyval.interm.intermNode) = (yyvsp[-1].interm.intermNode);
     }
-#line 11313 "MachineIndependent/glslang_tab.cpp"
+#line 11412 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 586: /* statement_list: statement  */
-#line 3780 "MachineIndependent/glslang.y"
+  case 589: /* statement_list: statement  */
+#line 3839 "MachineIndependent/glslang.y"
                 {
         (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 ||
@@ -11322,11 +11421,11 @@
             (yyval.interm.intermNode) = 0;  // start a fresh subsequence for what's after this case
         }
     }
-#line 11326 "MachineIndependent/glslang_tab.cpp"
+#line 11425 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 587: /* statement_list: statement_list statement  */
-#line 3788 "MachineIndependent/glslang.y"
+  case 590: /* statement_list: statement_list statement  */
+#line 3847 "MachineIndependent/glslang.y"
                                {
         if ((yyvsp[0].interm.intermNode) && (yyvsp[0].interm.intermNode)->getAsBranchNode() && ((yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase ||
                                             (yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpDefault)) {
@@ -11335,77 +11434,77 @@
         } else
             (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode));
     }
-#line 11339 "MachineIndependent/glslang_tab.cpp"
+#line 11438 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 588: /* expression_statement: SEMICOLON  */
-#line 3799 "MachineIndependent/glslang.y"
+  case 591: /* expression_statement: SEMICOLON  */
+#line 3858 "MachineIndependent/glslang.y"
                  { (yyval.interm.intermNode) = 0; }
-#line 11345 "MachineIndependent/glslang_tab.cpp"
+#line 11444 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 589: /* expression_statement: expression SEMICOLON  */
-#line 3800 "MachineIndependent/glslang.y"
+  case 592: /* expression_statement: expression SEMICOLON  */
+#line 3859 "MachineIndependent/glslang.y"
                             { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[-1].interm.intermTypedNode)); }
-#line 11351 "MachineIndependent/glslang_tab.cpp"
+#line 11450 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 590: /* selection_statement: selection_statement_nonattributed  */
-#line 3804 "MachineIndependent/glslang.y"
+  case 593: /* selection_statement: selection_statement_nonattributed  */
+#line 3863 "MachineIndependent/glslang.y"
                                         {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11359 "MachineIndependent/glslang_tab.cpp"
+#line 11458 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 591: /* selection_statement: attribute selection_statement_nonattributed  */
-#line 3807 "MachineIndependent/glslang.y"
+  case 594: /* selection_statement: attribute selection_statement_nonattributed  */
+#line 3866 "MachineIndependent/glslang.y"
                                                   {
         parseContext.requireExtensions((yyvsp[0].interm.intermNode)->getLoc(), 1, &E_GL_EXT_control_flow_attributes, "attribute");
         parseContext.handleSelectionAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11369 "MachineIndependent/glslang_tab.cpp"
+#line 11468 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 592: /* selection_statement_nonattributed: IF LEFT_PAREN expression RIGHT_PAREN selection_rest_statement  */
-#line 3814 "MachineIndependent/glslang.y"
+  case 595: /* selection_statement_nonattributed: IF LEFT_PAREN expression RIGHT_PAREN selection_rest_statement  */
+#line 3873 "MachineIndependent/glslang.y"
                                                                     {
         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 11378 "MachineIndependent/glslang_tab.cpp"
+#line 11477 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 593: /* selection_rest_statement: statement_scoped ELSE statement_scoped  */
-#line 3821 "MachineIndependent/glslang.y"
+  case 596: /* selection_rest_statement: statement_scoped ELSE statement_scoped  */
+#line 3880 "MachineIndependent/glslang.y"
                                              {
         (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode);
         (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermNode);
     }
-#line 11387 "MachineIndependent/glslang_tab.cpp"
+#line 11486 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 594: /* selection_rest_statement: statement_scoped  */
-#line 3825 "MachineIndependent/glslang.y"
+  case 597: /* selection_rest_statement: statement_scoped  */
+#line 3884 "MachineIndependent/glslang.y"
                        {
         (yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode);
         (yyval.interm.nodePair).node2 = 0;
     }
-#line 11396 "MachineIndependent/glslang_tab.cpp"
+#line 11495 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 595: /* condition: expression  */
-#line 3833 "MachineIndependent/glslang.y"
+  case 598: /* condition: expression  */
+#line 3892 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
         parseContext.boolCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode));
     }
-#line 11405 "MachineIndependent/glslang_tab.cpp"
+#line 11504 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 596: /* condition: fully_specified_type IDENTIFIER EQUAL initializer  */
-#line 3837 "MachineIndependent/glslang.y"
+  case 599: /* condition: fully_specified_type IDENTIFIER EQUAL initializer  */
+#line 3896 "MachineIndependent/glslang.y"
                                                         {
         parseContext.boolCheck((yyvsp[-2].lex).loc, (yyvsp[-3].interm.type));
 
@@ -11416,29 +11515,29 @@
         else
             (yyval.interm.intermTypedNode) = 0;
     }
-#line 11420 "MachineIndependent/glslang_tab.cpp"
+#line 11519 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 597: /* switch_statement: switch_statement_nonattributed  */
-#line 3850 "MachineIndependent/glslang.y"
+  case 600: /* switch_statement: switch_statement_nonattributed  */
+#line 3909 "MachineIndependent/glslang.y"
                                      {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11428 "MachineIndependent/glslang_tab.cpp"
+#line 11527 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 598: /* switch_statement: attribute switch_statement_nonattributed  */
-#line 3853 "MachineIndependent/glslang.y"
+  case 601: /* switch_statement: attribute switch_statement_nonattributed  */
+#line 3912 "MachineIndependent/glslang.y"
                                                {
         parseContext.requireExtensions((yyvsp[0].interm.intermNode)->getLoc(), 1, &E_GL_EXT_control_flow_attributes, "attribute");
         parseContext.handleSwitchAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11438 "MachineIndependent/glslang_tab.cpp"
+#line 11537 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 599: /* $@9: %empty  */
-#line 3860 "MachineIndependent/glslang.y"
+  case 602: /* $@9: %empty  */
+#line 3919 "MachineIndependent/glslang.y"
                                                {
         // start new switch sequence on the switch stack
         ++parseContext.controlFlowNestingLevel;
@@ -11447,11 +11546,11 @@
         parseContext.switchLevel.push_back(parseContext.statementNestingLevel);
         parseContext.symbolTable.push();
     }
-#line 11451 "MachineIndependent/glslang_tab.cpp"
+#line 11550 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 600: /* switch_statement_nonattributed: SWITCH LEFT_PAREN expression RIGHT_PAREN $@9 LEFT_BRACE switch_statement_list RIGHT_BRACE  */
-#line 3868 "MachineIndependent/glslang.y"
+  case 603: /* switch_statement_nonattributed: SWITCH LEFT_PAREN expression RIGHT_PAREN $@9 LEFT_BRACE switch_statement_list RIGHT_BRACE  */
+#line 3927 "MachineIndependent/glslang.y"
                                                  {
         (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();
@@ -11461,27 +11560,27 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 11465 "MachineIndependent/glslang_tab.cpp"
+#line 11564 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 601: /* switch_statement_list: %empty  */
-#line 3880 "MachineIndependent/glslang.y"
+  case 604: /* switch_statement_list: %empty  */
+#line 3939 "MachineIndependent/glslang.y"
                     {
         (yyval.interm.intermNode) = 0;
     }
-#line 11473 "MachineIndependent/glslang_tab.cpp"
+#line 11572 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 602: /* switch_statement_list: statement_list  */
-#line 3883 "MachineIndependent/glslang.y"
+  case 605: /* switch_statement_list: statement_list  */
+#line 3942 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11481 "MachineIndependent/glslang_tab.cpp"
+#line 11580 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 603: /* case_label: CASE expression COLON  */
-#line 3889 "MachineIndependent/glslang.y"
+  case 606: /* case_label: CASE expression COLON  */
+#line 3948 "MachineIndependent/glslang.y"
                             {
         (yyval.interm.intermNode) = 0;
         if (parseContext.switchLevel.size() == 0)
@@ -11494,11 +11593,11 @@
             (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpCase, (yyvsp[-1].interm.intermTypedNode), (yyvsp[-2].lex).loc);
         }
     }
-#line 11498 "MachineIndependent/glslang_tab.cpp"
+#line 11597 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 604: /* case_label: DEFAULT COLON  */
-#line 3901 "MachineIndependent/glslang.y"
+  case 607: /* case_label: DEFAULT COLON  */
+#line 3960 "MachineIndependent/glslang.y"
                     {
         (yyval.interm.intermNode) = 0;
         if (parseContext.switchLevel.size() == 0)
@@ -11508,29 +11607,30 @@
         else
             (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDefault, (yyvsp[-1].lex).loc);
     }
-#line 11512 "MachineIndependent/glslang_tab.cpp"
+#line 11611 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 605: /* iteration_statement: iteration_statement_nonattributed  */
-#line 3913 "MachineIndependent/glslang.y"
+  case 608: /* iteration_statement: iteration_statement_nonattributed  */
+#line 3972 "MachineIndependent/glslang.y"
                                         {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11520 "MachineIndependent/glslang_tab.cpp"
+#line 11619 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 606: /* iteration_statement: attribute iteration_statement_nonattributed  */
-#line 3916 "MachineIndependent/glslang.y"
+  case 609: /* iteration_statement: attribute iteration_statement_nonattributed  */
+#line 3975 "MachineIndependent/glslang.y"
                                                   {
-        parseContext.requireExtensions((yyvsp[0].interm.intermNode)->getLoc(), 1, &E_GL_EXT_control_flow_attributes, "attribute");
+        const char * extensions[2] = { E_GL_EXT_control_flow_attributes, E_GL_EXT_control_flow_attributes2 };
+        parseContext.requireExtensions((yyvsp[0].interm.intermNode)->getLoc(), 2, extensions, "attribute");
         parseContext.handleLoopAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode));
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11530 "MachineIndependent/glslang_tab.cpp"
+#line 11630 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 607: /* $@10: %empty  */
-#line 3923 "MachineIndependent/glslang.y"
+  case 610: /* $@10: %empty  */
+#line 3983 "MachineIndependent/glslang.y"
                        {
         if (! parseContext.limits.whileLoops)
             parseContext.error((yyvsp[-1].lex).loc, "while loops not available", "limitation", "");
@@ -11539,11 +11639,11 @@
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 11543 "MachineIndependent/glslang_tab.cpp"
+#line 11643 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 608: /* iteration_statement_nonattributed: WHILE LEFT_PAREN $@10 condition RIGHT_PAREN statement_no_new_scope  */
-#line 3931 "MachineIndependent/glslang.y"
+  case 611: /* iteration_statement_nonattributed: WHILE LEFT_PAREN $@10 condition RIGHT_PAREN statement_no_new_scope  */
+#line 3991 "MachineIndependent/glslang.y"
                                                    {
         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);
@@ -11551,22 +11651,22 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 11555 "MachineIndependent/glslang_tab.cpp"
+#line 11655 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 609: /* $@11: %empty  */
-#line 3938 "MachineIndependent/glslang.y"
+  case 612: /* $@11: %empty  */
+#line 3998 "MachineIndependent/glslang.y"
          {
         parseContext.symbolTable.push();
         ++parseContext.loopNestingLevel;
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 11566 "MachineIndependent/glslang_tab.cpp"
+#line 11666 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 610: /* iteration_statement_nonattributed: DO $@11 statement WHILE LEFT_PAREN expression RIGHT_PAREN SEMICOLON  */
-#line 3944 "MachineIndependent/glslang.y"
+  case 613: /* iteration_statement_nonattributed: DO $@11 statement WHILE LEFT_PAREN expression RIGHT_PAREN SEMICOLON  */
+#line 4004 "MachineIndependent/glslang.y"
                                                                   {
         if (! parseContext.limits.whileLoops)
             parseContext.error((yyvsp[-7].lex).loc, "do-while loops not available", "limitation", "");
@@ -11579,22 +11679,22 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 11583 "MachineIndependent/glslang_tab.cpp"
+#line 11683 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 611: /* $@12: %empty  */
-#line 3956 "MachineIndependent/glslang.y"
+  case 614: /* $@12: %empty  */
+#line 4016 "MachineIndependent/glslang.y"
                      {
         parseContext.symbolTable.push();
         ++parseContext.loopNestingLevel;
         ++parseContext.statementNestingLevel;
         ++parseContext.controlFlowNestingLevel;
     }
-#line 11594 "MachineIndependent/glslang_tab.cpp"
+#line 11694 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 612: /* iteration_statement_nonattributed: FOR LEFT_PAREN $@12 for_init_statement for_rest_statement RIGHT_PAREN statement_no_new_scope  */
-#line 3962 "MachineIndependent/glslang.y"
+  case 615: /* iteration_statement_nonattributed: FOR LEFT_PAREN $@12 for_init_statement for_rest_statement RIGHT_PAREN statement_no_new_scope  */
+#line 4022 "MachineIndependent/glslang.y"
                                                                                {
         parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[-3].interm.intermNode), (yyvsp[-5].lex).loc);
@@ -11607,81 +11707,81 @@
         --parseContext.statementNestingLevel;
         --parseContext.controlFlowNestingLevel;
     }
-#line 11611 "MachineIndependent/glslang_tab.cpp"
+#line 11711 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 613: /* for_init_statement: expression_statement  */
-#line 3977 "MachineIndependent/glslang.y"
+  case 616: /* for_init_statement: expression_statement  */
+#line 4037 "MachineIndependent/glslang.y"
                            {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11619 "MachineIndependent/glslang_tab.cpp"
+#line 11719 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 614: /* for_init_statement: declaration_statement  */
-#line 3980 "MachineIndependent/glslang.y"
+  case 617: /* for_init_statement: declaration_statement  */
+#line 4040 "MachineIndependent/glslang.y"
                             {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11627 "MachineIndependent/glslang_tab.cpp"
+#line 11727 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 615: /* conditionopt: condition  */
-#line 3986 "MachineIndependent/glslang.y"
+  case 618: /* conditionopt: condition  */
+#line 4046 "MachineIndependent/glslang.y"
                 {
         (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
     }
-#line 11635 "MachineIndependent/glslang_tab.cpp"
+#line 11735 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 616: /* conditionopt: %empty  */
-#line 3989 "MachineIndependent/glslang.y"
+  case 619: /* conditionopt: %empty  */
+#line 4049 "MachineIndependent/glslang.y"
                         {
         (yyval.interm.intermTypedNode) = 0;
     }
-#line 11643 "MachineIndependent/glslang_tab.cpp"
+#line 11743 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 617: /* for_rest_statement: conditionopt SEMICOLON  */
-#line 3995 "MachineIndependent/glslang.y"
+  case 620: /* for_rest_statement: conditionopt SEMICOLON  */
+#line 4055 "MachineIndependent/glslang.y"
                              {
         (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermTypedNode);
         (yyval.interm.nodePair).node2 = 0;
     }
-#line 11652 "MachineIndependent/glslang_tab.cpp"
+#line 11752 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 618: /* for_rest_statement: conditionopt SEMICOLON expression  */
-#line 3999 "MachineIndependent/glslang.y"
+  case 621: /* for_rest_statement: conditionopt SEMICOLON expression  */
+#line 4059 "MachineIndependent/glslang.y"
                                          {
         (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermTypedNode);
         (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermTypedNode);
     }
-#line 11661 "MachineIndependent/glslang_tab.cpp"
+#line 11761 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 619: /* jump_statement: CONTINUE SEMICOLON  */
-#line 4006 "MachineIndependent/glslang.y"
+  case 622: /* jump_statement: CONTINUE SEMICOLON  */
+#line 4066 "MachineIndependent/glslang.y"
                          {
         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 11671 "MachineIndependent/glslang_tab.cpp"
+#line 11771 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 620: /* jump_statement: BREAK SEMICOLON  */
-#line 4011 "MachineIndependent/glslang.y"
+  case 623: /* jump_statement: BREAK SEMICOLON  */
+#line 4071 "MachineIndependent/glslang.y"
                       {
         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 11681 "MachineIndependent/glslang_tab.cpp"
+#line 11781 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 621: /* jump_statement: RETURN SEMICOLON  */
-#line 4016 "MachineIndependent/glslang.y"
+  case 624: /* jump_statement: RETURN SEMICOLON  */
+#line 4076 "MachineIndependent/glslang.y"
                        {
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[-1].lex).loc);
         if (parseContext.currentFunctionType->getBasicType() != EbtVoid)
@@ -11689,101 +11789,101 @@
         if (parseContext.inMain)
             parseContext.postEntryPointReturn = true;
     }
-#line 11693 "MachineIndependent/glslang_tab.cpp"
+#line 11793 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 622: /* jump_statement: RETURN expression SEMICOLON  */
-#line 4023 "MachineIndependent/glslang.y"
+  case 625: /* jump_statement: RETURN expression SEMICOLON  */
+#line 4083 "MachineIndependent/glslang.y"
                                   {
         (yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[-2].lex).loc, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 11701 "MachineIndependent/glslang_tab.cpp"
+#line 11801 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 623: /* jump_statement: DISCARD SEMICOLON  */
-#line 4026 "MachineIndependent/glslang.y"
+  case 626: /* jump_statement: DISCARD SEMICOLON  */
+#line 4086 "MachineIndependent/glslang.y"
                         {
         parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "discard");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpKill, (yyvsp[-1].lex).loc);
     }
-#line 11710 "MachineIndependent/glslang_tab.cpp"
+#line 11810 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 624: /* jump_statement: TERMINATE_INVOCATION SEMICOLON  */
-#line 4030 "MachineIndependent/glslang.y"
+  case 627: /* jump_statement: TERMINATE_INVOCATION SEMICOLON  */
+#line 4090 "MachineIndependent/glslang.y"
                                      {
         parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "terminateInvocation");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpTerminateInvocation, (yyvsp[-1].lex).loc);
     }
-#line 11719 "MachineIndependent/glslang_tab.cpp"
+#line 11819 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 625: /* jump_statement: TERMINATE_RAY SEMICOLON  */
-#line 4034 "MachineIndependent/glslang.y"
+  case 628: /* jump_statement: TERMINATE_RAY SEMICOLON  */
+#line 4094 "MachineIndependent/glslang.y"
                               {
         parseContext.requireStage((yyvsp[-1].lex).loc, EShLangAnyHit, "terminateRayEXT");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpTerminateRayKHR, (yyvsp[-1].lex).loc);
     }
-#line 11728 "MachineIndependent/glslang_tab.cpp"
+#line 11828 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 626: /* jump_statement: IGNORE_INTERSECTION SEMICOLON  */
-#line 4038 "MachineIndependent/glslang.y"
+  case 629: /* jump_statement: IGNORE_INTERSECTION SEMICOLON  */
+#line 4098 "MachineIndependent/glslang.y"
                                     {
         parseContext.requireStage((yyvsp[-1].lex).loc, EShLangAnyHit, "ignoreIntersectionEXT");
         (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpIgnoreIntersectionKHR, (yyvsp[-1].lex).loc);
     }
-#line 11737 "MachineIndependent/glslang_tab.cpp"
+#line 11837 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 627: /* translation_unit: external_declaration  */
-#line 4047 "MachineIndependent/glslang.y"
+  case 630: /* translation_unit: external_declaration  */
+#line 4107 "MachineIndependent/glslang.y"
                            {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
         parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
     }
-#line 11746 "MachineIndependent/glslang_tab.cpp"
+#line 11846 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 628: /* translation_unit: translation_unit external_declaration  */
-#line 4051 "MachineIndependent/glslang.y"
+  case 631: /* translation_unit: translation_unit external_declaration  */
+#line 4111 "MachineIndependent/glslang.y"
                                             {
         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 11757 "MachineIndependent/glslang_tab.cpp"
+#line 11857 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 629: /* external_declaration: function_definition  */
-#line 4060 "MachineIndependent/glslang.y"
+  case 632: /* external_declaration: function_definition  */
+#line 4120 "MachineIndependent/glslang.y"
                           {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11765 "MachineIndependent/glslang_tab.cpp"
+#line 11865 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 630: /* external_declaration: declaration  */
-#line 4063 "MachineIndependent/glslang.y"
+  case 633: /* external_declaration: declaration  */
+#line 4123 "MachineIndependent/glslang.y"
                   {
         (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
     }
-#line 11773 "MachineIndependent/glslang_tab.cpp"
+#line 11873 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 631: /* external_declaration: SEMICOLON  */
-#line 4066 "MachineIndependent/glslang.y"
+  case 634: /* external_declaration: SEMICOLON  */
+#line 4126 "MachineIndependent/glslang.y"
                 {
         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 11783 "MachineIndependent/glslang_tab.cpp"
+#line 11883 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 632: /* $@13: %empty  */
-#line 4074 "MachineIndependent/glslang.y"
+  case 635: /* $@13: %empty  */
+#line 4134 "MachineIndependent/glslang.y"
                          {
         (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);
@@ -11796,11 +11896,11 @@
             ++parseContext.statementNestingLevel;
         }
     }
-#line 11800 "MachineIndependent/glslang_tab.cpp"
+#line 11900 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 633: /* function_definition: function_prototype $@13 compound_statement_no_new_scope  */
-#line 4086 "MachineIndependent/glslang.y"
+  case 636: /* function_definition: function_prototype $@13 compound_statement_no_new_scope  */
+#line 4146 "MachineIndependent/glslang.y"
                                     {
         //   May be best done as post process phase on intermediate code
         if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue)
@@ -11828,228 +11928,228 @@
             --parseContext.statementNestingLevel;
         }
     }
-#line 11832 "MachineIndependent/glslang_tab.cpp"
+#line 11932 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 634: /* attribute: LEFT_BRACKET LEFT_BRACKET attribute_list RIGHT_BRACKET RIGHT_BRACKET  */
-#line 4116 "MachineIndependent/glslang.y"
+  case 637: /* attribute: LEFT_BRACKET LEFT_BRACKET attribute_list RIGHT_BRACKET RIGHT_BRACKET  */
+#line 4176 "MachineIndependent/glslang.y"
                                                                            {
         (yyval.interm.attributes) = (yyvsp[-2].interm.attributes);
     }
-#line 11840 "MachineIndependent/glslang_tab.cpp"
+#line 11940 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 635: /* attribute_list: single_attribute  */
-#line 4121 "MachineIndependent/glslang.y"
+  case 638: /* attribute_list: single_attribute  */
+#line 4181 "MachineIndependent/glslang.y"
                        {
         (yyval.interm.attributes) = (yyvsp[0].interm.attributes);
     }
-#line 11848 "MachineIndependent/glslang_tab.cpp"
+#line 11948 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 636: /* attribute_list: attribute_list COMMA single_attribute  */
-#line 4124 "MachineIndependent/glslang.y"
+  case 639: /* attribute_list: attribute_list COMMA single_attribute  */
+#line 4184 "MachineIndependent/glslang.y"
                                             {
         (yyval.interm.attributes) = parseContext.mergeAttributes((yyvsp[-2].interm.attributes), (yyvsp[0].interm.attributes));
     }
-#line 11856 "MachineIndependent/glslang_tab.cpp"
+#line 11956 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 637: /* single_attribute: IDENTIFIER  */
-#line 4129 "MachineIndependent/glslang.y"
+  case 640: /* single_attribute: IDENTIFIER  */
+#line 4189 "MachineIndependent/glslang.y"
                  {
         (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[0].lex).string);
     }
-#line 11864 "MachineIndependent/glslang_tab.cpp"
+#line 11964 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 638: /* single_attribute: IDENTIFIER LEFT_PAREN constant_expression RIGHT_PAREN  */
-#line 4132 "MachineIndependent/glslang.y"
+  case 641: /* single_attribute: IDENTIFIER LEFT_PAREN constant_expression RIGHT_PAREN  */
+#line 4192 "MachineIndependent/glslang.y"
                                                             {
         (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[-3].lex).string, (yyvsp[-1].interm.intermTypedNode));
     }
-#line 11872 "MachineIndependent/glslang_tab.cpp"
+#line 11972 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 639: /* spirv_requirements_list: spirv_requirements_parameter  */
-#line 4137 "MachineIndependent/glslang.y"
+  case 642: /* spirv_requirements_list: spirv_requirements_parameter  */
+#line 4197 "MachineIndependent/glslang.y"
                                    {
         (yyval.interm.spirvReq) = (yyvsp[0].interm.spirvReq);
     }
-#line 11880 "MachineIndependent/glslang_tab.cpp"
+#line 11980 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 640: /* spirv_requirements_list: spirv_requirements_list COMMA spirv_requirements_parameter  */
-#line 4140 "MachineIndependent/glslang.y"
+  case 643: /* spirv_requirements_list: spirv_requirements_list COMMA spirv_requirements_parameter  */
+#line 4200 "MachineIndependent/glslang.y"
                                                                  {
         (yyval.interm.spirvReq) = parseContext.mergeSpirvRequirements((yyvsp[-1].lex).loc, (yyvsp[-2].interm.spirvReq), (yyvsp[0].interm.spirvReq));
     }
-#line 11888 "MachineIndependent/glslang_tab.cpp"
+#line 11988 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 641: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_extension_list RIGHT_BRACKET  */
-#line 4145 "MachineIndependent/glslang.y"
+  case 644: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_extension_list RIGHT_BRACKET  */
+#line 4205 "MachineIndependent/glslang.y"
                                                                        {
         (yyval.interm.spirvReq) = parseContext.makeSpirvRequirement((yyvsp[-3].lex).loc, *(yyvsp[-4].lex).string, (yyvsp[-1].interm.intermNode)->getAsAggregate(), nullptr);
     }
-#line 11896 "MachineIndependent/glslang_tab.cpp"
+#line 11996 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 642: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_capability_list RIGHT_BRACKET  */
-#line 4148 "MachineIndependent/glslang.y"
+  case 645: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_capability_list RIGHT_BRACKET  */
+#line 4208 "MachineIndependent/glslang.y"
                                                                         {
         (yyval.interm.spirvReq) = parseContext.makeSpirvRequirement((yyvsp[-3].lex).loc, *(yyvsp[-4].lex).string, nullptr, (yyvsp[-1].interm.intermNode)->getAsAggregate());
     }
-#line 11904 "MachineIndependent/glslang_tab.cpp"
+#line 12004 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 643: /* spirv_extension_list: STRING_LITERAL  */
-#line 4153 "MachineIndependent/glslang.y"
+  case 646: /* spirv_extension_list: STRING_LITERAL  */
+#line 4213 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate(parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true));
     }
-#line 11912 "MachineIndependent/glslang_tab.cpp"
+#line 12012 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 644: /* spirv_extension_list: spirv_extension_list COMMA STRING_LITERAL  */
-#line 4156 "MachineIndependent/glslang.y"
+  case 647: /* spirv_extension_list: spirv_extension_list COMMA STRING_LITERAL  */
+#line 4216 "MachineIndependent/glslang.y"
                                                 {
         (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true));
     }
-#line 11920 "MachineIndependent/glslang_tab.cpp"
+#line 12020 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 645: /* spirv_capability_list: INTCONSTANT  */
-#line 4161 "MachineIndependent/glslang.y"
+  case 648: /* spirv_capability_list: INTCONSTANT  */
+#line 4221 "MachineIndependent/glslang.y"
                   {
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate(parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true));
     }
-#line 11928 "MachineIndependent/glslang_tab.cpp"
+#line 12028 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 646: /* spirv_capability_list: spirv_capability_list COMMA INTCONSTANT  */
-#line 4164 "MachineIndependent/glslang.y"
+  case 649: /* spirv_capability_list: spirv_capability_list COMMA INTCONSTANT  */
+#line 4224 "MachineIndependent/glslang.y"
                                               {
         (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true));
     }
-#line 11936 "MachineIndependent/glslang_tab.cpp"
+#line 12036 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 647: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT RIGHT_PAREN  */
-#line 4169 "MachineIndependent/glslang.y"
+  case 650: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT RIGHT_PAREN  */
+#line 4229 "MachineIndependent/glslang.y"
                                                               {
         parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-1].lex).i);
         (yyval.interm.intermNode) = 0;
     }
-#line 11945 "MachineIndependent/glslang_tab.cpp"
+#line 12045 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 648: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN  */
-#line 4173 "MachineIndependent/glslang.y"
+  case 651: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN  */
+#line 4233 "MachineIndependent/glslang.y"
                                                                                             {
         parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq));
         parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-1].lex).i);
         (yyval.interm.intermNode) = 0;
     }
-#line 11955 "MachineIndependent/glslang_tab.cpp"
+#line 12055 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 649: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN  */
-#line 4178 "MachineIndependent/glslang.y"
+  case 652: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN  */
+#line 4238 "MachineIndependent/glslang.y"
                                                                                                         {
         parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
         (yyval.interm.intermNode) = 0;
     }
-#line 11964 "MachineIndependent/glslang_tab.cpp"
+#line 12064 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 650: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN  */
-#line 4182 "MachineIndependent/glslang.y"
+  case 653: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN  */
+#line 4242 "MachineIndependent/glslang.y"
                                                                                                                                       {
         parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq));
         parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
         (yyval.interm.intermNode) = 0;
     }
-#line 11974 "MachineIndependent/glslang_tab.cpp"
+#line 12074 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 651: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE_ID LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_id_parameter_list RIGHT_PAREN  */
-#line 4187 "MachineIndependent/glslang.y"
+  case 654: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE_ID LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_id_parameter_list RIGHT_PAREN  */
+#line 4247 "MachineIndependent/glslang.y"
                                                                                                               {
         parseContext.intermediate.insertSpirvExecutionModeId((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
         (yyval.interm.intermNode) = 0;
     }
-#line 11983 "MachineIndependent/glslang_tab.cpp"
+#line 12083 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 652: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE_ID LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_execution_mode_id_parameter_list RIGHT_PAREN  */
-#line 4191 "MachineIndependent/glslang.y"
+  case 655: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE_ID LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_execution_mode_id_parameter_list RIGHT_PAREN  */
+#line 4251 "MachineIndependent/glslang.y"
                                                                                                                                             {
         parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq));
         parseContext.intermediate.insertSpirvExecutionModeId((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
         (yyval.interm.intermNode) = 0;
     }
-#line 11993 "MachineIndependent/glslang_tab.cpp"
+#line 12093 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 653: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter  */
-#line 4198 "MachineIndependent/glslang.y"
+  case 656: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter  */
+#line 4258 "MachineIndependent/glslang.y"
                                      {
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode));
     }
-#line 12001 "MachineIndependent/glslang_tab.cpp"
+#line 12101 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 654: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter_list COMMA spirv_execution_mode_parameter  */
-#line 4201 "MachineIndependent/glslang.y"
+  case 657: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter_list COMMA spirv_execution_mode_parameter  */
+#line 4261 "MachineIndependent/glslang.y"
                                                                                {
         (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermNode));
     }
-#line 12009 "MachineIndependent/glslang_tab.cpp"
+#line 12109 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 655: /* spirv_execution_mode_parameter: FLOATCONSTANT  */
-#line 4206 "MachineIndependent/glslang.y"
+  case 658: /* spirv_execution_mode_parameter: FLOATCONSTANT  */
+#line 4266 "MachineIndependent/glslang.y"
                     {
         (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
     }
-#line 12017 "MachineIndependent/glslang_tab.cpp"
+#line 12117 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 656: /* spirv_execution_mode_parameter: INTCONSTANT  */
-#line 4209 "MachineIndependent/glslang.y"
+  case 659: /* spirv_execution_mode_parameter: INTCONSTANT  */
+#line 4269 "MachineIndependent/glslang.y"
                   {
         (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
     }
-#line 12025 "MachineIndependent/glslang_tab.cpp"
+#line 12125 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 657: /* spirv_execution_mode_parameter: UINTCONSTANT  */
-#line 4212 "MachineIndependent/glslang.y"
+  case 660: /* spirv_execution_mode_parameter: UINTCONSTANT  */
+#line 4272 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
     }
-#line 12033 "MachineIndependent/glslang_tab.cpp"
+#line 12133 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 658: /* spirv_execution_mode_parameter: BOOLCONSTANT  */
-#line 4215 "MachineIndependent/glslang.y"
+  case 661: /* spirv_execution_mode_parameter: BOOLCONSTANT  */
+#line 4275 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
     }
-#line 12041 "MachineIndependent/glslang_tab.cpp"
+#line 12141 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 659: /* spirv_execution_mode_parameter: STRING_LITERAL  */
-#line 4218 "MachineIndependent/glslang.y"
+  case 662: /* spirv_execution_mode_parameter: STRING_LITERAL  */
+#line 4278 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true);
     }
-#line 12049 "MachineIndependent/glslang_tab.cpp"
+#line 12149 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 660: /* spirv_execution_mode_id_parameter_list: constant_expression  */
-#line 4223 "MachineIndependent/glslang.y"
+  case 663: /* spirv_execution_mode_id_parameter_list: constant_expression  */
+#line 4283 "MachineIndependent/glslang.y"
                           {
         if ((yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtFloat &&
             (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtInt &&
@@ -12059,11 +12159,11 @@
             parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "this type not allowed", (yyvsp[0].interm.intermTypedNode)->getType().getBasicString(), "");
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermTypedNode));
     }
-#line 12063 "MachineIndependent/glslang_tab.cpp"
+#line 12163 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 661: /* spirv_execution_mode_id_parameter_list: spirv_execution_mode_id_parameter_list COMMA constant_expression  */
-#line 4232 "MachineIndependent/glslang.y"
+  case 664: /* spirv_execution_mode_id_parameter_list: spirv_execution_mode_id_parameter_list COMMA constant_expression  */
+#line 4292 "MachineIndependent/glslang.y"
                                                                        {
         if ((yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtFloat &&
             (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtInt &&
@@ -12073,351 +12173,351 @@
             parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "this type not allowed", (yyvsp[0].interm.intermTypedNode)->getType().getBasicString(), "");
         (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermTypedNode));
     }
-#line 12077 "MachineIndependent/glslang_tab.cpp"
+#line 12177 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 662: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN INTCONSTANT RIGHT_PAREN  */
-#line 4243 "MachineIndependent/glslang.y"
+  case 665: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN INTCONSTANT RIGHT_PAREN  */
+#line 4303 "MachineIndependent/glslang.y"
                                                              {
         (yyval.interm.type).init((yyvsp[-3].lex).loc);
         (yyval.interm.type).qualifier.storage = EvqSpirvStorageClass;
         (yyval.interm.type).qualifier.spirvStorageClass = (yyvsp[-1].lex).i;
     }
-#line 12087 "MachineIndependent/glslang_tab.cpp"
+#line 12187 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 663: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN  */
-#line 4248 "MachineIndependent/glslang.y"
+  case 666: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN  */
+#line 4308 "MachineIndependent/glslang.y"
                                                                                            {
         (yyval.interm.type).init((yyvsp[-5].lex).loc);
         parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq));
         (yyval.interm.type).qualifier.storage = EvqSpirvStorageClass;
         (yyval.interm.type).qualifier.spirvStorageClass = (yyvsp[-1].lex).i;
     }
-#line 12098 "MachineIndependent/glslang_tab.cpp"
+#line 12198 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 664: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT RIGHT_PAREN  */
-#line 4256 "MachineIndependent/glslang.y"
+  case 667: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT RIGHT_PAREN  */
+#line 4316 "MachineIndependent/glslang.y"
                                                        {
         (yyval.interm.type).init((yyvsp[-3].lex).loc);
         (yyval.interm.type).qualifier.setSpirvDecorate((yyvsp[-1].lex).i);
     }
-#line 12107 "MachineIndependent/glslang_tab.cpp"
+#line 12207 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 665: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN  */
-#line 4260 "MachineIndependent/glslang.y"
+  case 668: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN  */
+#line 4320 "MachineIndependent/glslang.y"
                                                                                      {
         (yyval.interm.type).init((yyvsp[-5].lex).loc);
         parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq));
         (yyval.interm.type).qualifier.setSpirvDecorate((yyvsp[-1].lex).i);
     }
-#line 12117 "MachineIndependent/glslang_tab.cpp"
+#line 12217 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 666: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN  */
-#line 4265 "MachineIndependent/glslang.y"
+  case 669: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN  */
+#line 4325 "MachineIndependent/glslang.y"
                                                                                             {
         (yyval.interm.type).init((yyvsp[-5].lex).loc);
         (yyval.interm.type).qualifier.setSpirvDecorate((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
     }
-#line 12126 "MachineIndependent/glslang_tab.cpp"
+#line 12226 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 667: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN  */
-#line 4269 "MachineIndependent/glslang.y"
+  case 670: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN  */
+#line 4329 "MachineIndependent/glslang.y"
                                                                                                                           {
         (yyval.interm.type).init((yyvsp[-7].lex).loc);
         parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq));
         (yyval.interm.type).qualifier.setSpirvDecorate((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
     }
-#line 12136 "MachineIndependent/glslang_tab.cpp"
+#line 12236 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 668: /* spirv_decorate_qualifier: SPIRV_DECORATE_ID LEFT_PAREN INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN  */
-#line 4274 "MachineIndependent/glslang.y"
+  case 671: /* spirv_decorate_qualifier: SPIRV_DECORATE_ID LEFT_PAREN INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN  */
+#line 4334 "MachineIndependent/glslang.y"
                                                                                                   {
         (yyval.interm.type).init((yyvsp[-5].lex).loc);
         (yyval.interm.type).qualifier.setSpirvDecorateId((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
     }
-#line 12145 "MachineIndependent/glslang_tab.cpp"
+#line 12245 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 669: /* spirv_decorate_qualifier: SPIRV_DECORATE_ID LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN  */
-#line 4278 "MachineIndependent/glslang.y"
+  case 672: /* spirv_decorate_qualifier: SPIRV_DECORATE_ID LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN  */
+#line 4338 "MachineIndependent/glslang.y"
                                                                                                                                 {
         (yyval.interm.type).init((yyvsp[-7].lex).loc);
         parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq));
         (yyval.interm.type).qualifier.setSpirvDecorateId((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
     }
-#line 12155 "MachineIndependent/glslang_tab.cpp"
+#line 12255 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 670: /* spirv_decorate_qualifier: SPIRV_DECORATE_STRING LEFT_PAREN INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN  */
-#line 4283 "MachineIndependent/glslang.y"
+  case 673: /* spirv_decorate_qualifier: SPIRV_DECORATE_STRING LEFT_PAREN INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN  */
+#line 4343 "MachineIndependent/glslang.y"
                                                                                                           {
         (yyval.interm.type).init((yyvsp[-5].lex).loc);
         (yyval.interm.type).qualifier.setSpirvDecorateString((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
     }
-#line 12164 "MachineIndependent/glslang_tab.cpp"
+#line 12264 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 671: /* spirv_decorate_qualifier: SPIRV_DECORATE_STRING LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN  */
-#line 4287 "MachineIndependent/glslang.y"
+  case 674: /* spirv_decorate_qualifier: SPIRV_DECORATE_STRING LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN  */
+#line 4347 "MachineIndependent/glslang.y"
                                                                                                                                         {
         (yyval.interm.type).init((yyvsp[-7].lex).loc);
         parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq));
         (yyval.interm.type).qualifier.setSpirvDecorateString((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
     }
-#line 12174 "MachineIndependent/glslang_tab.cpp"
+#line 12274 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 672: /* spirv_decorate_parameter_list: spirv_decorate_parameter  */
-#line 4294 "MachineIndependent/glslang.y"
+  case 675: /* spirv_decorate_parameter_list: spirv_decorate_parameter  */
+#line 4354 "MachineIndependent/glslang.y"
                                {
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode));
     }
-#line 12182 "MachineIndependent/glslang_tab.cpp"
+#line 12282 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 673: /* spirv_decorate_parameter_list: spirv_decorate_parameter_list COMMA spirv_decorate_parameter  */
-#line 4297 "MachineIndependent/glslang.y"
+  case 676: /* spirv_decorate_parameter_list: spirv_decorate_parameter_list COMMA spirv_decorate_parameter  */
+#line 4357 "MachineIndependent/glslang.y"
                                                                    {
         (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermNode));
     }
-#line 12190 "MachineIndependent/glslang_tab.cpp"
+#line 12290 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 674: /* spirv_decorate_parameter: FLOATCONSTANT  */
-#line 4302 "MachineIndependent/glslang.y"
+  case 677: /* spirv_decorate_parameter: FLOATCONSTANT  */
+#line 4362 "MachineIndependent/glslang.y"
                     {
         (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
     }
-#line 12198 "MachineIndependent/glslang_tab.cpp"
+#line 12298 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 675: /* spirv_decorate_parameter: INTCONSTANT  */
-#line 4305 "MachineIndependent/glslang.y"
+  case 678: /* spirv_decorate_parameter: INTCONSTANT  */
+#line 4365 "MachineIndependent/glslang.y"
                   {
         (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
     }
-#line 12206 "MachineIndependent/glslang_tab.cpp"
+#line 12306 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 676: /* spirv_decorate_parameter: UINTCONSTANT  */
-#line 4308 "MachineIndependent/glslang.y"
+  case 679: /* spirv_decorate_parameter: UINTCONSTANT  */
+#line 4368 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
     }
-#line 12214 "MachineIndependent/glslang_tab.cpp"
+#line 12314 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 677: /* spirv_decorate_parameter: BOOLCONSTANT  */
-#line 4311 "MachineIndependent/glslang.y"
+  case 680: /* spirv_decorate_parameter: BOOLCONSTANT  */
+#line 4371 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
     }
-#line 12222 "MachineIndependent/glslang_tab.cpp"
+#line 12322 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 678: /* spirv_decorate_id_parameter_list: spirv_decorate_id_parameter  */
-#line 4316 "MachineIndependent/glslang.y"
+  case 681: /* spirv_decorate_id_parameter_list: spirv_decorate_id_parameter  */
+#line 4376 "MachineIndependent/glslang.y"
                                   {
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode));
     }
-#line 12230 "MachineIndependent/glslang_tab.cpp"
+#line 12330 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 679: /* spirv_decorate_id_parameter_list: spirv_decorate_id_parameter_list COMMA spirv_decorate_id_parameter  */
-#line 4319 "MachineIndependent/glslang.y"
+  case 682: /* spirv_decorate_id_parameter_list: spirv_decorate_id_parameter_list COMMA spirv_decorate_id_parameter  */
+#line 4379 "MachineIndependent/glslang.y"
                                                                          {
         (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermNode));
     }
-#line 12238 "MachineIndependent/glslang_tab.cpp"
+#line 12338 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 680: /* spirv_decorate_id_parameter: variable_identifier  */
-#line 4324 "MachineIndependent/glslang.y"
+  case 683: /* spirv_decorate_id_parameter: variable_identifier  */
+#line 4384 "MachineIndependent/glslang.y"
                           {
         if ((yyvsp[0].interm.intermTypedNode)->getAsConstantUnion() || (yyvsp[0].interm.intermTypedNode)->getAsSymbolNode())
             (yyval.interm.intermNode) = (yyvsp[0].interm.intermTypedNode);
         else
             parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "only allow constants or variables which are not elements of a composite", "", "");
     }
-#line 12249 "MachineIndependent/glslang_tab.cpp"
+#line 12349 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 681: /* spirv_decorate_id_parameter: FLOATCONSTANT  */
-#line 4330 "MachineIndependent/glslang.y"
+  case 684: /* spirv_decorate_id_parameter: FLOATCONSTANT  */
+#line 4390 "MachineIndependent/glslang.y"
                     {
         (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
     }
-#line 12257 "MachineIndependent/glslang_tab.cpp"
+#line 12357 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 682: /* spirv_decorate_id_parameter: INTCONSTANT  */
-#line 4333 "MachineIndependent/glslang.y"
+  case 685: /* spirv_decorate_id_parameter: INTCONSTANT  */
+#line 4393 "MachineIndependent/glslang.y"
                   {
         (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
     }
-#line 12265 "MachineIndependent/glslang_tab.cpp"
+#line 12365 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 683: /* spirv_decorate_id_parameter: UINTCONSTANT  */
-#line 4336 "MachineIndependent/glslang.y"
+  case 686: /* spirv_decorate_id_parameter: UINTCONSTANT  */
+#line 4396 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
     }
-#line 12273 "MachineIndependent/glslang_tab.cpp"
+#line 12373 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 684: /* spirv_decorate_id_parameter: BOOLCONSTANT  */
-#line 4339 "MachineIndependent/glslang.y"
+  case 687: /* spirv_decorate_id_parameter: BOOLCONSTANT  */
+#line 4399 "MachineIndependent/glslang.y"
                    {
         (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
     }
-#line 12281 "MachineIndependent/glslang_tab.cpp"
+#line 12381 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 685: /* spirv_decorate_string_parameter_list: STRING_LITERAL  */
-#line 4344 "MachineIndependent/glslang.y"
+  case 688: /* spirv_decorate_string_parameter_list: STRING_LITERAL  */
+#line 4404 "MachineIndependent/glslang.y"
                      {
         (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate(
             parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true));
     }
-#line 12290 "MachineIndependent/glslang_tab.cpp"
+#line 12390 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 686: /* spirv_decorate_string_parameter_list: spirv_decorate_string_parameter_list COMMA STRING_LITERAL  */
-#line 4348 "MachineIndependent/glslang.y"
+  case 689: /* spirv_decorate_string_parameter_list: spirv_decorate_string_parameter_list COMMA STRING_LITERAL  */
+#line 4408 "MachineIndependent/glslang.y"
                                                                 {
         (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true));
     }
-#line 12298 "MachineIndependent/glslang_tab.cpp"
+#line 12398 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 687: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN  */
-#line 4353 "MachineIndependent/glslang.y"
+  case 690: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN  */
+#line 4413 "MachineIndependent/glslang.y"
                                                                                                          {
         (yyval.interm.type).init((yyvsp[-5].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).setSpirvType(*(yyvsp[-3].interm.spirvInst), (yyvsp[-1].interm.spirvTypeParams));
     }
-#line 12307 "MachineIndependent/glslang_tab.cpp"
+#line 12407 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 688: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN  */
-#line 4357 "MachineIndependent/glslang.y"
+  case 691: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN  */
+#line 4417 "MachineIndependent/glslang.y"
                                                                                                                                        {
         (yyval.interm.type).init((yyvsp[-7].lex).loc, parseContext.symbolTable.atGlobalLevel());
         parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq));
         (yyval.interm.type).setSpirvType(*(yyvsp[-3].interm.spirvInst), (yyvsp[-1].interm.spirvTypeParams));
     }
-#line 12317 "MachineIndependent/glslang_tab.cpp"
+#line 12417 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 689: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN  */
-#line 4362 "MachineIndependent/glslang.y"
+  case 692: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN  */
+#line 4422 "MachineIndependent/glslang.y"
                                                                          {
         (yyval.interm.type).init((yyvsp[-3].lex).loc, parseContext.symbolTable.atGlobalLevel());
         (yyval.interm.type).setSpirvType(*(yyvsp[-1].interm.spirvInst));
     }
-#line 12326 "MachineIndependent/glslang_tab.cpp"
+#line 12426 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 690: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN  */
-#line 4366 "MachineIndependent/glslang.y"
+  case 693: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN  */
+#line 4426 "MachineIndependent/glslang.y"
                                                                                                        {
         (yyval.interm.type).init((yyvsp[-5].lex).loc, parseContext.symbolTable.atGlobalLevel());
         parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq));
         (yyval.interm.type).setSpirvType(*(yyvsp[-1].interm.spirvInst));
     }
-#line 12336 "MachineIndependent/glslang_tab.cpp"
+#line 12436 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 691: /* spirv_type_parameter_list: spirv_type_parameter  */
-#line 4373 "MachineIndependent/glslang.y"
+  case 694: /* spirv_type_parameter_list: spirv_type_parameter  */
+#line 4433 "MachineIndependent/glslang.y"
                            {
         (yyval.interm.spirvTypeParams) = (yyvsp[0].interm.spirvTypeParams);
     }
-#line 12344 "MachineIndependent/glslang_tab.cpp"
+#line 12444 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 692: /* spirv_type_parameter_list: spirv_type_parameter_list COMMA spirv_type_parameter  */
-#line 4376 "MachineIndependent/glslang.y"
+  case 695: /* spirv_type_parameter_list: spirv_type_parameter_list COMMA spirv_type_parameter  */
+#line 4436 "MachineIndependent/glslang.y"
                                                            {
         (yyval.interm.spirvTypeParams) = parseContext.mergeSpirvTypeParameters((yyvsp[-2].interm.spirvTypeParams), (yyvsp[0].interm.spirvTypeParams));
     }
-#line 12352 "MachineIndependent/glslang_tab.cpp"
+#line 12452 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 693: /* spirv_type_parameter: constant_expression  */
-#line 4381 "MachineIndependent/glslang.y"
+  case 696: /* spirv_type_parameter: constant_expression  */
+#line 4441 "MachineIndependent/glslang.y"
                           {
         (yyval.interm.spirvTypeParams) = parseContext.makeSpirvTypeParameters((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode)->getAsConstantUnion());
     }
-#line 12360 "MachineIndependent/glslang_tab.cpp"
+#line 12460 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 694: /* spirv_type_parameter: type_specifier_nonarray  */
-#line 4384 "MachineIndependent/glslang.y"
+  case 697: /* spirv_type_parameter: type_specifier_nonarray  */
+#line 4444 "MachineIndependent/glslang.y"
                               {
         (yyval.interm.spirvTypeParams) = parseContext.makeSpirvTypeParameters((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type));
     }
-#line 12368 "MachineIndependent/glslang_tab.cpp"
+#line 12468 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 695: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN  */
-#line 4389 "MachineIndependent/glslang.y"
+  case 698: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN  */
+#line 4449 "MachineIndependent/glslang.y"
                                                                                 {
         (yyval.interm.spirvInst) = (yyvsp[-1].interm.spirvInst);
     }
-#line 12376 "MachineIndependent/glslang_tab.cpp"
+#line 12476 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 696: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN  */
-#line 4392 "MachineIndependent/glslang.y"
+  case 699: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN  */
+#line 4452 "MachineIndependent/glslang.y"
                                                                                                               {
         parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq));
         (yyval.interm.spirvInst) = (yyvsp[-1].interm.spirvInst);
     }
-#line 12385 "MachineIndependent/glslang_tab.cpp"
+#line 12485 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 697: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_id  */
-#line 4398 "MachineIndependent/glslang.y"
+  case 700: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_id  */
+#line 4458 "MachineIndependent/glslang.y"
                                      {
         (yyval.interm.spirvInst) = (yyvsp[0].interm.spirvInst);
     }
-#line 12393 "MachineIndependent/glslang_tab.cpp"
+#line 12493 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 698: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_list COMMA spirv_instruction_qualifier_id  */
-#line 4401 "MachineIndependent/glslang.y"
+  case 701: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_list COMMA spirv_instruction_qualifier_id  */
+#line 4461 "MachineIndependent/glslang.y"
                                                                             {
         (yyval.interm.spirvInst) = parseContext.mergeSpirvInstruction((yyvsp[-1].lex).loc, (yyvsp[-2].interm.spirvInst), (yyvsp[0].interm.spirvInst));
     }
-#line 12401 "MachineIndependent/glslang_tab.cpp"
+#line 12501 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 699: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL STRING_LITERAL  */
-#line 4406 "MachineIndependent/glslang.y"
+  case 702: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL STRING_LITERAL  */
+#line 4466 "MachineIndependent/glslang.y"
                                       {
         (yyval.interm.spirvInst) = parseContext.makeSpirvInstruction((yyvsp[-1].lex).loc, *(yyvsp[-2].lex).string, *(yyvsp[0].lex).string);
     }
-#line 12409 "MachineIndependent/glslang_tab.cpp"
+#line 12509 "MachineIndependent/glslang_tab.cpp"
     break;
 
-  case 700: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL INTCONSTANT  */
-#line 4409 "MachineIndependent/glslang.y"
+  case 703: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL INTCONSTANT  */
+#line 4469 "MachineIndependent/glslang.y"
                                    {
         (yyval.interm.spirvInst) = parseContext.makeSpirvInstruction((yyvsp[-1].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[0].lex).i);
     }
-#line 12417 "MachineIndependent/glslang_tab.cpp"
+#line 12517 "MachineIndependent/glslang_tab.cpp"
     break;
 
 
-#line 12421 "MachineIndependent/glslang_tab.cpp"
+#line 12521 "MachineIndependent/glslang_tab.cpp"
 
       default: break;
     }
@@ -12641,5 +12741,5 @@
   return yyresult;
 }
 
-#line 4413 "MachineIndependent/glslang.y"
+#line 4473 "MachineIndependent/glslang.y"
 
diff --git a/glslang/MachineIndependent/glslang_tab.cpp.h b/glslang/MachineIndependent/glslang_tab.cpp.h
index d648492..7fcfe3e 100644
--- a/glslang/MachineIndependent/glslang_tab.cpp.h
+++ b/glslang/MachineIndependent/glslang_tab.cpp.h
@@ -220,302 +220,305 @@
     COOPMAT = 421,                 /* COOPMAT  */
     HITOBJECTNV = 422,             /* HITOBJECTNV  */
     HITOBJECTATTRNV = 423,         /* HITOBJECTATTRNV  */
-    SAMPLERCUBEARRAY = 424,        /* SAMPLERCUBEARRAY  */
-    SAMPLERCUBEARRAYSHADOW = 425,  /* SAMPLERCUBEARRAYSHADOW  */
-    ISAMPLERCUBEARRAY = 426,       /* ISAMPLERCUBEARRAY  */
-    USAMPLERCUBEARRAY = 427,       /* USAMPLERCUBEARRAY  */
-    SAMPLER1D = 428,               /* SAMPLER1D  */
-    SAMPLER1DARRAY = 429,          /* SAMPLER1DARRAY  */
-    SAMPLER1DARRAYSHADOW = 430,    /* SAMPLER1DARRAYSHADOW  */
-    ISAMPLER1D = 431,              /* ISAMPLER1D  */
-    SAMPLER1DSHADOW = 432,         /* SAMPLER1DSHADOW  */
-    SAMPLER2DRECT = 433,           /* SAMPLER2DRECT  */
-    SAMPLER2DRECTSHADOW = 434,     /* SAMPLER2DRECTSHADOW  */
-    ISAMPLER2DRECT = 435,          /* ISAMPLER2DRECT  */
-    USAMPLER2DRECT = 436,          /* USAMPLER2DRECT  */
-    SAMPLERBUFFER = 437,           /* SAMPLERBUFFER  */
-    ISAMPLERBUFFER = 438,          /* ISAMPLERBUFFER  */
-    USAMPLERBUFFER = 439,          /* USAMPLERBUFFER  */
-    SAMPLER2DMS = 440,             /* SAMPLER2DMS  */
-    ISAMPLER2DMS = 441,            /* ISAMPLER2DMS  */
-    USAMPLER2DMS = 442,            /* USAMPLER2DMS  */
-    SAMPLER2DMSARRAY = 443,        /* SAMPLER2DMSARRAY  */
-    ISAMPLER2DMSARRAY = 444,       /* ISAMPLER2DMSARRAY  */
-    USAMPLER2DMSARRAY = 445,       /* USAMPLER2DMSARRAY  */
-    SAMPLEREXTERNALOES = 446,      /* SAMPLEREXTERNALOES  */
-    SAMPLEREXTERNAL2DY2YEXT = 447, /* SAMPLEREXTERNAL2DY2YEXT  */
-    ISAMPLER1DARRAY = 448,         /* ISAMPLER1DARRAY  */
-    USAMPLER1D = 449,              /* USAMPLER1D  */
-    USAMPLER1DARRAY = 450,         /* USAMPLER1DARRAY  */
-    F16SAMPLER1D = 451,            /* F16SAMPLER1D  */
-    F16SAMPLER2D = 452,            /* F16SAMPLER2D  */
-    F16SAMPLER3D = 453,            /* F16SAMPLER3D  */
-    F16SAMPLER2DRECT = 454,        /* F16SAMPLER2DRECT  */
-    F16SAMPLERCUBE = 455,          /* F16SAMPLERCUBE  */
-    F16SAMPLER1DARRAY = 456,       /* F16SAMPLER1DARRAY  */
-    F16SAMPLER2DARRAY = 457,       /* F16SAMPLER2DARRAY  */
-    F16SAMPLERCUBEARRAY = 458,     /* F16SAMPLERCUBEARRAY  */
-    F16SAMPLERBUFFER = 459,        /* F16SAMPLERBUFFER  */
-    F16SAMPLER2DMS = 460,          /* F16SAMPLER2DMS  */
-    F16SAMPLER2DMSARRAY = 461,     /* F16SAMPLER2DMSARRAY  */
-    F16SAMPLER1DSHADOW = 462,      /* F16SAMPLER1DSHADOW  */
-    F16SAMPLER2DSHADOW = 463,      /* F16SAMPLER2DSHADOW  */
-    F16SAMPLER1DARRAYSHADOW = 464, /* F16SAMPLER1DARRAYSHADOW  */
-    F16SAMPLER2DARRAYSHADOW = 465, /* F16SAMPLER2DARRAYSHADOW  */
-    F16SAMPLER2DRECTSHADOW = 466,  /* F16SAMPLER2DRECTSHADOW  */
-    F16SAMPLERCUBESHADOW = 467,    /* F16SAMPLERCUBESHADOW  */
-    F16SAMPLERCUBEARRAYSHADOW = 468, /* F16SAMPLERCUBEARRAYSHADOW  */
-    IMAGE1D = 469,                 /* IMAGE1D  */
-    IIMAGE1D = 470,                /* IIMAGE1D  */
-    UIMAGE1D = 471,                /* UIMAGE1D  */
-    IMAGE2D = 472,                 /* IMAGE2D  */
-    IIMAGE2D = 473,                /* IIMAGE2D  */
-    UIMAGE2D = 474,                /* UIMAGE2D  */
-    IMAGE3D = 475,                 /* IMAGE3D  */
-    IIMAGE3D = 476,                /* IIMAGE3D  */
-    UIMAGE3D = 477,                /* UIMAGE3D  */
-    IMAGE2DRECT = 478,             /* IMAGE2DRECT  */
-    IIMAGE2DRECT = 479,            /* IIMAGE2DRECT  */
-    UIMAGE2DRECT = 480,            /* UIMAGE2DRECT  */
-    IMAGECUBE = 481,               /* IMAGECUBE  */
-    IIMAGECUBE = 482,              /* IIMAGECUBE  */
-    UIMAGECUBE = 483,              /* UIMAGECUBE  */
-    IMAGEBUFFER = 484,             /* IMAGEBUFFER  */
-    IIMAGEBUFFER = 485,            /* IIMAGEBUFFER  */
-    UIMAGEBUFFER = 486,            /* UIMAGEBUFFER  */
-    IMAGE1DARRAY = 487,            /* IMAGE1DARRAY  */
-    IIMAGE1DARRAY = 488,           /* IIMAGE1DARRAY  */
-    UIMAGE1DARRAY = 489,           /* UIMAGE1DARRAY  */
-    IMAGE2DARRAY = 490,            /* IMAGE2DARRAY  */
-    IIMAGE2DARRAY = 491,           /* IIMAGE2DARRAY  */
-    UIMAGE2DARRAY = 492,           /* UIMAGE2DARRAY  */
-    IMAGECUBEARRAY = 493,          /* IMAGECUBEARRAY  */
-    IIMAGECUBEARRAY = 494,         /* IIMAGECUBEARRAY  */
-    UIMAGECUBEARRAY = 495,         /* UIMAGECUBEARRAY  */
-    IMAGE2DMS = 496,               /* IMAGE2DMS  */
-    IIMAGE2DMS = 497,              /* IIMAGE2DMS  */
-    UIMAGE2DMS = 498,              /* UIMAGE2DMS  */
-    IMAGE2DMSARRAY = 499,          /* IMAGE2DMSARRAY  */
-    IIMAGE2DMSARRAY = 500,         /* IIMAGE2DMSARRAY  */
-    UIMAGE2DMSARRAY = 501,         /* UIMAGE2DMSARRAY  */
-    F16IMAGE1D = 502,              /* F16IMAGE1D  */
-    F16IMAGE2D = 503,              /* F16IMAGE2D  */
-    F16IMAGE3D = 504,              /* F16IMAGE3D  */
-    F16IMAGE2DRECT = 505,          /* F16IMAGE2DRECT  */
-    F16IMAGECUBE = 506,            /* F16IMAGECUBE  */
-    F16IMAGE1DARRAY = 507,         /* F16IMAGE1DARRAY  */
-    F16IMAGE2DARRAY = 508,         /* F16IMAGE2DARRAY  */
-    F16IMAGECUBEARRAY = 509,       /* F16IMAGECUBEARRAY  */
-    F16IMAGEBUFFER = 510,          /* F16IMAGEBUFFER  */
-    F16IMAGE2DMS = 511,            /* F16IMAGE2DMS  */
-    F16IMAGE2DMSARRAY = 512,       /* F16IMAGE2DMSARRAY  */
-    I64IMAGE1D = 513,              /* I64IMAGE1D  */
-    U64IMAGE1D = 514,              /* U64IMAGE1D  */
-    I64IMAGE2D = 515,              /* I64IMAGE2D  */
-    U64IMAGE2D = 516,              /* U64IMAGE2D  */
-    I64IMAGE3D = 517,              /* I64IMAGE3D  */
-    U64IMAGE3D = 518,              /* U64IMAGE3D  */
-    I64IMAGE2DRECT = 519,          /* I64IMAGE2DRECT  */
-    U64IMAGE2DRECT = 520,          /* U64IMAGE2DRECT  */
-    I64IMAGECUBE = 521,            /* I64IMAGECUBE  */
-    U64IMAGECUBE = 522,            /* U64IMAGECUBE  */
-    I64IMAGEBUFFER = 523,          /* I64IMAGEBUFFER  */
-    U64IMAGEBUFFER = 524,          /* U64IMAGEBUFFER  */
-    I64IMAGE1DARRAY = 525,         /* I64IMAGE1DARRAY  */
-    U64IMAGE1DARRAY = 526,         /* U64IMAGE1DARRAY  */
-    I64IMAGE2DARRAY = 527,         /* I64IMAGE2DARRAY  */
-    U64IMAGE2DARRAY = 528,         /* U64IMAGE2DARRAY  */
-    I64IMAGECUBEARRAY = 529,       /* I64IMAGECUBEARRAY  */
-    U64IMAGECUBEARRAY = 530,       /* U64IMAGECUBEARRAY  */
-    I64IMAGE2DMS = 531,            /* I64IMAGE2DMS  */
-    U64IMAGE2DMS = 532,            /* U64IMAGE2DMS  */
-    I64IMAGE2DMSARRAY = 533,       /* I64IMAGE2DMSARRAY  */
-    U64IMAGE2DMSARRAY = 534,       /* U64IMAGE2DMSARRAY  */
-    TEXTURECUBEARRAY = 535,        /* TEXTURECUBEARRAY  */
-    ITEXTURECUBEARRAY = 536,       /* ITEXTURECUBEARRAY  */
-    UTEXTURECUBEARRAY = 537,       /* UTEXTURECUBEARRAY  */
-    TEXTURE1D = 538,               /* TEXTURE1D  */
-    ITEXTURE1D = 539,              /* ITEXTURE1D  */
-    UTEXTURE1D = 540,              /* UTEXTURE1D  */
-    TEXTURE1DARRAY = 541,          /* TEXTURE1DARRAY  */
-    ITEXTURE1DARRAY = 542,         /* ITEXTURE1DARRAY  */
-    UTEXTURE1DARRAY = 543,         /* UTEXTURE1DARRAY  */
-    TEXTURE2DRECT = 544,           /* TEXTURE2DRECT  */
-    ITEXTURE2DRECT = 545,          /* ITEXTURE2DRECT  */
-    UTEXTURE2DRECT = 546,          /* UTEXTURE2DRECT  */
-    TEXTUREBUFFER = 547,           /* TEXTUREBUFFER  */
-    ITEXTUREBUFFER = 548,          /* ITEXTUREBUFFER  */
-    UTEXTUREBUFFER = 549,          /* UTEXTUREBUFFER  */
-    TEXTURE2DMS = 550,             /* TEXTURE2DMS  */
-    ITEXTURE2DMS = 551,            /* ITEXTURE2DMS  */
-    UTEXTURE2DMS = 552,            /* UTEXTURE2DMS  */
-    TEXTURE2DMSARRAY = 553,        /* TEXTURE2DMSARRAY  */
-    ITEXTURE2DMSARRAY = 554,       /* ITEXTURE2DMSARRAY  */
-    UTEXTURE2DMSARRAY = 555,       /* UTEXTURE2DMSARRAY  */
-    F16TEXTURE1D = 556,            /* F16TEXTURE1D  */
-    F16TEXTURE2D = 557,            /* F16TEXTURE2D  */
-    F16TEXTURE3D = 558,            /* F16TEXTURE3D  */
-    F16TEXTURE2DRECT = 559,        /* F16TEXTURE2DRECT  */
-    F16TEXTURECUBE = 560,          /* F16TEXTURECUBE  */
-    F16TEXTURE1DARRAY = 561,       /* F16TEXTURE1DARRAY  */
-    F16TEXTURE2DARRAY = 562,       /* F16TEXTURE2DARRAY  */
-    F16TEXTURECUBEARRAY = 563,     /* F16TEXTURECUBEARRAY  */
-    F16TEXTUREBUFFER = 564,        /* F16TEXTUREBUFFER  */
-    F16TEXTURE2DMS = 565,          /* F16TEXTURE2DMS  */
-    F16TEXTURE2DMSARRAY = 566,     /* F16TEXTURE2DMSARRAY  */
-    SUBPASSINPUT = 567,            /* SUBPASSINPUT  */
-    SUBPASSINPUTMS = 568,          /* SUBPASSINPUTMS  */
-    ISUBPASSINPUT = 569,           /* ISUBPASSINPUT  */
-    ISUBPASSINPUTMS = 570,         /* ISUBPASSINPUTMS  */
-    USUBPASSINPUT = 571,           /* USUBPASSINPUT  */
-    USUBPASSINPUTMS = 572,         /* USUBPASSINPUTMS  */
-    F16SUBPASSINPUT = 573,         /* F16SUBPASSINPUT  */
-    F16SUBPASSINPUTMS = 574,       /* F16SUBPASSINPUTMS  */
-    SPIRV_INSTRUCTION = 575,       /* SPIRV_INSTRUCTION  */
-    SPIRV_EXECUTION_MODE = 576,    /* SPIRV_EXECUTION_MODE  */
-    SPIRV_EXECUTION_MODE_ID = 577, /* SPIRV_EXECUTION_MODE_ID  */
-    SPIRV_DECORATE = 578,          /* SPIRV_DECORATE  */
-    SPIRV_DECORATE_ID = 579,       /* SPIRV_DECORATE_ID  */
-    SPIRV_DECORATE_STRING = 580,   /* SPIRV_DECORATE_STRING  */
-    SPIRV_TYPE = 581,              /* SPIRV_TYPE  */
-    SPIRV_STORAGE_CLASS = 582,     /* SPIRV_STORAGE_CLASS  */
-    SPIRV_BY_REFERENCE = 583,      /* SPIRV_BY_REFERENCE  */
-    SPIRV_LITERAL = 584,           /* SPIRV_LITERAL  */
-    ATTACHMENTEXT = 585,           /* ATTACHMENTEXT  */
-    IATTACHMENTEXT = 586,          /* IATTACHMENTEXT  */
-    UATTACHMENTEXT = 587,          /* UATTACHMENTEXT  */
-    LEFT_OP = 588,                 /* LEFT_OP  */
-    RIGHT_OP = 589,                /* RIGHT_OP  */
-    INC_OP = 590,                  /* INC_OP  */
-    DEC_OP = 591,                  /* DEC_OP  */
-    LE_OP = 592,                   /* LE_OP  */
-    GE_OP = 593,                   /* GE_OP  */
-    EQ_OP = 594,                   /* EQ_OP  */
-    NE_OP = 595,                   /* NE_OP  */
-    AND_OP = 596,                  /* AND_OP  */
-    OR_OP = 597,                   /* OR_OP  */
-    XOR_OP = 598,                  /* XOR_OP  */
-    MUL_ASSIGN = 599,              /* MUL_ASSIGN  */
-    DIV_ASSIGN = 600,              /* DIV_ASSIGN  */
-    ADD_ASSIGN = 601,              /* ADD_ASSIGN  */
-    MOD_ASSIGN = 602,              /* MOD_ASSIGN  */
-    LEFT_ASSIGN = 603,             /* LEFT_ASSIGN  */
-    RIGHT_ASSIGN = 604,            /* RIGHT_ASSIGN  */
-    AND_ASSIGN = 605,              /* AND_ASSIGN  */
-    XOR_ASSIGN = 606,              /* XOR_ASSIGN  */
-    OR_ASSIGN = 607,               /* OR_ASSIGN  */
-    SUB_ASSIGN = 608,              /* SUB_ASSIGN  */
-    STRING_LITERAL = 609,          /* STRING_LITERAL  */
-    LEFT_PAREN = 610,              /* LEFT_PAREN  */
-    RIGHT_PAREN = 611,             /* RIGHT_PAREN  */
-    LEFT_BRACKET = 612,            /* LEFT_BRACKET  */
-    RIGHT_BRACKET = 613,           /* RIGHT_BRACKET  */
-    LEFT_BRACE = 614,              /* LEFT_BRACE  */
-    RIGHT_BRACE = 615,             /* RIGHT_BRACE  */
-    DOT = 616,                     /* DOT  */
-    COMMA = 617,                   /* COMMA  */
-    COLON = 618,                   /* COLON  */
-    EQUAL = 619,                   /* EQUAL  */
-    SEMICOLON = 620,               /* SEMICOLON  */
-    BANG = 621,                    /* BANG  */
-    DASH = 622,                    /* DASH  */
-    TILDE = 623,                   /* TILDE  */
-    PLUS = 624,                    /* PLUS  */
-    STAR = 625,                    /* STAR  */
-    SLASH = 626,                   /* SLASH  */
-    PERCENT = 627,                 /* PERCENT  */
-    LEFT_ANGLE = 628,              /* LEFT_ANGLE  */
-    RIGHT_ANGLE = 629,             /* RIGHT_ANGLE  */
-    VERTICAL_BAR = 630,            /* VERTICAL_BAR  */
-    CARET = 631,                   /* CARET  */
-    AMPERSAND = 632,               /* AMPERSAND  */
-    QUESTION = 633,                /* QUESTION  */
-    INVARIANT = 634,               /* INVARIANT  */
-    HIGH_PRECISION = 635,          /* HIGH_PRECISION  */
-    MEDIUM_PRECISION = 636,        /* MEDIUM_PRECISION  */
-    LOW_PRECISION = 637,           /* LOW_PRECISION  */
-    PRECISION = 638,               /* PRECISION  */
-    PACKED = 639,                  /* PACKED  */
-    RESOURCE = 640,                /* RESOURCE  */
-    SUPERP = 641,                  /* SUPERP  */
-    FLOATCONSTANT = 642,           /* FLOATCONSTANT  */
-    INTCONSTANT = 643,             /* INTCONSTANT  */
-    UINTCONSTANT = 644,            /* UINTCONSTANT  */
-    BOOLCONSTANT = 645,            /* BOOLCONSTANT  */
-    IDENTIFIER = 646,              /* IDENTIFIER  */
-    TYPE_NAME = 647,               /* TYPE_NAME  */
-    CENTROID = 648,                /* CENTROID  */
-    IN = 649,                      /* IN  */
-    OUT = 650,                     /* OUT  */
-    INOUT = 651,                   /* INOUT  */
-    STRUCT = 652,                  /* STRUCT  */
-    VOID = 653,                    /* VOID  */
-    WHILE = 654,                   /* WHILE  */
-    BREAK = 655,                   /* BREAK  */
-    CONTINUE = 656,                /* CONTINUE  */
-    DO = 657,                      /* DO  */
-    ELSE = 658,                    /* ELSE  */
-    FOR = 659,                     /* FOR  */
-    IF = 660,                      /* IF  */
-    DISCARD = 661,                 /* DISCARD  */
-    RETURN = 662,                  /* RETURN  */
-    SWITCH = 663,                  /* SWITCH  */
-    CASE = 664,                    /* CASE  */
-    DEFAULT = 665,                 /* DEFAULT  */
-    TERMINATE_INVOCATION = 666,    /* TERMINATE_INVOCATION  */
-    TERMINATE_RAY = 667,           /* TERMINATE_RAY  */
-    IGNORE_INTERSECTION = 668,     /* IGNORE_INTERSECTION  */
-    UNIFORM = 669,                 /* UNIFORM  */
-    SHARED = 670,                  /* SHARED  */
-    BUFFER = 671,                  /* BUFFER  */
-    TILEIMAGEEXT = 672,            /* TILEIMAGEEXT  */
-    FLAT = 673,                    /* FLAT  */
-    SMOOTH = 674,                  /* SMOOTH  */
-    LAYOUT = 675,                  /* LAYOUT  */
-    DOUBLECONSTANT = 676,          /* DOUBLECONSTANT  */
-    INT16CONSTANT = 677,           /* INT16CONSTANT  */
-    UINT16CONSTANT = 678,          /* UINT16CONSTANT  */
-    FLOAT16CONSTANT = 679,         /* FLOAT16CONSTANT  */
-    INT32CONSTANT = 680,           /* INT32CONSTANT  */
-    UINT32CONSTANT = 681,          /* UINT32CONSTANT  */
-    INT64CONSTANT = 682,           /* INT64CONSTANT  */
-    UINT64CONSTANT = 683,          /* UINT64CONSTANT  */
-    SUBROUTINE = 684,              /* SUBROUTINE  */
-    DEMOTE = 685,                  /* DEMOTE  */
-    PAYLOADNV = 686,               /* PAYLOADNV  */
-    PAYLOADINNV = 687,             /* PAYLOADINNV  */
-    HITATTRNV = 688,               /* HITATTRNV  */
-    CALLDATANV = 689,              /* CALLDATANV  */
-    CALLDATAINNV = 690,            /* CALLDATAINNV  */
-    PAYLOADEXT = 691,              /* PAYLOADEXT  */
-    PAYLOADINEXT = 692,            /* PAYLOADINEXT  */
-    HITATTREXT = 693,              /* HITATTREXT  */
-    CALLDATAEXT = 694,             /* CALLDATAEXT  */
-    CALLDATAINEXT = 695,           /* CALLDATAINEXT  */
-    PATCH = 696,                   /* PATCH  */
-    SAMPLE = 697,                  /* SAMPLE  */
-    NONUNIFORM = 698,              /* NONUNIFORM  */
-    COHERENT = 699,                /* COHERENT  */
-    VOLATILE = 700,                /* VOLATILE  */
-    RESTRICT = 701,                /* RESTRICT  */
-    READONLY = 702,                /* READONLY  */
-    WRITEONLY = 703,               /* WRITEONLY  */
-    DEVICECOHERENT = 704,          /* DEVICECOHERENT  */
-    QUEUEFAMILYCOHERENT = 705,     /* QUEUEFAMILYCOHERENT  */
-    WORKGROUPCOHERENT = 706,       /* WORKGROUPCOHERENT  */
-    SUBGROUPCOHERENT = 707,        /* SUBGROUPCOHERENT  */
-    NONPRIVATE = 708,              /* NONPRIVATE  */
-    SHADERCALLCOHERENT = 709,      /* SHADERCALLCOHERENT  */
-    NOPERSPECTIVE = 710,           /* NOPERSPECTIVE  */
-    EXPLICITINTERPAMD = 711,       /* EXPLICITINTERPAMD  */
-    PERVERTEXEXT = 712,            /* PERVERTEXEXT  */
-    PERVERTEXNV = 713,             /* PERVERTEXNV  */
-    PERPRIMITIVENV = 714,          /* PERPRIMITIVENV  */
-    PERVIEWNV = 715,               /* PERVIEWNV  */
-    PERTASKNV = 716,               /* PERTASKNV  */
-    PERPRIMITIVEEXT = 717,         /* PERPRIMITIVEEXT  */
-    TASKPAYLOADWORKGROUPEXT = 718, /* TASKPAYLOADWORKGROUPEXT  */
-    PRECISE = 719                  /* PRECISE  */
+    TENSORLAYOUTNV = 424,          /* TENSORLAYOUTNV  */
+    TENSORVIEWNV = 425,            /* TENSORVIEWNV  */
+    SAMPLERCUBEARRAY = 426,        /* SAMPLERCUBEARRAY  */
+    SAMPLERCUBEARRAYSHADOW = 427,  /* SAMPLERCUBEARRAYSHADOW  */
+    ISAMPLERCUBEARRAY = 428,       /* ISAMPLERCUBEARRAY  */
+    USAMPLERCUBEARRAY = 429,       /* USAMPLERCUBEARRAY  */
+    SAMPLER1D = 430,               /* SAMPLER1D  */
+    SAMPLER1DARRAY = 431,          /* SAMPLER1DARRAY  */
+    SAMPLER1DARRAYSHADOW = 432,    /* SAMPLER1DARRAYSHADOW  */
+    ISAMPLER1D = 433,              /* ISAMPLER1D  */
+    SAMPLER1DSHADOW = 434,         /* SAMPLER1DSHADOW  */
+    SAMPLER2DRECT = 435,           /* SAMPLER2DRECT  */
+    SAMPLER2DRECTSHADOW = 436,     /* SAMPLER2DRECTSHADOW  */
+    ISAMPLER2DRECT = 437,          /* ISAMPLER2DRECT  */
+    USAMPLER2DRECT = 438,          /* USAMPLER2DRECT  */
+    SAMPLERBUFFER = 439,           /* SAMPLERBUFFER  */
+    ISAMPLERBUFFER = 440,          /* ISAMPLERBUFFER  */
+    USAMPLERBUFFER = 441,          /* USAMPLERBUFFER  */
+    SAMPLER2DMS = 442,             /* SAMPLER2DMS  */
+    ISAMPLER2DMS = 443,            /* ISAMPLER2DMS  */
+    USAMPLER2DMS = 444,            /* USAMPLER2DMS  */
+    SAMPLER2DMSARRAY = 445,        /* SAMPLER2DMSARRAY  */
+    ISAMPLER2DMSARRAY = 446,       /* ISAMPLER2DMSARRAY  */
+    USAMPLER2DMSARRAY = 447,       /* USAMPLER2DMSARRAY  */
+    SAMPLEREXTERNALOES = 448,      /* SAMPLEREXTERNALOES  */
+    SAMPLEREXTERNAL2DY2YEXT = 449, /* SAMPLEREXTERNAL2DY2YEXT  */
+    ISAMPLER1DARRAY = 450,         /* ISAMPLER1DARRAY  */
+    USAMPLER1D = 451,              /* USAMPLER1D  */
+    USAMPLER1DARRAY = 452,         /* USAMPLER1DARRAY  */
+    F16SAMPLER1D = 453,            /* F16SAMPLER1D  */
+    F16SAMPLER2D = 454,            /* F16SAMPLER2D  */
+    F16SAMPLER3D = 455,            /* F16SAMPLER3D  */
+    F16SAMPLER2DRECT = 456,        /* F16SAMPLER2DRECT  */
+    F16SAMPLERCUBE = 457,          /* F16SAMPLERCUBE  */
+    F16SAMPLER1DARRAY = 458,       /* F16SAMPLER1DARRAY  */
+    F16SAMPLER2DARRAY = 459,       /* F16SAMPLER2DARRAY  */
+    F16SAMPLERCUBEARRAY = 460,     /* F16SAMPLERCUBEARRAY  */
+    F16SAMPLERBUFFER = 461,        /* F16SAMPLERBUFFER  */
+    F16SAMPLER2DMS = 462,          /* F16SAMPLER2DMS  */
+    F16SAMPLER2DMSARRAY = 463,     /* F16SAMPLER2DMSARRAY  */
+    F16SAMPLER1DSHADOW = 464,      /* F16SAMPLER1DSHADOW  */
+    F16SAMPLER2DSHADOW = 465,      /* F16SAMPLER2DSHADOW  */
+    F16SAMPLER1DARRAYSHADOW = 466, /* F16SAMPLER1DARRAYSHADOW  */
+    F16SAMPLER2DARRAYSHADOW = 467, /* F16SAMPLER2DARRAYSHADOW  */
+    F16SAMPLER2DRECTSHADOW = 468,  /* F16SAMPLER2DRECTSHADOW  */
+    F16SAMPLERCUBESHADOW = 469,    /* F16SAMPLERCUBESHADOW  */
+    F16SAMPLERCUBEARRAYSHADOW = 470, /* F16SAMPLERCUBEARRAYSHADOW  */
+    IMAGE1D = 471,                 /* IMAGE1D  */
+    IIMAGE1D = 472,                /* IIMAGE1D  */
+    UIMAGE1D = 473,                /* UIMAGE1D  */
+    IMAGE2D = 474,                 /* IMAGE2D  */
+    IIMAGE2D = 475,                /* IIMAGE2D  */
+    UIMAGE2D = 476,                /* UIMAGE2D  */
+    IMAGE3D = 477,                 /* IMAGE3D  */
+    IIMAGE3D = 478,                /* IIMAGE3D  */
+    UIMAGE3D = 479,                /* UIMAGE3D  */
+    IMAGE2DRECT = 480,             /* IMAGE2DRECT  */
+    IIMAGE2DRECT = 481,            /* IIMAGE2DRECT  */
+    UIMAGE2DRECT = 482,            /* UIMAGE2DRECT  */
+    IMAGECUBE = 483,               /* IMAGECUBE  */
+    IIMAGECUBE = 484,              /* IIMAGECUBE  */
+    UIMAGECUBE = 485,              /* UIMAGECUBE  */
+    IMAGEBUFFER = 486,             /* IMAGEBUFFER  */
+    IIMAGEBUFFER = 487,            /* IIMAGEBUFFER  */
+    UIMAGEBUFFER = 488,            /* UIMAGEBUFFER  */
+    IMAGE1DARRAY = 489,            /* IMAGE1DARRAY  */
+    IIMAGE1DARRAY = 490,           /* IIMAGE1DARRAY  */
+    UIMAGE1DARRAY = 491,           /* UIMAGE1DARRAY  */
+    IMAGE2DARRAY = 492,            /* IMAGE2DARRAY  */
+    IIMAGE2DARRAY = 493,           /* IIMAGE2DARRAY  */
+    UIMAGE2DARRAY = 494,           /* UIMAGE2DARRAY  */
+    IMAGECUBEARRAY = 495,          /* IMAGECUBEARRAY  */
+    IIMAGECUBEARRAY = 496,         /* IIMAGECUBEARRAY  */
+    UIMAGECUBEARRAY = 497,         /* UIMAGECUBEARRAY  */
+    IMAGE2DMS = 498,               /* IMAGE2DMS  */
+    IIMAGE2DMS = 499,              /* IIMAGE2DMS  */
+    UIMAGE2DMS = 500,              /* UIMAGE2DMS  */
+    IMAGE2DMSARRAY = 501,          /* IMAGE2DMSARRAY  */
+    IIMAGE2DMSARRAY = 502,         /* IIMAGE2DMSARRAY  */
+    UIMAGE2DMSARRAY = 503,         /* UIMAGE2DMSARRAY  */
+    F16IMAGE1D = 504,              /* F16IMAGE1D  */
+    F16IMAGE2D = 505,              /* F16IMAGE2D  */
+    F16IMAGE3D = 506,              /* F16IMAGE3D  */
+    F16IMAGE2DRECT = 507,          /* F16IMAGE2DRECT  */
+    F16IMAGECUBE = 508,            /* F16IMAGECUBE  */
+    F16IMAGE1DARRAY = 509,         /* F16IMAGE1DARRAY  */
+    F16IMAGE2DARRAY = 510,         /* F16IMAGE2DARRAY  */
+    F16IMAGECUBEARRAY = 511,       /* F16IMAGECUBEARRAY  */
+    F16IMAGEBUFFER = 512,          /* F16IMAGEBUFFER  */
+    F16IMAGE2DMS = 513,            /* F16IMAGE2DMS  */
+    F16IMAGE2DMSARRAY = 514,       /* F16IMAGE2DMSARRAY  */
+    I64IMAGE1D = 515,              /* I64IMAGE1D  */
+    U64IMAGE1D = 516,              /* U64IMAGE1D  */
+    I64IMAGE2D = 517,              /* I64IMAGE2D  */
+    U64IMAGE2D = 518,              /* U64IMAGE2D  */
+    I64IMAGE3D = 519,              /* I64IMAGE3D  */
+    U64IMAGE3D = 520,              /* U64IMAGE3D  */
+    I64IMAGE2DRECT = 521,          /* I64IMAGE2DRECT  */
+    U64IMAGE2DRECT = 522,          /* U64IMAGE2DRECT  */
+    I64IMAGECUBE = 523,            /* I64IMAGECUBE  */
+    U64IMAGECUBE = 524,            /* U64IMAGECUBE  */
+    I64IMAGEBUFFER = 525,          /* I64IMAGEBUFFER  */
+    U64IMAGEBUFFER = 526,          /* U64IMAGEBUFFER  */
+    I64IMAGE1DARRAY = 527,         /* I64IMAGE1DARRAY  */
+    U64IMAGE1DARRAY = 528,         /* U64IMAGE1DARRAY  */
+    I64IMAGE2DARRAY = 529,         /* I64IMAGE2DARRAY  */
+    U64IMAGE2DARRAY = 530,         /* U64IMAGE2DARRAY  */
+    I64IMAGECUBEARRAY = 531,       /* I64IMAGECUBEARRAY  */
+    U64IMAGECUBEARRAY = 532,       /* U64IMAGECUBEARRAY  */
+    I64IMAGE2DMS = 533,            /* I64IMAGE2DMS  */
+    U64IMAGE2DMS = 534,            /* U64IMAGE2DMS  */
+    I64IMAGE2DMSARRAY = 535,       /* I64IMAGE2DMSARRAY  */
+    U64IMAGE2DMSARRAY = 536,       /* U64IMAGE2DMSARRAY  */
+    TEXTURECUBEARRAY = 537,        /* TEXTURECUBEARRAY  */
+    ITEXTURECUBEARRAY = 538,       /* ITEXTURECUBEARRAY  */
+    UTEXTURECUBEARRAY = 539,       /* UTEXTURECUBEARRAY  */
+    TEXTURE1D = 540,               /* TEXTURE1D  */
+    ITEXTURE1D = 541,              /* ITEXTURE1D  */
+    UTEXTURE1D = 542,              /* UTEXTURE1D  */
+    TEXTURE1DARRAY = 543,          /* TEXTURE1DARRAY  */
+    ITEXTURE1DARRAY = 544,         /* ITEXTURE1DARRAY  */
+    UTEXTURE1DARRAY = 545,         /* UTEXTURE1DARRAY  */
+    TEXTURE2DRECT = 546,           /* TEXTURE2DRECT  */
+    ITEXTURE2DRECT = 547,          /* ITEXTURE2DRECT  */
+    UTEXTURE2DRECT = 548,          /* UTEXTURE2DRECT  */
+    TEXTUREBUFFER = 549,           /* TEXTUREBUFFER  */
+    ITEXTUREBUFFER = 550,          /* ITEXTUREBUFFER  */
+    UTEXTUREBUFFER = 551,          /* UTEXTUREBUFFER  */
+    TEXTURE2DMS = 552,             /* TEXTURE2DMS  */
+    ITEXTURE2DMS = 553,            /* ITEXTURE2DMS  */
+    UTEXTURE2DMS = 554,            /* UTEXTURE2DMS  */
+    TEXTURE2DMSARRAY = 555,        /* TEXTURE2DMSARRAY  */
+    ITEXTURE2DMSARRAY = 556,       /* ITEXTURE2DMSARRAY  */
+    UTEXTURE2DMSARRAY = 557,       /* UTEXTURE2DMSARRAY  */
+    F16TEXTURE1D = 558,            /* F16TEXTURE1D  */
+    F16TEXTURE2D = 559,            /* F16TEXTURE2D  */
+    F16TEXTURE3D = 560,            /* F16TEXTURE3D  */
+    F16TEXTURE2DRECT = 561,        /* F16TEXTURE2DRECT  */
+    F16TEXTURECUBE = 562,          /* F16TEXTURECUBE  */
+    F16TEXTURE1DARRAY = 563,       /* F16TEXTURE1DARRAY  */
+    F16TEXTURE2DARRAY = 564,       /* F16TEXTURE2DARRAY  */
+    F16TEXTURECUBEARRAY = 565,     /* F16TEXTURECUBEARRAY  */
+    F16TEXTUREBUFFER = 566,        /* F16TEXTUREBUFFER  */
+    F16TEXTURE2DMS = 567,          /* F16TEXTURE2DMS  */
+    F16TEXTURE2DMSARRAY = 568,     /* F16TEXTURE2DMSARRAY  */
+    SUBPASSINPUT = 569,            /* SUBPASSINPUT  */
+    SUBPASSINPUTMS = 570,          /* SUBPASSINPUTMS  */
+    ISUBPASSINPUT = 571,           /* ISUBPASSINPUT  */
+    ISUBPASSINPUTMS = 572,         /* ISUBPASSINPUTMS  */
+    USUBPASSINPUT = 573,           /* USUBPASSINPUT  */
+    USUBPASSINPUTMS = 574,         /* USUBPASSINPUTMS  */
+    F16SUBPASSINPUT = 575,         /* F16SUBPASSINPUT  */
+    F16SUBPASSINPUTMS = 576,       /* F16SUBPASSINPUTMS  */
+    SPIRV_INSTRUCTION = 577,       /* SPIRV_INSTRUCTION  */
+    SPIRV_EXECUTION_MODE = 578,    /* SPIRV_EXECUTION_MODE  */
+    SPIRV_EXECUTION_MODE_ID = 579, /* SPIRV_EXECUTION_MODE_ID  */
+    SPIRV_DECORATE = 580,          /* SPIRV_DECORATE  */
+    SPIRV_DECORATE_ID = 581,       /* SPIRV_DECORATE_ID  */
+    SPIRV_DECORATE_STRING = 582,   /* SPIRV_DECORATE_STRING  */
+    SPIRV_TYPE = 583,              /* SPIRV_TYPE  */
+    SPIRV_STORAGE_CLASS = 584,     /* SPIRV_STORAGE_CLASS  */
+    SPIRV_BY_REFERENCE = 585,      /* SPIRV_BY_REFERENCE  */
+    SPIRV_LITERAL = 586,           /* SPIRV_LITERAL  */
+    ATTACHMENTEXT = 587,           /* ATTACHMENTEXT  */
+    IATTACHMENTEXT = 588,          /* IATTACHMENTEXT  */
+    UATTACHMENTEXT = 589,          /* UATTACHMENTEXT  */
+    LEFT_OP = 590,                 /* LEFT_OP  */
+    RIGHT_OP = 591,                /* RIGHT_OP  */
+    INC_OP = 592,                  /* INC_OP  */
+    DEC_OP = 593,                  /* DEC_OP  */
+    LE_OP = 594,                   /* LE_OP  */
+    GE_OP = 595,                   /* GE_OP  */
+    EQ_OP = 596,                   /* EQ_OP  */
+    NE_OP = 597,                   /* NE_OP  */
+    AND_OP = 598,                  /* AND_OP  */
+    OR_OP = 599,                   /* OR_OP  */
+    XOR_OP = 600,                  /* XOR_OP  */
+    MUL_ASSIGN = 601,              /* MUL_ASSIGN  */
+    DIV_ASSIGN = 602,              /* DIV_ASSIGN  */
+    ADD_ASSIGN = 603,              /* ADD_ASSIGN  */
+    MOD_ASSIGN = 604,              /* MOD_ASSIGN  */
+    LEFT_ASSIGN = 605,             /* LEFT_ASSIGN  */
+    RIGHT_ASSIGN = 606,            /* RIGHT_ASSIGN  */
+    AND_ASSIGN = 607,              /* AND_ASSIGN  */
+    XOR_ASSIGN = 608,              /* XOR_ASSIGN  */
+    OR_ASSIGN = 609,               /* OR_ASSIGN  */
+    SUB_ASSIGN = 610,              /* SUB_ASSIGN  */
+    STRING_LITERAL = 611,          /* STRING_LITERAL  */
+    LEFT_PAREN = 612,              /* LEFT_PAREN  */
+    RIGHT_PAREN = 613,             /* RIGHT_PAREN  */
+    LEFT_BRACKET = 614,            /* LEFT_BRACKET  */
+    RIGHT_BRACKET = 615,           /* RIGHT_BRACKET  */
+    LEFT_BRACE = 616,              /* LEFT_BRACE  */
+    RIGHT_BRACE = 617,             /* RIGHT_BRACE  */
+    DOT = 618,                     /* DOT  */
+    COMMA = 619,                   /* COMMA  */
+    COLON = 620,                   /* COLON  */
+    EQUAL = 621,                   /* EQUAL  */
+    SEMICOLON = 622,               /* SEMICOLON  */
+    BANG = 623,                    /* BANG  */
+    DASH = 624,                    /* DASH  */
+    TILDE = 625,                   /* TILDE  */
+    PLUS = 626,                    /* PLUS  */
+    STAR = 627,                    /* STAR  */
+    SLASH = 628,                   /* SLASH  */
+    PERCENT = 629,                 /* PERCENT  */
+    LEFT_ANGLE = 630,              /* LEFT_ANGLE  */
+    RIGHT_ANGLE = 631,             /* RIGHT_ANGLE  */
+    VERTICAL_BAR = 632,            /* VERTICAL_BAR  */
+    CARET = 633,                   /* CARET  */
+    AMPERSAND = 634,               /* AMPERSAND  */
+    QUESTION = 635,                /* QUESTION  */
+    INVARIANT = 636,               /* INVARIANT  */
+    HIGH_PRECISION = 637,          /* HIGH_PRECISION  */
+    MEDIUM_PRECISION = 638,        /* MEDIUM_PRECISION  */
+    LOW_PRECISION = 639,           /* LOW_PRECISION  */
+    PRECISION = 640,               /* PRECISION  */
+    PACKED = 641,                  /* PACKED  */
+    RESOURCE = 642,                /* RESOURCE  */
+    SUPERP = 643,                  /* SUPERP  */
+    FLOATCONSTANT = 644,           /* FLOATCONSTANT  */
+    INTCONSTANT = 645,             /* INTCONSTANT  */
+    UINTCONSTANT = 646,            /* UINTCONSTANT  */
+    BOOLCONSTANT = 647,            /* BOOLCONSTANT  */
+    IDENTIFIER = 648,              /* IDENTIFIER  */
+    TYPE_NAME = 649,               /* TYPE_NAME  */
+    CENTROID = 650,                /* CENTROID  */
+    IN = 651,                      /* IN  */
+    OUT = 652,                     /* OUT  */
+    INOUT = 653,                   /* INOUT  */
+    STRUCT = 654,                  /* STRUCT  */
+    VOID = 655,                    /* VOID  */
+    WHILE = 656,                   /* WHILE  */
+    BREAK = 657,                   /* BREAK  */
+    CONTINUE = 658,                /* CONTINUE  */
+    DO = 659,                      /* DO  */
+    ELSE = 660,                    /* ELSE  */
+    FOR = 661,                     /* FOR  */
+    IF = 662,                      /* IF  */
+    DISCARD = 663,                 /* DISCARD  */
+    RETURN = 664,                  /* RETURN  */
+    SWITCH = 665,                  /* SWITCH  */
+    CASE = 666,                    /* CASE  */
+    DEFAULT = 667,                 /* DEFAULT  */
+    TERMINATE_INVOCATION = 668,    /* TERMINATE_INVOCATION  */
+    TERMINATE_RAY = 669,           /* TERMINATE_RAY  */
+    IGNORE_INTERSECTION = 670,     /* IGNORE_INTERSECTION  */
+    UNIFORM = 671,                 /* UNIFORM  */
+    SHARED = 672,                  /* SHARED  */
+    BUFFER = 673,                  /* BUFFER  */
+    TILEIMAGEEXT = 674,            /* TILEIMAGEEXT  */
+    FLAT = 675,                    /* FLAT  */
+    SMOOTH = 676,                  /* SMOOTH  */
+    LAYOUT = 677,                  /* LAYOUT  */
+    DOUBLECONSTANT = 678,          /* DOUBLECONSTANT  */
+    INT16CONSTANT = 679,           /* INT16CONSTANT  */
+    UINT16CONSTANT = 680,          /* UINT16CONSTANT  */
+    FLOAT16CONSTANT = 681,         /* FLOAT16CONSTANT  */
+    INT32CONSTANT = 682,           /* INT32CONSTANT  */
+    UINT32CONSTANT = 683,          /* UINT32CONSTANT  */
+    INT64CONSTANT = 684,           /* INT64CONSTANT  */
+    UINT64CONSTANT = 685,          /* UINT64CONSTANT  */
+    SUBROUTINE = 686,              /* SUBROUTINE  */
+    DEMOTE = 687,                  /* DEMOTE  */
+    FUNCTION = 688,                /* FUNCTION  */
+    PAYLOADNV = 689,               /* PAYLOADNV  */
+    PAYLOADINNV = 690,             /* PAYLOADINNV  */
+    HITATTRNV = 691,               /* HITATTRNV  */
+    CALLDATANV = 692,              /* CALLDATANV  */
+    CALLDATAINNV = 693,            /* CALLDATAINNV  */
+    PAYLOADEXT = 694,              /* PAYLOADEXT  */
+    PAYLOADINEXT = 695,            /* PAYLOADINEXT  */
+    HITATTREXT = 696,              /* HITATTREXT  */
+    CALLDATAEXT = 697,             /* CALLDATAEXT  */
+    CALLDATAINEXT = 698,           /* CALLDATAINEXT  */
+    PATCH = 699,                   /* PATCH  */
+    SAMPLE = 700,                  /* SAMPLE  */
+    NONUNIFORM = 701,              /* NONUNIFORM  */
+    COHERENT = 702,                /* COHERENT  */
+    VOLATILE = 703,                /* VOLATILE  */
+    RESTRICT = 704,                /* RESTRICT  */
+    READONLY = 705,                /* READONLY  */
+    WRITEONLY = 706,               /* WRITEONLY  */
+    DEVICECOHERENT = 707,          /* DEVICECOHERENT  */
+    QUEUEFAMILYCOHERENT = 708,     /* QUEUEFAMILYCOHERENT  */
+    WORKGROUPCOHERENT = 709,       /* WORKGROUPCOHERENT  */
+    SUBGROUPCOHERENT = 710,        /* SUBGROUPCOHERENT  */
+    NONPRIVATE = 711,              /* NONPRIVATE  */
+    SHADERCALLCOHERENT = 712,      /* SHADERCALLCOHERENT  */
+    NOPERSPECTIVE = 713,           /* NOPERSPECTIVE  */
+    EXPLICITINTERPAMD = 714,       /* EXPLICITINTERPAMD  */
+    PERVERTEXEXT = 715,            /* PERVERTEXEXT  */
+    PERVERTEXNV = 716,             /* PERVERTEXNV  */
+    PERPRIMITIVENV = 717,          /* PERPRIMITIVENV  */
+    PERVIEWNV = 718,               /* PERVIEWNV  */
+    PERTASKNV = 719,               /* PERTASKNV  */
+    PERPRIMITIVEEXT = 720,         /* PERPRIMITIVEEXT  */
+    TASKPAYLOADWORKGROUPEXT = 721, /* TASKPAYLOADWORKGROUPEXT  */
+    PRECISE = 722                  /* PRECISE  */
   };
   typedef enum yytokentype yytoken_kind_t;
 #endif
@@ -563,7 +566,7 @@
         glslang::TTypeParameters* typeParameters;
     } interm;
 
-#line 567 "MachineIndependent/glslang_tab.cpp.h"
+#line 570 "MachineIndependent/glslang_tab.cpp.h"
 
 };
 typedef union YYSTYPE YYSTYPE;
diff --git a/glslang/MachineIndependent/intermOut.cpp b/glslang/MachineIndependent/intermOut.cpp
index 32c3c57..ccfff38 100644
--- a/glslang/MachineIndependent/intermOut.cpp
+++ b/glslang/MachineIndependent/intermOut.cpp
@@ -1,7 +1,7 @@
 //
 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
 // Copyright (C) 2012-2016 LunarG, Inc.
-// Copyright (C) 2017 ARM Limited.
+// Copyright (C) 2017, 2022-2024 Arm Limited.
 // Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
 //
 // All rights reserved.
@@ -204,6 +204,13 @@
 
     OutputTreeText(out, node, depth);
 
+    if (IsOpNumericConv(node->getAsOperator()->getOp())) {
+        out.debug << "Convert " << TType::getBasicString(node->getOperand()->getType().getBasicType()) << " to " << TType::getBasicString(node->getType().getBasicType());
+        out.debug << " (" << node->getCompleteString() << ")";
+        out.debug << "\n";
+        return true;
+    }
+
     switch (node->getOp()) {
     case EOpNegative:       out.debug << "Negate value";         break;
     case EOpVectorLogicalNot:
@@ -216,192 +223,6 @@
     case EOpPreDecrement:   out.debug << "Pre-Decrement";        break;
     case EOpCopyObject:     out.debug << "copy object";          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 EOpConvInt64ToBool:   out.debug << "Convert int64 to bool";   break;
-    case EOpConvUint64ToBool:  out.debug << "Convert uint64 to bool";  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 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;
-
-    // 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 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 EOpConvUint64ToPtr:  out.debug << "Convert uint64_t to pointer";   break;
     case EOpConvPtrToUint64:  out.debug << "Convert pointer to uint64_t";   break;
 
@@ -565,6 +386,8 @@
     case EOpSubgroupShuffleXor:              out.debug << "subgroupShuffleXor";              break;
     case EOpSubgroupShuffleUp:               out.debug << "subgroupShuffleUp";               break;
     case EOpSubgroupShuffleDown:             out.debug << "subgroupShuffleDown";             break;
+    case EOpSubgroupRotate:                  out.debug << "subgroupRotate";                  break;
+    case EOpSubgroupClusteredRotate:         out.debug << "subgroupClusteredRotate";         break;
     case EOpSubgroupAdd:                     out.debug << "subgroupAdd";                     break;
     case EOpSubgroupMul:                     out.debug << "subgroupMul";                     break;
     case EOpSubgroupMin:                     out.debug << "subgroupMin";                     break;
@@ -597,6 +420,8 @@
     case EOpSubgroupQuadSwapHorizontal:      out.debug << "subgroupQuadSwapHorizontal";      break;
     case EOpSubgroupQuadSwapVertical:        out.debug << "subgroupQuadSwapVertical";        break;
     case EOpSubgroupQuadSwapDiagonal:        out.debug << "subgroupQuadSwapDiagonal";        break;
+    case EOpSubgroupQuadAll:                 out.debug << "subgroupQuadAll";                 break;
+    case EOpSubgroupQuadAny:                 out.debug << "subgroupQuadAny";                 break;
 
     case EOpSubgroupPartition:                          out.debug << "subgroupPartitionNV";                          break;
     case EOpSubgroupPartitionedAdd:                     out.debug << "subgroupPartitionedAddNV";                     break;
@@ -669,6 +494,17 @@
 
     case EOpSpirvInst: out.debug << "spirv_instruction"; break;
 
+    case EOpCreateTensorLayoutNV:           out.debug << "createTensorLayoutNV"; break;
+    case EOpTensorLayoutSetBlockSizeNV:     out.debug << "setTensorLayoutBlockSizeNV"; break;
+    case EOpTensorLayoutSetDimensionNV:     out.debug << "setTensorLayoutDimensionNV"; break;
+    case EOpTensorLayoutSetStrideNV:        out.debug << "setTensorLayoutStrideNV"; break;
+    case EOpTensorLayoutSliceNV:            out.debug << "sliceTensorLayoutNV"; break;
+    case EOpTensorLayoutSetClampValueNV:    out.debug << "setTensorLayoutClampValueNV"; break;
+    case EOpCreateTensorViewNV:             out.debug << "createTensorViewNV"; break;
+    case EOpTensorViewSetDimensionNV:       out.debug << "setTensorViewDimensionsNV"; break;
+    case EOpTensorViewSetStrideNV:          out.debug << "setTensorViewStrideNV"; break;
+    case EOpTensorViewSetClipNV:            out.debug << "setTensorViewClipNV"; break;
+
     default: out.debug.message(EPrefixError, "Bad unary op");
     }
 
@@ -1000,6 +836,8 @@
     case EOpSubgroupShuffleXor:              out.debug << "subgroupShuffleXor"; break;
     case EOpSubgroupShuffleUp:               out.debug << "subgroupShuffleUp"; break;
     case EOpSubgroupShuffleDown:             out.debug << "subgroupShuffleDown"; break;
+    case EOpSubgroupRotate:                  out.debug << "subgroupRotate"; break;
+    case EOpSubgroupClusteredRotate:         out.debug << "subgroupClusteredRotate"; break;
     case EOpSubgroupAdd:                     out.debug << "subgroupAdd"; break;
     case EOpSubgroupMul:                     out.debug << "subgroupMul"; break;
     case EOpSubgroupMin:                     out.debug << "subgroupMin"; break;
@@ -1032,6 +870,8 @@
     case EOpSubgroupQuadSwapHorizontal:      out.debug << "subgroupQuadSwapHorizontal"; break;
     case EOpSubgroupQuadSwapVertical:        out.debug << "subgroupQuadSwapVertical"; break;
     case EOpSubgroupQuadSwapDiagonal:        out.debug << "subgroupQuadSwapDiagonal"; break;
+    case EOpSubgroupQuadAll:                 out.debug << "subgroupQuadAll"; break;
+    case EOpSubgroupQuadAny:                 out.debug << "subgroupQuadAny"; break;
 
     case EOpSubgroupPartition:                          out.debug << "subgroupPartitionNV";                          break;
     case EOpSubgroupPartitionedAdd:                     out.debug << "subgroupPartitionedAddNV";                     break;
@@ -1105,7 +945,12 @@
     case EOpCooperativeMatrixMulAdd: out.debug << "MulAdd cooperative matrices KHR"; break;
     case EOpCooperativeMatrixLoadNV:  out.debug << "Load cooperative matrix NV"; break;
     case EOpCooperativeMatrixStoreNV:  out.debug << "Store cooperative matrix NV"; break;
+    case EOpCooperativeMatrixLoadTensorNV:  out.debug << "Load cooperative matrix tensor NV"; break;
+    case EOpCooperativeMatrixStoreTensorNV:  out.debug << "Store cooperative matrix tensor NV"; break;
     case EOpCooperativeMatrixMulAddNV: out.debug << "MulAdd cooperative matrices NV"; break;
+    case EOpCooperativeMatrixReduceNV: out.debug << "Reduce cooperative matrices"; break;
+    case EOpCooperativeMatrixPerElementOpNV: out.debug << "cooperative matrix per element op"; break;
+    case EOpCooperativeMatrixTransposeNV: out.debug << "Transpose cooperative matrix"; break;
 
     case EOpIsHelperInvocation: out.debug << "IsHelperInvocation"; break;
     case EOpDebugPrintf:  out.debug << "Debug printf";  break;
@@ -1148,6 +993,17 @@
     case EOpStencilAttachmentReadEXT: out.debug << "stencilAttachmentReadEXT"; break;
     case EOpDepthAttachmentReadEXT: out.debug << "depthAttachmentReadEXT"; break;
 
+    case EOpCreateTensorLayoutNV:           out.debug << "createTensorLayout"; break;
+    case EOpTensorLayoutSetBlockSizeNV:     out.debug << "setBlockSize"; break;
+    case EOpTensorLayoutSetDimensionNV:     out.debug << "setDimension"; break;
+    case EOpTensorLayoutSetStrideNV:        out.debug << "setStride"; break;
+    case EOpTensorLayoutSliceNV:            out.debug << "slice"; break;
+    case EOpTensorLayoutSetClampValueNV:    out.debug << "setClampValue"; break;
+    case EOpCreateTensorViewNV:             out.debug << "createTensorView"; break;
+    case EOpTensorViewSetDimensionNV:       out.debug << "setTensorViewDimensions"; break;
+    case EOpTensorViewSetStrideNV:          out.debug << "setTensorViewStride"; break;
+    case EOpTensorViewSetClipNV:            out.debug << "clipTensorView"; break;
+
     default: out.debug.message(EPrefixError, "Bad aggregation op");
     }
 
@@ -1208,12 +1064,12 @@
 //   - shows all digits, no premature rounding
 static void OutputDouble(TInfoSink& out, double value, TOutputTraverser::EExtraOutput extra)
 {
-    if (IsInfinity(value)) {
+    if (std::isinf(value)) {
         if (value < 0)
             out.debug << "-1.#INF";
         else
             out.debug << "+1.#INF";
-    } else if (IsNan(value))
+    } else if (std::isnan(value))
         out.debug << "1.#IND";
     else {
         const int maxSize = 340;
@@ -1512,6 +1368,9 @@
     if (getSubgroupUniformControlFlow())
         infoSink.debug << "subgroup_uniform_control_flow\n";
 
+    if (getMaximallyReconverges())
+        infoSink.debug << "maximally_reconverges\n";
+
     switch (language) {
     case EShLangVertex:
         break;
@@ -1576,7 +1435,7 @@
         infoSink.debug << "max_vertices = " << vertices << "\n";
         infoSink.debug << "max_primitives = " << primitives << "\n";
         infoSink.debug << "output primitive = " << TQualifier::getGeometryString(outputPrimitive) << "\n";
-        // Fall through
+        [[fallthrough]];
     case EShLangTask:
         // Fall through
     case EShLangCompute:
diff --git a/glslang/MachineIndependent/iomapper.cpp b/glslang/MachineIndependent/iomapper.cpp
index 63dedf7..26c3eaa 100644
--- a/glslang/MachineIndependent/iomapper.cpp
+++ b/glslang/MachineIndependent/iomapper.cpp
@@ -39,6 +39,7 @@
 
 #include "gl_types.h"
 #include "iomapper.h"
+#include "LiveTraverser.h"
 #include "SymbolTable.h"
 
 //
@@ -60,6 +61,108 @@
 
 namespace glslang {
 
+struct TVarEntryInfo {
+    long long id;
+    TIntermSymbol* symbol;
+    bool live;
+    TLayoutPacking upgradedToPushConstantPacking; // ElpNone means it hasn't been upgraded
+    int newBinding;
+    int newSet;
+    int newLocation;
+    int newComponent;
+    int newIndex;
+    EShLanguage stage;
+
+    void clearNewAssignments() {
+        upgradedToPushConstantPacking = ElpNone;
+        newBinding = -1;
+        newSet = -1;
+        newLocation = -1;
+        newComponent = -1;
+        newIndex = -1;
+    }
+
+    struct TOrderById {
+        inline bool operator()(const TVarEntryInfo& l, const TVarEntryInfo& r) { return l.id < r.id; }
+    };
+
+    struct TOrderByPriority {
+        // ordering:
+        // 1) has both binding and set
+        // 2) has binding but no set
+        // 3) has no binding but set
+        // 4) has no binding and no set
+        inline bool operator()(const TVarEntryInfo& l, const TVarEntryInfo& r) {
+            const TQualifier& lq = l.symbol->getQualifier();
+            const TQualifier& rq = r.symbol->getQualifier();
+
+            // simple rules:
+            // has binding gives 2 points
+            // has set gives 1 point
+            // who has the most points is more important.
+            int lPoints = (lq.hasBinding() ? 2 : 0) + (lq.hasSet() ? 1 : 0);
+            int rPoints = (rq.hasBinding() ? 2 : 0) + (rq.hasSet() ? 1 : 0);
+
+            if (lPoints == rPoints)
+                return l.id < r.id;
+            return lPoints > rPoints;
+        }
+    };
+
+    struct TOrderByPriorityAndLive {
+        // ordering:
+        // 1) do live variables first
+        // 2) has both binding and set
+        // 3) has binding but no set
+        // 4) has no binding but set
+        // 5) has no binding and no set
+        inline bool operator()(const TVarEntryInfo& l, const TVarEntryInfo& r) {
+
+            const TQualifier& lq = l.symbol->getQualifier();
+            const TQualifier& rq = r.symbol->getQualifier();
+
+            // simple rules:
+            // has binding gives 2 points
+            // has set gives 1 point
+            // who has the most points is more important.
+            int lPoints = (lq.hasBinding() ? 2 : 0) + (lq.hasSet() ? 1 : 0);
+            int rPoints = (rq.hasBinding() ? 2 : 0) + (rq.hasSet() ? 1 : 0);
+
+            if (l.live != r.live)
+                return l.live > r.live;
+
+            if (lPoints != rPoints)
+                return lPoints > rPoints;
+
+            return l.id < r.id;
+        }
+    };
+};
+
+// override function "operator=", if a vector<const _Kty, _Ty> being sort,
+// when use vc++, the sort function will call :
+// pair& operator=(const pair<_Other1, _Other2>& _Right)
+// {
+//     first = _Right.first;
+//     second = _Right.second;
+//     return (*this);
+// }
+// that will make a const type handing on left.
+// override this function can avoid a compiler error.
+// In the future, if the vc++ compiler can handle such a situation,
+// this part of the code will be removed.
+struct TVarLivePair : std::pair<const TString, TVarEntryInfo> {
+    TVarLivePair(const std::pair<const TString, TVarEntryInfo>& _Right) : pair(_Right.first, _Right.second) {}
+    TVarLivePair& operator=(const TVarLivePair& _Right) {
+        const_cast<TString&>(first) = _Right.first;
+        second = _Right.second;
+        return (*this);
+    }
+    TVarLivePair(const TVarLivePair& src) : pair(src) { }
+};
+typedef std::vector<TVarLivePair> TVarLiveVector;
+
+
 class TVarGatherTraverser : public TLiveTraverser {
 public:
     TVarGatherTraverser(const TIntermediate& i, bool traverseDeadCode, TVarLiveMap& inList, TVarLiveMap& outList, TVarLiveMap& uniformList)
@@ -85,7 +188,7 @@
             addGlobalReference(base->getAccessName());
 
         if (target) {
-            TVarEntryInfo ent = {base->getId(), base, ! traverseAll};
+            TVarEntryInfo ent = {base->getId(), base, ! traverseAll, {}, {}, {}, {}, {}, {}, {}};
             ent.stage = intermediate.getStage();
             TVarLiveMap::iterator at = target->find(
                 ent.symbol->getAccessName()); // std::lower_bound(target->begin(), target->end(), ent, TVarEntryInfo::TOrderById());
@@ -124,7 +227,7 @@
         else
             return;
 
-        TVarEntryInfo ent = { base->getId() };
+        TVarEntryInfo ent = { base->getId(), {}, {}, {}, {}, {}, {}, {}, {}, {} };
         // Fix a defect, when block has no instance name, we need to find its block name
         TVarLiveMap::const_iterator at = source->find(base->getAccessName());
         if (at == source->end())
@@ -143,8 +246,11 @@
             base->getWritableType().getQualifier().layoutComponent = at->second.newComponent;
         if (at->second.newIndex != -1)
             base->getWritableType().getQualifier().layoutIndex = at->second.newIndex;
-        if (at->second.upgradedToPushConstant)
+        if (at->second.upgradedToPushConstantPacking != ElpNone) {
             base->getWritableType().getQualifier().layoutPushConstant = true;
+            base->getWritableType().getQualifier().setBlockStorage(EbsPushConstant);
+            base->getWritableType().getQualifier().layoutPacking = at->second.upgradedToPushConstantPacking;
+        }
     }
 
   private:
@@ -176,7 +282,7 @@
 {
     EShLanguage stage;
     TIoMapResolver& resolver;
-    inline TNotifyInOutAdaptor(EShLanguage s, TIoMapResolver& r) 
+    inline TNotifyInOutAdaptor(EShLanguage s, TIoMapResolver& r)
       : stage(s)
       , resolver(r)
     {
@@ -866,7 +972,7 @@
     }
 
     // no locations added if already present, a built-in variable, or a variable with SPIR-V decorate
-    if (type.getQualifier().hasLocation() || type.isBuiltIn() || type.getQualifier().hasSprivDecorate()) {
+    if (type.getQualifier().hasLocation() || type.isBuiltIn() || type.getQualifier().hasSpirvDecorate()) {
         return ent.newLocation = -1;
     }
 
@@ -953,7 +1059,7 @@
         return ent.newLocation = type.getQualifier().layoutLocation;
     }
     // no locations added if already present, a built-in variable, or a variable with SPIR-V decorate
-    if (type.isBuiltIn() || type.getQualifier().hasSprivDecorate()) {
+    if (type.isBuiltIn() || type.getQualifier().hasSpirvDecorate()) {
         return ent.newLocation = -1;
     }
     // no locations on blocks of built-in variables
@@ -1497,6 +1603,36 @@
     return !hadError;
 }
 
+TGlslIoMapper::TGlslIoMapper() {
+    memset(inVarMaps,     0, sizeof(TVarLiveMap*)   * EShLangCount);
+    memset(outVarMaps,    0, sizeof(TVarLiveMap*)   * EShLangCount);
+    memset(uniformVarMap, 0, sizeof(TVarLiveMap*)   * EShLangCount);
+    memset(intermediates, 0, sizeof(TIntermediate*) * EShLangCount);
+    profile = ENoProfile;
+    version = 0;
+    autoPushConstantMaxSize = 128;
+    autoPushConstantBlockPacking = ElpStd430;
+}
+
+TGlslIoMapper::~TGlslIoMapper() {
+    for (size_t stage = 0; stage < EShLangCount; stage++) {
+        if (inVarMaps[stage] != nullptr) {
+            delete inVarMaps[stage];
+            inVarMaps[stage] = nullptr;
+        }
+        if (outVarMaps[stage] != nullptr) {
+            delete outVarMaps[stage];
+            outVarMaps[stage] = nullptr;
+        }
+        if (uniformVarMap[stage] != nullptr) {
+            delete uniformVarMap[stage];
+            uniformVarMap[stage] = nullptr;
+        }
+        if (intermediates[stage] != nullptr)
+            intermediates[stage] = nullptr;
+    }
+}
+
 // Map I/O variables to provided offsets, and make bindings for
 // unbound but live variables.
 //
@@ -1677,7 +1813,8 @@
                 std::for_each(uniformVector.begin(), uniformVector.end(),
                                        [this](TVarLivePair& p) {
                 if (p.first == autoPushConstantBlockName) {
-                        p.second.upgradedToPushConstant = true;
+                        p.second.upgradedToPushConstantPacking = autoPushConstantBlockPacking;
+                        p.second.newSet = TQualifier::layoutSetEnd;
                     }
                 });
             }
@@ -1690,8 +1827,8 @@
                 std::for_each(uniformVector.begin(), uniformVector.end(), [pUniformVarMap, stage](TVarLivePair p) {
                     auto at = pUniformVarMap[stage]->find(p.second.symbol->getAccessName());
                     if (at != pUniformVarMap[stage]->end() && at->second.id == p.second.id){
-                        if (p.second.upgradedToPushConstant) {
-                            at->second.upgradedToPushConstant = true;
+                        if (p.second.upgradedToPushConstantPacking != ElpNone) {
+                            at->second.upgradedToPushConstantPacking = p.second.upgradedToPushConstantPacking;
                         } else {
                             int resolvedBinding = at->second.newBinding;
                             at->second = p.second;
diff --git a/glslang/MachineIndependent/iomapper.h b/glslang/MachineIndependent/iomapper.h
index 35babbc..ef513d9 100644
--- a/glslang/MachineIndependent/iomapper.h
+++ b/glslang/MachineIndependent/iomapper.h
@@ -37,7 +37,6 @@
 #define _IOMAPPER_INCLUDED
 
 #include <cstdint>
-#include "LiveTraverser.h"
 #include <unordered_map>
 #include <unordered_set>
 //
@@ -49,84 +48,7 @@
 namespace glslang {
 
 class TIntermediate;
-struct TVarEntryInfo {
-    long long id;
-    TIntermSymbol* symbol;
-    bool live;
-    bool upgradedToPushConstant;
-    int newBinding;
-    int newSet;
-    int newLocation;
-    int newComponent;
-    int newIndex;
-    EShLanguage stage;
-
-    void clearNewAssignments() {
-        upgradedToPushConstant = false;
-        newBinding = -1;
-        newSet = -1;
-        newLocation = -1;
-        newComponent = -1;
-        newIndex = -1;
-    }
-
-    struct TOrderById {
-        inline bool operator()(const TVarEntryInfo& l, const TVarEntryInfo& r) { return l.id < r.id; }
-    };
-
-    struct TOrderByPriority {
-        // ordering:
-        // 1) has both binding and set
-        // 2) has binding but no set
-        // 3) has no binding but set
-        // 4) has no binding and no set
-        inline bool operator()(const TVarEntryInfo& l, const TVarEntryInfo& r) {
-            const TQualifier& lq = l.symbol->getQualifier();
-            const TQualifier& rq = r.symbol->getQualifier();
-
-            // simple rules:
-            // has binding gives 2 points
-            // has set gives 1 point
-            // who has the most points is more important.
-            int lPoints = (lq.hasBinding() ? 2 : 0) + (lq.hasSet() ? 1 : 0);
-            int rPoints = (rq.hasBinding() ? 2 : 0) + (rq.hasSet() ? 1 : 0);
-
-            if (lPoints == rPoints)
-                return l.id < r.id;
-            return lPoints > rPoints;
-        }
-    };
-
-    struct TOrderByPriorityAndLive {
-        // ordering:
-        // 1) do live variables first
-        // 2) has both binding and set
-        // 3) has binding but no set
-        // 4) has no binding but set
-        // 5) has no binding and no set
-        inline bool operator()(const TVarEntryInfo& l, const TVarEntryInfo& r) {
-
-            const TQualifier& lq = l.symbol->getQualifier();
-            const TQualifier& rq = r.symbol->getQualifier();
-
-            // simple rules:
-            // has binding gives 2 points
-            // has set gives 1 point
-            // who has the most points is more important.
-            int lPoints = (lq.hasBinding() ? 2 : 0) + (lq.hasSet() ? 1 : 0);
-            int rPoints = (rq.hasBinding() ? 2 : 0) + (rq.hasSet() ? 1 : 0);
-
-            if (l.live != r.live)
-                return l.live > r.live;
-
-            if (lPoints != rPoints)
-                return lPoints > rPoints;
-
-            return l.id < r.id;
-        }
-    };
-};
-
+struct TVarEntryInfo;
 // Base class for shared TIoMapResolver services, used by several derivations.
 struct TDefaultIoResolverBase : public glslang::TIoMapResolver {
 public:
@@ -267,82 +189,22 @@
 
 typedef std::map<TString, TVarEntryInfo> TVarLiveMap;
 
-// override function "operator=", if a vector<const _Kty, _Ty> being sort,
-// when use vc++, the sort function will call :
-// pair& operator=(const pair<_Other1, _Other2>& _Right)
-// {
-//     first = _Right.first;
-//     second = _Right.second;
-//     return (*this);
-// }
-// that will make a const type handing on left.
-// override this function can avoid a compiler error.
-// In the future, if the vc++ compiler can handle such a situation,
-// this part of the code will be removed.
-struct TVarLivePair : std::pair<const TString, TVarEntryInfo> {
-    TVarLivePair(const std::pair<const TString, TVarEntryInfo>& _Right) : pair(_Right.first, _Right.second) {}
-    TVarLivePair& operator=(const TVarLivePair& _Right) {
-        const_cast<TString&>(first) = _Right.first;
-        second = _Right.second;
-        return (*this);
-    }
-    TVarLivePair(const TVarLivePair& src) : pair(src) { }
-};
-typedef std::vector<TVarLivePair> TVarLiveVector;
-
-// I/O mapper
-class TIoMapper {
-public:
-    TIoMapper() {}
-    virtual ~TIoMapper() {}
-    // grow the reflection stage by stage
-    bool virtual addStage(EShLanguage, TIntermediate&, TInfoSink&, TIoMapResolver*);
-    bool virtual doMap(TIoMapResolver*, TInfoSink&) { return true; }
-};
-
 // I/O mapper for GLSL
 class TGlslIoMapper : public TIoMapper {
 public:
-    TGlslIoMapper() {
-        memset(inVarMaps,     0, sizeof(TVarLiveMap*)   * (EShLangCount + 1));
-        memset(outVarMaps,    0, sizeof(TVarLiveMap*)   * (EShLangCount + 1));
-        memset(uniformVarMap, 0, sizeof(TVarLiveMap*)   * (EShLangCount + 1));
-        memset(intermediates, 0, sizeof(TIntermediate*) * (EShLangCount + 1));
-        profile = ENoProfile;
-        version = 0;
-        autoPushConstantMaxSize = 128;
-        autoPushConstantBlockPacking = ElpStd430;
-    }
-    virtual ~TGlslIoMapper() {
-        for (size_t stage = 0; stage < EShLangCount; stage++) {
-            if (inVarMaps[stage] != nullptr) {
-                delete inVarMaps[stage];
-                inVarMaps[stage] = nullptr;
-            }
-            if (outVarMaps[stage] != nullptr) {
-                delete outVarMaps[stage];
-                outVarMaps[stage] = nullptr;
-            }
-            if (uniformVarMap[stage] != nullptr) {
-                delete uniformVarMap[stage];
-                uniformVarMap[stage] = nullptr;
-            }
-            if (intermediates[stage] != nullptr)
-                intermediates[stage] = nullptr;
-        }
-    }
+    TGlslIoMapper();
+    virtual ~TGlslIoMapper();
     // If set, the uniform block with the given name will be changed to be backed by
     // push_constant if it's size is <= maxSize
-    void setAutoPushConstantBlock(const char* name, unsigned int maxSize, TLayoutPacking packing) {
+    bool setAutoPushConstantBlock(const char* name, unsigned int maxSize, TLayoutPacking packing) override {
         autoPushConstantBlockName = name;
         autoPushConstantMaxSize = maxSize;
         autoPushConstantBlockPacking = packing;
+        return true;
     }
     // grow the reflection stage by stage
     bool addStage(EShLanguage, TIntermediate&, TInfoSink&, TIoMapResolver*) override;
     bool doMap(TIoMapResolver*, TInfoSink&) override;
-    TVarLiveMap *inVarMaps[EShLangCount], *outVarMaps[EShLangCount],
-                *uniformVarMap[EShLangCount];
     TIntermediate* intermediates[EShLangCount];
     bool hadError = false;
     EProfile profile;
@@ -352,6 +214,8 @@
     TString autoPushConstantBlockName;
     unsigned int autoPushConstantMaxSize;
     TLayoutPacking autoPushConstantBlockPacking;
+    TVarLiveMap *inVarMaps[EShLangCount], *outVarMaps[EShLangCount],
+                *uniformVarMap[EShLangCount];
 };
 
 } // end namespace glslang
diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp
index d69300b..584cc8a 100644
--- a/glslang/MachineIndependent/linkValidate.cpp
+++ b/glslang/MachineIndependent/linkValidate.cpp
@@ -46,9 +46,11 @@
 // even if no merging was done (i.e., the stage was only one compilation unit).
 //
 
+#include "glslang/Public/ShaderLang.h"
 #include "localintermediate.h"
 #include "../Include/InfoSink.h"
 #include "SymbolTable.h"
+#include "LiveTraverser.h"
 
 namespace glslang {
 
@@ -58,10 +60,12 @@
 void TIntermediate::error(TInfoSink& infoSink, const char* message, EShLanguage unitStage)
 {
     infoSink.info.prefix(EPrefixError);
-    if (unitStage < EShLangCount)
-        infoSink.info << "Linking " << StageName(getStage()) << " and " << StageName(unitStage) << " stages: " << message << "\n";
-    else
+    if (unitStage == EShLangCount)
         infoSink.info << "Linking " << StageName(language) << " stage: " << message << "\n";
+    else if (language == EShLangCount)
+        infoSink.info << "Linking " << StageName(unitStage) << " stage: " << message << "\n";
+    else
+        infoSink.info << "Linking " << StageName(language) << " and " << StageName(unitStage) << " stages: " << message << "\n";
 
     ++numErrors;
 }
@@ -70,10 +74,12 @@
 void TIntermediate::warn(TInfoSink& infoSink, const char* message, EShLanguage unitStage)
 {
     infoSink.info.prefix(EPrefixWarning);
-    if (unitStage < EShLangCount)
-        infoSink.info << "Linking " << StageName(language) << " and " << StageName(unitStage) << " stages: " << message << "\n";
-    else
+    if (unitStage == EShLangCount)
         infoSink.info << "Linking " << StageName(language) << " stage: " << message << "\n";
+    else if (language == EShLangCount)
+        infoSink.info << "Linking " << StageName(unitStage) << " stage: " << message << "\n";
+    else
+        infoSink.info << "Linking " << StageName(language) << " and " << StageName(unitStage) << " stages: " << message << "\n";
 }
 
 // TODO: 4.4 offset/align:  "Two blocks linked together in the same program with the same block
@@ -113,6 +119,30 @@
     mergeLinkerObjects(infoSink, linkerObjects, unitLinkerObjects, unit.getStage());
 }
 
+static inline bool isSameInterface(TIntermSymbol* symbol, TIntermSymbol* unitSymbol) {
+    EShLanguage stage = symbol->getStage();
+    EShLanguage unitStage = unitSymbol->getStage();
+    return // 1) same stage and same shader interface
+        (stage == unitStage && symbol->getType().getShaderInterface() == unitSymbol->getType().getShaderInterface()) ||
+        // 2) accross stages and both are uniform or buffer
+        (symbol->getQualifier().storage == EvqUniform  && unitSymbol->getQualifier().storage == EvqUniform) ||
+        (symbol->getQualifier().storage == EvqBuffer   && unitSymbol->getQualifier().storage == EvqBuffer) ||
+        // 3) in/out matched across stage boundary
+        (stage < unitStage && symbol->getQualifier().storage == EvqVaryingOut  && unitSymbol->getQualifier().storage == EvqVaryingIn) ||
+        (unitStage < stage && symbol->getQualifier().storage == EvqVaryingIn && unitSymbol->getQualifier().storage == EvqVaryingOut);
+}
+
+static bool isSameSymbol(TIntermSymbol* symbol1, TIntermSymbol* symbol2) {
+    // If they are both blocks in the same shader interface,
+    // match by the block-name, not the identifier name.
+    if (symbol1->getType().getBasicType() == EbtBlock && symbol2->getType().getBasicType() == EbtBlock) {
+        if (isSameInterface(symbol1, symbol2)) {
+            return symbol1->getType().getTypeName() == symbol2->getType().getTypeName();
+        }
+    } else if (symbol1->getName() == symbol2->getName())
+        return true;
+    return false;
+}
 //
 // do error checking on the shader boundary in / out vars
 //
@@ -137,7 +167,133 @@
     // do matching and error checking
     mergeLinkerObjects(infoSink, linkerObjects, unitLinkerObjects, unit.getStage());
 
-    // TODO: final check; make sure that any statically used `in` have matching `out` written to
+    // Check that all of our inputs have matching outputs from the previous stage.
+    // Only do this for Vulkan, since GL_ARB_separate_shader_objects allows for
+    // the in/out to not match
+    if (spvVersion.vulkan > 0) {
+        for (auto& nextStageInterm : unitLinkerObjects) {
+            auto* nextStageSymbol = nextStageInterm->getAsSymbolNode();
+            bool found = false;
+            for (auto& curStageInterm : linkerObjects) {
+                if (isSameSymbol(curStageInterm->getAsSymbolNode(), nextStageSymbol)) {
+                    found = true;
+                    break;
+                }
+            }
+            if (!found) {
+                TString errmsg;
+                errmsg.append("Input '");
+                if (nextStageSymbol->getType().getBasicType() == EbtBlock)
+                    errmsg.append(nextStageSymbol->getType().getTypeName());
+                else
+                    errmsg.append(nextStageSymbol->getName());
+                errmsg.append("' in ").append(StageName(unit.getStage()));
+                errmsg.append(" shader has no corresponding output in ").append(StageName(getStage())).append(" shader.");
+                error(infoSink, errmsg.c_str(), unit.getStage());
+            }
+        }
+    }
+}
+
+void TIntermediate::optimizeStageIO(TInfoSink&, TIntermediate& unit)
+{
+    // don't do any input/output demotion on compute, raytracing, or task/mesh stages
+    // TODO: support task/mesh
+    if (getStage() > EShLangFragment || unit.getStage() > EShLangFragment) {
+        return;
+    }
+
+    class TIOTraverser : public TLiveTraverser {
+    public:
+        TIOTraverser(TIntermediate& i, bool all, TIntermSequence& sequence, TStorageQualifier storage)
+            : TLiveTraverser(i, all, true, false, false), sequence(sequence), storage(storage)
+        {
+        }
+
+        virtual void visitSymbol(TIntermSymbol* symbol)
+        {
+            if (symbol->getQualifier().storage == storage) {
+                sequence.push_back(symbol);
+            }
+        }
+
+    private:
+        TIntermSequence& sequence;
+        TStorageQualifier storage;
+    };
+
+    // live symbols only
+    TIntermSequence unitLiveInputs;
+
+    TIOTraverser unitTraverser(unit, false, unitLiveInputs, EvqVaryingIn);
+    unitTraverser.pushFunction(unit.getEntryPointMangledName().c_str());
+    while (! unitTraverser.destinations.empty()) {
+        TIntermNode* destination = unitTraverser.destinations.back();
+        unitTraverser.destinations.pop_back();
+        destination->traverse(&unitTraverser);
+    }
+
+    TIntermSequence allOutputs;
+    TIntermSequence unitAllInputs;
+
+    TIOTraverser allTraverser(*this, true, allOutputs, EvqVaryingOut);
+    getTreeRoot()->traverse(&allTraverser);
+
+    TIOTraverser unitAllTraverser(unit, true, unitAllInputs, EvqVaryingIn);
+    unit.getTreeRoot()->traverse(&unitAllTraverser);
+
+    // find outputs not consumed by the next stage
+    std::for_each(allOutputs.begin(), allOutputs.end(), [&unitLiveInputs, &unitAllInputs](TIntermNode* output) {
+        // don't do anything to builtins
+        if (output->getAsSymbolNode()->getAccessName().compare(0, 3, "gl_") == 0)
+            return;
+
+        // don't demote block outputs (for now)
+        if (output->getAsSymbolNode()->getBasicType() == EbtBlock)
+            return;
+
+        // check if the (loose) output has a matching loose input
+        auto isMatchingInput = [output](TIntermNode* input) {
+            return output->getAsSymbolNode()->getAccessName() == input->getAsSymbolNode()->getAccessName();
+        };
+
+        // check if the (loose) output has a matching block member input
+        auto isMatchingInputBlockMember = [output](TIntermNode* input) {
+            // ignore loose inputs
+            if (input->getAsSymbolNode()->getBasicType() != EbtBlock)
+                return false;
+
+            // don't demote loose outputs with matching input block members
+            auto isMatchingBlockMember = [output](TTypeLoc type) {
+                return type.type->getFieldName() == output->getAsSymbolNode()->getName();
+            };
+            const TTypeList* members = input->getAsSymbolNode()->getType().getStruct();
+            return std::any_of(members->begin(), members->end(), isMatchingBlockMember);
+        };
+
+        // determine if the input/output pair should be demoted
+        // do the faster (and more likely) loose-loose check first
+        if (std::none_of(unitLiveInputs.begin(), unitLiveInputs.end(), isMatchingInput) && 
+            std::none_of(unitAllInputs.begin(), unitAllInputs.end(), isMatchingInputBlockMember)) {
+            // demote any input matching the output
+            auto demoteMatchingInputs = [output](TIntermNode* input) {
+                if (output->getAsSymbolNode()->getAccessName() == input->getAsSymbolNode()->getAccessName()) {
+                    // demote input to a plain variable
+                    TIntermSymbol* symbol = input->getAsSymbolNode();
+                    symbol->getQualifier().storage = EvqGlobal;
+                    symbol->getQualifier().clearInterstage();
+                    symbol->getQualifier().clearLayout();
+                }
+            };
+
+            // demote all matching outputs to a plain variable
+            TIntermSymbol* symbol = output->getAsSymbolNode();
+            symbol->getQualifier().storage = EvqGlobal;
+            symbol->getQualifier().clearInterstage();
+            symbol->getQualifier().clearLayout();
+            std::for_each(unitAllInputs.begin(), unitAllInputs.end(), demoteMatchingInputs);
+        }
+    });
 }
 
 void TIntermediate::mergeCallGraphs(TInfoSink& infoSink, TIntermediate& unit)
@@ -511,17 +667,6 @@
     globals.insert(globals.end() - 1, unitGlobals.begin(), unitGlobals.end() - 1);
 }
 
-static inline bool isSameInterface(TIntermSymbol* symbol, EShLanguage stage, TIntermSymbol* unitSymbol, EShLanguage unitStage) {
-    return // 1) same stage and same shader interface
-        (stage == unitStage && symbol->getType().getShaderInterface() == unitSymbol->getType().getShaderInterface()) ||
-        // 2) accross stages and both are uniform or buffer
-        (symbol->getQualifier().storage == EvqUniform  && unitSymbol->getQualifier().storage == EvqUniform) ||
-        (symbol->getQualifier().storage == EvqBuffer   && unitSymbol->getQualifier().storage == EvqBuffer) ||
-        // 3) in/out matched across stage boundary
-        (stage < unitStage && symbol->getQualifier().storage == EvqVaryingOut  && unitSymbol->getQualifier().storage == EvqVaryingIn) ||
-        (unitStage < stage && symbol->getQualifier().storage == EvqVaryingIn && unitSymbol->getQualifier().storage == EvqVaryingOut);
-}
-
 //
 // Global Unfiform block stores any default uniforms (i.e. uniforms without a block)
 // If two linked stages declare the same member, they are meant to be the same uniform
@@ -611,10 +756,10 @@
                 // don't need as many checks as when merging symbols, since
                 // initializers and most qualifiers are stripped when the member is moved into the block
                 if ((*memberType) != (*unitMemberType)) {
-                    error(infoSink, "Types must match:");
+                    error(infoSink, "Types must match:", unitBlock->getStage());
                     infoSink.info << "    " << memberType->getFieldName() << ": ";
-                    infoSink.info << "\"" << memberType->getCompleteString() << "\" versus ";
-                    infoSink.info << "\"" << unitMemberType->getCompleteString() << "\"\n";
+                    infoSink.info << "\"" << memberType->getCompleteString() << "\" in stage " << StageName(block->getStage()) << " versus ";
+                    infoSink.info << "\"" << unitMemberType->getCompleteString() << "\" in stage " << StageName(unitBlock->getStage()) << "\n";
                 }
 
                 memberIndexUpdates[i] = j;
@@ -707,24 +852,18 @@
     // Error check and merge the linker objects (duplicates should not be created)
     std::size_t initialNumLinkerObjects = linkerObjects.size();
     for (unsigned int unitLinkObj = 0; unitLinkObj < unitLinkerObjects.size(); ++unitLinkObj) {
+        TIntermSymbol* unitSymbol = unitLinkerObjects[unitLinkObj]->getAsSymbolNode();
         bool merge = true;
+
+        // Don't merge inputs backwards into previous stages
+        if (getStage() != unitStage && unitSymbol->getQualifier().storage == EvqVaryingIn)
+            merge = false;
+
         for (std::size_t linkObj = 0; linkObj < initialNumLinkerObjects; ++linkObj) {
             TIntermSymbol* symbol = linkerObjects[linkObj]->getAsSymbolNode();
-            TIntermSymbol* unitSymbol = unitLinkerObjects[unitLinkObj]->getAsSymbolNode();
             assert(symbol && unitSymbol);
 
-            bool isSameSymbol = false;
-            // If they are both blocks in the same shader interface,
-            // match by the block-name, not the identifier name.
-            if (symbol->getType().getBasicType() == EbtBlock && unitSymbol->getType().getBasicType() == EbtBlock) {
-                if (isSameInterface(symbol, getStage(), unitSymbol, unitStage)) {
-                    isSameSymbol = symbol->getType().getTypeName() == unitSymbol->getType().getTypeName();
-                }
-            }
-            else if (symbol->getName() == unitSymbol->getName())
-                isSameSymbol = true;
-
-            if (isSameSymbol) {
+            if (isSameSymbol(symbol, unitSymbol)) {
                 // filter out copy
                 merge = false;
 
@@ -761,7 +900,7 @@
                 mergeImplicitArraySizes(symbol->getWritableType(), unitSymbol->getType());
 
                 // Check for consistent types/qualification/initializers etc.
-                mergeErrorCheck(infoSink, *symbol, *unitSymbol, unitStage);
+                mergeErrorCheck(infoSink, *symbol, *unitSymbol);
             }
             // If different symbols, verify they arn't push_constant since there can only be one per stage
             else if (symbol->getQualifier().isPushConstant() && unitSymbol->getQualifier().isPushConstant() && getStage() == unitStage)
@@ -803,7 +942,7 @@
                         }
                     };
 
-                    if (isSameInterface(symbol, getStage(), unitSymbol, unitStage)) {
+                    if (isSameInterface(symbol, unitSymbol)) {
                         checkName(symbol->getName());
 
                         // check members of other anonymous blocks
@@ -847,9 +986,11 @@
 //
 // This function only does one of intra- or cross-stage matching per call.
 //
-void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& symbol, const TIntermSymbol& unitSymbol, EShLanguage unitStage)
+void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& symbol, const TIntermSymbol& unitSymbol)
 {
-    bool crossStage = getStage() != unitStage;
+    EShLanguage stage = symbol.getStage();
+    EShLanguage unitStage = unitSymbol.getStage();
+    bool crossStage = stage != unitStage;
     bool writeTypeComparison = false;
     bool errorReported = false;
     bool printQualifiers = false;
@@ -861,10 +1002,10 @@
         // but, we make an exception if one is an implicit array and the other is sized
         // or if the array sizes differ because of the extra array dimension on some in/out boundaries
         bool arraysMatch = false;
-        if (isIoResizeArray(symbol.getType(), getStage()) || isIoResizeArray(unitSymbol.getType(), unitStage)) {
+        if (isIoResizeArray(symbol.getType(), stage) || isIoResizeArray(unitSymbol.getType(), unitStage)) {
             // if the arrays have an extra dimension because of the stage.
             // compare dimensions while ignoring the outer dimension
-            unsigned int firstDim = isIoResizeArray(symbol.getType(), getStage()) ? 1 : 0;
+            unsigned int firstDim = isIoResizeArray(symbol.getType(), stage) ? 1 : 0;
             unsigned int numDim = symbol.getArraySizes()
                 ? symbol.getArraySizes()->getNumDims() : 0;
             unsigned int unitFirstDim = isIoResizeArray(unitSymbol.getType(), unitStage) ? 1 : 0;
@@ -893,7 +1034,7 @@
             if (lpidx >= 0 && rpidx >= 0) {
                 error(infoSink, "Member names and types must match:", unitStage);
                 infoSink.info << "    Block: " << symbol.getType().getTypeName() << "\n";
-                infoSink.info << "        " << StageName(getStage()) << " stage: \""
+                infoSink.info << "        " << StageName(stage) << " stage: \""
                               << (*symbol.getType().getStruct())[lpidx].type->getCompleteString(true, false, false, true,
                                       (*symbol.getType().getStruct())[lpidx].type->getFieldName()) << "\"\n";
                 infoSink.info << "        " << StageName(unitStage) << " stage: \""
@@ -901,20 +1042,20 @@
                                       (*unitSymbol.getType().getStruct())[rpidx].type->getFieldName()) << "\"\n";
                 errorReported = true;
             } else if (lpidx >= 0 && rpidx == -1) {
-                  TString errmsg = StageName(getStage());
+                  TString errmsg = StageName(stage);
                   errmsg.append(" block member has no corresponding member in ").append(StageName(unitStage)).append(" block:");
                   error(infoSink, errmsg.c_str(), unitStage);
-                  infoSink.info << "    " << StageName(getStage()) << " stage: Block: " << symbol.getType().getTypeName() << ", Member: "
+                  infoSink.info << "    " << StageName(stage) << " stage: Block: " << symbol.getType().getTypeName() << ", Member: "
                     << (*symbol.getType().getStruct())[lpidx].type->getFieldName() << "\n";
                   infoSink.info << "    " << StageName(unitStage) << " stage: Block: " << unitSymbol.getType().getTypeName() << ", Member: n/a \n";
                   errorReported = true;
             } else if (lpidx == -1 && rpidx >= 0) {
                   TString errmsg = StageName(unitStage);
-                  errmsg.append(" block member has no corresponding member in ").append(StageName(getStage())).append(" block:");
+                  errmsg.append(" block member has no corresponding member in ").append(StageName(stage)).append(" block:");
                   error(infoSink, errmsg.c_str(), unitStage);
                   infoSink.info << "    " << StageName(unitStage) << " stage: Block: " << unitSymbol.getType().getTypeName() << ", Member: "
                     << (*unitSymbol.getType().getStruct())[rpidx].type->getFieldName() << "\n";
-                  infoSink.info << "    " << StageName(getStage()) << " stage: Block: " << symbol.getType().getTypeName() << ", Member: n/a \n";
+                  infoSink.info << "    " << StageName(stage) << " stage: Block: " << symbol.getType().getTypeName() << ", Member: n/a \n";
                   errorReported = true;
             } else {
                   error(infoSink, "Types must match:", unitStage);
@@ -971,7 +1112,7 @@
                 layoutQualifierError = true;
             }
             if (layoutQualifierError) {
-                infoSink.info << "    " << StageName(getStage()) << " stage: Block: " << symbol.getType().getTypeName() << ", Member: "
+                infoSink.info << "    " << StageName(stage) << " stage: Block: " << symbol.getType().getTypeName() << ", Member: "
                               << (*symbol.getType().getStruct())[li].type->getFieldName() << " \""
                               << (*symbol.getType().getStruct())[li].type->getCompleteString(true, true, false, false) << "\"\n";
                 infoSink.info << "    " << StageName(unitStage) << " stage: Block: " << unitSymbol.getType().getTypeName() << ", Member: "
@@ -1152,24 +1293,24 @@
         if (symbol.getType().getBasicType() == EbtBlock && unitSymbol.getType().getBasicType() == EbtBlock &&
             symbol.getType().getStruct() && unitSymbol.getType().getStruct()) {
           if (printType) {
-            infoSink.info << "    " << StageName(getStage()) << " stage: \"" << symbol.getType().getCompleteString(true, printQualifiers, printPrecision,
+            infoSink.info << "    " << StageName(stage) << " stage: \"" << symbol.getType().getCompleteString(true, printQualifiers, printPrecision,
                                                     printType, symbol.getName(), symbol.getType().getTypeName()) << "\"\n";
             infoSink.info << "    " << StageName(unitStage) << " stage: \"" << unitSymbol.getType().getCompleteString(true, printQualifiers, printPrecision,
                                                     printType, unitSymbol.getName(), unitSymbol.getType().getTypeName()) << "\"\n";
           } else {
-            infoSink.info << "    " << StageName(getStage()) << " stage: Block: " << symbol.getType().getTypeName() << " Instance: " << symbol.getName()
+            infoSink.info << "    " << StageName(stage) << " stage: Block: " << symbol.getType().getTypeName() << " Instance: " << symbol.getName()
               << ": \"" << symbol.getType().getCompleteString(true, printQualifiers, printPrecision, printType) << "\"\n";
             infoSink.info << "    " << StageName(unitStage) << " stage: Block: " << unitSymbol.getType().getTypeName() << " Instance: " << unitSymbol.getName()
               << ": \"" << unitSymbol.getType().getCompleteString(true, printQualifiers, printPrecision, printType) << "\"\n";
           }
         } else {
           if (printType) {
-            infoSink.info << "    " << StageName(getStage()) << " stage: \""
+            infoSink.info << "    " << StageName(stage) << " stage: \""
               << symbol.getType().getCompleteString(true, printQualifiers, printPrecision, printType, symbol.getName()) << "\"\n";
             infoSink.info << "    " << StageName(unitStage) << " stage: \""
               << unitSymbol.getType().getCompleteString(true, printQualifiers, printPrecision, printType, unitSymbol.getName()) << "\"\n";
           } else {
-            infoSink.info << "    " << StageName(getStage()) << " stage: " << symbol.getName() << " \""
+            infoSink.info << "    " << StageName(stage) << " stage: " << symbol.getName() << " \""
               << symbol.getType().getCompleteString(true, printQualifiers, printPrecision, printType) << "\"\n";
             infoSink.info << "    " << StageName(unitStage) << " stage: " << unitSymbol.getName() << " \""
               << unitSymbol.getType().getCompleteString(true, printQualifiers, printPrecision, printType) << "\"\n";
@@ -1350,7 +1491,7 @@
             error(infoSink, "At least one shader must specify a layout(max_vertices = value)");
         if (primitives == TQualifier::layoutNotSet)
             error(infoSink, "At least one shader must specify a layout(max_primitives = value)");
-        // fall through
+        [[fallthrough]];
     case EShLangTask:
         if (numTaskNVBlocks > 1)
             error(infoSink, "Only one taskNV interface block is allowed per shader");
@@ -1689,7 +1830,7 @@
         // First range:
         TRange locationRange(qualifier.layoutLocation, qualifier.layoutLocation);
         TRange componentRange(0, 3);
-        TIoRange range(locationRange, componentRange, type.getBasicType(), 0);
+        TIoRange range(locationRange, componentRange, type.getBasicType(), 0, qualifier.centroid, qualifier.smooth, qualifier.flat, qualifier.sample, qualifier.patch);
 
         // check for collisions
         collision = checkLocationRange(set, range, type, typeCollision);
@@ -1699,7 +1840,7 @@
             // Second range:
             TRange locationRange2(qualifier.layoutLocation + 1, qualifier.layoutLocation + 1);
             TRange componentRange2(0, 1);
-            TIoRange range2(locationRange2, componentRange2, type.getBasicType(), 0);
+            TIoRange range2(locationRange2, componentRange2, type.getBasicType(), 0, qualifier.centroid, qualifier.smooth, qualifier.flat, qualifier.sample, qualifier.patch);
 
             // check for collisions
             collision = checkLocationRange(set, range2, type, typeCollision);
@@ -1725,7 +1866,7 @@
     TBasicType basicTy = type.getBasicType();
     if (basicTy == EbtSampler && type.getSampler().isAttachmentEXT())
         basicTy = type.getSampler().type;
-    TIoRange range(locationRange, componentRange, basicTy, qualifier.hasIndex() ? qualifier.getIndex() : 0);
+    TIoRange range(locationRange, componentRange, basicTy, qualifier.hasIndex() ? qualifier.getIndex() : 0, qualifier.centroid, qualifier.smooth, qualifier.flat, qualifier.sample, qualifier.patch);
 
     // check for collisions, except for vertex inputs on desktop targeting OpenGL
     if (! (!isEsProfile() && language == EShLangVertex && qualifier.isPipeInput()) || spvVersion.vulkan > 0)
@@ -1737,6 +1878,24 @@
     return collision;
 }
 
+// Check that two types can be stored in different components in the same location.
+// They must be the same type, except signed/unsigned integers are considered compatible.
+static bool checkCompatibleTypes(TBasicType t1, TBasicType t2) {
+    if (t1 != t2) {
+        if ((t1 == EbtInt8 && t2 == EbtUint8) ||
+            (t2 == EbtInt8 && t1 == EbtUint8) ||
+            (t1 == EbtInt16 && t2 == EbtUint16) ||
+            (t2 == EbtInt16 && t1 == EbtUint16)||
+            (t1 == EbtInt && t2 == EbtUint) ||
+            (t2 == EbtInt && t1 == EbtUint)||
+            (t1 == EbtInt64 && t2 == EbtUint64) ||
+            (t2 == EbtInt64 && t1 == EbtUint64)) {
+            return true;
+        }
+    }
+    return t1 == t2;
+}
+
 // Compare a new (the passed in) 'range' against the existing set, and see
 // if there are any collisions.
 //
@@ -1748,7 +1907,13 @@
         if (range.overlap(usedIo[set][r])) {
             // there is a collision; pick one
             return std::max(range.location.start, usedIo[set][r].location.start);
-        } else if (range.location.overlap(usedIo[set][r].location) && type.getBasicType() != usedIo[set][r].basicType) {
+        } else if (range.location.overlap(usedIo[set][r].location) &&
+                   (!checkCompatibleTypes(type.getBasicType(), usedIo[set][r].basicType) ||
+                    type.getQualifier().centroid != usedIo[set][r].centroid ||
+                    type.getQualifier().smooth != usedIo[set][r].smooth ||
+                    type.getQualifier().flat != usedIo[set][r].flat ||
+                    type.getQualifier().sample != usedIo[set][r].sample ||
+                    type.getQualifier().patch != usedIo[set][r].patch)) {
             // aliased-type mismatch
             typeCollision = true;
             return std::max(range.location.start, usedIo[set][r].location.start);
@@ -2217,9 +2382,9 @@
 }
 
 // To aid the basic HLSL rule about crossing vec4 boundaries.
-bool TIntermediate::improperStraddle(const TType& type, int size, int offset)
+bool TIntermediate::improperStraddle(const TType& type, int size, int offset, bool vectorLike)
 {
-    if (! type.isVector() || type.isArray())
+    if (! vectorLike || type.isArray())
         return false;
 
     return size <= 16 ? offset / 16 != (offset + size - 1) / 16
diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h
index 2f0e65c..2fae237 100644
--- a/glslang/MachineIndependent/localintermediate.h
+++ b/glslang/MachineIndependent/localintermediate.h
@@ -43,11 +43,12 @@
 #include "../Public/ShaderLang.h"
 #include "Versions.h"
 
+#include <algorithm>
+#include <array>
+#include <functional>
+#include <set>
 #include <string>
 #include <vector>
-#include <algorithm>
-#include <set>
-#include <array>
 
 class TInfoSink;
 
@@ -98,7 +99,8 @@
 // A "call" is a pair: <caller, callee>.
 // There can be duplicates. General assumption is the list is small.
 struct TCall {
-    TCall(const TString& pCaller, const TString& pCallee) : caller(pCaller), callee(pCallee) { }
+    TCall(const TString& pCaller, const TString& pCallee)
+        : caller(pCaller), callee(pCallee), visited(false), currentPath(false), errorGiven(false) { }
     TString caller;
     TString callee;
     bool visited;
@@ -122,8 +124,10 @@
 // within the same location range, component range, and index value.  Locations don't alias unless
 // all other dimensions of their range overlap.
 struct TIoRange {
-    TIoRange(TRange location, TRange component, TBasicType basicType, int index)
-        : location(location), component(component), basicType(basicType), index(index) { }
+    TIoRange(TRange location, TRange component, TBasicType basicType, int index, bool centroid, bool smooth, bool flat, bool sample, bool patch)
+        : location(location), component(component), basicType(basicType), index(index), centroid(centroid), smooth(smooth), flat(flat), sample(sample), patch(patch)
+    {
+    }
     bool overlap(const TIoRange& rhs) const
     {
         return location.overlap(rhs.location) && component.overlap(rhs.component) && index == rhs.index;
@@ -132,6 +136,11 @@
     TRange component;
     TBasicType basicType;
     int index;
+    bool centroid;
+    bool smooth;
+    bool flat;
+    bool sample;
+    bool patch;
 };
 
 // An offset range is a 2-D rectangle; the set of (binding, offset) pairs all lying
@@ -344,10 +353,12 @@
         needToLegalize(false),
         binaryDoubleOutput(false),
         subgroupUniformControlFlow(false),
+        maximallyReconverges(false),
         usePhysicalStorageBuffer(false),
         spirvRequirement(nullptr),
         spirvExecutionMode(nullptr),
-        uniformLocationBase(0)
+        uniformLocationBase(0),
+        quadDerivMode(false), reqFullQuadsMode(false)
     {
         localSize[0] = 1;
         localSize[1] = 1;
@@ -428,6 +439,9 @@
         case EShTargetVulkan_1_3:
             processes.addProcess("target-env vulkan1.3");
             break;
+        case EShTargetVulkan_1_4:
+            processes.addProcess("target-env vulkan1.4");
+            break;
         default:
             processes.addProcess("target-env vulkanUnknown");
             break;
@@ -527,6 +541,8 @@
     TOperator mapTypeToConstructorOp(const TType&) const;
     TIntermAggregate* growAggregate(TIntermNode* left, TIntermNode* right);
     TIntermAggregate* growAggregate(TIntermNode* left, TIntermNode* right, const TSourceLoc&);
+    TIntermAggregate* mergeAggregate(TIntermNode* left, TIntermNode* right);
+    TIntermAggregate* mergeAggregate(TIntermNode* left, TIntermNode* right, const TSourceLoc&);
     TIntermAggregate* makeAggregate(TIntermNode* node);
     TIntermAggregate* makeAggregate(TIntermNode* node, const TSourceLoc&);
     TIntermAggregate* makeAggregate(const TSourceLoc&);
@@ -572,7 +588,8 @@
     TIntermTyped* foldSwizzle(TIntermTyped* node, TSwizzleSelectors<TVectorSelector>& fields, const TSourceLoc&);
 
     // Tree ops
-    static const TIntermTyped* findLValueBase(const TIntermTyped*, bool swizzleOkay , bool BufferReferenceOk = false);
+    static const TIntermTyped* traverseLValueBase(const TIntermTyped*, bool swizzleOkay, bool bufferReferenceOk = false,
+                                                  std::function<bool(const TIntermNode&)> proc = {});
 
     // Linkage related
     void addSymbolLinkageNodes(TIntermAggregate*& linkage, EShLanguage, TSymbolTable&);
@@ -718,6 +735,11 @@
         usePhysicalStorageBuffer = true;
     }
     bool usingPhysicalStorageBuffer() const { return usePhysicalStorageBuffer; }
+    void setReplicatedComposites()
+    {
+        useReplicatedComposites = true;
+    }
+    bool usingReplicatedComposites() const { return useReplicatedComposites; }
     void setUseVariablePointers()
     {
         useVariablePointers = true;
@@ -853,6 +875,10 @@
 
     void setXfbMode() { xfbMode = true; }
     bool getXfbMode() const { return xfbMode; }
+    void setQuadDerivMode(bool mode = true) { quadDerivMode = mode; }
+    bool getQuadDerivMode() const { return quadDerivMode; }
+    void setReqFullQuadsMode(bool mode = true) { reqFullQuadsMode = mode; }
+    bool getReqFullQuadsMode() const { return reqFullQuadsMode; }
     void setMultiStream() { multiStream = true; }
     bool isMultiStream() const { return multiStream; }
     bool setOutputPrimitive(TLayoutGeometry p)
@@ -959,6 +985,9 @@
     void setSubgroupUniformControlFlow() { subgroupUniformControlFlow = true; }
     bool getSubgroupUniformControlFlow() const { return subgroupUniformControlFlow; }
 
+    void setMaximallyReconverges() { maximallyReconverges = true; }
+    bool getMaximallyReconverges() const { return maximallyReconverges; }
+
     // GL_EXT_spirv_intrinsics
     void insertSpirvRequirement(const TSpirvRequirement* spirvReq);
     bool hasSpirvRequirement() const { return spirvRequirement != nullptr; }
@@ -1025,6 +1054,7 @@
     void mergeGlobalUniformBlocks(TInfoSink& infoSink, TIntermediate& unit, bool mergeExistingOnly);
     void mergeUniformObjects(TInfoSink& infoSink, TIntermediate& unit);
     void checkStageIO(TInfoSink&, TIntermediate&);
+    void optimizeStageIO(TInfoSink&, TIntermediate&);
 
     bool buildConvertOp(TBasicType dst, TBasicType src, TOperator& convertOp) const;
     TIntermTyped* createConversion(TBasicType convertTo, TIntermTyped* node) const;
@@ -1037,6 +1067,7 @@
     int checkLocationRT(int set, int location);
     int addUsedOffsets(int binding, int offset, int numOffsets);
     bool addUsedConstantId(int id);
+    GLSLANG_EXPORT_FOR_TESTS
     static int computeTypeLocationSize(const TType&, EShLanguage);
     static int computeTypeUniformLocationSize(const TType&);
 
@@ -1044,7 +1075,7 @@
     static int getBaseAlignment(const TType&, int& size, int& stride, TLayoutPacking layoutPacking, bool rowMajor);
     static int getScalarAlignment(const TType&, int& size, int& stride, bool rowMajor);
     static int getMemberAlignment(const TType&, int& size, int& stride, TLayoutPacking layoutPacking, bool rowMajor);
-    static bool improperStraddle(const TType& type, int size, int offset);
+    static bool improperStraddle(const TType& type, int size, int offset, bool vectorLike);
     static void updateOffset(const TType& parentType, const TType& memberType, int& offset, int& memberSize);
     static int getOffset(const TType& type, int index);
     static int getBlockSize(const TType& blockType);
@@ -1092,7 +1123,7 @@
         { on ? numericFeatures.insert(f) : numericFeatures.erase(f); }
 
 protected:
-    TIntermSymbol* addSymbol(long long Id, const TString&, const TType&, const TConstUnionArray&, TIntermTyped* subtree, const TSourceLoc&);
+    TIntermSymbol* addSymbol(long long Id, const TString&, const TString&, const TType&, const TConstUnionArray&, TIntermTyped* subtree, const TSourceLoc&);
     void error(TInfoSink& infoSink, const char*, EShLanguage unitStage = EShLangCount);
     void warn(TInfoSink& infoSink, const char*, EShLanguage unitStage = EShLangCount);
     void mergeCallGraphs(TInfoSink&, TIntermediate&);
@@ -1104,7 +1135,7 @@
     void mergeLinkerObjects(TInfoSink&, TIntermSequence& linkerObjects, const TIntermSequence& unitLinkerObjects, EShLanguage);
     void mergeBlockDefinitions(TInfoSink&, TIntermSymbol* block, TIntermSymbol* unitBlock, TIntermediate* unitRoot);
     void mergeImplicitArraySizes(TType&, const TType&);
-    void mergeErrorCheck(TInfoSink&, const TIntermSymbol&, const TIntermSymbol&, EShLanguage);
+    void mergeErrorCheck(TInfoSink&, const TIntermSymbol&, const TIntermSymbol&);
     void checkCallGraphCycles(TInfoSink&);
     void checkCallGraphBodies(TInfoSink&, bool keepUncalled);
     void inOutLocationCheck(TInfoSink&);
@@ -1222,7 +1253,9 @@
     bool needToLegalize;
     bool binaryDoubleOutput;
     bool subgroupUniformControlFlow;
+    bool maximallyReconverges;
     bool usePhysicalStorageBuffer;
+    bool useReplicatedComposites { false };
 
     TSpirvRequirement* spirvRequirement;
     TSpirvExecutionMode* spirvExecutionMode;
@@ -1230,12 +1263,14 @@
     std::map<TString, AstRefType> bindlessImageModeCaller;
     std::unordered_map<std::string, int> uniformLocationOverrides;
     int uniformLocationBase;
+    bool quadDerivMode;
+    bool reqFullQuadsMode;
     TNumericFeatures numericFeatures;
     std::unordered_map<std::string, TBlockStorageClass> blockBackingOverrides;
 
     std::unordered_set<int> usedConstantId; // specialization constant ids used
     std::vector<TOffsetRange> usedAtomics;  // sets of bindings used by atomic counters
-    std::vector<TIoRange> usedIo[4];        // sets of used locations, one for each of in, out, uniform, and buffers
+    std::vector<TIoRange> usedIo[5];        // sets of used locations, one for each of in, out, uniform, and buffers
     std::vector<TRange> usedIoRT[4];        // sets of used location, one for rayPayload/rayPayloadIN,
                                             // one for callableData/callableDataIn, one for hitObjectAttributeNV and
                                             // one for shaderrecordhitobjectNV
diff --git a/glslang/MachineIndependent/parseVersions.h b/glslang/MachineIndependent/parseVersions.h
index 63841c4..6b9bc04 100644
--- a/glslang/MachineIndependent/parseVersions.h
+++ b/glslang/MachineIndependent/parseVersions.h
@@ -83,6 +83,11 @@
         const char* featureDesc);
     virtual void ppRequireExtensions(const TSourceLoc&, int numExtensions, const char* const extensions[],
         const char* featureDesc);
+    template<typename Container>
+    constexpr void ppRequireExtensions(const TSourceLoc& loc, Container extensions, const char* featureDesc) {
+        ppRequireExtensions(loc, static_cast<int>(extensions.size()), extensions.data(), featureDesc);
+    }
+
     virtual TExtensionBehavior getExtensionBehavior(const char*);
     virtual bool extensionTurnedOn(const char* const extension);
     virtual bool extensionsTurnedOn(int numExtensions, const char* const extensions[]);
@@ -116,6 +121,7 @@
     virtual void fcoopmatCheckNV(const TSourceLoc&, const char* op, bool builtIn = false);
     virtual void intcoopmatCheckNV(const TSourceLoc&, const char *op, bool builtIn = false);
     virtual void coopmatCheck(const TSourceLoc&, const char* op, bool builtIn = false);
+    virtual void tensorLayoutViewCheck(const TSourceLoc&, const char* op, bool builtIn = false);
     bool relaxedErrors()    const { return (messages & EShMsgRelaxedErrors) != 0; }
     bool suppressWarnings() const { return (messages & EShMsgSuppressWarnings) != 0; }
     bool isForwardCompatible() const { return forwardCompatible; }
diff --git a/glslang/MachineIndependent/preprocessor/Pp.cpp b/glslang/MachineIndependent/preprocessor/Pp.cpp
index 16b9d24..5b44b13 100644
--- a/glslang/MachineIndependent/preprocessor/Pp.cpp
+++ b/glslang/MachineIndependent/preprocessor/Pp.cpp
@@ -241,6 +241,7 @@
 */
 int TPpContext::CPPelse(int matchelse, TPpToken* ppToken)
 {
+    inElseSkip = true;
     int depth = 0;
     int token = scanToken(ppToken);
 
@@ -297,7 +298,7 @@
                     elseSeen[elsetracker] = false;
                     --elsetracker;
                 }
-
+                inElseSkip = false;
                 return CPPif(ppToken);
             }
         } else if (nextAtom == PpAtomElse) {
@@ -311,7 +312,8 @@
                 parseContext.ppError(ppToken->loc, "#elif after #else", "#elif", "");
         }
     }
-
+    
+    inElseSkip = false;
     return token;
 }
 
@@ -374,7 +376,7 @@
     int op_div(int a, int b) { return a == INT_MIN && b == -1 ? 0 : a / b; }
     int op_mod(int a, int b) { return a == INT_MIN && b == -1 ? 0 : a % b; }
     int op_pos(int a) { return a; }
-    int op_neg(int a) { return -a; }
+    int op_neg(int a) { return a == INT_MIN ? INT_MIN : -a; }
     int op_cmpl(int a) { return ~a; }
     int op_not(int a) { return !a; }
 
@@ -973,7 +975,8 @@
             break;
         case PpAtomInclude:
             if(!parseContext.isReadingHLSL()) {
-                parseContext.ppRequireExtensions(ppToken->loc, 1, &E_GL_GOOGLE_include_directive, "#include");
+                const std::array exts = { E_GL_GOOGLE_include_directive, E_GL_ARB_shading_language_include };
+                parseContext.ppRequireExtensions(ppToken->loc, exts, "#include");
             }
             token = CPPinclude(ppToken);
             break;
diff --git a/glslang/MachineIndependent/preprocessor/PpContext.cpp b/glslang/MachineIndependent/preprocessor/PpContext.cpp
index 70f5119..f27204b 100644
--- a/glslang/MachineIndependent/preprocessor/PpContext.cpp
+++ b/glslang/MachineIndependent/preprocessor/PpContext.cpp
@@ -88,7 +88,8 @@
     preamble(nullptr), strings(nullptr), previous_token('\n'), parseContext(pc), includer(inclr), inComment(false),
     rootFileName(rootFileName),
     currentSourceFile(rootFileName),
-    disableEscapeSequences(false)
+    disableEscapeSequences(false),
+    inElseSkip(false)
 {
     ifdepth = 0;
     for (elsetracker = 0; elsetracker < maxIfNesting; elsetracker++)
diff --git a/glslang/MachineIndependent/preprocessor/PpContext.h b/glslang/MachineIndependent/preprocessor/PpContext.h
index 590eab6..3446f1e 100644
--- a/glslang/MachineIndependent/preprocessor/PpContext.h
+++ b/glslang/MachineIndependent/preprocessor/PpContext.h
@@ -86,11 +86,6 @@
 #include "../ParseHelper.h"
 #include "PpTokens.h"
 
-/* windows only pragma */
-#ifdef _MSC_VER
-    #pragma warning(disable : 4127)
-#endif
-
 namespace glslang {
 
 class TPpToken {
@@ -220,6 +215,7 @@
         virtual bool peekContinuedPasting(int) { return false; } // true when non-spaced tokens can paste
         virtual bool endOfReplacementList() { return false; } // true when at the end of a macro replacement list (RHS of #define)
         virtual bool isMacroInput() { return false; }
+        virtual bool isStringInput() { return false; }
 
         // Will be called when we start reading tokens from this instance
         virtual void notifyActivated() {}
@@ -360,7 +356,8 @@
     // Scanner data:
     int previous_token;
     TParseContextBase& parseContext;
-
+    std::vector<int> lastLineTokens;
+    std::vector<TSourceLoc> lastLineTokenLocs;
     // Get the next token from *stack* of input sources, popping input sources
     // that are out of tokens, down until an input source is found that has a token.
     // Return EndOfInput when there are no more tokens to be found by doing this.
@@ -374,7 +371,31 @@
                 break;
             popInput();
         }
-
+        if (!inputStack.empty() && inputStack.back()->isStringInput() && !inElseSkip) {
+            if (token == '\n') {
+                bool seenNumSign = false;
+                for (int i = 0; i < (int)lastLineTokens.size() - 1;) {
+                    int curPos = i;
+                    int curToken = lastLineTokens[i++];
+                    if (curToken == '#' && lastLineTokens[i] == '#') {
+                        curToken = PpAtomPaste;
+                        i++;
+                    }
+                    if (curToken == '#') {
+                        if (seenNumSign) {
+                            parseContext.ppError(lastLineTokenLocs[curPos], "(#) can be preceded in its line only by spaces or horizontal tabs", "#", "");
+                        } else {
+                            seenNumSign = true;
+                        }
+                    }
+                }
+                lastLineTokens.clear();
+                lastLineTokenLocs.clear();
+            } else {
+                lastLineTokens.push_back(token);
+                lastLineTokenLocs.push_back(ppToken->loc);
+            }
+        }
         return token;
     }
     int  getChar() { return inputStack.back()->getch(); }
@@ -527,7 +548,7 @@
     public:
         tStringInput(TPpContext* pp, TInputScanner& i) : tInput(pp), input(&i) { }
         virtual int scan(TPpToken*) override;
-
+        bool isStringInput() override { return true; }
         // Scanner used to get source stream characters.
         //  - Escaped newlines are handled here, invisibly to the caller.
         //  - All forms of newline are handled, and turned into just a '\n'.
@@ -711,6 +732,9 @@
 
     std::istringstream strtodStream;
     bool disableEscapeSequences;
+    // True if we're skipping a section enclosed by #if/#ifdef/#elif/#else which was evaluated to
+    // be inactive, e.g. #if 0
+    bool inElseSkip;
 };
 
 } // end namespace glslang
diff --git a/glslang/MachineIndependent/preprocessor/PpScanner.cpp b/glslang/MachineIndependent/preprocessor/PpScanner.cpp
index 34dec20..49dafa5 100644
--- a/glslang/MachineIndependent/preprocessor/PpScanner.cpp
+++ b/glslang/MachineIndependent/preprocessor/PpScanner.cpp
@@ -220,7 +220,9 @@
             }
             if (ch >= '0' && ch <= '9') {
                 while (ch >= '0' && ch <= '9') {
-                    exponent = exponent * 10 + (ch - '0');
+                    if (exponent < 500) {
+                        exponent = exponent * 10 + (ch - '0');
+                    }
                     saveName(ch);
                     ch = getChar();
                 }
diff --git a/glslang/MachineIndependent/propagateNoContraction.h b/glslang/MachineIndependent/propagateNoContraction.h
index 8521ad7..d849be8 100644
--- a/glslang/MachineIndependent/propagateNoContraction.h
+++ b/glslang/MachineIndependent/propagateNoContraction.h
@@ -52,4 +52,5 @@
 // 'noContraction' means the object is 'precise'; and for arithmetic operation
 // nodes, it means the operation should not be contracted.
 void PropagateNoContraction(const glslang::TIntermediate& intermediate);
-};
+
+} // end namespace glslang
diff --git a/glslang/MachineIndependent/reflection.cpp b/glslang/MachineIndependent/reflection.cpp
index 6c7d3a2..7e31609 100644
--- a/glslang/MachineIndependent/reflection.cpp
+++ b/glslang/MachineIndependent/reflection.cpp
@@ -704,69 +704,73 @@
             case EbtFloat:
                 switch ((int)sampler.dim) {
                 case Esd1D:
-                    switch ((int)sampler.shadow) {
-                    case false: return sampler.arrayed ? GL_SAMPLER_1D_ARRAY : GL_SAMPLER_1D;
-                    case true:  return sampler.arrayed ? GL_SAMPLER_1D_ARRAY_SHADOW : GL_SAMPLER_1D_SHADOW;
-                    }
+                    if (sampler.shadow)
+                        return sampler.arrayed ? GL_SAMPLER_1D_ARRAY_SHADOW : GL_SAMPLER_1D_SHADOW;
+                    else
+                        return sampler.arrayed ? GL_SAMPLER_1D_ARRAY : GL_SAMPLER_1D;
                 case Esd2D:
-                    switch ((int)sampler.ms) {
-                    case false:
-                        switch ((int)sampler.shadow) {
-                        case false: return sampler.arrayed ? GL_SAMPLER_2D_ARRAY : GL_SAMPLER_2D;
-                        case true:  return sampler.arrayed ? GL_SAMPLER_2D_ARRAY_SHADOW : GL_SAMPLER_2D_SHADOW;
-                        }
-                    case true:      return sampler.arrayed ? GL_SAMPLER_2D_MULTISAMPLE_ARRAY : GL_SAMPLER_2D_MULTISAMPLE;
+                    if (sampler.ms) {
+                        return sampler.arrayed ? GL_SAMPLER_2D_MULTISAMPLE_ARRAY : GL_SAMPLER_2D_MULTISAMPLE;
+                    } else {
+                        if (sampler.shadow)
+                            return sampler.arrayed ? GL_SAMPLER_2D_ARRAY_SHADOW : GL_SAMPLER_2D_SHADOW;
+                        else
+                            return sampler.arrayed ? GL_SAMPLER_2D_ARRAY : GL_SAMPLER_2D;
                     }
                 case Esd3D:
                     return GL_SAMPLER_3D;
                 case EsdCube:
-                    switch ((int)sampler.shadow) {
-                    case false: return sampler.arrayed ? GL_SAMPLER_CUBE_MAP_ARRAY : GL_SAMPLER_CUBE;
-                    case true:  return sampler.arrayed ? GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW : GL_SAMPLER_CUBE_SHADOW;
-                    }
+                    if (sampler.shadow)
+                        return sampler.arrayed ? GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW : GL_SAMPLER_CUBE_SHADOW;
+                    else
+                        return sampler.arrayed ? GL_SAMPLER_CUBE_MAP_ARRAY : GL_SAMPLER_CUBE;
                 case EsdRect:
                     return sampler.shadow ? GL_SAMPLER_2D_RECT_SHADOW : GL_SAMPLER_2D_RECT;
                 case EsdBuffer:
                     return GL_SAMPLER_BUFFER;
+                default:
+                    return 0;
                 }
             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;
-                    }
+                    if (sampler.shadow)
+                        return sampler.arrayed ? GL_FLOAT16_SAMPLER_1D_ARRAY_SHADOW_AMD : GL_FLOAT16_SAMPLER_1D_SHADOW_AMD;
+                    else
+                        return sampler.arrayed ? GL_FLOAT16_SAMPLER_1D_ARRAY_AMD : GL_FLOAT16_SAMPLER_1D_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;
+                    if (sampler.ms) {
+                        return sampler.arrayed ? GL_FLOAT16_SAMPLER_2D_MULTISAMPLE_ARRAY_AMD : GL_FLOAT16_SAMPLER_2D_MULTISAMPLE_AMD;
+                    } else {
+                        if (sampler.shadow)
+                            return sampler.arrayed ? GL_FLOAT16_SAMPLER_2D_ARRAY_SHADOW_AMD : GL_FLOAT16_SAMPLER_2D_SHADOW_AMD;
+                        else
+                            return sampler.arrayed ? GL_FLOAT16_SAMPLER_2D_ARRAY_AMD : GL_FLOAT16_SAMPLER_2D_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;
-                    }
+                    if (sampler.shadow)
+                        return sampler.arrayed ? GL_FLOAT16_SAMPLER_CUBE_MAP_ARRAY_SHADOW_AMD : GL_FLOAT16_SAMPLER_CUBE_SHADOW_AMD;
+                    else
+                        return sampler.arrayed ? GL_FLOAT16_SAMPLER_CUBE_MAP_ARRAY_AMD : GL_FLOAT16_SAMPLER_CUBE_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;
+                default:
+                    return 0;
                 }
             case EbtInt:
                 switch ((int)sampler.dim) {
                 case Esd1D:
                     return sampler.arrayed ? GL_INT_SAMPLER_1D_ARRAY : GL_INT_SAMPLER_1D;
                 case Esd2D:
-                    switch ((int)sampler.ms) {
-                    case false:  return sampler.arrayed ? GL_INT_SAMPLER_2D_ARRAY : GL_INT_SAMPLER_2D;
-                    case true:   return sampler.arrayed ? GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY
-                                                        : GL_INT_SAMPLER_2D_MULTISAMPLE;
-                    }
+                    if (sampler.ms)
+                        return sampler.arrayed ? GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY
+                                               : GL_INT_SAMPLER_2D_MULTISAMPLE;
+                    else
+                        return sampler.arrayed ? GL_INT_SAMPLER_2D_ARRAY : GL_INT_SAMPLER_2D;
                 case Esd3D:
                     return GL_INT_SAMPLER_3D;
                 case EsdCube:
@@ -775,17 +779,19 @@
                     return GL_INT_SAMPLER_2D_RECT;
                 case EsdBuffer:
                     return GL_INT_SAMPLER_BUFFER;
+                default:
+                    return 0;
                 }
             case EbtUint:
                 switch ((int)sampler.dim) {
                 case Esd1D:
                     return sampler.arrayed ? GL_UNSIGNED_INT_SAMPLER_1D_ARRAY : GL_UNSIGNED_INT_SAMPLER_1D;
                 case Esd2D:
-                    switch ((int)sampler.ms) {
-                    case false:  return sampler.arrayed ? GL_UNSIGNED_INT_SAMPLER_2D_ARRAY : GL_UNSIGNED_INT_SAMPLER_2D;
-                    case true:   return sampler.arrayed ? GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY
-                                                        : GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE;
-                    }
+                    if (sampler.ms)
+                        return sampler.arrayed ? GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY
+                                               : GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE;
+                    else
+                        return sampler.arrayed ? GL_UNSIGNED_INT_SAMPLER_2D_ARRAY : GL_UNSIGNED_INT_SAMPLER_2D;
                 case Esd3D:
                     return GL_UNSIGNED_INT_SAMPLER_3D;
                 case EsdCube:
@@ -794,6 +800,8 @@
                     return GL_UNSIGNED_INT_SAMPLER_2D_RECT;
                 case EsdBuffer:
                     return GL_UNSIGNED_INT_SAMPLER_BUFFER;
+                default:
+                    return 0;
                 }
             default:
                 return 0;
@@ -806,10 +814,10 @@
                 case Esd1D:
                     return sampler.arrayed ? GL_IMAGE_1D_ARRAY : GL_IMAGE_1D;
                 case Esd2D:
-                    switch ((int)sampler.ms) {
-                    case false:     return sampler.arrayed ? GL_IMAGE_2D_ARRAY : GL_IMAGE_2D;
-                    case true:      return sampler.arrayed ? GL_IMAGE_2D_MULTISAMPLE_ARRAY : GL_IMAGE_2D_MULTISAMPLE;
-                    }
+                    if (sampler.ms)
+                        return sampler.arrayed ? GL_IMAGE_2D_MULTISAMPLE_ARRAY : GL_IMAGE_2D_MULTISAMPLE;
+                    else
+                        return sampler.arrayed ? GL_IMAGE_2D_ARRAY : GL_IMAGE_2D;
                 case Esd3D:
                     return GL_IMAGE_3D;
                 case EsdCube:
@@ -818,16 +826,18 @@
                     return GL_IMAGE_2D_RECT;
                 case EsdBuffer:
                     return GL_IMAGE_BUFFER;
+                default:
+                    return 0;
                 }
             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;
-                    }
+                    if (sampler.ms)
+                        return sampler.arrayed ? GL_FLOAT16_IMAGE_2D_MULTISAMPLE_ARRAY_AMD : GL_FLOAT16_IMAGE_2D_MULTISAMPLE_AMD;
+                    else
+                        return sampler.arrayed ? GL_FLOAT16_IMAGE_2D_ARRAY_AMD : GL_FLOAT16_IMAGE_2D_AMD;
                 case Esd3D:
                     return GL_FLOAT16_IMAGE_3D_AMD;
                 case EsdCube:
@@ -836,16 +846,18 @@
                     return GL_FLOAT16_IMAGE_2D_RECT_AMD;
                 case EsdBuffer:
                     return GL_FLOAT16_IMAGE_BUFFER_AMD;
+                default:
+                    return 0;
                 }
             case EbtInt:
                 switch ((int)sampler.dim) {
                 case Esd1D:
                     return sampler.arrayed ? GL_INT_IMAGE_1D_ARRAY : GL_INT_IMAGE_1D;
                 case Esd2D:
-                    switch ((int)sampler.ms) {
-                    case false:  return sampler.arrayed ? GL_INT_IMAGE_2D_ARRAY : GL_INT_IMAGE_2D;
-                    case true:   return sampler.arrayed ? GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY : GL_INT_IMAGE_2D_MULTISAMPLE;
-                    }
+                    if (sampler.ms)
+                        return sampler.arrayed ? GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY : GL_INT_IMAGE_2D_MULTISAMPLE;
+                    else
+                        return sampler.arrayed ? GL_INT_IMAGE_2D_ARRAY : GL_INT_IMAGE_2D;
                 case Esd3D:
                     return GL_INT_IMAGE_3D;
                 case EsdCube:
@@ -854,17 +866,19 @@
                     return GL_INT_IMAGE_2D_RECT;
                 case EsdBuffer:
                     return GL_INT_IMAGE_BUFFER;
+                default:
+                    return 0;
                 }
             case EbtUint:
                 switch ((int)sampler.dim) {
                 case Esd1D:
                     return sampler.arrayed ? GL_UNSIGNED_INT_IMAGE_1D_ARRAY : GL_UNSIGNED_INT_IMAGE_1D;
                 case Esd2D:
-                    switch ((int)sampler.ms) {
-                    case false:  return sampler.arrayed ? GL_UNSIGNED_INT_IMAGE_2D_ARRAY : GL_UNSIGNED_INT_IMAGE_2D;
-                    case true:   return sampler.arrayed ? GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY
-                                                        : GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE;
-                    }
+                    if (sampler.ms)
+                        return sampler.arrayed ? GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY
+                                               : GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE;
+                    else
+                        return sampler.arrayed ? GL_UNSIGNED_INT_IMAGE_2D_ARRAY : GL_UNSIGNED_INT_IMAGE_2D;
                 case Esd3D:
                     return GL_UNSIGNED_INT_IMAGE_3D;
                 case EsdCube:
@@ -873,6 +887,8 @@
                     return GL_UNSIGNED_INT_IMAGE_2D_RECT;
                 case EsdBuffer:
                     return GL_UNSIGNED_INT_IMAGE_BUFFER;
+                default:
+                    return 0;
                 }
             default:
                 return 0;
@@ -937,6 +953,7 @@
                     case 4:    return GL_FLOAT_MAT4;
                     default:   return 0;
                     }
+                default: return 0;
                 }
             case EbtDouble:
                 switch (type.getMatrixCols()) {
@@ -961,6 +978,7 @@
                     case 4:    return GL_DOUBLE_MAT4;
                     default:   return 0;
                     }
+                default: return 0;
                 }
             case EbtFloat16:
                 switch (type.getMatrixCols()) {
@@ -985,6 +1003,7 @@
                     case 4:    return GL_FLOAT16_MAT4_AMD;
                     default:   return 0;
                     }
+                default: return 0;
                 }
             default:
                 return 0;
diff --git a/glslang/MachineIndependent/reflection.h b/glslang/MachineIndependent/reflection.h
index 221d93f..8315b11 100644
--- a/glslang/MachineIndependent/reflection.h
+++ b/glslang/MachineIndependent/reflection.h
@@ -37,8 +37,8 @@
 #define _REFLECTION_INCLUDED
 
 #include "../Public/ShaderLang.h"
-#include "../Include/Types.h"
-
+#include "../Include/BaseTypes.h"
+#include "../Include/visibility.h"
 #include <list>
 #include <set>
 
@@ -65,6 +65,7 @@
     virtual ~TReflection() {}
 
     // grow the reflection stage by stage
+    GLSLANG_EXPORT_FOR_TESTS
     bool addStage(EShLanguage, const TIntermediate&);
 
     // for mapping a uniform index to a uniform object's description
diff --git a/glslang/MachineIndependent/span.h b/glslang/MachineIndependent/span.h
new file mode 100644
index 0000000..bd705fe
--- /dev/null
+++ b/glslang/MachineIndependent/span.h
@@ -0,0 +1,92 @@
+#pragma once
+
+//
+// Copyright (C) 2023 LunarG, Inc.
+//
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions
+// are met:
+//
+//    Redistributions of source code must retain the above copyright
+//    notice, this list of conditions and the following disclaimer.
+//
+//    Redistributions in binary form must reproduce the above
+//    copyright notice, this list of conditions and the following
+//    disclaimer in the documentation and/or other materials provided
+//    with the distribution.
+//
+//    Neither the name of 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.
+//
+
+// Partial implementation of std::span for C++11
+// Replace with std::span if repo standard is bumped to C++20
+//
+// This code was copied from https://github.com/KhronosGroup/Vulkan-ValidationLayers/blob/main/layers/containers/custom_containers.h
+template <typename T>
+class span {
+  public:
+    using pointer = T *;
+    using const_pointer = T const *;
+    using iterator = pointer;
+    using const_iterator = const_pointer;
+
+    span() = default;
+    span(pointer start, size_t n) : data_(start), count_(n) {}
+    template <typename Iterator>
+    span(Iterator start, Iterator end) : data_(&(*start)), count_(end - start) {}
+    template <typename Container>
+    span(Container &c) : data_(c.data()), count_(c.size()) {}
+
+    iterator begin() { return data_; }
+    const_iterator begin() const { return data_; }
+
+    iterator end() { return data_ + count_; }
+    const_iterator end() const { return data_ + count_; }
+
+    T &operator[](int i) { return data_[i]; }
+    const T &operator[](int i) const { return data_[i]; }
+
+    T &front() { return *data_; }
+    const T &front() const { return *data_; }
+
+    T &back() { return *(data_ + (count_ - 1)); }
+    const T &back() const { return *(data_ + (count_ - 1)); }
+
+    size_t size() const { return count_; }
+    bool empty() const { return count_ == 0; }
+
+    pointer data() { return data_; }
+    const_pointer data() const { return data_; }
+
+  private:
+    pointer data_ = {};
+    size_t count_ = 0;
+};
+
+//
+// Allow type inference that using the constructor doesn't allow in C++11
+template <typename T>
+span<T> make_span(T *begin, size_t count) {
+    return span<T>(begin, count);
+}
+template <typename T>
+span<T> make_span(T *begin, T *end) {
+    return make_span<T>(begin, end);
+}
diff --git a/glslang/OSDependent/Unix/CMakeLists.txt b/glslang/OSDependent/Unix/CMakeLists.txt
index f6b1c6a..53d9ad3 100644
--- a/glslang/OSDependent/Unix/CMakeLists.txt
+++ b/glslang/OSDependent/Unix/CMakeLists.txt
@@ -31,27 +31,18 @@
 # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 # POSSIBILITY OF SUCH DAMAGE.
 
-add_library(OSDependent STATIC ossource.cpp ../osinclude.h)
+set(OSDEPENDENT_SOURCES
+    ${CMAKE_CURRENT_SOURCE_DIR}/ossource.cpp
+    PARENT_SCOPE)
+
+set(OSDEPENDENT_HEADERS
+    ${CMAKE_CURRENT_SOURCE_DIR}/../osinclude.h
+    PARENT_SCOPE)
+
+add_library(OSDependent STATIC ${CMAKE_CURRENT_SOURCE_DIR}/../../stub.cpp)
 set_property(TARGET OSDependent PROPERTY FOLDER glslang)
 set_property(TARGET OSDependent PROPERTY POSITION_INDEPENDENT_CODE ON)
 
-# Link pthread
-set(THREADS_PREFER_PTHREAD_FLAG ON)
-find_package(Threads REQUIRED)
-target_link_libraries(OSDependent Threads::Threads)
-
-if(ENABLE_GLSLANG_INSTALL AND NOT BUILD_SHARED_LIBS)
+if(GLSLANG_ENABLE_INSTALL AND NOT BUILD_SHARED_LIBS)
     install(TARGETS OSDependent EXPORT glslang-targets)
-
-    # Backward compatibility
-    file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/OSDependentTargets.cmake" "
-        message(WARNING \"Using `OSDependentTargets.cmake` is deprecated: use `find_package(glslang)` to find glslang CMake targets.\")
-
-        if (NOT TARGET glslang::OSDependent)
-            include(\"${CMAKE_INSTALL_FULL_LIBDIR}/cmake/${PROJECT_NAME}/glslang-targets.cmake\")
-        endif()
-
-        add_library(OSDependent ALIAS glslang::OSDependent)
-    ")
-    install(FILES "${CMAKE_CURRENT_BINARY_DIR}/OSDependentTargets.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
 endif()
diff --git a/glslang/OSDependent/Web/CMakeLists.txt b/glslang/OSDependent/Web/CMakeLists.txt
index 5d17496..2cfe7aa 100644
--- a/glslang/OSDependent/Web/CMakeLists.txt
+++ b/glslang/OSDependent/Web/CMakeLists.txt
@@ -34,7 +34,7 @@
 if(ENABLE_GLSLANG_JS)
     add_executable(glslang.js "glslang.js.cpp")
     glslang_set_link_args(glslang.js)
-    target_link_libraries(glslang.js glslang SPIRV)
+    target_link_libraries(glslang.js glslang)
 
     # Link library names that start with "-" are treated as link flags.
     # "-Os" should be OK in MSVC; don't use /Os because CMake won't
diff --git a/glslang/OSDependent/Windows/CMakeLists.txt b/glslang/OSDependent/Windows/CMakeLists.txt
index 882133a..040f434 100644
--- a/glslang/OSDependent/Windows/CMakeLists.txt
+++ b/glslang/OSDependent/Windows/CMakeLists.txt
@@ -31,34 +31,32 @@
 # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 # POSSIBILITY OF SUCH DAMAGE.
 
-set(SOURCES ossource.cpp ../osinclude.h)
+set(OSDEPENDENT_SOURCES
+    ${CMAKE_CURRENT_SOURCE_DIR}/ossource.cpp
+    PARENT_SCOPE)
 
-add_library(OSDependent STATIC ${SOURCES})
+set(OSDEPENDENT_HEADERS
+    ${CMAKE_CURRENT_SOURCE_DIR}/../osinclude.h
+    PARENT_SCOPE)
+
+add_library(OSDependent STATIC)
+
+target_sources(OSDependent PRIVATE
+               ${CMAKE_CURRENT_SOURCE_DIR}/../../stub.cpp)
+
 set_property(TARGET OSDependent PROPERTY FOLDER glslang)
 set_property(TARGET OSDependent PROPERTY POSITION_INDEPENDENT_CODE ON)
 
 # MinGW GCC complains about function pointer casts to void*.
 # Turn that off with -fpermissive.
-if(${CMAKE_CXX_COMPILER_ID} MATCHES "GNU")
-    target_compile_options(OSDependent PRIVATE -fpermissive)
+if(MINGW AND ${CMAKE_CXX_COMPILER_ID} MATCHES "GNU")
+    set_source_files_properties(${OSDEPENDENT_SOURCES} PROPERTIES COMPILE_FLAGS -fpermissive)
 endif()
 
 if(WIN32)
     source_group("Source" FILES ${SOURCES})
 endif()
 
-if(ENABLE_GLSLANG_INSTALL)
+if(GLSLANG_ENABLE_INSTALL)
     install(TARGETS OSDependent EXPORT glslang-targets)
-
-    # Backward compatibility
-    file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/OSDependentTargets.cmake" "
-        message(WARNING \"Using `OSDependentTargets.cmake` is deprecated: use `find_package(glslang)` to find glslang CMake targets.\")
-
-        if (NOT TARGET glslang::OSDependent)
-            include(\"${CMAKE_INSTALL_FULL_LIBDIR}/cmake/${PROJECT_NAME}/glslang-targets.cmake\")
-        endif()
-
-        add_library(OSDependent ALIAS glslang::OSDependent)
-    ")
-    install(FILES "${CMAKE_CURRENT_BINARY_DIR}/OSDependentTargets.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
 endif()
diff --git a/glslang/OSDependent/Windows/main.cpp b/glslang/OSDependent/Windows/main.cpp
deleted file mode 100644
index 0bcde7b..0000000
--- a/glslang/OSDependent/Windows/main.cpp
+++ /dev/null
@@ -1,74 +0,0 @@
-//
-// Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
-// 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.
-//
-
-#include "InitializeDll.h"
-
-#define STRICT
-#define VC_EXTRALEAN 1
-#include <windows.h>
-#include <assert.h>
-
-BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
-{
-	switch (fdwReason)
-	{
-		case DLL_PROCESS_ATTACH:
-
-            if (! glslang::InitProcess())
-                return FALSE;
-            break;
-		case DLL_THREAD_ATTACH:
-
-            if (! glslang::InitThread())
-                return FALSE;
-            break;
-
-		case DLL_THREAD_DETACH:
-
-			if (! glslang::DetachThread())
-				return FALSE;
-			break;
-
-		case DLL_PROCESS_DETACH:
-
-			glslang::DetachProcess();
-			break;
-
-		default:
-			assert(0 && "DllMain(): Reason for calling DLL Main is unknown");
-			return FALSE;
-	}
-
-	return TRUE;
-}
diff --git a/glslang/OSDependent/osinclude.h b/glslang/OSDependent/osinclude.h
index 0d677e4..da1c4f6 100644
--- a/glslang/OSDependent/osinclude.h
+++ b/glslang/OSDependent/osinclude.h
@@ -35,9 +35,10 @@
 #ifndef __OSINCLUDE_H
 #define __OSINCLUDE_H
 
+#include "../Include/visibility.h"
 namespace glslang {
 
-void OS_DumpMemoryCounters();
+GLSLANG_EXPORT void OS_DumpMemoryCounters();
 
 } // end namespace glslang
 
diff --git a/glslang/Public/ResourceLimits.h b/glslang/Public/ResourceLimits.h
index f70be81..8245e12 100644
--- a/glslang/Public/ResourceLimits.h
+++ b/glslang/Public/ResourceLimits.h
@@ -38,20 +38,21 @@
 #include <string>
 
 #include "../Include/ResourceLimits.h"
+#include "../Include/visibility.h"
 
 // Return pointer to user-writable Resource to pass through API in
 // future-proof way.
-extern TBuiltInResource* GetResources();
+GLSLANG_EXPORT extern TBuiltInResource* GetResources();
 
 // These are the default resources for TBuiltInResources, used for both
 //  - parsing this string for the case where the user didn't supply one,
 //  - dumping out a template for user construction of a config file.
-extern const TBuiltInResource* GetDefaultResources();
+GLSLANG_EXPORT extern const TBuiltInResource* GetDefaultResources();
 
 // Returns the DefaultTBuiltInResource as a human-readable string.
-std::string GetDefaultTBuiltInResourceString();
+GLSLANG_EXPORT std::string GetDefaultTBuiltInResourceString();
 
 // Decodes the resource limits from |config| to |resources|.
-void DecodeResourceLimits(TBuiltInResource* resources, char* config);
+GLSLANG_EXPORT void DecodeResourceLimits(TBuiltInResource* resources, char* config);
 
 #endif  // _STAND_ALONE_RESOURCE_LIMITS_INCLUDED_
diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h
index c22cb2b..1a3a0b2 100644
--- a/glslang/Public/ShaderLang.h
+++ b/glslang/Public/ShaderLang.h
@@ -38,6 +38,7 @@
 #define _COMPILER_INTERFACE_INCLUDED_
 
 #include "../Include/ResourceLimits.h"
+#include "../Include/visibility.h"
 #include "../MachineIndependent/Versions.h"
 
 #include <cstring>
@@ -49,22 +50,6 @@
     #define C_DECL
 #endif
 
-#ifdef GLSLANG_IS_SHARED_LIBRARY
-    #ifdef _WIN32
-        #ifdef GLSLANG_EXPORTING
-            #define GLSLANG_EXPORT __declspec(dllexport)
-        #else
-            #define GLSLANG_EXPORT __declspec(dllimport)
-        #endif
-    #elif __GNUC__ >= 4
-        #define GLSLANG_EXPORT __attribute__((visibility("default")))
-    #endif
-#endif // GLSLANG_IS_SHARED_LIBRARY
-
-#ifndef GLSLANG_EXPORT
-#define GLSLANG_EXPORT
-#endif
-
 //
 // This is the platform independent interface between an OGL driver
 // and the shading language compiler/linker.
@@ -171,8 +156,9 @@
     EShTargetVulkan_1_1 = (1 << 22) | (1 << 12),      // Vulkan 1.1
     EShTargetVulkan_1_2 = (1 << 22) | (2 << 12),      // Vulkan 1.2
     EShTargetVulkan_1_3 = (1 << 22) | (3 << 12),      // Vulkan 1.3
+    EShTargetVulkan_1_4 = (1 << 22) | (4 << 12),      // Vulkan 1.4
     EShTargetOpenGL_450 = 450,                        // OpenGL
-    LAST_ELEMENT_MARKER(EShTargetClientVersionCount = 5),
+    LAST_ELEMENT_MARKER(EShTargetClientVersionCount = 6),
 } EShTargetClientVersion;
 
 typedef EShTargetClientVersion EshTargetClientVersion;
@@ -188,6 +174,21 @@
     LAST_ELEMENT_MARKER(EShTargetLanguageVersionCount = 7),
 } EShTargetLanguageVersion;
 
+//
+// Following are a series of helper enums for managing layouts and qualifiers,
+// used for TPublicType, TType, others.
+//
+
+enum TLayoutPacking {
+    ElpNone,
+    ElpShared, // default, but different than saying nothing
+    ElpStd140,
+    ElpStd430,
+    ElpPacked,
+    ElpScalar,
+    ElpCount // If expanding, see bitfield width below
+};
+
 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
@@ -252,23 +253,26 @@
 // Message choices for what errors and warnings are given.
 //
 enum EShMessages : unsigned {
-    EShMsgDefault          = 0,         // default is to give all required errors and extra warnings
-    EShMsgRelaxedErrors    = (1 << 0),  // be liberal in accepting input
-    EShMsgSuppressWarnings = (1 << 1),  // suppress all warnings, except those required by the specification
-    EShMsgAST              = (1 << 2),  // print the AST intermediate representation
-    EShMsgSpvRules         = (1 << 3),  // issue messages for SPIR-V generation
-    EShMsgVulkanRules      = (1 << 4),  // issue messages for Vulkan-requirements of GLSL for SPIR-V
-    EShMsgOnlyPreprocessor = (1 << 5),  // only print out errors produced by the preprocessor
-    EShMsgReadHlsl         = (1 << 6),  // use HLSL parsing rules and semantics
-    EShMsgCascadingErrors  = (1 << 7),  // get cascading errors; risks error-recovery issues, instead of an early exit
-    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
-    EShMsgHlslDX9Compatible = (1 << 13), // enable HLSL DX9 compatible mode (for samplers and semantics)
-    EShMsgBuiltinSymbolTable = (1 << 14), // print the builtin symbol table
-    EShMsgEnhanced         = (1 << 15), // enhanced message readability
+    EShMsgDefault              = 0,         // default is to give all required errors and extra warnings
+    EShMsgRelaxedErrors        = (1 << 0),  // be liberal in accepting input
+    EShMsgSuppressWarnings     = (1 << 1),  // suppress all warnings, except those required by the specification
+    EShMsgAST                  = (1 << 2),  // print the AST intermediate representation
+    EShMsgSpvRules             = (1 << 3),  // issue messages for SPIR-V generation
+    EShMsgVulkanRules          = (1 << 4),  // issue messages for Vulkan-requirements of GLSL for SPIR-V
+    EShMsgOnlyPreprocessor     = (1 << 5),  // only print out errors produced by the preprocessor
+    EShMsgReadHlsl             = (1 << 6),  // use HLSL parsing rules and semantics
+    EShMsgCascadingErrors      = (1 << 7),  // get cascading errors; risks error-recovery issues, instead of an early exit
+    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
+    EShMsgHlslDX9Compatible    = (1 << 13), // enable HLSL DX9 compatible mode (for samplers and semantics)
+    EShMsgBuiltinSymbolTable   = (1 << 14), // print the builtin symbol table
+    EShMsgEnhanced             = (1 << 15), // enhanced message readability
+    EShMsgAbsolutePath         = (1 << 16), // Output Absolute path for messages
+    EShMsgDisplayErrorColumn   = (1 << 17), // Display error message column aswell as line
+    EShMsgLinkTimeOptimization = (1 << 18), // perform cross-stage optimizations during linking
     LAST_ELEMENT_MARKER(EShMsgCount),
 };
 
@@ -318,8 +322,8 @@
 // Driver calls these to create and destroy compiler/linker
 // objects.
 //
-GLSLANG_EXPORT ShHandle ShConstructCompiler(const EShLanguage, int debugOptions);  // one per shader
-GLSLANG_EXPORT ShHandle ShConstructLinker(const EShExecutable, int debugOptions);  // one per shader pair
+GLSLANG_EXPORT ShHandle ShConstructCompiler(const EShLanguage, int /*debugOptions unused*/); // one per shader
+GLSLANG_EXPORT ShHandle ShConstructLinker(const EShExecutable, int /*debugOptions unused*/); // one per shader pair
 GLSLANG_EXPORT ShHandle ShConstructUniformMap();                 // one per uniform namespace (currently entire program object)
 GLSLANG_EXPORT void ShDestruct(ShHandle);
 
@@ -330,18 +334,14 @@
 // The info-log should be written by ShCompile into
 // ShHandle, so it can answer future queries.
 //
-GLSLANG_EXPORT int ShCompile(
-    const ShHandle,
-    const char* const shaderStrings[],
-    const int numStrings,
-    const int* lengths,
-    const EShOptimizationLevel,
-    const TBuiltInResource *resources,
-    int debugOptions,
-    int defaultVersion = 110,            // use 100 for ES environment, overridden by #version in shader
-    bool forwardCompatible = false,      // give errors for use of deprecated features
-    EShMessages messages = EShMsgDefault // warnings and errors
-    );
+GLSLANG_EXPORT int ShCompile(const ShHandle, const char* const shaderStrings[], const int numStrings,
+                             const int* lengths, const EShOptimizationLevel, const TBuiltInResource* resources,
+                             int,                      // debugOptions unused
+                             int defaultVersion = 110, // use 100 for ES environment, overridden by #version in shader
+                             bool forwardCompatible = false,      // give errors for use of deprecated features
+                             EShMessages messages = EShMsgDefault, // warnings and errors
+                             const char* fileName = nullptr
+);
 
 GLSLANG_EXPORT int ShLinkExt(
     const ShHandle,               // linker object
@@ -417,6 +417,7 @@
 class TIntermediate;
 class TProgram;
 class TPoolAllocator;
+class TIoMapResolver;
 
 // Call this exactly once per process before using anything else
 GLSLANG_EXPORT bool InitializeProcess();
@@ -512,6 +513,9 @@
     GLSLANG_EXPORT void setAtomicCounterBlockSet(unsigned int set);
     GLSLANG_EXPORT void setAtomicCounterBlockBinding(unsigned int binding);
 
+    GLSLANG_EXPORT void addSourceText(const char* text, size_t len);
+    GLSLANG_EXPORT void setSourceFile(const char* file);
+
     // 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
@@ -748,6 +752,8 @@
     GLSLANG_EXPORT void dump() const;
     static TObjectReflection badReflection() { return TObjectReflection(); }
 
+    GLSLANG_EXPORT unsigned int layoutLocation() const;
+
     std::string name;
     int offset;
     int glDefineType;
@@ -850,6 +856,20 @@
     virtual void addStage(EShLanguage stage, TIntermediate& stageIntermediate) = 0;
 };
 
+// I/O mapper
+class TIoMapper {
+public:
+    TIoMapper() {}
+    virtual ~TIoMapper() {}
+    // grow the reflection stage by stage
+    bool virtual addStage(EShLanguage, TIntermediate&, TInfoSink&, TIoMapResolver*);
+    bool virtual doMap(TIoMapResolver*, TInfoSink&) { return true; }
+    bool virtual setAutoPushConstantBlock(const char*, unsigned int, TLayoutPacking) { return false; }
+};
+
+// Get the default GLSL IO mapper
+GLSLANG_EXPORT TIoMapper* GetGlslIoMapper();
+
 // Make one TProgram per set of shaders that will get linked together.  Add all
 // the shaders that are to be linked together.  After calling shader.parse()
 // for all shaders, call link().
@@ -957,6 +977,10 @@
     const TType *getAttributeTType(int index) const    { return getPipeInput(index).getType(); }
 
     GLSLANG_EXPORT void dumpReflection();
+
+    // Get the IO resolver to use for mapIO
+    GLSLANG_EXPORT TIoMapResolver* getGlslIoResolver(EShLanguage stage);
+
     // I/O mapping: apply base offsets and map live unbound variables
     // If resolver is not provided it uses the previous approach
     // and respects auto assignment and offsets.
diff --git a/glslang/Public/resource_limits_c.h b/glslang/Public/resource_limits_c.h
index 05aa8eb..3cf7442 100644
--- a/glslang/Public/resource_limits_c.h
+++ b/glslang/Public/resource_limits_c.h
@@ -30,25 +30,26 @@
 #define _STAND_ALONE_RESOURCE_LIMITS_C_INCLUDED_
 
 #include "../Include/glslang_c_interface.h"
+#include "../Include/visibility.h"
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
 // Returns a struct that can be use to create custom resource values.
-glslang_resource_t* glslang_resource(void);
+GLSLANG_EXPORT glslang_resource_t* glslang_resource(void);
 
 // These are the default resources for TBuiltInResources, used for both
 //  - parsing this string for the case where the user didn't supply one,
 //  - dumping out a template for user construction of a config file.
-const glslang_resource_t* glslang_default_resource(void);
+GLSLANG_EXPORT const glslang_resource_t* glslang_default_resource(void);
 
 // Returns the DefaultTBuiltInResource as a human-readable string.
 // NOTE: User is responsible for freeing this string.
-const char* glslang_default_resource_string();
+GLSLANG_EXPORT const char* glslang_default_resource_string();
 
 // Decodes the resource limits from |config| to |resources|.
-void glslang_decode_resource_limits(glslang_resource_t* resources, char* config);
+GLSLANG_EXPORT void glslang_decode_resource_limits(glslang_resource_t* resources, char* config);
 
 #ifdef __cplusplus
 }
diff --git a/glslang/ResourceLimits/resource_limits_c.cpp b/glslang/ResourceLimits/resource_limits_c.cpp
index 0eeac23..8909d9e 100644
--- a/glslang/ResourceLimits/resource_limits_c.cpp
+++ b/glslang/ResourceLimits/resource_limits_c.cpp
@@ -42,28 +42,14 @@
     return reinterpret_cast<const glslang_resource_t*>(GetDefaultResources());
 }
 
-#if defined(__clang__) || defined(__GNUC__)
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-#elif defined(_MSC_VER)
-#pragma warning(push)
-#pragma warning(disable : 4996)
-#endif
-
 const char* glslang_default_resource_string()
 {
     std::string cpp_str = GetDefaultTBuiltInResourceString();
     char* c_str = (char*)malloc(cpp_str.length() + 1);
-    strcpy(c_str, cpp_str.c_str());
+    strncpy(c_str, cpp_str.c_str(), cpp_str.length() + 1);
     return c_str;
 }
 
-#if defined(__clang__) || defined(__GNUC__)
-#pragma GCC diagnostic pop
-#elif defined(_MSC_VER)
-#pragma warning(pop)
-#endif
-
 void glslang_decode_resource_limits(glslang_resource_t* resources, char* config)
 {
     DecodeResourceLimits(reinterpret_cast<TBuiltInResource*>(resources), config);
diff --git a/OGLCompilersDLL/InitializeDll.cpp b/glslang/stub.cpp
similarity index 84%
rename from OGLCompilersDLL/InitializeDll.cpp
rename to glslang/stub.cpp
index ab3762e..b9aec6d 100644
--- a/OGLCompilersDLL/InitializeDll.cpp
+++ b/glslang/stub.cpp
@@ -1,5 +1,5 @@
 //
-// Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
+// Copyright (C) 2024 The Khronos Group Inc.
 // All rights reserved.
 //
 // Redistribution and use in source and binary forms, with or without
@@ -32,6 +32,6 @@
 // POSSIBILITY OF SUCH DAMAGE.
 //
 
-namespace glslang {
-
-} // end namespace glslang
+// This empty source file exists to support building stubbed versions of
+// deprecated libraries which have been integrated into the main glslang
+// library. It should be deleted once the stub libraries are fully removed.
diff --git a/gtests/AST.FromFile.cpp b/gtests/AST.FromFile.cpp
index 828dabe..cc433fe 100644
--- a/gtests/AST.FromFile.cpp
+++ b/gtests/AST.FromFile.cpp
@@ -1,5 +1,6 @@
 //
 // Copyright (C) 2016 Google, Inc.
+// Copyright (C) 2022-2024 Arm Limited.
 //
 // All rights reserved.
 //
@@ -252,6 +253,7 @@
         "glsl.450.subgroupClustered.comp",
         "glsl.450.subgroupClusteredNeg.comp",
         "glsl.450.subgroupPartitioned.comp",
+        "glsl.450.subgroupRotate.comp",
         "glsl.450.subgroupShuffle.comp",
         "glsl.450.subgroupShuffleRelative.comp",
         "glsl.450.subgroupQuad.comp",
@@ -277,11 +279,13 @@
         "glsl.es320.subgroupClustered.comp",
         "glsl.es320.subgroupClusteredNeg.comp",
         "glsl.es320.subgroupPartitioned.comp",
+        "glsl.es320.subgroupRotate.comp",
         "glsl.es320.subgroupShuffle.comp",
         "glsl.es320.subgroupShuffleRelative.comp",
         "glsl.es320.subgroupQuad.comp",
         "glsl.es320.subgroupVote.comp",
         "glsl.es320.extTextureShadowLod.frag",
+        "gl_samplemask_array_size.frag",
         "glsl.ext.textureShadowLod.frag",
         "terminate.frag",
         "terminate.vert",
@@ -295,11 +299,24 @@
         "GL_ARB_draw_instanced.vert",
         "GL_ARB_fragment_coord_conventions.vert",
         "GL_ARB_bindless_texture.frag",
+        "GL_ARB_texture_multisample.vert",
         "BestMatchFunction.vert",
         "EndStreamPrimitive.geom",
         "floatBitsToInt.vert",
         "coord_conventions.frag",
-        "gl_FragCoord.frag"
+        "gl_FragCoord.frag",
+        "glsl.interpOp.error.frag",
+        "location_aliasing.tesc",
+        "location_aliasing1.frag",
+        "GL_EXT_draw_instanced.vert",
+        "overflow_underflow_toinf_0.frag",
+        "GL_EXT_texture_array.frag",
+        "index_outside_sample_mask_range.frag",
+        "positive_infinity.frag",
+        "matrixCompMult.vert",
+        "ps_uint_int.frag",
+        "ps_sample.frag",
+        "tes_patch.tese",
     })),
     FileNameAsCustomTestSuffix
 );
diff --git a/gtests/CMakeLists.txt b/gtests/CMakeLists.txt
index 408a92d..2b18fae 100644
--- a/gtests/CMakeLists.txt
+++ b/gtests/CMakeLists.txt
@@ -1,4 +1,4 @@
-# Copyright (C) 2020 The Khronos Group Inc.
+# Copyright (C) 2020-2023 The Khronos Group Inc.
 #
 # All rights reserved.
 #
@@ -31,7 +31,7 @@
 # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 # POSSIBILITY OF SUCH DAMAGE.
 
-if(BUILD_TESTING)
+if(GLSLANG_TESTS)
     if(TARGET gmock)
         message(STATUS "Google Mock found - building tests")
 
@@ -68,21 +68,6 @@
         glslang_pch(glslangtests ${CMAKE_CURRENT_SOURCE_DIR}/pch.h)
         set_property(TARGET glslangtests PROPERTY FOLDER tests)
         glslang_set_link_args(glslangtests)
-        if(ENABLE_GLSLANG_INSTALL)
-            install(TARGETS glslangtests EXPORT glslang-targets)
-
-            # Backward compatibility
-            file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/glslangtestsTargets.cmake" "
-                message(WARNING \"Using `glslangtestsTargets.cmake` is deprecated: use `find_package(glslang)` to find glslang CMake targets.\")
-
-                if (NOT TARGET glslang::glslangtests)
-                    include(\"${CMAKE_INSTALL_FULL_LIBDIR}/cmake/${PROJECT_NAME}/glslang-targets.cmake\")
-                endif()
-
-                add_library(glslangtests ALIAS glslang::glslangtests)
-            ")
-            install(FILES "${CMAKE_CURRENT_BINARY_DIR}/glslangtestsTargets.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
-        endif()
 
         set(GLSLANG_TEST_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../Test")
         # Supply a default test root directory, so that manual testing
@@ -97,25 +82,31 @@
                                    ${gtest_SOURCE_DIR}/include)
 
         if(ENABLE_OPT)
-            target_include_directories(glslangtests
-                PRIVATE ${spirv-tools_SOURCE_DIR}/include
+            target_link_libraries(glslangtests
+                PRIVATE SPIRV-Tools-opt
             )
         endif()
 
         set(LIBRARIES
-            glslang OSDependent OGLCompiler glslang
-            SPIRV glslang-default-resource-limits)
+            glslang glslang-default-resource-limits)
 
         if(ENABLE_SPVREMAPPER)
             set(LIBRARIES ${LIBRARIES} SPVRemapper)
         endif()
 
-        if(ENABLE_HLSL)
-            set(LIBRARIES ${LIBRARIES} HLSL)
-        endif()
         target_link_libraries(glslangtests PRIVATE ${LIBRARIES} gmock)
 
-        add_test(NAME glslang-gtests
-                 COMMAND glslangtests --test-root "${GLSLANG_TEST_DIRECTORY}")
+        # The TARGET_RUNTIME_DLL_DIRS feature requires CMake 3.27 or greater.
+        if(WIN32 AND BUILD_SHARED_LIBS AND CMAKE_VERSION VERSION_LESS "3.27")
+            message(WARNING "The Windows shared library test configuration requires CMake 3.27 or greater")
+        else()
+            add_test(NAME glslang-gtests
+                     COMMAND glslangtests --test-root "${GLSLANG_TEST_DIRECTORY}")
+
+            # Prepend paths to shared libraries.
+            if (BUILD_SHARED_LIBS)
+                set_tests_properties(glslang-gtests PROPERTIES ENVIRONMENT_MODIFICATION "PATH=path_list_prepend:$<JOIN:$<TARGET_RUNTIME_DLL_DIRS:glslangtests>,\;>")
+            endif()
+        endif()
     endif()
 endif()
diff --git a/gtests/GlslMapIO.FromFile.cpp b/gtests/GlslMapIO.FromFile.cpp
index 1dba5c0..9fd87a6 100644
--- a/gtests/GlslMapIO.FromFile.cpp
+++ b/gtests/GlslMapIO.FromFile.cpp
@@ -39,6 +39,7 @@
 
 #include "TestFixture.h"
 
+#include "glslang/MachineIndependent/localintermediate.h"
 #include "glslang/MachineIndependent/iomapper.h"
 #include "glslang/MachineIndependent/reflection.h"
 
@@ -284,19 +285,21 @@
     result.linkingOutput = program.getInfoLog();
     result.linkingError = program.getInfoDebugLog();
 
-    unsigned int stage = 0;
-    glslang::TIntermediate* firstIntermediate = nullptr;
-    while (!program.getIntermediate((EShLanguage)stage) && stage < EShLangCount) { stage++; }
-    firstIntermediate = program.getIntermediate((EShLanguage)stage);
-
-    glslang::TDefaultGlslIoResolver resolver(*firstIntermediate);
-    glslang::TGlslIoMapper ioMapper;
+    glslang::TIoMapResolver *resolver;
+    for (unsigned stage = 0; stage < EShLangCount; stage++) {
+        resolver = program.getGlslIoResolver((EShLanguage)stage);
+        if (resolver)
+            break;
+    }
+    glslang::TIoMapper *ioMapper = glslang::GetGlslIoMapper();
 
     if (success) {
-        success &= program.mapIO(&resolver, &ioMapper);
+        success &= program.mapIO(resolver, ioMapper);
         result.linkingOutput = program.getInfoLog();
         result.linkingError = program.getInfoDebugLog();
     }
+    delete ioMapper;
+    delete resolver;
 
     success &= verifyIOMapping(result.linkingError, program);
     result.validationResult = success;
@@ -311,7 +314,6 @@
                     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();
@@ -343,8 +345,10 @@
         {{"iomap.variableOutBlockIn.vert", "iomap.variableOutBlockIn.frag"}, Semantics::OpenGL},
         {{"iomap.blockOutVariableIn.2.vert", "iomap.blockOutVariableIn.geom"}, Semantics::OpenGL},
         {{"iomap.variableOutBlockIn.2.vert", "iomap.variableOutBlockIn.geom"}, Semantics::OpenGL},
+        {{"iomap.mismatchedBufferTypes.vert", "iomap.mismatchedBufferTypes.frag"}, Semantics::OpenGL},
         // vulkan semantics
         {{"iomap.crossStage.vk.vert", "iomap.crossStage.vk.geom", "iomap.crossStage.vk.frag" }, Semantics::Vulkan},
+        {{"iomap.crossStage.vk.2.vert", "iomap.crossStage.vk.2.geom", "iomap.crossStage.vk.2.frag" }, Semantics::Vulkan},
     }))
 );
 // clang-format on
diff --git a/gtests/Hlsl.FromFile.cpp b/gtests/Hlsl.FromFile.cpp
index 9f32495..315ccda 100644
--- a/gtests/Hlsl.FromFile.cpp
+++ b/gtests/Hlsl.FromFile.cpp
@@ -149,7 +149,7 @@
 {
     loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam().fileName,
                             Source::HLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0,  glslang::EShTargetSpv_1_0,
-                            Target::Spv, true, GetParam().entryPoint, "/baseResults/", false, false, true);
+                            Target::Spv, true, GetParam().entryPoint, "/baseResults/", false, true, true);
 }
 
 // clang-format off
@@ -170,10 +170,12 @@
         {"hlsl.basic.geom", "main"},
         {"hlsl.boolConv.vert", "main"},
         {"hlsl.buffer.frag", "PixelShaderFunction"},
+        {"hlsl.buffer-offsets.comp", "main"},
         {"hlsl.calculatelod.dx10.frag", "main"},
         {"hlsl.calculatelodunclamped.dx10.frag", "main"},
         {"hlsl.cast.frag", "PixelShaderFunction"},
         {"hlsl.cbuffer-identifier.vert", "main"},
+        {"hlsl.cbuffer-offsets.comp", "main"},
         {"hlsl.charLit.vert", "main"},
         {"hlsl.clip.frag", "main"},
         {"hlsl.clipdistance-1.frag", "main"},
@@ -216,6 +218,7 @@
         {"hlsl.emptystructreturn.tesc", "main"},
         {"hlsl.emptystruct.init.vert", "main"},
         {"hlsl.entry-in.frag", "PixelShaderFunction"},
+        {"hlsl.entry-inout.vert", "main"},
         {"hlsl.entry-out.frag", "PixelShaderFunction"},
         {"hlsl.fraggeom.frag", "main"},
         {"hlsl.float1.frag", "PixelShaderFunction"},
@@ -318,6 +321,7 @@
         {"hlsl.mul-truncate.frag", "main"},
         {"hlsl.multiEntry.vert", "RealEntrypoint"},
         {"hlsl.multiReturn.frag", "main"},
+        {"hlsl.multiView.frag", "main"},
         {"hlsl.matrixindex.frag", "main"},
         {"hlsl.nonstaticMemberFunction.frag", "main"},
         {"hlsl.numericsuffixes.frag", "main"},
@@ -417,6 +421,7 @@
         {"hlsl.structIoFourWay.frag", "main"},
         {"hlsl.structStructName.frag", "main"},
         {"hlsl.subpass.frag", "main"},
+        {"hlsl.swizzle.vec1.comp", "main"},
         {"hlsl.synthesizeInput.frag", "main"},
         {"hlsl.texturebuffer.frag", "main"},
         {"hlsl.texture.struct.frag", "main"},
diff --git a/gtests/Link.FromFile.Vk.cpp b/gtests/Link.FromFile.Vk.cpp
index fed5d26..9ec6757 100644
--- a/gtests/Link.FromFile.Vk.cpp
+++ b/gtests/Link.FromFile.Vk.cpp
@@ -86,7 +86,6 @@
                                 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();
diff --git a/gtests/Pp.FromFile.cpp b/gtests/Pp.FromFile.cpp
index 92b4d24..9cadd22 100644
--- a/gtests/Pp.FromFile.cpp
+++ b/gtests/Pp.FromFile.cpp
@@ -67,6 +67,9 @@
         "preprocessor.defined.vert",
         "preprocessor.many.endif.vert",
         "preprocessor.eof_missing.vert",
+        "preprocess.arb_shading_language_include.vert",
+        "preprocess.include_directive_missing_extension.vert",
+        "preprocess.inactive_stringify.vert"
     })),
     FileNameAsCustomTestSuffix
 );
diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp
index 90fb2fc..b75b6d8 100644
--- a/gtests/Spv.FromFile.cpp
+++ b/gtests/Spv.FromFile.cpp
@@ -1,6 +1,6 @@
  //
 // Copyright (C) 2016 Google, Inc.
-// Copyright (C) 2019 ARM Limited.
+// Copyright (C) 2019, 2022-2024 Arm Limited.
 // Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
 //
 // All rights reserved.
@@ -67,7 +67,6 @@
 using CompileVulkanToSpirvTest = GlslangTest<::testing::TestWithParam<std::string>>;
 using CompileVulkanToSpirvTestNoLink = GlslangTest<::testing::TestWithParam<std::string>>;
 using CompileVulkanToSpirvDeadCodeElimTest = GlslangTest<::testing::TestWithParam<std::string>>;
-using CompileVulkanToDebugSpirvTest = GlslangTest<::testing::TestWithParam<std::string>>;
 using CompileVulkan1_1ToSpirvTest = GlslangTest<::testing::TestWithParam<std::string>>;
 using CompileToSpirv14Test = GlslangTest<::testing::TestWithParam<std::string>>;
 using CompileToSpirv16Test = GlslangTest<::testing::TestWithParam<std::string>>;
@@ -82,7 +81,8 @@
 using CompileVulkanToSpirvTestNV = GlslangTest<::testing::TestWithParam<std::string>>;
 using CompileVulkanToSpirv14TestNV = GlslangTest<::testing::TestWithParam<std::string>>;
 using CompileUpgradeTextureToSampledTextureAndDropSamplersTest = GlslangTest<::testing::TestWithParam<std::string>>;
-using CompileVulkanToNonSemanticShaderDebugInfoTest = GlslangTest<::testing::TestWithParam<std::string>>;
+using GlslSpirvDebugInfoTest = GlslangTest<::testing::TestWithParam<std::string>>;
+using GlslNonSemanticShaderDebugInfoTest = GlslangTest<::testing::TestWithParam<std::string>>;
 
 // Compiling GLSL to SPIR-V under Vulkan semantics. Expected to successfully
 // generate SPIR-V.
@@ -110,17 +110,6 @@
                             Target::Spv);
 }
 
-// Compiling GLSL to SPIR-V with debug info under Vulkan semantics. Expected
-// to successfully generate SPIR-V.
-TEST_P(CompileVulkanToDebugSpirvTest, FromFile)
-{
-    loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
-                            Source::GLSL, Semantics::Vulkan,
-                            glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0,
-                            Target::Spv, true, "",
-                            "/baseResults/", false, true);
-}
-
 
 TEST_P(CompileVulkan1_1ToSpirvTest, FromFile)
 {
@@ -136,13 +125,20 @@
                             Target::Spv);
 }
 
-TEST_P(CompileToSpirv16Test, FromFile)
+TEST_P(CompileToSpirv16Test, FromFileTargetVulkan1_3)
 {
     loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
                             Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_3, glslang::EShTargetSpv_1_6,
                             Target::Spv);
 }
 
+TEST_P(CompileToSpirv16Test, FromFileTargetVulkan1_4)
+{
+    loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
+                            Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_4, glslang::EShTargetSpv_1_6,
+                            Target::Spv);
+}
+
 // Compiling GLSL to SPIR-V under OpenGL semantics. Expected to successfully
 // generate SPIR-V.
 TEST_P(CompileOpenGLToSpirvTest, FromFile)
@@ -251,11 +247,18 @@
                                                                      Target::Spv);
 }
 
-TEST_P(CompileVulkanToNonSemanticShaderDebugInfoTest, FromFile)
+TEST_P(GlslSpirvDebugInfoTest, FromFile)
 {
-    loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(),
-                            Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0,
-                            Target::Spv, true, "", "/baseResults/", false, false, true);
+    loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(), Source::GLSL, Semantics::Vulkan,
+                            glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0, Target::Spv, true, "",
+                            "/baseResults/", false, true, false);
+}
+
+TEST_P(GlslNonSemanticShaderDebugInfoTest, FromFile)
+{
+    loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(), Source::GLSL, Semantics::Vulkan,
+                            glslang::EShTargetVulkan_1_0, glslang::EShTargetSpv_1_0, Target::Spv, true, "",
+                            "/baseResults/", false, true, true);
 }
 
 // clang-format off
@@ -367,6 +370,7 @@
         "spv.coopmat.comp",
         "spv.coopmat_Error.comp",
         "spv.coopmatKHR.comp",
+        "spv.coopmat_armlayout.comp",
         "spv.coopmatKHR_arithmetic.comp",
         "spv.coopmatKHR_arithmeticError.comp",
         "spv.coopmatKHR_Error.comp",
@@ -384,6 +388,9 @@
         "spv.discard-dce.frag",
         "spv.doWhileLoop.frag",
         "spv.earlyReturnDiscard.frag",
+        "spv.expect_assume.assumeEXT.comp",
+        "spv.expect_assume.expectEXT.comp",
+        "spv.expect_assume.expectEXT.exttypes.comp",
         "spv.ext.ShaderTileImage.color.frag",
         "spv.ext.ShaderTileImage.depth_stencil.frag",
         "spv.ext.ShaderTileImage.subpassinput.frag",
@@ -415,11 +422,13 @@
         "spv.int64.frag",
         "spv.intcoopmat.comp",
         "spv.intOps.vert",
+        "spv.intrinsicsDebugBreak.frag",
         "spv.intrinsicsSpirvByReference.vert",
         "spv.intrinsicsSpirvDecorate.frag",
         "spv.intrinsicsSpirvDecorateId.comp",
         "spv.intrinsicsSpirvDecorateString.comp",
         "spv.intrinsicsSpirvExecutionMode.frag",
+        "spv.intrinsicsInteractWithCoopMat.comp",
         "spv.intrinsicsSpirvInstruction.vert",
         "spv.intrinsicsSpirvLiteral.vert",
         "spv.intrinsicsSpirvStorageClass.rchit",
@@ -436,6 +445,7 @@
         "spv.matFun.vert",
         "spv.matrix.frag",
         "spv.matrix2.frag",
+        "spv.maximalReconvergence.vert",
         "spv.memoryQualifier.frag",
         "spv.merge-unreachable.frag",
         "spv.multiStruct.comp",
@@ -449,6 +459,7 @@
         "spv.nonuniform4.frag",
         "spv.nonuniform5.frag",
         "spv.noWorkgroup.comp",
+        "spv.nvAtomicFp16Vec.frag",
         "spv.nullInit.comp",
         "spv.offsets.frag",
         "spv.Operations.frag",
@@ -461,6 +472,8 @@
         "spv.prepost.frag",
         "spv.privateVariableTypes.frag",
         "spv.qualifiers.vert",
+        "spv.replicate.comp",
+        "spv.replicatespec.comp",
         "spv.sample.frag",
         "spv.sampleId.frag",
         "spv.samplePosition.frag",
@@ -514,6 +527,9 @@
         "spv.specConstant.float16.comp",
         "spv.specConstant.int16.comp",
         "spv.specConstant.int8.comp",
+        "spv.specConstantOp.int16.comp",
+        "spv.specConstantOp.int8.comp",
+        "spv.specConstantOp.float16.comp",
         "spv.storageBuffer.vert",
         "spv.terminate.frag",
         "spv.subgroupUniformControlFlow.vert",
@@ -541,6 +557,8 @@
         "spv.ext.textureShadowLod.error.frag",
         "spv.floatFetch.frag",
         "spv.atomicRvalue.error.vert",
+        "spv.sampledImageBlock.frag",
+        "spv.multiple.var.same.const.frag",
     })),
     FileNameAsCustomTestSuffix
 );
@@ -572,15 +590,6 @@
 
 // clang-format off
 INSTANTIATE_TEST_SUITE_P(
-    Glsl, CompileVulkanToDebugSpirvTest,
-    ::testing::ValuesIn(std::vector<std::string>({
-        "spv.pp.line.frag",
-    })),
-    FileNameAsCustomTestSuffix
-);
-
-// clang-format off
-INSTANTIATE_TEST_SUITE_P(
     Glsl, CompileVulkan1_1ToSpirvTest,
     ::testing::ValuesIn(std::vector<std::string>({
         "spv.1.3.8bitstorage-ubo.vert",
@@ -612,6 +621,7 @@
         "spv.subgroupClustered.comp",
         "spv.subgroupClusteredNeg.comp",
         "spv.subgroupPartitioned.comp",
+        "spv.subgroupRotate.comp",
         "spv.subgroupShuffle.comp",
         "spv.subgroupShuffleRelative.comp",
         "spv.subgroupQuad.comp",
@@ -624,6 +634,8 @@
         "spv.subgroupExtendedTypesClusteredNeg.comp",
         "spv.subgroupExtendedTypesPartitioned.comp",
         "spv.subgroupExtendedTypesPartitionedNeg.comp",
+        "spv.subgroupExtendedTypesRotate.comp",
+        "spv.subgroupExtendedTypesRotateNeg.comp",
         "spv.subgroupExtendedTypesShuffle.comp",
         "spv.subgroupExtendedTypesShuffleNeg.comp",
         "spv.subgroupExtendedTypesShuffleRelative.comp",
@@ -705,6 +717,7 @@
 
         // SPV_NV_shader_execution_reorder
 
+        "spv.nv.hitobject-errors.rgen",
         "spv.nv.hitobject-allops.rgen",
         "spv.nv.hitobject-allops.rchit",
         "spv.nv.hitobject-allops.rmiss",
@@ -731,6 +744,10 @@
         "spv.1.6.specConstant.comp",
         "spv.1.6.samplerBuffer.frag",
         "spv.1.6.separate.frag",
+        "spv.1.6.quad.frag",
+        "spv.coopmat2_constructor.comp",
+        "spv.coopmat2_error.comp",
+        "spv.coopmat2_tensor.comp",
     })),
     FileNameAsCustomTestSuffix
 );
@@ -751,7 +768,7 @@
         { "spv.register.autoassign.rangetest.frag", "main",
                 glslang::TQualifier::layoutBindingEnd-2,
                 glslang::TQualifier::layoutBindingEnd+5,
-                20, 30, true, false },
+                0, 20, 30, true, false },
     }),
     FileNameAsCustomTestSuffixIoMap
 );
@@ -833,6 +850,10 @@
         "spv.tpipBlockMatchSSD.frag",
         "spv.tpipBlockMatchSAD.frag",
         "spv.tpipTextureArrays.frag",
+        "spv.tpipBlockMatchGatherSAD.frag",
+        "spv.tpipBlockMatchGatherSSD.frag",
+        "spv.tpipBlockMatchWindowSAD.frag",
+        "spv.tpipBlockMatchWindowSSD.frag",
     })),
     FileNameAsCustomTestSuffix
 );
@@ -885,6 +906,8 @@
     "spv.fragmentShaderBarycentric2.frag",
     "spv.computeShaderDerivatives.comp",
     "spv.computeShaderDerivatives2.comp",
+    "spv.computeShaderDerivativesSpec.comp",
+    "spv.computeShaderDerivativesSpec2.comp",
     "spv.shaderImageFootprint.frag",
     "spv.meshShaderBuiltins.mesh",
     "spv.meshShaderUserDefined.mesh",
@@ -923,7 +946,15 @@
 );
 
 INSTANTIATE_TEST_SUITE_P(
-    Glsl, CompileVulkanToNonSemanticShaderDebugInfoTest,
+    Glsl, GlslSpirvDebugInfoTest,
+    ::testing::ValuesIn(std::vector<std::string>({
+        "spv.pp.line.frag",
+    })),
+    FileNameAsCustomTestSuffix
+);
+
+INSTANTIATE_TEST_SUITE_P(
+    Glsl, GlslNonSemanticShaderDebugInfoTest,
     ::testing::ValuesIn(std::vector<std::string>({
         "spv.debuginfo.glsl.vert",
         "spv.debuginfo.glsl.frag",
@@ -934,6 +965,11 @@
         "spv.debuginfo.bufferref.glsl.frag",
         "spv.debuginfo.const_params.glsl.comp",
         "spv.debuginfo.scalar_types.glsl.frag",
+        "spv.debuginfo.rt_types.glsl.rgen",
+        "spv.debuginfo.include.glsl.frag",
+        "spv.debuginfo.multiline.glsl.frag",
+        "spv.debuginfo.implicit_br.glsl.frag",
+        "spv.debuginfo.coopmatKHR.comp",
     })),
     FileNameAsCustomTestSuffix
 );
diff --git a/gtests/TestFixture.h b/gtests/TestFixture.h
index df3433b..68bb3c6 100644
--- a/gtests/TestFixture.h
+++ b/gtests/TestFixture.h
@@ -35,6 +35,7 @@
 #ifndef GLSLANG_GTESTS_TEST_FIXTURE_H
 #define GLSLANG_GTESTS_TEST_FIXTURE_H
 
+#include <algorithm>
 #include <cstdint>
 #include <fstream>
 #include <sstream>
@@ -48,6 +49,7 @@
 #include "SPIRV/disassemble.h"
 #include "SPIRV/doc.h"
 #include "SPIRV/SPVRemapper.h"
+#include "glslang/Include/Types.h"
 #include "glslang/Public/ResourceLimits.h"
 #include "glslang/Public/ShaderLang.h"
 
@@ -198,9 +200,42 @@
         } else
             shader->setStringsWithLengths(&shaderStrings, &shaderLengths, 1);
         if (!entryPointName.empty()) shader->setEntryPoint(entryPointName.c_str());
-        return shader->parse(
-                (resources ? resources : GetDefaultResources()),
-                defaultVersion, isForwardCompatible, controls);
+
+        // A includer that always assumes header name is a relative path to the test folder.
+        class GlslangTestIncluder : public glslang::TShader::Includer {
+        public:
+            virtual IncludeResult* includeLocal(const char* headerName, const char* /*includerName*/,
+                                                size_t /*inclusionDepth*/) override
+            {
+                std::string path = GLSLANG_TEST_DIRECTORY;
+                path += '/';
+                path += headerName;
+                std::replace(path.begin(), path.end(), '\\', '/');
+
+                auto [success, fileContent] = ReadFile(path);
+                if (success) {
+                    auto buffer = new char[fileContent.size() + 1];
+                    std::copy(fileContent.begin(), fileContent.end(), buffer);
+                    buffer[fileContent.size()] = '\0';
+
+                    return new IncludeResult(headerName, buffer, fileContent.size(), buffer);
+                }
+
+                return nullptr;
+            }
+
+            virtual void releaseInclude(IncludeResult* result) override
+            {
+                if (result != nullptr) {
+                    delete[] static_cast<char*>(result->userData);
+                    delete result;
+                }
+            }
+        };
+
+        GlslangTestIncluder includer;
+        return shader->parse((resources ? resources : GetDefaultResources()), defaultVersion, isForwardCompatible,
+                             controls, includer);
     }
 
     // Compiles and links the given source |code| of the given shader
@@ -227,6 +262,14 @@
             shader.setAutoMapLocations(true);
             shader.setAutoMapBindings(true);
         }
+
+        if (enableDebug) {
+            shader.setDebugInfo(true);
+        }
+        if (enableNonSemanticShaderDebugInfo) {
+            assert(enableDebug && "Debug must be on for non-semantic debug info");
+        }
+
         shader.setTextureSamplerTransformMode(texSampTransMode);
 #ifdef ENABLE_HLSL
         shader.setFlattenUniformArrays(flattenUniformArrays);
@@ -289,7 +332,6 @@
         }
 
         std::ostringstream disassembly_stream;
-        spv::Parameterize();
         spv::Disassemble(disassembly_stream, spirv_binary);
         bool validation_result = !options().validate || logger.getAllMessages().empty();
         return {{
@@ -349,7 +391,6 @@
                                   spirv_binary, &logger, &options());
 
             std::ostringstream disassembly_stream;
-            spv::Parameterize();
             spv::Disassemble(disassembly_stream, spirv_binary);
             bool validation_result = !options().validate || logger.getAllMessages().empty();
             return {{{shaderName, shader.getInfoLog(), shader.getInfoDebugLog()},},
@@ -394,7 +435,6 @@
             spv::spirvbin_t(0 /*verbosity*/).remap(spirv_binary, whiteListStrings, remapOptions);
 
             std::ostringstream disassembly_stream;
-            spv::Parameterize();
             spv::Disassemble(disassembly_stream, spirv_binary);
             bool validation_result = !options().validate || logger.getAllMessages().empty();
             return {{{shaderName, shader.getInfoLog(), shader.getInfoDebugLog()},},
@@ -418,7 +458,6 @@
             spv::spirvbin_t(0 /*verbosity*/).remap(spirv_binary, whiteListStrings, remapOptions);
 
             std::ostringstream disassembly_stream;
-            spv::Parameterize();
             spv::Disassemble(disassembly_stream, spirv_binary);
 
             return {{{shaderName, "", ""},},
@@ -656,8 +695,8 @@
         std::string ppShader;
         glslang::TShader::ForbidIncluder includer;
         const bool success = shader.preprocess(
-            GetDefaultResources(), defaultVersion, defaultProfile,
-            forceVersionProfile, isForwardCompatible, (EShMessages)(EShMsgOnlyPreprocessor | EShMsgCascadingErrors),
+            GetDefaultResources(), defaultVersion, defaultProfile, forceVersionProfile, isForwardCompatible,
+            (EShMessages)(EShMsgOnlyPreprocessor | EShMsgCascadingErrors),
             &ppShader, includer);
 
         std::string log = shader.getInfoLog();
diff --git a/gtests/VkRelaxed.FromFile.cpp b/gtests/VkRelaxed.FromFile.cpp
index 67e5501..8b8a628 100644
--- a/gtests/VkRelaxed.FromFile.cpp
+++ b/gtests/VkRelaxed.FromFile.cpp
@@ -237,19 +237,21 @@
             shaders[i]->setResourceSetBinding(resourceSetBindings[i]);
     }
 
-    unsigned int stage = 0;
-    glslang::TIntermediate* firstIntermediate = nullptr;
-    while (!program.getIntermediate((EShLanguage)stage) && stage < EShLangCount) { stage++; }
-    firstIntermediate = program.getIntermediate((EShLanguage)stage);
-
-    glslang::TDefaultGlslIoResolver resolver(*firstIntermediate);
-    glslang::TGlslIoMapper ioMapper;
+    glslang::TIoMapResolver *resolver;
+    for (unsigned stage = 0; stage < EShLangCount; stage++) {
+        resolver = program.getGlslIoResolver((EShLanguage)stage);
+        if (resolver)
+            break;
+    }
+    glslang::TIoMapper *ioMapper = glslang::GetGlslIoMapper();
 
     if (success) {
-        success &= program.mapIO(&resolver, &ioMapper);
+        success &= program.mapIO(resolver, ioMapper);
         result.linkingOutput = program.getInfoLog();
         result.linkingError = program.getInfoDebugLog();
     }
+    delete ioMapper;
+    delete resolver;
 
     success &= verifyIOMapping(result.linkingError, program);
     result.validationResult = success;
@@ -264,7 +266,6 @@
                     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();
@@ -290,11 +291,11 @@
 INSTANTIATE_TEST_SUITE_P(
     Glsl, VulkanRelaxedTest,
     ::testing::ValuesIn(std::vector<vkRelaxedData>({
-        {{"vk.relaxed.frag"}},
-        {{"vk.relaxed.link1.frag", "vk.relaxed.link2.frag"}},
-        {{"vk.relaxed.stagelink.0.0.vert", "vk.relaxed.stagelink.0.1.vert", "vk.relaxed.stagelink.0.2.vert", "vk.relaxed.stagelink.0.0.frag", "vk.relaxed.stagelink.0.1.frag", "vk.relaxed.stagelink.0.2.frag"}},
-        {{"vk.relaxed.stagelink.vert", "vk.relaxed.stagelink.frag"}},
-        {{"vk.relaxed.errorcheck.vert", "vk.relaxed.errorcheck.frag"}},
+        {{"vk.relaxed.frag"}, {}},
+        {{"vk.relaxed.link1.frag", "vk.relaxed.link2.frag"}, {}},
+        {{"vk.relaxed.stagelink.0.0.vert", "vk.relaxed.stagelink.0.1.vert", "vk.relaxed.stagelink.0.2.vert", "vk.relaxed.stagelink.0.0.frag", "vk.relaxed.stagelink.0.1.frag", "vk.relaxed.stagelink.0.2.frag"}, {}},
+        {{"vk.relaxed.stagelink.vert", "vk.relaxed.stagelink.frag"}, {}},
+        {{"vk.relaxed.errorcheck.vert", "vk.relaxed.errorcheck.frag"}, {}},
         {{"vk.relaxed.changeSet.vert", "vk.relaxed.changeSet.frag" }, { {"0"}, {"1"} } },
     }))
 );
diff --git a/hlsl/CMakeLists.txt b/hlsl/CMakeLists.txt
deleted file mode 100644
index 058a67b..0000000
--- a/hlsl/CMakeLists.txt
+++ /dev/null
@@ -1,64 +0,0 @@
-# Copyright (C) 2020 The Khronos Group 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 The Khronos Group 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.
-
-# The HLSL source is directly embedded into the glslang target when ENABLE_HLSL
-# is set.
-# This source now lives at: glslang/HLSL/
-# The HLSL target is now just a stub that exists for backwards compatibility for
-# projects that referenced this target.
-
-add_library(HLSL ${LIB_TYPE} "stub.cpp")
-set_target_properties(HLSL PROPERTIES
-    FOLDER hlsl
-    POSITION_INDEPENDENT_CODE ON
-    VERSION   "${GLSLANG_VERSION}"
-    SOVERSION "${GLSLANG_VERSION_MAJOR}")
-
-if(WIN32 AND BUILD_SHARED_LIBS)
-    set_target_properties(HLSL PROPERTIES PREFIX "")
-endif()
-
-if(ENABLE_GLSLANG_INSTALL)
-    install(TARGETS HLSL EXPORT glslang-targets)
-
-    file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/HLSLTargets.cmake" "
-        message(WARNING \"Using `HLSLTargets.cmake` is deprecated: use `find_package(glslang)` to find glslang CMake targets.\")
-
-        if (NOT TARGET glslang::HLSL)
-            include(\"${CMAKE_INSTALL_FULL_LIBDIR}/cmake/${PROJECT_NAME}/glslang-targets.cmake\")
-        endif()
-
-        add_library(HLSL ALIAS glslang::HLSL)
-    ")
-    install(FILES "${CMAKE_CURRENT_BINARY_DIR}/HLSLTargets.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake)
-endif()
diff --git a/hlsl/stub.cpp b/hlsl/stub.cpp
deleted file mode 100644
index f1d39c1..0000000
--- a/hlsl/stub.cpp
+++ /dev/null
@@ -1,41 +0,0 @@
-//
-// Copyright (C) 2020 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.
-//
-
-// The HLSL source is directly embedded into the glslang target when ENABLE_HLSL
-// is set.
-// This source now lives at: glslang/HLSL/
-// The HLSL target is now just a stub that exists for backwards compatibility
-// for projects that referenced this target. As a target requires at least one
-// source file to build, this file acts as that stub.
diff --git a/known_good.json b/known_good.json
index 1cbcb09..f2ed725 100644
--- a/known_good.json
+++ b/known_good.json
@@ -5,14 +5,21 @@
       "site" : "github",
       "subrepo" : "KhronosGroup/SPIRV-Tools",
       "subdir" : "External/spirv-tools",
-      "commit" : "360d469b9eac54d6c6e20f609f9ec35e3a5380ad"
+      "commit": "4d2f0b40bfe290dea6c6904dafdf7fd8328ba346"
     },
     {
       "name" : "spirv-tools/external/spirv-headers",
       "site" : "github",
       "subrepo" : "KhronosGroup/SPIRV-Headers",
       "subdir" : "External/spirv-tools/external/spirv-headers",
-      "commit" : "e867c06631767a2d96424cbec530f9ee5e78180f"
+      "commit" : "3f17b2af6784bfa2c5aa5dbb8e0e74a607dd8b3b"
+    },
+    {
+      "name": "googletest",
+      "site": "github",
+      "subrepo": "google/googletest",
+      "subdir": "External/googletest",
+      "commit": "v1.14.0"
     }
   ]
 }
diff --git a/known_good_khr.json b/known_good_khr.json
index a64198a..7911c71 100644
--- a/known_good_khr.json
+++ b/known_good_khr.json
@@ -13,6 +13,13 @@
       "subrepo" : "spirv/SPIRV-Headers",
       "subdir" : "External/spirv-tools/external/spirv-headers",
       "commit" : "gitlab-prelim-rc4"
+    },
+    {
+      "name": "googletest",
+      "site": "github",
+      "subrepo": "google/googletest",
+      "subdir": "External/googletest",
+      "commit": "v1.14.0"
     }
   ]
 }
diff --git a/kokoro/linux-clang-cmake/build-docker.sh b/kokoro/linux-clang-cmake/build-docker.sh
index 6b1d3e1..6982a20 100755
--- a/kokoro/linux-clang-cmake/build-docker.sh
+++ b/kokoro/linux-clang-cmake/build-docker.sh
@@ -39,9 +39,10 @@
 
 set -x # Display commands being run.
 
-using cmake-3.17.2
+using cmake-3.31.2
 using clang-10.0.0
 using ninja-1.10.0
+using python-3.12
 
 echo "Building..."
 mkdir /build && cd /build
diff --git a/kokoro/linux-gcc-cmake/build-docker.sh b/kokoro/linux-gcc-cmake/build-docker.sh
index 558695c..48cec4e 100755
--- a/kokoro/linux-gcc-cmake/build-docker.sh
+++ b/kokoro/linux-gcc-cmake/build-docker.sh
@@ -39,9 +39,10 @@
 
 set -x # Display commands being run.
 
-using cmake-3.17.2
+using cmake-3.31.2
 using gcc-9
 using ninja-1.10.0
+using python-3.12
 
 echo "Building..."
 mkdir /build && cd /build
diff --git a/ndk_test/Android.mk b/ndk_test/Android.mk
index d2e93da..897ace0 100644
--- a/ndk_test/Android.mk
+++ b/ndk_test/Android.mk
@@ -39,7 +39,7 @@
 LOCAL_MODULE:=glslang_ndk_test
 LOCAL_LDLIBS:=-landroid
 LOCAL_CXXFLAGS:=-std=c++17 -fno-exceptions -fno-rtti -Werror
-LOCAL_STATIC_LIBRARIES:=glslang SPIRV HLSL
+LOCAL_STATIC_LIBRARIES:=glslang
 include $(BUILD_SHARED_LIBRARY)
 
 include $(LOCAL_PATH)/../Android.mk
diff --git a/update_glslang_sources.py b/update_glslang_sources.py
index 20f303b..2e02c96 100755
--- a/update_glslang_sources.py
+++ b/update_glslang_sources.py
@@ -17,12 +17,9 @@
 """Get source files for Glslang and its dependencies from public repositories.
 """
 
-from __future__ import print_function
-
 import argparse
 import json
-import distutils.dir_util
-import os.path
+import os
 import subprocess
 import sys
 
@@ -106,7 +103,7 @@
                                     cwd=self.subdir)
 
     def Clone(self):
-        distutils.dir_util.mkpath(self.subdir)
+        os.makedirs(self.subdir, exist_ok=True)
         command_output(['git', 'clone', self.GetUrl(), '.'], self.subdir)
 
     def Fetch(self):
@@ -139,7 +136,7 @@
 
     commits = GetGoodCommits(args.site)
 
-    distutils.dir_util.mkpath(args.dir)
+    os.makedirs(args.dir, exist_ok=True)
     print('Change directory to {d}'.format(d=args.dir))
     os.chdir(args.dir)